全球FlexSim系统仿真中文论坛

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

作者: cheng_jun    时间: 2011-12-20 16:27
标题: 执行类实体反连接到分配器的作用
连接执行类实体与分配器时,通常由分配器连接到执行类实体。反向连接的话,会有什么作用呢?, D, E0 {) K5 Z/ M  Q
举例来说,当一个操作员在执行搬运货物时,如果被一个抢占任务打断的话,操作员会将剩余的任务交给分配器而去执行抢占任务。上述的剩余任务会由分配器分配下去(如果存在其他操作员的话)。
! v$ ^0 G( A+ j' {3 \6 N但在这个过程中  会有一个奇怪的现象。虽然操作员将任务交给了分配器,但是已装载的临时实体却不会消失,仍然在操作员身上。
' y5 s; p" }5 ?这部分内容 也可以在说明书中查询。5 A; ~* z5 P2 o' e
[attach]387[/attach]
作者: domcylai    时间: 2011-12-20 17:27
本帖最后由 domcylai 于 2011-12-21 10:49 编辑
- p" B* _$ C7 `. N& p
, _/ X6 P" _5 [: x我认为,操作员被先占后,剩下的task如您所说的通过“反连接”交回给分配器,但是没有任意一个task指明让flowitem消失(或则搬运到某地),如果需要让他消失,可以用destroyobject(),但是如果要在执行那个先占的任务之前将 flowitem搬运到某地,是否可以调整tasksequence的排序? 5 \: ~7 y9 ^, a7 J8 B7 U
被抢占的那一瞬间,如果可以控制tasksequence的排序,就好办了。8 a/ ^( ^$ z" Q: o5 r; ^) Q. [* Y3 a
0 z1 L1 l2 q3 I' s/ m' v

, U+ T6 J& W" A7 l6 I1 R! b+ V  O————————————————————————# t* I; [# R9 e9 D4 ?
花时间研究了一下,并没有找到相关代码去“编辑”第一次搬运的tasksequence,所以我想到了只能通过删掉原来的tasksequence,然后重新生成一个相同的tasksequence; 在执行完 那个先占的tasksequence以后,再由分配器将新tasksequence返还给操作人员;
% O1 V! k1 S" O4 C% y% T! {: i- N
PS:如果大家对Queue有一定理解的话,我们可以将这个模型中的分配器 当成一个“任务暂存区”,正如chengjun所说,通过反连接,将任务传递给这个“任务暂存区”
作者: domcylai    时间: 2011-12-21 10:41
本帖最后由 domcylai 于 2011-12-21 10:48 编辑
5 o5 j% \# O3 n# d; B( j+ W# C" a
  {+ L' w4 M2 \( \忘记放上附件了,补上说明:为了说明详细,声明 先占的那个任务叫preempttask,原来的那个叫oldtask,新的叫newtask;
$ c9 \# R" I1 B5 z( Q8 b2 A
4 L) a5 r: x/ N4 R2 Q( L" ^1)操作员执行oldtask时,Queue4 发射 preempttask抢占,此时操作员将oldtask剩下的任务传递给分配器,
5 W7 X! D  a/ H8 n) g1 s9 B, Z& j3 J! w! B6 U
2)Queue4发射的preempttask修改一下,在“使用运输工具”的下拉菜单选择“任务序列示例1”,并点击编辑按钮,增加:* J. F2 n2 n& L% G
treenode Queue3 = centerobject(centerobject(current,1),1);
( ?" m$ H; m! d: }6 _inserttask(ts,TASKTYPE_TRAVEL,Queue3,NULL);
8 L  [7 S4 Q6 V: L2 O! minserttask(ts,TASKTYPE_MOVEOBJECT,rank(centerobject(current,1),1),Queue3);; u8 h( h% Q* H; }, g
意思是将已经搬运的item放回到原来的那个Queue,然后执行新的;
7 \- n; f7 q2 N9 b7 |
4 i1 W% l' c9 T# P; \' U0 o3)item放回到原来的Queue3后,Queue3 会生成newtask,因为操作员被先占了,所以oldtask和newtask将传递到分配器,而且它们的优先级一样,根据时间先后,oldtask排在前面;
( k2 N% x0 r% r6 J- A; v9 R; U
6 w- O, d  E2 F3 b! H4 U9 L4)下面要做的是删除oldtask,我用了destroyobject(),和gettasksequence(), 并将代码卸载sink的进入触发中:# l. @. p: y* y
treenode oldtask = gettasksequence(centerobject(current,1),1);
3 J1 b) s/ e' ~6 d  S" X3 rdestroyobject(oldtask);/ |, Z/ Z3 g9 D
4 x: \; J( L# A  u0 A9 V
——




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