全球FlexSim系统仿真中文论坛

标题: 如何让分解器中容量发往多个下游 [打印本页]

作者: shane    时间: 2019-3-27 13:17
标题: 如何让分解器中容量发往多个下游
想请教一下大家,在不添加其他的实体的条件下,能否让分解器在拆包时,第一个暂存区容量满了以后,发往第二个暂存区。需要怎么进行代码的设计呢?
" I2 l' v  I& |( V
作者: 十度烧    时间: 2019-3-27 14:47
可以判断分解器下游的最大容量和下游的当前容量差异,决定发送到的端口号
作者: FanQin    时间: 2019-3-27 14:49
在分解器的sendtoport上写个判断语句,if(进入端口1的item数量等于20,就发送至端口2)
作者: FanQin    时间: 2019-3-27 14:53
FanQin 发表于 2019-3-27 14:49$ a* u% ]: _6 o& Z
在分解器的sendtoport上写个判断语句,if(进入端口1的item数量等于20,就发送至端口2)
  ~- O, B  q# F" \+ c, d8 _
或者直接在暂存区设置最大容量
作者: shane    时间: 2019-3-27 15:59
FanQin 发表于 2019-3-27 14:53
& t4 t" t  @/ x! q3 N' X% k或者直接在暂存区设置最大容量
- v+ o+ T% f1 I9 s8 K
直接设置最大容量会出现这样卡住的情况
作者: FanQin    时间: 2019-3-27 16:03
shane 发表于 2019-3-27 15:59
2 w: T* m+ f5 J& I* k0 @& j' G直接设置最大容量会出现这样卡住的情况
1 Z" t  r4 h! H3 d" C
最好能看到你做的模型,这样看不清楚是哪里出了问题
作者: shane    时间: 2019-3-27 16:40
FanQin 发表于 2019-3-27 16:03
; L: R( _/ t: ^' ?6 y# b2 }8 X最好能看到你做的模型,这样看不清楚是哪里出了问题
5 _( J8 k! `& p9 e4 o! g) W: f5 ?, i
大佬,模型在这
作者: FanQin    时间: 2019-3-27 16:43
shane 发表于 2019-3-27 16:40) D6 O+ N( u5 t
大佬,模型在这

2 Y7 u" e( S' i$ ~下游暂存区的最大容量你设置了10,所以只能进入10个。
作者: shane    时间: 2019-3-27 16:49
FanQin 发表于 2019-3-27 16:43/ B/ ]  W( ~5 t6 }1 D  F3 _! g4 f+ {/ D
下游暂存区的最大容量你设置了10,所以只能进入10个。
, T# s2 f) Z; g, H# O: Y
对呀,我的目的是一个暂存区10个装满了,然后就发送到另外一个暂存区。
作者: FanQin    时间: 2019-3-27 16:54
shane 发表于 2019-3-27 16:493 W- {$ O- c6 N1 T# M3 f4 ~3 }
对呀,我的目的是一个暂存区10个装满了,然后就发送到另外一个暂存区。

6 h  Z$ {' V3 }0 k5 Q终于理解你的意思了。那是不能用最大容量设置。还是反回到我第一个给出的方法,需要在sendtoport上编写代码,判断进入下游1的数量是否等于10
作者: FanQin    时间: 2019-3-27 17:05
本帖最后由 FanQin 于 2019-3-27 17:11 编辑
- i7 l6 u! Z$ m1 D7 F4 P
shane 发表于 2019-3-27 16:53/ b+ g/ k! K" ^  d: V6 Y
我是打算这样子写代码实现的,但是不知道哪里出问题了
代码逻辑错了,你这边需要用到三个输出端口,但是这个代码只适用于两个输出端口,建议用port by case;
作者: shane    时间: 2019-3-27 17:32
FanQin 发表于 2019-3-27 17:05
- w0 I8 {; \) A7 ?代码逻辑错了,你这边需要用到三个输出端口,但是这个代码只适用于两个输出端口,建议用port by case;
: E! R% w8 S7 _& m
啊没事了,我发现哪里出问题了。if后面少加了一个()。
/ g* b  u7 B6 b- i: j这样子就可以实现了
+ `* q: J3 b0 L) Otreenode  item = parnode(1);
0 U1 E% r8 h8 \8 C. O- etreenode  current = ownerobject(c);+ g. h0 B9 A3 ]
/**默认分解器选项*/. t2 T, n- T( y0 Z7 ^
if(getvarnum(current,"unpack"))- n- m$ @1 c3 e# j1 y# u
{
9 J4 `$ r6 d, a  i: r, p- R  if(getrank(parnode(1)) == 1)
0 M4 w2 P3 [. c& ?0 A' z4 L( m    return 1;
8 h# W  B$ M$ O   else
9 z+ g! @3 ]) k* J   if (content(outobject(current, 2))<getvarnum(outobject(current, 2),"maxcontent"))9 ]  {- s/ j4 E/ V
    return 2;2 e+ U+ k  T: {' j4 ^8 E
   if (content(outobject(current, 2))==getvarnum(outobject(current, 2),"maxcontent"))
8 f# \! g( A7 }! r" F, X) s    return 3;
% }$ K7 b; M8 v}) Y3 m( w& z6 _
else+ g4 P7 p- j2 V7 }( w! r6 ^* x
  return 0;
作者: zjj0605    时间: 2019-4-3 17:39
感谢楼主的分享




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