全球FlexSim系统仿真中文论坛

搜索
查看: 5688|回复: 1
打印 上一主题 下一主题

案例十二 自定义任务序列

[复制链接]
跳转到指定楼层
1#
Yumaotuo 发表于 2018-5-21 15:28:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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号消息变白色
}
任务序列的结构比较简单,但是应用很广泛,掌握任务序列的自定义,就可以实现很多定制化的任务逻辑。

本帖子中包含更多资源

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

x
2#
zjj0605 发表于 2018-5-30 17:58:19 | 只看该作者
很棒的资料,谢谢楼主的分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-4-23 22:58 , Processed in 0.071239 second(s), 14 queries .

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

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