全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
ws-lk 发表于 2010-6-12 16:50:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在source里面设了三种产品,mergesort的output有两个端口,我想端口1输送一种产品,端口2输送两种产品,代码如下:
& y6 l  w! H' [: R{3 O4 r/ ^0 H9 k  \5 i; t3 b
case 1: return getitemtype(item) == 1; break;
/ ^4 ~2 L3 I) N+ [' Ycase 2: return getitemtype(item) == 2||3;break;0 e3 p8 Q- a. f& t1 x4 B- y0 h4 _
}* i1 j: L4 A( r1 ^" e; Y0 y
结果成功了。但是,
0 R6 @' u6 ~- X) k如果我将端口1设为输送两种产品,端口2设为输送一种产品,代码:
( j4 C& X$ L5 `5 Kswitch(port)+ u8 z' `; `% a$ k
{
- x  @# j4 k; q6 K) d+ kcase 1: return getitemtype(item) == 1||2; break;
5 W. I1 h* i3 d/ tcase 2: return getitemtype(item) == 3;break;9 M/ f! N2 N* }; h3 U
}! e/ P- D, \/ t+ h
产生的结果为:端口1上出现3种产品,端口2没有产品。这是怎么回事呢?( ]. D- E% I; b- K  h1 O+ ?1 B
有谁有关于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;
6 K1 V' S! I2 J$ lcase 2: return getitemtype(item) == 3;
7 _! [8 L! C1 n' S1 f/ [* [. D" ~) ~- h: w: X/ R5 e
就可以实现
5#
wj109260758 发表于 2010-6-14 05:15:56 | 只看该作者
case 2: return getitemtype(item) == 2||3;" O$ J5 G, A2 e* o: O  x
等于 case 2: return 2||3;
" _8 q5 i. q: A$ G% T. o5 |0 J等于: return 1;
( ~8 @! [6 N' Y9 A7 m7 `& H; Q& |! C你的第一个程序相当于:
2 _7 g" S! X( v, h' A  j) _case 1: return getitemtype(item) == 1; 6 A& J, l# ]$ B/ ?
case 2: return 1;在Megesort中最后一个出口,可用来将在所有其他临时实体从最后一个输出端口发送出去。所以,可以实现功能!; L/ b; b- K% d' z
4 A' a4 p9 K! I$ p% j# M
所以第二个你的程序可以解读为:$ E- B: F6 H; Q! G1 V' x. f( P
switch(port)
. K7 m( c' I- E- \2 D' C{
5 M2 U( I# m0 \2 Pcase 1: return 1;(相当于所有实体可以从出口1流出)
) s6 X$ a( o& f. h* Y6 }- q$ tcase 2: return getitemtype(item) == 3;(ITEM3从出口也可流出)" T2 D4 j0 k9 G. W6 a
}
) h9 W- U0 u0 y! Q由于第一个出口优先于出口2,所以ITEM3 一直从出口1流出。
8 E8 h& X0 p3 @5 \* _$ Y2 D8 G! u  W2 A7 V& m% U4 \7 r
如有错误,请指教。
6#
domcylai 发表于 2012-2-6 16:14:14 | 只看该作者
case 2: return getitemtype(item) == 2||3;9 T5 S: y% v. W( u7 f( m$ p
等于 case 2: return 2||3;
# I- ~+ m8 T5 m等于: return 1;
, h/ h0 V6 O7 F/ c& z0 |' x你的第一个程序相当于:$ e9 j. a* F( G+ K9 C* `
case 1: return getitemtype(item) == 1; ( v+ D0 Q  f2 L
case 2: return 1;在Megesort中最后一个出口,可 ...* I9 D- z0 K+ A
wj109260758 发表于 2010-6-14 05:15

8 ^8 f" O$ j3 x, B3 v6 |+ K9 C, b" s9 E
理解有些问题啊,这个触发是一个判断,当每个item到达一个port(端口)时触发一次,然后判断触发:如果为真则发送,如果为假则不发送。; d' |! E$ Q( e8 Y1 |) v
return getitemtype(item) == 2||3   相当于判断两次,只要一次为真则整体为真,判断的条件是:getitemtype(item) == 2 和 3 ,  3总为真9 }% u+ Z' o7 w' l* f+ Z6 ]

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

本版积分规则

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

GMT+8, 2025-7-12 10:28 , Processed in 0.085919 second(s), 14 queries .

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

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