全球FlexSim系统仿真中文论坛

搜索
查看: 5569|回复: 2
打印 上一主题 下一主题

执行类实体反连接到分配器的作用

[复制链接]
跳转到指定楼层
1#
cheng_jun 发表于 2011-12-20 16:27:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
连接执行类实体与分配器时,通常由分配器连接到执行类实体。反向连接的话,会有什么作用呢?
! O% r7 x. N& k) q/ J" X举例来说,当一个操作员在执行搬运货物时,如果被一个抢占任务打断的话,操作员会将剩余的任务交给分配器而去执行抢占任务。上述的剩余任务会由分配器分配下去(如果存在其他操作员的话)。
0 K. S# A3 {. R& a$ q& n. p但在这个过程中  会有一个奇怪的现象。虽然操作员将任务交给了分配器,但是已装载的临时实体却不会消失,仍然在操作员身上。# l+ E7 m% }' y4 _- w
这部分内容 也可以在说明书中查询。! |5 G' a" ]3 b7 C4 U# j

本帖子中包含更多资源

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

x
2#
domcylai 发表于 2011-12-20 17:27:30 | 只看该作者
本帖最后由 domcylai 于 2011-12-21 10:49 编辑 % U% u# ^" d" K* M

# Q. W$ a: J9 X, c( A; P我认为,操作员被先占后,剩下的task如您所说的通过“反连接”交回给分配器,但是没有任意一个task指明让flowitem消失(或则搬运到某地),如果需要让他消失,可以用destroyobject(),但是如果要在执行那个先占的任务之前将 flowitem搬运到某地,是否可以调整tasksequence的排序? 7 @6 L' a" U3 u9 {3 O! v! ^
被抢占的那一瞬间,如果可以控制tasksequence的排序,就好办了。
/ G. Y: O8 ~  a( R* L8 f! a% _7 [6 F0 o+ j( x2 K+ a
3 l2 ^6 ]: I1 @# t4 O6 R8 M0 M9 X: m$ W
————————————————————————
2 a! P: Q7 `" R" h" S; s' W# j% e花时间研究了一下,并没有找到相关代码去“编辑”第一次搬运的tasksequence,所以我想到了只能通过删掉原来的tasksequence,然后重新生成一个相同的tasksequence; 在执行完 那个先占的tasksequence以后,再由分配器将新tasksequence返还给操作人员;
- `/ f# }/ G: y2 I- ^4 x$ H7 ^! E7 }/ C2 k' A
PS:如果大家对Queue有一定理解的话,我们可以将这个模型中的分配器 当成一个“任务暂存区”,正如chengjun所说,通过反连接,将任务传递给这个“任务暂存区”

本帖子中包含更多资源

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

x
3#
domcylai 发表于 2011-12-21 10:41:28 | 只看该作者
本帖最后由 domcylai 于 2011-12-21 10:48 编辑 $ k3 H# M1 ]1 i0 @3 c) T

7 \* [0 m) h% u% x3 ~  L$ @; }6 |忘记放上附件了,补上说明:为了说明详细,声明 先占的那个任务叫preempttask,原来的那个叫oldtask,新的叫newtask;
2 \( j6 z0 l/ A/ \0 U* c" q, x  V( }$ o1 V9 m4 {# W2 k, s+ w6 L
1)操作员执行oldtask时,Queue4 发射 preempttask抢占,此时操作员将oldtask剩下的任务传递给分配器,
5 J% V" ^+ B8 Q3 L: p* g+ Y
- x0 e# h, s# K8 Y# L2)Queue4发射的preempttask修改一下,在“使用运输工具”的下拉菜单选择“任务序列示例1”,并点击编辑按钮,增加:4 l, U& g) Z2 F0 S* S
treenode Queue3 = centerobject(centerobject(current,1),1);
. o% `. N& w% g% minserttask(ts,TASKTYPE_TRAVEL,Queue3,NULL);2 i* X  x9 {/ Y4 W/ V( B/ y7 a* D
inserttask(ts,TASKTYPE_MOVEOBJECT,rank(centerobject(current,1),1),Queue3);
, P) g7 E. c. F; O意思是将已经搬运的item放回到原来的那个Queue,然后执行新的;
' n; g( M4 N" M) |9 c
3 `9 w; ]/ p1 S& Z3)item放回到原来的Queue3后,Queue3 会生成newtask,因为操作员被先占了,所以oldtask和newtask将传递到分配器,而且它们的优先级一样,根据时间先后,oldtask排在前面;
# Z" L6 F" y0 u& B: D9 Q
6 {9 i! [. w& G: a7 C, Y7 a% D# Q) Q4)下面要做的是删除oldtask,我用了destroyobject(),和gettasksequence(), 并将代码卸载sink的进入触发中:
* p$ a$ O* q1 Z+ E! X9 l( O0 W8 Jtreenode oldtask = gettasksequence(centerobject(current,1),1);1 s) Y/ ~! }8 o2 V
destroyobject(oldtask);
4 Z& z: Z- r& Q5 X
8 D% m/ u& O4 r) a8 e. T+ Q- c5 J, b——

本帖子中包含更多资源

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

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-7-1 10:10 , Processed in 0.075188 second(s), 14 queries .

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

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