(FlexSim 学习笔记)合成器打包的工作机制分析和实现

        在之前文章《“(FlexSim 学习笔记)案例1:不合格产品二次优先加工,两次不合格作废》中简单描述了下 flexsim 合成器的合成打包工作原理,并在该文“3.3、合成器合成打包选择“这节内容中,通过直接修改“更新合成器组件列表”事件的代码,以适应实际要求。

        言犹未尽。直接修改“更新合成器组件列表”事件的总代码量虽然只有几行,但涉及到树节点操作,不太方便理解。故本文尝试再仔细阐述flexsim的合成器工作机制,并采取不用代码的方式来实现其工作过程。

一、合成器打包工作机制

        首先我们来看合成器的组件列表。合成器始终会先接收来自输入端口1的货品(并把它当作容器),然后再按下图所示的组件列表,分别接收其他输入端口的货物进行组合打包。例如下图表示合成器从输入端口1接收到容器后,再从输入端口2/3/4分别接收2、3、2个货物,然后进行打包。也即打包完成后,该容器中共有7个货物。

1b625406e77b425d97d90342affeafe5.png

        上图的数量设置多少无所谓,因为实际案例中往往需要按订单,设法动态更新此表的数量。

        如何更新呢?方法就是在合成器的On Entry触发器中,设置动态更新合成器组件表。这样的话,只要合成器从输入端口1收到某个容器,就会立刻执行更新合成器的组件列表。

6d208fb043104c05adbf99da420443a8.png

        上图涉及的order表是全局表,需要预先创建,例如下图(3行5列)。是不是与3行1列的合成器组件表非常相像,除了列多了点?

 65072e17d9274aff84dfd0b35cc88202.png

         order全局表有5列,要用它去更新合成器组件列表,那么究竟该取那列值呢?这就涉及利用某个标签值了。例如下图的流程,某个标签值 item.orderID=3(左图),就是取全局表order(中图)的第3列值的意思,再用此列值去更新合成器组件表(右图)的相应数量。

c10e62e115734233b8beea19d7e0022e.png    26f66281366c41b08bb4fa5a6b62c286.png    dbc2ed5575624483963a38aa7a7f4ea8.png

        那么标签orderID 又从哪来呢?可以考虑给容器定义orderID标签。这样的话,按合成器的工作机制,合成器会先从输入端口1接收容器,紧接着触发On Entry 事件,因为我们在该事件中设置了更新合成器组件,那么flexsim就可利用此容器的orderID标签值,去执行更新合成器组件列表的一系列操作。

 二、案例

        接下来我们用一个案例来具体实现合成器的打包工作机制。

b419f3b02f524953bfc41e3557006f63.png

         如上图,有4个发生器,第1个是托盘发生器产生托盘容器(与合成器A连接时,应保证是合成器的第一个输入端口),其他是货物发生器,分别产生红/绿/蓝货物。托盘离开发生器时,将生成订单信息。合成器接收到托盘后,按订单要求进行打包(即合成器最终在此托盘中分别放置红/绿/蓝货物若干数量,进行打包)。

三、解决方案

1、创建order订单全局表,3行1列

6cfda5ea7aa6423087a97189c34a3f99.png

 2、托盘

        在工具箱临时实体栏中选择托盘,新增4个数值标签,名称及值分别为 r=0,g=0,b=0,orderID=1

42e3d730feb140a8abf5f3893baa34f1.png

        r 表示订单中的红色货物数量,g 表示绿色货物数量,b 表示蓝色货物数量,orderID 对应订单全局表 order 的第几列(列索引) ,因为order表只有1列,故orderID初始值设置为1,表示取订单表order的第1列。

3、托盘发生器

3.1、托盘发生器的临时实体栏选托盘,表示该发生器产生托盘。

  2f92dcb251e34e7693c1c132e897b550.png      

3.2、在托盘发生器的On Creation触发器分别设置托盘的 r,g,b 标签值为1~5的随机数。

ea1013f982ad40d9888617b2f4c75573.png  21349231c09449c0b9e7b2be128d4b24.png  dc250654a3504f288de6dbdcf1efe54a.png

        这样的话,每产生1个托盘,托盘的 r/g/b 分别就有随机值,比如 r=3,g=5,b=2,表示此托盘要对应的订单为红色货物3个,绿色货物5个,蓝色货物2个。

3.3、在托盘发生器的On Exit 触发器中,设置”写入全局表“3次,分别将托盘的 r,g,b 数量写入订单全局表order的第1行第1列,第2行第1列,第3行第1列。

 ec6963c4ba674c3f9771acf108b122ea.png  25f48f5842d5426f9b51a1633431ff15.png   c8ee060c9bbf4eafa7c4a1790beaa41a.png 

4、红色货物发生器/绿色货物发生器/蓝色货物发生器

        在红色货物发送器的On Creation 触发器中,设置Type标签和颜色为1,产生类型为1的红色货物。

        其他颜色货物发生器的设置类推。

9187a9ce35f942b29ed9a00b8573d1a1.png

5、合成器

        在合成器的On Entry触发器中,设置”更新合成器组件列表“,表为order,标签为orderID,表示通过托盘的orderID值,来取order表的对应列,去更新组件表。这里托盘的orderID值已经有初始值=1,所以更新取的是order表的第1列。

 9f5b37bcdda94f1dba77cb3bd998078f.png

6、全部完成。

四、最终效果

f407e94c456b46398830c0f4cf582195.gif

五、小结

1、定义一个订单全局表;

2、对托盘容器,定义和订单数量相关的标签,以及和订单列索引相关的标签;

3、在某个合适的触发器中,利用托盘标签值去修改订单全局表;

4、在合成器的进入触发器中,用订单全局表去更新合成器组件表。

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值