全球FlexSim系统仿真中文论坛

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

作者: shane    时间: 2019-3-27 13:17
标题: 如何让分解器中容量发往多个下游
想请教一下大家,在不添加其他的实体的条件下,能否让分解器在拆包时,第一个暂存区容量满了以后,发往第二个暂存区。需要怎么进行代码的设计呢?- K; c% I+ n; x* ?. n) l) ]

作者: 十度烧    时间: 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
4 ^! c7 r# ^# `在分解器的sendtoport上写个判断语句,if(进入端口1的item数量等于20,就发送至端口2)
4 F; ]; c2 c1 w4 R7 C: I" E
或者直接在暂存区设置最大容量
作者: shane    时间: 2019-3-27 15:59
FanQin 发表于 2019-3-27 14:53! l% s  a8 u+ x3 F
或者直接在暂存区设置最大容量
: e2 c! c2 w  {% ^4 C& f) Q
直接设置最大容量会出现这样卡住的情况
作者: FanQin    时间: 2019-3-27 16:03
shane 发表于 2019-3-27 15:596 s$ K! x# E. H. R
直接设置最大容量会出现这样卡住的情况
5 A4 Q( o/ r' o* \% c; o2 W
最好能看到你做的模型,这样看不清楚是哪里出了问题
作者: shane    时间: 2019-3-27 16:40
FanQin 发表于 2019-3-27 16:03' `2 U1 o. z, |0 t5 X
最好能看到你做的模型,这样看不清楚是哪里出了问题
, E, d) m4 R: e( K2 _8 u% X  P" y
大佬,模型在这
作者: FanQin    时间: 2019-3-27 16:43
shane 发表于 2019-3-27 16:40
0 M( p4 \6 f# F' I( g. H大佬,模型在这

. B0 ?, y% J' J; C5 I& ]下游暂存区的最大容量你设置了10,所以只能进入10个。
作者: shane    时间: 2019-3-27 16:49
FanQin 发表于 2019-3-27 16:43
% ]0 S. e9 X! f下游暂存区的最大容量你设置了10,所以只能进入10个。
5 e' A' L; i0 h3 R
对呀,我的目的是一个暂存区10个装满了,然后就发送到另外一个暂存区。
作者: FanQin    时间: 2019-3-27 16:54
shane 发表于 2019-3-27 16:49
. r1 v7 m1 k0 X  t* X0 E. b  G对呀,我的目的是一个暂存区10个装满了,然后就发送到另外一个暂存区。
, a; S) t! w. |. u( n% M# g7 d8 o
终于理解你的意思了。那是不能用最大容量设置。还是反回到我第一个给出的方法,需要在sendtoport上编写代码,判断进入下游1的数量是否等于10
作者: FanQin    时间: 2019-3-27 17:05
本帖最后由 FanQin 于 2019-3-27 17:11 编辑
9 {, Z2 G: Y; K( [+ I5 {' u
shane 发表于 2019-3-27 16:53) h. T5 Y$ Z5 L: m5 O
我是打算这样子写代码实现的,但是不知道哪里出问题了
代码逻辑错了,你这边需要用到三个输出端口,但是这个代码只适用于两个输出端口,建议用port by case;
作者: shane    时间: 2019-3-27 17:32
FanQin 发表于 2019-3-27 17:05- |2 G8 w: j3 b; ^* b8 g6 k# ?
代码逻辑错了,你这边需要用到三个输出端口,但是这个代码只适用于两个输出端口,建议用port by case;

+ W+ s  i/ ^( m  f% k. B& |3 W啊没事了,我发现哪里出问题了。if后面少加了一个()。( J+ ^  R8 N1 Z' d
这样子就可以实现了
* O- _4 `! g% A% [; Mtreenode  item = parnode(1);9 v- D0 S3 T( J+ p& ~: B
treenode  current = ownerobject(c);) g/ p+ j' z3 D) ]3 j4 u/ z$ N( M
/**默认分解器选项*/
( ]8 f) i6 k1 E4 ~& Z  uif(getvarnum(current,"unpack"))
7 Y5 u8 \' d- g, B7 _{: ~$ Y0 j& Y. y  Y7 N6 p
  if(getrank(parnode(1)) == 1)
8 F+ x2 \  q5 V, t" j) `    return 1;0 f2 O3 n1 X5 B0 l
   else& `/ f- U4 @4 ~2 X. M( y
   if (content(outobject(current, 2))<getvarnum(outobject(current, 2),"maxcontent"))) ~2 f9 G, H' g5 u
    return 2;$ `8 v3 j/ `$ E" {* ]  l; A* l
   if (content(outobject(current, 2))==getvarnum(outobject(current, 2),"maxcontent"))9 X' x$ g/ W4 h' |' `3 i. ?0 d
    return 3;
* d7 `3 o: ?$ w$ j0 W+ I3 ~}! `& l! @% e6 L/ N2 ~) f
else
& p1 p" I' H! r, Q$ W& H, \  return 0;
作者: zjj0605    时间: 2019-4-3 17:39
感谢楼主的分享




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