全球FlexSim系统仿真中文论坛

标题: 执行类实体反连接到分配器的作用 [打印本页]

作者: cheng_jun    时间: 2011-12-20 16:27
标题: 执行类实体反连接到分配器的作用
连接执行类实体与分配器时,通常由分配器连接到执行类实体。反向连接的话,会有什么作用呢?
- s6 j+ E) h* H$ C; T) c举例来说,当一个操作员在执行搬运货物时,如果被一个抢占任务打断的话,操作员会将剩余的任务交给分配器而去执行抢占任务。上述的剩余任务会由分配器分配下去(如果存在其他操作员的话)。
5 V- d$ |3 R; F2 E0 s9 ?7 r; g但在这个过程中  会有一个奇怪的现象。虽然操作员将任务交给了分配器,但是已装载的临时实体却不会消失,仍然在操作员身上。0 _3 j+ k7 C2 A5 _  @4 c
这部分内容 也可以在说明书中查询。" @! L( f5 k- P$ X
[attach]387[/attach]
作者: domcylai    时间: 2011-12-20 17:27
本帖最后由 domcylai 于 2011-12-21 10:49 编辑
- M9 y/ g3 N* \+ \7 G; h9 t5 c4 J9 Q
我认为,操作员被先占后,剩下的task如您所说的通过“反连接”交回给分配器,但是没有任意一个task指明让flowitem消失(或则搬运到某地),如果需要让他消失,可以用destroyobject(),但是如果要在执行那个先占的任务之前将 flowitem搬运到某地,是否可以调整tasksequence的排序?
: V) M& w/ j  b, a$ ^! x8 t8 k被抢占的那一瞬间,如果可以控制tasksequence的排序,就好办了。/ |6 \( a# T: B* Y4 R' N. _* C

* U( w1 C& _( v: M/ P4 a( o# Q3 b' s. F) \: W
————————————————————————; {/ k: C+ o( w
花时间研究了一下,并没有找到相关代码去“编辑”第一次搬运的tasksequence,所以我想到了只能通过删掉原来的tasksequence,然后重新生成一个相同的tasksequence; 在执行完 那个先占的tasksequence以后,再由分配器将新tasksequence返还给操作人员;' }5 ^; C- x2 U  `/ z
" U9 h& N0 X+ G" S' i# L0 U7 Q4 ?* h
PS:如果大家对Queue有一定理解的话,我们可以将这个模型中的分配器 当成一个“任务暂存区”,正如chengjun所说,通过反连接,将任务传递给这个“任务暂存区”
作者: domcylai    时间: 2011-12-21 10:41
本帖最后由 domcylai 于 2011-12-21 10:48 编辑 . Z  |) r7 o) N. N( C/ v

1 Q$ S, j9 j: w) t" A忘记放上附件了,补上说明:为了说明详细,声明 先占的那个任务叫preempttask,原来的那个叫oldtask,新的叫newtask;
5 L9 M3 g' Z7 K5 y  N7 b
) \# H1 ?' i/ n* f, K" O/ J3 I1)操作员执行oldtask时,Queue4 发射 preempttask抢占,此时操作员将oldtask剩下的任务传递给分配器,
. d# ?% P" }$ ^8 t- Y7 L3 ]. L% R4 q2 U3 w2 _
2)Queue4发射的preempttask修改一下,在“使用运输工具”的下拉菜单选择“任务序列示例1”,并点击编辑按钮,增加:, P: t* f$ ?1 F& C( `
treenode Queue3 = centerobject(centerobject(current,1),1);
$ g9 J. F9 T! k4 ?, ?+ h8 oinserttask(ts,TASKTYPE_TRAVEL,Queue3,NULL);
. x- G8 N* N3 K, {  h; Ainserttask(ts,TASKTYPE_MOVEOBJECT,rank(centerobject(current,1),1),Queue3);+ D2 P. c% B5 b5 u- c7 @5 ~
意思是将已经搬运的item放回到原来的那个Queue,然后执行新的;. V; ]" O* F' z! k
8 s8 b) P) a' k7 Y
3)item放回到原来的Queue3后,Queue3 会生成newtask,因为操作员被先占了,所以oldtask和newtask将传递到分配器,而且它们的优先级一样,根据时间先后,oldtask排在前面;- Q( s( K" z& `4 \& F5 P

6 H6 g  }+ S+ ?2 C4)下面要做的是删除oldtask,我用了destroyobject(),和gettasksequence(), 并将代码卸载sink的进入触发中:1 }/ }6 E& F# F$ p2 S3 N% f  ~
treenode oldtask = gettasksequence(centerobject(current,1),1);- P! h2 U0 k$ A' b. u
destroyobject(oldtask);
9 [# v: z& ?; P; t- B+ s  H4 f8 N% q, K4 Q: [
——




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