全球FlexSim系统仿真中文论坛

搜索
查看: 7236|回复: 6
打印 上一主题 下一主题

Mergesort上产品类型与端口数目不相等的问题

[复制链接]
跳转到指定楼层
1#
ws-lk 发表于 2010-6-12 16:50:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在source里面设了三种产品,mergesort的output有两个端口,我想端口1输送一种产品,端口2输送两种产品,代码如下:
5 f+ a" |; _" {7 }0 @{
* E( |/ D% e( e) c5 M: }7 Rcase 1: return getitemtype(item) == 1; break;
2 v3 {1 p4 V, W9 S1 ucase 2: return getitemtype(item) == 2||3;break;3 \# s: R3 a8 z: O. a
}" ^/ W3 Y0 l5 _' P. R8 ]
结果成功了。但是,1 u2 j* x/ X- {
如果我将端口1设为输送两种产品,端口2设为输送一种产品,代码:) n# i9 u" D, ^4 e! V8 |
switch(port)/ Z* w7 h% c  k1 U: C! h
{
8 L1 s) i/ k8 K1 Ocase 1: return getitemtype(item) == 1||2; break;
  [( @6 Z6 O4 r& E0 b6 e) G1 W+ P  Hcase 2: return getitemtype(item) == 3;break;/ @. [4 F" V% |$ t! y
}+ a( I" R7 \: l5 L% k" I0 T6 C
产生的结果为:端口1上出现3种产品,端口2没有产品。这是怎么回事呢?
: j$ T0 p! n1 z7 I( N. u! i2 V( C有谁有关于Megesort的详细介绍吗?
2#
wj109260758 发表于 2010-6-14 01:17:42 | 只看该作者
很奇怪,我也发现了
3#
wj109260758 发表于 2010-6-14 01:31:00 | 只看该作者
convery 却可以
4#
wj109260758 发表于 2010-6-14 04:42:12 | 只看该作者
写成case 1: return getitemtype(item) == 1||getitemtype(item)==  2;
$ K* y* e, q7 X! Z8 M2 |7 h( Lcase 2: return getitemtype(item) == 3;
7 e6 U# ~- s8 K0 ^' w5 B, K3 y4 c1 [" J$ K
就可以实现
5#
wj109260758 发表于 2010-6-14 05:15:56 | 只看该作者
case 2: return getitemtype(item) == 2||3;
& g5 X1 N; G  @6 V  u等于 case 2: return 2||3;
3 H8 y) ^! ~8 _* y等于: return 1;4 o: U, I1 ?6 F" T
你的第一个程序相当于:/ u8 o% O! N6 w4 ], r/ w; d
case 1: return getitemtype(item) == 1; ) l8 a: ]+ j) S1 T7 _" _
case 2: return 1;在Megesort中最后一个出口,可用来将在所有其他临时实体从最后一个输出端口发送出去。所以,可以实现功能!
1 a' S, r2 @# `: m, u: a3 g( T! x7 r; `0 x' W' g# ~0 Q1 F9 l
所以第二个你的程序可以解读为:
& l' y/ [; V) Wswitch(port)/ n6 N! c% m/ ]2 g) ~# Y
{
; P6 j: H5 e3 U& G$ @1 a% Dcase 1: return 1;(相当于所有实体可以从出口1流出)- @) E. S& x: }- f6 f+ K0 z8 o
case 2: return getitemtype(item) == 3;(ITEM3从出口也可流出)
4 [! G4 |3 O2 H; L1 s}9 ~% v. K9 t1 t
由于第一个出口优先于出口2,所以ITEM3 一直从出口1流出。
1 P7 z  X# Q9 D' T; w; V1 \/ ?- g* X/ D1 e4 r# Y% G- K
如有错误,请指教。
6#
domcylai 发表于 2012-2-6 16:14:14 | 只看该作者
case 2: return getitemtype(item) == 2||3;+ K6 |2 \1 U1 r( t
等于 case 2: return 2||3;
  ~6 i% p$ G+ u! X( f4 ?2 |等于: return 1;8 X1 B- M# w6 O+ x  z. s! f
你的第一个程序相当于:5 P) T( G$ {7 M: m& m- V
case 1: return getitemtype(item) == 1; ) L4 C' K! N2 j. u* e/ n
case 2: return 1;在Megesort中最后一个出口,可 ...5 s9 L; e0 v" E- ~
wj109260758 发表于 2010-6-14 05:15

) W* Q3 j8 s0 g- p+ R: k+ E& |
' C: @! r4 a9 S6 U2 ~  m2 D6 E理解有些问题啊,这个触发是一个判断,当每个item到达一个port(端口)时触发一次,然后判断触发:如果为真则发送,如果为假则不发送。; y# s4 \( I' i6 P# j( W4 g. `2 e5 `5 b
return getitemtype(item) == 2||3   相当于判断两次,只要一次为真则整体为真,判断的条件是:getitemtype(item) == 2 和 3 ,  3总为真# X% v  |6 O. \- ]

) {- }; d, Q4 Z5 \# R3 [' ]6 x这种写法是不正确的,而return getitemtype(item) == 2||getitemtype(item) == 3  则判断两次,所以要注意这种细节。
7#
vivion 发表于 2012-3-30 11:19:05 | 只看该作者
感觉还是没有看懂到底为什么会出现这种情况?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-10-18 01:21 , Processed in 0.074376 second(s), 13 queries .

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

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