全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
ws-lk 发表于 2010-6-12 16:50:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在source里面设了三种产品,mergesort的output有两个端口,我想端口1输送一种产品,端口2输送两种产品,代码如下:
% u/ x/ j0 Y- M3 H5 ~1 ~{9 E2 [4 B2 @; u+ y
case 1: return getitemtype(item) == 1; break;" F1 w( Y  V4 q: Z8 D1 ~( Y
case 2: return getitemtype(item) == 2||3;break;) j' C9 j: O) R# @
}4 w& D) Y2 C! f$ o8 }  j/ B
结果成功了。但是,
, z6 M2 A0 s0 g+ ]3 y如果我将端口1设为输送两种产品,端口2设为输送一种产品,代码:
9 U5 Y9 o% w) k: pswitch(port)
( t. ]$ L7 F' ^( I  P% T/ }3 E{
* E6 l1 |% D* n# P0 ccase 1: return getitemtype(item) == 1||2; break;
) S4 m8 b3 I% U0 O  k: w4 ocase 2: return getitemtype(item) == 3;break;
1 K! x1 n1 T+ G7 y}/ `& I% `: }; C5 Q* ?9 B# h1 O
产生的结果为:端口1上出现3种产品,端口2没有产品。这是怎么回事呢?
; D6 V, y. \1 V, u, {5 U+ M+ m有谁有关于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;! \, f; ]& k+ v
case 2: return getitemtype(item) == 3;
  f- V$ \" {( ]$ _: B% @. k% W
) i* h5 U3 B- j. k) N就可以实现
5#
wj109260758 发表于 2010-6-14 05:15:56 | 只看该作者
case 2: return getitemtype(item) == 2||3;8 k! I) H/ S8 f/ h
等于 case 2: return 2||3;! B  ]7 X! _) g. A' |! {1 ^
等于: return 1;$ h! u( p9 |  n) X: Y
你的第一个程序相当于:
' K  X, b6 I" p; rcase 1: return getitemtype(item) == 1; 9 i5 O$ b8 t; w. o+ g& s
case 2: return 1;在Megesort中最后一个出口,可用来将在所有其他临时实体从最后一个输出端口发送出去。所以,可以实现功能!
1 Q& |. j: }7 t3 _  ?- A2 ~) ~0 H9 y3 o  b; U: k$ _
所以第二个你的程序可以解读为:! v) m! `$ b2 X1 r2 m
switch(port)# j- k; I, X  g) S$ A5 b: @
{8 u6 @2 F; P# r8 @5 v2 E8 V( S0 W
case 1: return 1;(相当于所有实体可以从出口1流出)  g; i/ i3 p; x' a
case 2: return getitemtype(item) == 3;(ITEM3从出口也可流出)) }! n% k/ f, s/ p5 Y2 V' h
}
+ x/ ?3 ]- r3 p- ?/ A, F% e由于第一个出口优先于出口2,所以ITEM3 一直从出口1流出。
- T" F5 H% Z, X3 b# q! {( M! o4 n+ D3 @1 i' p
如有错误,请指教。
6#
domcylai 发表于 2012-2-6 16:14:14 | 只看该作者
case 2: return getitemtype(item) == 2||3;
9 R- g+ f# M+ H3 Y# H3 b5 c0 ]" C等于 case 2: return 2||3;
& h7 p3 W5 k- B( _2 }等于: return 1;4 a. i' r( e% \. m$ u4 b. I
你的第一个程序相当于:, s3 n% M) W) x& p7 O; w9 _
case 1: return getitemtype(item) == 1; 1 P, m* g  A3 r" T7 `1 W
case 2: return 1;在Megesort中最后一个出口,可 ...
! [2 H9 ]" J# dwj109260758 发表于 2010-6-14 05:15

9 ]6 o- N$ K( E: P: _3 c4 e# I3 ~7 x
: q1 P& C) P4 {) I% h" U# l理解有些问题啊,这个触发是一个判断,当每个item到达一个port(端口)时触发一次,然后判断触发:如果为真则发送,如果为假则不发送。- c# Q. W2 G: S- V2 c! t1 d
return getitemtype(item) == 2||3   相当于判断两次,只要一次为真则整体为真,判断的条件是:getitemtype(item) == 2 和 3 ,  3总为真9 S7 d" B  _! m: r7 i6 ~; Z5 Q

  _  h+ z- x" y* a* p这种写法是不正确的,而return getitemtype(item) == 2||getitemtype(item) == 3  则判断两次,所以要注意这种细节。
7#
vivion 发表于 2012-3-30 11:19:05 | 只看该作者
感觉还是没有看懂到底为什么会出现这种情况?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-5-8 20:44 , Processed in 0.061516 second(s), 13 queries .

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

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