全球FlexSim系统仿真中文论坛

搜索
查看: 5947|回复: 3
打印 上一主题 下一主题

案例十一 传送带分拣至第一个可以下游

[复制链接]
跳转到指定楼层
1#
Yumaotuo 发表于 2018-5-17 09:43:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Yumaotuo 于 2018-5-17 09:44 编辑

1、模型描述:

传送带左右两侧各有两台设备,产品通过传送带分拣至第一个缺货的设备,设备前有一个容量为1的暂存区作待加工品的缓存。若无可用下游,产品在传送带指定决策点的位置等待,直到出现第一个可用的下游。

2、模型布局:

依下图进行布局,发生器产生产品进入传送带,传送带依次与四个暂存区A连接,形成4个离开衔接点,决策点依次与4个离开衔接点A连接。暂存区与各自的处理器A连接,加工完的产品进入吸收器。


3、建模逻辑:

我们在暂存区中创建表示暂存区当前容量的标签Content,产品到达决策点时停止,持续判断暂存区的Content标签值是否有为0的,若有就发送产品。

决策点到达触发:
/**停止临时实体并做第一轮的判断发送至下游*/
Conveyor.DecisionPoint current = param(1);
Object item = param(2);
Conveyor conveyor = param(3);
Conveyor.Item conveyorItem = conveyor.itemData[item];
//************* PickOption Start *************\\
conveyorstopitem(item);//停止临时实体
for(int i=1;i<=current.outObjects.length;i++)//对下游端口循环判断
        {
         if(current.outObjects.outObjects[1].Content == 0)//Content标签等于0即为空载
                {
                        conveyorresumeitem(item);//恢复临时实体
                        conveyorsenditem(item, current.outObjects);//发送临时实体到可用下游
                        current.outObjects.outObjects[1].Content=1;//Content标签值置为1,表示该下游不可用
                        item.color = Color.byNumber(i);//更改相应的颜色
                        break;//跳出循环
                }
                if(i==4)//如果未发现可有下游
                {
                        senddelayedmessage(current,0,item,1);//发送1号消息至当前实体
                }        
        }

决策点消息触发:
**下游有空时接收消息,并0.1秒刷新一次*/
Conveyor.DecisionPoint current = param(9);
Conveyor conveyor = param(10);
if(msgparam(1)==1)//接收消息
{
        Object item = msgsendingobject();//声明item
        for(int i=1;i<=current.outObjects.length;i++)//对下游端口循环判断
        {
                if(current.outObjects.outObjects[1].Content == 0)//Content标签等于0即为空载
                {
                        conveyorresumeitem(item);//恢复临时实体
                        conveyorsenditem(item, current.outObjects);//发送临时实体到可用下游
                        current.outObjects.outObjects[1].Content=1;//Content标签值置为1,表示该下游不可用
                        item.color = Color.byNumber(i);//更改相应的颜色
                        break;//跳出循环
                }
                if(i==4)//如果未发现可有下游
                        {
                                senddelayedmessage(current,0.1,item,1);//0.1秒后再次判断是否有可用下游
                        }
        }        
}

产品发送到暂存区需要一段时间,若根据暂存区容量来判断是否可用,那么第一个产品未到达之前该暂存区一直可用,这段时间内到达决策点的产品都会被发送至该暂存区,所以这里用标签来表示暂存区的容量,接收到发送指令后即设置标签值为1表示该暂存区已经被补货。模型中用到的标签和消息触发,在建模中使用都比较广泛。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
3#
王婉珍 发表于 2019-6-10 13:20:51 | 只看该作者
很好,记下来
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|全球FlexSim系统仿真中文论坛 ( 京ICP备14043114号-2 )

GMT+8, 2024-4-19 14:57 , Processed in 0.078285 second(s), 14 queries .

Powered by Discuz! X3.3© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表