全球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/ P
4 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 I
1)操作员执行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 o
inserttask(ts,TASKTYPE_TRAVEL,Queue3,NULL);
. x- G8 N* N3 K, { h; A
inserttask(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 C
4)下面要做的是删除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 f
8 N% q, K4 Q: [
——
欢迎光临 全球FlexSim系统仿真中文论坛 (http://www.flexsimasia.com/)
Powered by Discuz! X3.3