全球FlexSim系统仿真中文论坛

标题: 如何实现,当第一件物品存储时间>3600s或暂存区数量达到6个时,离开暂存区?? [打印本页]

作者: 丫头盖    时间: 2014-11-28 10:46
标题: 如何实现,当第一件物品存储时间>3600s或暂存区数量达到6个时,离开暂存区??
模型思路:
2 n/ [/ |0 g  E6 d1 M( A* a0 V            1)当货物到达存储区时,若第一件到达物品存储时间>3600s或存储区内数量达到6个时,货物离开存储区,到达待装车区。
$ M  n. i7 h9 f+ J8 j            2)当前批货物离开后,存储区内重新根据“若第一件到达物品存储时间>3600s或存储区内数量达到6个时”这一条件,实现下批货物离开存储区,到达待装车区。2 ]: u6 j+ ]( y3 t' ^+ H" D
            3)车辆组装处(合成器)根据待装车区内的货物数量,更新合成清单,并组装。
- G( _% @( B; o( \6 `1 ^3 R) |: ^4 U, s* g' D6 v# N
目前的模型:在存储区上设置了标签记录时间,并控制存储区的输出开关,但是没有实现上述希望的模型思路。
+ q: v1 k# {& k0 p- {3 f7 [% L. X求助!!各位大神们帮忙看一下这个模型要怎样才可以实现上述模型思路的需求呢?? 非常非常感谢!!
作者: cy411522    时间: 2014-11-28 11:18
我做了下修改,目前实现了暂存区的控制要求,希望对你有帮助
作者: cy411522    时间: 2014-11-28 11:34
1# 丫头盖
; y* t* Y8 k4 G
4 j* d& J/ b! |0 y: W" [% @' u4 L& p1 z, ]3 r# b! `+ h( c& {  A6 D6 ?
你的第三个要求,我看了一下,你更新合成器组件列表的时间不对,在装车区离开触发里是没有用的,因为item不能离开所以触发不了里面的代码。。。所以你好好考虑下更改合成器组件列表的时间点。。
作者: 丫头盖    时间: 2014-11-28 14:02
2# cy411522 ) ~* v; q) K2 I6 T# V* f
非常感谢!这个模型对于1、2的逻辑都实现了~~
8 T" j) j) y% T- }模型内有一个代码向您再学习一下,不是很懂:[img][/img]
- M$ k9 _' P, `5 H! C[attach]2343[/attach]
* i+ c, x2 H, v/ ~) |; w上述代码在消息触发内:若不满足条件,则发送一条延迟消息,该条延迟消息的作用是什么?由谁来接收这条消息?& C: P9 c" I9 D; r

! O7 [+ ?" O3 G' a# u6 h; O另,对消息触发的功能的逻辑,我学习的还是不够精,想问一下:一般一个模型内是先由进入触发(或其他模型)发出消息,它再接收,在代码中它是在进入触发之后的吗?5 \2 o: ?4 Y. @' m4 H
非常感谢啊~~
作者: 草原一棵树    时间: 2014-11-28 15:18
本帖最后由 草原一棵树 于 2014-11-28 15:36 编辑 : _, l. Z' x8 M6 v0 h1 P# U
% ]6 J1 h7 k" @" O; J  h

作者: cy411522    时间: 2014-11-28 20:54
4# 丫头盖
: a- r7 g" b: K1 S( F0 \
" d( F8 s2 J2 u自身接收,发的是一秒延迟消息。。基于第一个实体的进入时间t,每隔一秒统计一次当前时间然后减掉t结果与3600秒相比,若大于3600则打开输出;若小于3600则继续发1秒的延迟消息
作者: cy411522    时间: 2014-11-28 20:57
4# 丫头盖 / @" O- Q$ `/ Z6 M5 ?! e
- P3 U0 N3 x8 ?1 V, P) h
# M, `  q5 `  |9 b, n+ A  n
自要有实体给它发消息,那么它的onmessage就会触发。。你可以做个断点测试它的触发时间点在什么时候。。。
作者: 丫头盖    时间: 2014-11-29 17:46
5# 草原一棵树
3 G9 V% t6 t* e( `2 ]你好!看了您的模型,觉得相当牛掰了~  想问一下,模型中的“懒人专用”这个是怎么做出来的?9 z2 l4 [) f. `" a; y8 q
[attach]2346[/attach]
3 J0 F8 _; H, s9 `$ `+ l
3 o8 X6 o( m( B/ V5 [0 F, f另:由于暂时不会在新的模型中做出您的这个“懒人专用”框,因此将您的模型思路和2楼的模型进行了结合,课题中的3个问题都可以解决。但是存在一个小问题:
1 z6 A" G; g8 H5 y" h 当模型运行到3700s时,已满足时间>3600s条件,存储区货物应该到车辆组装处组装。
6 n0 G) @2 e! n# J但,待装车区的容量未写入全局表。+ \! O; W* ~- G  ^
  问题应该是:暂存区3的托盘,在车辆组装处的合成清单还未更新时,托盘提前在合成器上等待,导致合成器的数量无法更新。但是,我自己没有解决这个问题、、、、、 " {! l7 A- a' n  I
    辛苦你在帮我看一下怎么解决,非常感谢!![attach]2347[/attach]
作者: 德古拉    时间: 2014-12-1 10:52
根据楼主的描述大概做了一下,您看看是否达到了您预期的效果。  G3 h/ I' X2 c. g' d- V
1.最多等待3600s的条件不用循环发消息去判断,直接在存储区进入第一个item时发送一个3600s的延迟消息即可,当此延迟消息触发消息触发器时如果存储区内有item,则释放所有的item。
$ s: g( V, X! W; [. `2.更新打包数量可以在待装车区进入触发中将全局表打包数量值设置为此时存储区的容量加1,并在此时释放一个托盘。
3 D9 d3 C) I, Z" f4 J. Z[attach]2348[/attach]
作者: xinglei    时间: 2014-12-10 16:53

作者: 草原一棵树    时间: 2014-12-19 11:03
自己想撒,太细节的问题真心太伤,上次细节坑的我太久有阴影了
作者: 草原一棵树    时间: 2014-12-19 18:26
8# 丫头盖
* U6 j# X& O9 O. }7 P- `2 F
) o; s. ^3 `: }% E* F% `3 X
' h1 _4 F. Z6 R5 y1 [我用的是“用户事件”实现的,好处就是不需要写太多触发。回贴主要是回想起来我原来模型一个未解决的问题,因为货物进入待装车区是一个一个进入的使得entrytrigger多次被触发(用断点调试可以发现)出现了托盘空跑的现象。解决方案是在原有的”待装车区“的entrytrigger触发发送消息的逻辑前加上了防错判定,并修正了托盘暂存区代码写错位置(应该写在离开触发里)的问题。另:你的问题表达的还不够清晰,如有其它可继续交流学习。
作者: 慧娴亚伦    时间: 2014-12-20 11:06
下载学习一下,感谢楼上分享。
作者: 657776724    时间: 2015-11-1 20:15
这个难道不是用暂存区的批量发送功能就可以解决吗?。。。。。。, V  u9 ^0 \- z+ W& s7 @9 X/ Y
在收集结束触发的时候见收集的批量传递给合成器,应该也可以把。。
作者: 慧娴亚伦    时间: 2015-11-2 09:01
他的要求有一些特别,是第一件待够3600s而不是所有都要待3600s
作者: 657776724    时间: 2015-11-2 18:05
15# 慧娴亚伦 9 M, I2 k. p- C3 |: G/ D6 w6 M0 R
9 z! D( ^0 G# v' N) F
我测试了一下,暂存区的最大等待时间是基于该批量的第一个计算的。所以应该是符合要求的吧……
作者: 慧娴亚伦    时间: 2015-11-2 21:19
有意思!哈哈,想当然了,从来没有考虑到这个问题,也没有去测试过,感谢16楼的分享!




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