全球FlexSim系统仿真中文论坛

搜索
楼主: 慧娴亚伦
打印 上一主题 下一主题

【TFT 2014.11.03 FlexSim仿真模型题(23)】

[复制链接]
1#
zorsite 发表于 2017-5-23 01:38:28 | 显示全部楼层
这个问题的关键在于两点:
1.操作员作业批次的确认
2.同一批次内将任务发送给同一操作员
解决方法:

1.在操作员上设置搬运数量标签,记录搬运数量,从而判断当前批次是否搬运完毕。
2.在任务分配器的passto触发中,根据操作员上的作业站点标签判断应将任务发送给哪一操作员。
关键代码如下:

1.操作员OnReceiveTaskSequence触发:
[code]/**在标签记录任务信息*/
treenode current = ownerobject(c);
treenode ts = parnode(1);

treenode combiner=gettaskinvolved(ts,4,1);//任务涉及到的合成器
int batch=inc(label(current,"batch"),1);//当前item是合成器需要的第几个
int sum= getnodenum(getvarnode(combiner,"targetcomponentsum"));//全成器一共需要几个
if (batch==sum)
{//如果合成器需要的item全部满足,重置标签
        setlabel(current,"lasttsinvolved1",0);
        setlabel(current,"batch",0);
}        
//否则在操作员上记录任务涉及到的合成器,以便任务分配器查找
else setlabel(current,"lasttsinvolved1",tonum(combiner));[/code]
2.任务分配器的passto触发:
[code]
treenode combiner=gettaskinvolved(tasksequence,4,1);//任务涉及到的合成器
int numofoperator=nrop(current);
for (int i = 1; i <= numofoperator; i++)
{//遍历每一个操作员
        treenode  taskinvoled=tonode(getlabel(outobject(current,i),1));
        if (combiner==taskinvoled)         return i;//如果操作员上的标签与合成器匹配,则返回该操作员
}
return 0;//如果都不匹配,则返回第一可用操作员。

[/code]

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2024-5-6 21:20 , Processed in 0.064191 second(s), 13 queries .

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

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