全球FlexSim系统仿真中文论坛

标题: 协同任务序列(CTS)与子任务(SUBTS)一起使用的小例子 [打印本页]

作者: domcylai    时间: 2013-2-20 15:58
标题: 协同任务序列(CTS)与子任务(SUBTS)一起使用的小例子
RT

CTS协同任务序列和SUBTS子任务序列一直是大家学习的一个重点,难点。为了便于大家的学习和理解,我给大家贡献一个小案例:

[attach]1160[/attach]

如图,有两个操作员黄衣和蓝衣进行配合工作,各自将货物搬运至中转站(假设中转站自动将货物组合),最后由黄衣搬运离开系统。

我们知道,任务序列一旦创建,那么操作员的路程就确定了,那么如果在这个流程中如果需要判断一些条件时(例如:货物不够数量?最合适的站点),这是就需要使用子任务序列,让这个问题在子任务序列创建之前进行判断,所以只要解决下面两个难点问题,那么CTS和SUBTS的配合大家都能很快掌握:

1. 任务开始,蓝衣所在的发生器没有货物怎么办?
2. 中转站组装好以后, 黄衣如何操作,是否能将任务序列合并在CTS中?

这个模型我也放出来给大家, 大家打开可以看,脚本代码都在第一个发生器内,注意先后顺序。有什么问题可以提出来,欢迎大家交流!
PS: 模型是用Flexsim 6.0.2 EN做的,大家需要安装最新版本才能打开这个模型 : )

[attach]1161[/attach]
作者: xh900901    时间: 2013-2-21 11:19
收下先
作者: zhredstar    时间: 2013-3-26 19:48
收下了,学习一下
作者: h_0802    时间: 2013-4-12 11:35
下载了
作者: lansedamo    时间: 2013-4-15 09:58
下载学习一下
作者: 天性518    时间: 2013-5-16 11:54
5# lansedamo


李工,您好!你的第一问题可以指定pallet发生的时间小于box,这样就可以不用去判定了,但是从逻辑思维上,我还是认为您的更好。
还有一个问题我不懂,就是消息触发返回的不是一个数值类型吗?在此您为什么不是return tonum(ts);而且return ts;
作者: Jorkboo    时间: 2013-5-16 23:11
果断收藏
作者: yushaozheng1990    时间: 2013-11-29 21:23
感谢分享!
作者: yushaozheng1990    时间: 2013-12-3 20:28
感谢分享!
作者: yangkaichong    时间: 2014-4-10 22:20
下载学习一下
作者: sarah_wangxx    时间: 2014-11-12 14:52
模型比较简单易学,赞一个!
作者: sarah_wangxx    时间: 2014-11-12 14:52
模型比较简单易学,赞一个!
作者: zhredstar    时间: 2014-11-27 14:18
还是需要认真学习一下
作者: xinglei    时间: 2014-12-8 14:37

作者: 一骑绝尘    时间: 2014-12-23 15:10
感谢分享
作者: 657776724    时间: 2015-3-23 22:22
学习了
作者: 乙桓123    时间: 2015-4-27 20:14
果断收藏
作者: tang1991tang    时间: 2015-5-14 14:32
感谢楼主分享
作者: 莫凌花已向晚    时间: 2015-5-15 22:20
学习下
作者: 657776724    时间: 2015-8-31 15:05
下载学习,谢谢分享
作者: 我很强壮    时间: 2017-1-11 14:53
下载学习一下
作者: lulu-luka    时间: 2017-6-12 01:52
谢谢分享~
作者: lulu-luka    时间: 2017-6-12 08:28
本帖最后由 lulu-luka 于 2017-6-12 08:36 编辑

刚刚把这个例子学习完~基本上搞清楚了TASKTYPE_CALLSUBTASKS的任务类型的作用机制。
但是在楼主编写的代码中我看到了一些我没遇见过的编写方式:
1.
  1. int op1travelkey = insertproxytask(myts, operator1key, TASKTYPE_TRAVEL, current, NULL, 0,0,0,0);  
  2.     op1travelkey = insertproxytask(myts, operator1key, TASKTYPE_FRLOAD, item, current, port,0,0,0);
  3.     op1travelkey = insertproxytask(myts, operator1key, TASKTYPE_TRAVEL, midstation, NULL, 0,0,0,0);
  4.     op1travelkey = insertproxytask(myts, operator1key, TASKTYPE_FRUNLOAD, item, midstation, 0,0,0,0);
复制代码
只定义一个op1travelkey,但是却定义了很多个任务,在模型的实际运行中看来这样编写是有效果的,想知道到底能不能这样编写(可能C语言学的不好,不太清楚代码编写的格式问题),求指教。
2.
  1. #define OP1SUBTS 1
  2. #define OP2SUBTS 2
复制代码
看来这是一个定义和应用的语句,但是没有见过这样的用法,想请教这种类型的引用大部分用在什么情况之下,而且为什么 OP1SUBTS后面还要跟着一个1,OP2SUBTS 2后面还跟着一个2,在后面看来好像没有用到,还是说这只是一个定义的格式问题,求指教。
作者: skyuan    时间: 2017-6-12 10:35
先下载再看,多谢
作者: 慧娴亚伦    时间: 2017-6-12 13:37
23# lulu-luka

1、可以,重复使用同一个变量名,每次都重新赋值,但是个人不推荐这样做,某种程度可能导致代码阅读困难;
2、这是声明一个局部宏,也就是在这个代码编辑域内OP1SUBTS 就代表了1。宏的作用可以简单理解为,将不明意义的数字转为有意义的一串大写字符,方便进行代码编制或者阅读。
作者: eb_sun    时间: 2017-6-12 15:01
代码的功底很重要,学习了
作者: lulu-luka    时间: 2017-6-14 01:11
25# 慧娴亚伦

陈老师,那个局部宏的声明是搞懂了,但是第一个那种重新赋值还是有点疑问。
一般重复使用同一个变量名,每次赋新值,该变量的值应该是最后一次赋值的内容。
也就是说我觉得上面那种方式得到的op1travelkey应该就只是最后一个任务TASKTYPE_FRUNLOAD,但是实际上在insertsynctask时,操作员1是执行了op1travelkey变量被赋予的所有值即所有任务。
我不知道这样理解是不是正确的,求指教。
作者: 慧娴亚伦    时间: 2017-6-14 02:33
在代码中声明一个变量只是为了后面引用方便,有没有声明变量,以及变量叫什么名字不影响具体命令是否执行。
作者: zhredstar    时间: 2017-6-21 00:43
感谢分享
作者: gaoshanliushui    时间: 2018-1-21 13:13
学习
作者: zhengjh13    时间: 2019-7-4 15:08
楼主厉害




欢迎光临 全球FlexSim系统仿真中文论坛 (http://www.flexsimasia.com/) Powered by Discuz! X3.3