查看: 1|回复: 1

案例十二 自定义任务序列

[复制链接]

主题

0

回帖

214

积分

注册会员

积分
214
发表于 2018-5-21 15:28:37 | 显示全部楼层 |阅读模式
[i=s] 本帖最后由 Yumaotuo 于 2018-5-21 15:32 编辑 [/i]

[align=left][font=微软雅黑][size=3][b]自定义任务序列的步骤和相关命令:[/b][/size][/font][/align][align=left][font=微软雅黑][size=2](1)首先使用createemptytasksequence()创建一个任务序列。[/size][/font][/align][align=left][font=微软雅黑][size=2]createemptytasksequence(obj dispatcher, num priority, num preempting),该命令有三个参数,第一个参数是要处理此任务序列的实体,它应当是一个分配器或任务执行器。第二个和第三个参数是数字,分别指定任务序列的优先级和先占值。命令返回一个所创建的任务序列的引用(以便相关命令调用)。[/size][/font][/align][align=left][font=微软雅黑][size=2](2)然后连续使用inserttask()令往此任务序列中插入任务。[/size][/font][/align][align=left][font=微软雅黑][size=2]inserttask(obj tasksequence, num type [, obj involved1, obj involved2 , num var1, num var2, num var3, num var4] ),参数1是此任务要插入的那个任务序列的引用,参数2用来指明此任务的任务类型值,第3与第4个参数是两个相关实体的引用。常用的任务类型与参数如下:[/size][/font][/align][align=left][font=微软雅黑][size=2]TASKTYPE_LOAD: flowitem, obj pickup [/size][/font][/align][align=left][font=微软雅黑][size=2]TASKTYPE_UNLOAD: flowitem,obj dropoff [/size][/font][/align][align=left][font=微软雅黑][size=2]TASKTYPE_UTILIZE: involved, station, [state] [/size][/font][/align][align=left][font=微软雅黑][size=2]TASKTYPE_STOPREQUESTFINISH: stoppedobject, NULL [/size][/font][/align][align=left][font=微软雅黑][size=2]TASKTYPE_TRAVEL: destination, NULL [/size][/font][/align][align=left][font=微软雅黑][size=2]TASKTYPE_TRAVELTOLOC: NULL, NULL,xloc,yloc,zloc, [endspeed] [/size][/font][/align][align=left][font=微软雅黑][size=2]TASKTYPE_TRAVELRELATIVE: NULL, NULL,xloc,yloc,zloc, [endspeed][/size][/font][/align][align=left][font=微软雅黑][size=2]TASKTYPE_BREAK: NULL, NULL [/size][/font][/align][align=left][font=微软雅黑][size=2]TASKTYPE_DELAY: NULL, NULL, delaytime, [state] [/size][/font][/align][align=left][font=微软雅黑][size=2]TASKTYPE_SENDMESSAGE: receiver, NULL, [param1,param2,param3,delaytime][/size][/font][/align][align=left][font=微软雅黑][size=2]TASKTYPE_MOVEOBJECT: flowitem, container, [port][/size][/font][/align][align=left][font=微软雅黑][size=2]TASKTYPE_DESTROYOBJECT: object, NULL[/size][/font][/align][align=left][font=微软雅黑][size=2](3)最后使用dispatchtasksequence()来分配此任务序列。[/size][/font][/align][align=left][font=微软雅黑][size=2]该命令只有一个参数。即创建的任务序列(的引用)。通常,任务序列存放在指定的任务执行器的子节点内。如dispatchtasksequence(ts);[/size][/font][/align][align=left][font=微软雅黑][size=3]
[/size][/font][/align][align=left][b][font=微软雅黑][size=3][color=#ff0000]1、模型描述:[/color][/size][/font][/b][/align][align=left][b][font=微软雅黑][size=3][color=#ff0000]
[/color][/size][/font][/b][/align][align=left][font=微软雅黑]操作员从暂存区捡取产品,搬运到圆柱体处等待10s,等待过程中操作员保持busy状态,等待完成之后搬运至处理器,且在到达和离开圆柱体时圆柱体改变颜色,然后操作员回到暂存区处等待新一轮的任务[/font][/align][align=left][font=宋体]
[/font][/align][align=left][b][font=微软雅黑][size=3][color=#ff0000]2、模型布局:[/color][/size][/font][/b][/align][align=left][font=微软雅黑]模型包含1个发生器、1个暂存区、1个处理器、1个吸收器和1个圆柱体形状。发生器、暂存区、处理器和吸收器依次A连接,暂存区与操作员和圆柱体依次S连接。[/font][/align][align=left][font=宋体]
[/font][/align][align=left][/align]
[align=left][b][font=微软雅黑][size=3][color=#ff0000]3、模型实现:[/color][/size][/font][/b][/align][align=left][b][font=微软雅黑][size=3][color=#ff0000]
[/color][/size][/font][/b][/align][align=left][font=微软雅黑][backcolor=yellow]暂存区使用运输工具处的代码:[/backcolor][/font][/align][align=left][font=微软雅黑][backcolor=yellow]
[/backcolor][/font][/align][align=left][font=微软雅黑]Object person = current.centerObjects[1];//[color=#008000]引用操作员[/color][/font][/align][align=left][font=微软雅黑]Object mid = current.centerObjects[2];//[color=#008000]引用中间等待的地方[/color][/font][/align][align=left][font=微软雅黑]treenode ts = createemptytasksequence(person,0,0);//[color=#008000]创建空的任务序列[/color][/font][/align][align=left][font=微软雅黑]inserttask(ts,TASKTYPE_TRAVEL,current);//[color=#008000]行走到当前处理器[/color][/font][/align][align=left][font=微软雅黑]inserttask(ts,TASKTYPE_LOAD,item,current);//[color=#008000]装载[/color][/font][/align][align=left][font=微软雅黑]inserttask(ts,TASKTYPE_TRAVEL,mid);//[color=#008000]行走到中间等待处[/color][/font][/align][align=left][font=微软雅黑]inserttask(ts,TASKTYPE_SENDMESSAGE,current,NULL,1);//[backcolor=white][color=#008000]给自己发送1号消息[/color][/backcolor][/font][/align][align=left][font=微软雅黑]inserttask(ts,TASKTYPE_DELAY,NULL,NULL,10,STATE_BUSY);//[color=#008000]延迟10秒[/color][/font][/align][align=left][font=微软雅黑]inserttask(ts,TASKTYPE_SENDMESSAGE,current,NULL,2);//[color=#008000]给自己发送2号消息[/color][/font][/align][align=left][font=微软雅黑]inserttask(ts,TASKTYPE_TRAVEL,destination);//[color=#008000]行走至目的地[/color][/font][/align][align=left][font=微软雅黑]inserttask(ts,TASKTYPE_UNLOAD,item,destination);//[color=#008000]卸载[/color][/font][/align][align=left][font=微软雅黑]inserttask(ts,TASKTYPE_TRAVEL,current);//[color=#008000]回到当前处理器[/color][/font][/align][align=left][font=微软雅黑]dispatchtasksequence(ts);//[color=#008000]分配任务序列[/color][/font][/align][align=left][font=微软雅黑][color=#008000]
[/color][/font][/align][align=left][font=微软雅黑][backcolor=yellow]消息触发:[/backcolor][/font][/align][align=left][font=微软雅黑][size=2]Object mid = current.centerObjects[/size][/font][font=微软雅黑][2];//[/font][font=微软雅黑][color=#008000]声明圆柱体[/color][/font][/align][align=left][font=微软雅黑]if(msgparam(1)==1)[/font][/align][align=left][font=微软雅黑]{[/font][/align][align=left][font=微软雅黑]        mid.color = Color.red;//[color=#008000]1号消息变红色[/color][/font][/align][align=left][font=微软雅黑]}[/font][/align][align=left][font=微软雅黑]else[/font][/align][align=left][font=微软雅黑]{[/font][/align][align=left][font=微软雅黑]        mid.color = Color.white;//[color=#008000]2号消息变白色[/color][/font][/align][align=left][font=微软雅黑]}[/font][/align][align=left][font=微软雅黑]任务序列的结构比较简单,但是应用很广泛,掌握任务序列的自定义,就可以实现很多定制化的任务逻辑。[/font][/align]

本帖子中包含更多资源

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

×

主题

0

回帖

939

积分

中级会员

积分
939
发表于 2018-5-30 17:58:19 | 显示全部楼层
很棒的资料,谢谢楼主的分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注公众号

相关侵权、举报、投诉及建议等,请发 E-mail:admin@discuz.vip

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.|京ICP备14043114号-2

在本版发帖
关注公众号
QQ客服返回顶部