全球FlexSim系统仿真中文论坛

标题: 关于叉车工作原理的探讨 [打印本页]

作者: zorsite    时间: 2013-3-26 13:18
标题: 关于叉车工作原理的探讨
本帖最后由 zorsite 于 2013-3-26 13:41 编辑
% |# E8 X. j3 T* N; Q. j- F
1 Q* A7 w7 J7 H. P8 X5 z' {) R建立以下模型:2 m% U, ?* q' |1 Q0 ?/ j3 D
发生器-->上游暂存区-->5个下游暂存区。. e4 \2 n0 p/ {; \/ s% R" l: s) T
发生器与上游暂存区A连接$ Z: }% `% g& n
上游暂存区依次与下游5个暂存区A连接7 ~1 ^4 {2 o! X( x0 x
[attach]1292[/attach]: ~  {# T- r2 a4 V) n
( N3 {5 f6 v5 f" r) i
1.设置发生器一次性到达100个货物。运行结果如下:
$ Z8 ^( k1 ]7 h- T( v! H[attach]1293[/attach]& g: N- k, I0 ~5 `1 F1 s  t1 ^
因为上游暂存区的输出端口默认为“第一个可用”,所以所有货物都被输出至下游第一个暂存区。* O$ U# L8 f$ `2 R$ q
如果第一个暂存区满,再向第二个暂存区输出。
2 ~  b- b+ }2 B+ R
2 R9 J* c3 t) x$ W7 i3 Y" m: g  Z2.添加叉车,设置上游暂存区“使用运输工具”。运行结果如下:6 M! e& {, M& e( z3 g2 C5 w) A  F) r
[attach]1294[/attach]
: ?( \, q% S, l9 V$ @7 C叉车每次运输一个,依次运送至下游每一个暂存区。why?& H2 ]0 q, `- S7 A* B  q9 L
此时上游暂存区的输出仍然为“第一个可用端口”,但为什么不像1那样,先把下游的第一个暂存区装满,第一输出端口堵塞,然后再输出到下游的第二个暂存区?叉车是怎样的工作机制?" q5 m4 t+ p! e. d2 e

% v' q' ?' J4 k3 Q% x0 ^& H3.设置上游暂存区“成批操作”,目标批量为30,运行结果不变。6 R# G, C5 d  }) r& A
3 r% g/ f  H! y* [5 V
4.继续设置叉车容量为30,奇怪的事情发生了!5 n7 o- e+ D1 N8 h
[attach]1295[/attach]" X5 _  V6 S5 L' K/ s8 ~: l6 }( H
叉车一次性拾取30个货物(这很正常),但是却从下游的最后一个暂存区开始卸载!what happened?; L/ L# k5 ~/ t( u- t" O! y# i
! e' t( T6 Q# e5 n4 L: b
5.设置叉车卸载触发:
; S* f8 ~5 Q7 l! Q! ]选择第一项:到其他站点卸载之前,将所有以此工作站为目标的临时实体卸载
5 h! k" e: F5 z9 G& X. U[attach]1296[/attach]: j! O/ ~" u  q! R- X
如果不进行此项设置,则叉车装载30个货物之后,依次到下游没一暂存区每次卸载1个货物,轮番在下游5个暂存区进行卸载,直至下游每个暂存区都有30/5=6个货物,此时叉车上所有货物卸载完毕,返回至上游暂存区重新装载,见第4步图。
" d" x0 m+ p6 E/ h* c& q* i" |* ?5 k5 ^# a( c
进行此项设置之后,行进至下游暂存区之后,在每一暂存区一次性卸载6个货物。& b  M" ]6 n9 d. u6 q8 a8 T( O& w. ~
[attach]1297[/attach]/ X; I& V9 e# t' B. @
5 i6 V2 k9 W5 {3 p/ p2 G
6.如果想让叉车每次都卸载10个货物,应该从叉车入手呢?还是从货物入手,对货物进行打包?如果不设置上游暂存区成批操作,又希望叉车每次装载30个货物之后再走,又该如何设置?
  b* |9 v0 r; H& w0 u+ L2 \) _
9 E; i. K/ x' o/ q! Zto be continued...zzZZ
作者: 天性518    时间: 2013-3-26 19:48
加老师,我看了按照你步骤去看了一下,再把任务执行器的参数设定看了,很遗憾,还是未能找到答案,期待高手来吧。
作者: missman    时间: 2013-3-27 10:55
我用英文版做了一次也是一样的结果。期待高手
作者: Rosalyn    时间: 2013-3-27 18:02
建议可以在运行时看看菜单栏中Debug>Event Log,如果想让叉车每次都卸载10个货物,可以在send to port里控制输出端口
作者: king    时间: 2013-3-28 23:42
静求答案
作者: 蓝桥书生    时间: 2013-12-16 13:06
[attach]1675[/attach] 真奇怪。。。。
作者: a445608540    时间: 2013-12-16 14:43
好像是呀,可以直接在群里问问,看什么原因呀
作者: a445608540    时间: 2013-12-16 16:11
使用代码可以实现,但是还有个问题,怎么设置的是第一个暂存区,结果叉车一直往最后一个运输
作者: 慧娴亚伦    时间: 2013-12-16 17:23
我按楼主的方式做了一下模型,发现了这样一个问题:
: d; u4 c- N6 Y/ R+ n& {item到达之后就给叉车下达了搬运这个100个item的所有任务,顺序是从ts1到ts100;
0 C! D# N0 [* e3 j3 C但是,当叉车拾取了规定数量的item之后(本例中是10个),就会重新排序任务,而且是倒着排序(但是原来的任务指令不变);
; L& I9 |/ N# E+ @  G. g也就是说,一开始就指定好了ts1去queue1,ts2去queue2……以此类推,ts10去queue5;
3 T( P# M7 B+ w6 Q2 H+ s6 B但是由于重新排序了任务,此时第一个任务就是ts10,第二个任务是ts9,导致结果就是先去queue5,再去queue4……9 c4 y% V5 l' l2 \& Y
至于为什么装载实体之后就会重新排序任务呢?" V' X; \( A) ^* `  F, ?& A( L0 Q
现在我也不懂为什么。。。。
; ~9 Q0 z' X" ?" L楼主这个发现真的比较有意思的,感觉确实涉及到了任务执行器工作的某些原理(不仅是叉车,其他任务执行器也会有同样现象)当然希望大家再深入一下,看看能否有更多的发现。
作者: 大摸鱼    时间: 2013-12-16 19:49
9# 慧娴亚伦
作者: xiexiaoch134    时间: 2013-12-24 14:24
这个与任务序列中的break任务执行有关。
作者: 657776724    时间: 2015-12-12 22:05
这个帖子不能沉啊,静待高手解密!
作者: 慧娴亚伦    时间: 2015-12-14 13:24
哈哈,其实11楼的高手已经告诉大家答案了。这个跟break任务有关。
作者: ldl89772962    时间: 2016-4-12 22:26
长姿势
作者: Kimver    时间: 2016-4-13 02:57
我研究了一下1 H+ v3 O3 T/ G' M: Q4 z* i% c
1、首先,要明确叉车为什么可以一次性装载30个实体,很多人以为,叉车的容量为30就可以了,,其实不然。容量30当然是条件之一,还有一个必要条件是任务序列中必须有break任务(试着把叉车容量保持在30,把任务序列中的break任务删掉,会出现什么情况?结果是,叉车每次只会搬运一个实体)。
9 _% }6 A5 @9 `( x$ L/ s( Q2、break任务被执行之后,新的任务会请求叉车去执行,请求被叉车接受之后,前一个还没完成的任务就会放在新任务的后面,等到新的任务完成,再去执行原来的任务。- {5 _# A9 r3 X  ?# r1 y2 O; a/ j1 k
3、基于第二点举例说明,现在假设该叉车的容量为5,实体到达之后,产生了100个任务在排队,ts1、ts2、ts3、ts4、ts5......ts99、ts100,叉车先去执行ts1,ts1包含5个任务序列(t1,t2,t3(break),t4,t5),当执行到t3时中断了,任务队列中的第一个任务就会请求叉车去执行,也就是ts2发出了被执行的请求,这时叉车还有能力(容量决定能力)去执行,接收了ts2的请求,那么,既然ts1还没执行完,不可能把它销毁的(除非设置了先占值),所以应该把ts1重新放到tasksequence中,等到ts2执行完之后,再去执行ts1,所以现在tasksequence的排序变成了ts1、ts3、ts4、ts5......ts99、ts100。同理,ts2被执行到t3时同样中断,ts3发出了被执行的请求(这时问题来了,为什么先发出请求的是ts3而不是排在tasksequence中的第一个ts1呢?因为被中断的任务需要任务完成一个finish TS来触发),这时tasksequence的排序就变成了ts2、ts1、ts4、ts5......ts99、ts100。以此类推,ts3中断后接收ts4的请求,tasksequence的排序就变成了ts3、ts2、ts1、ts5、ts6......ts99、ts100;ts4中断后接收ts5的请求,tasksequence的排序就变成了ts4、ts3、ts2、ts1、ts6......ts99、ts100。装载完第五个实体(即执行ts5),当执行到t3,中断了,但是拒绝了ts6的请求(因为已经到达5个容量了),这时就会继续完成当前的任务(即ts5),之后就会在逐个去执行tasksequence的剩余任务。. n6 F5 P: b& p& O2 k
3、所以,我想,这就是为什么会出现叉车从下游的最后一个暂存区开始卸载的原因。




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