全球FlexSim系统仿真中文论坛

搜索
查看: 1683|回复: 0
打印 上一主题 下一主题

传送带分拣至第一个可用下游

[复制链接]
跳转到指定楼层
1#
SunshineFu 发表于 2019-2-10 21:58:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 SunshineFu 于 2019-2-10 22:00 编辑

这次给大家分享的模型来自北京创时能官方微信公众号发布的学习案例~
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

评分

参与人数 1威望 +15 收起 理由
慧娴亚伦 + 15 很给力!

查看全部评分

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-4-27 01:03 , Processed in 0.073051 second(s), 15 queries .

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

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