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