全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
ws-lk 发表于 2010-6-12 16:50:07 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
在source里面设了三种产品,mergesort的output有两个端口,我想端口1输送一种产品,端口2输送两种产品,代码如下:) G* Q. l2 i, q8 L; f$ F
{$ v6 \7 `  ~/ P7 y& [( N5 ~& f; r
case 1: return getitemtype(item) == 1; break;' g  o" j2 L. w  _
case 2: return getitemtype(item) == 2||3;break;4 F8 I/ l; w# \# N
}7 o7 Q6 O, i" j) T8 k% F( F. g
结果成功了。但是,
. m( V1 b3 m8 k( @9 a9 O/ X3 j  C如果我将端口1设为输送两种产品,端口2设为输送一种产品,代码:
. R" b- d6 }; E/ ]5 Zswitch(port)
9 ^8 L$ G9 B/ K3 [: x) Y1 @{9 m% {8 `- u# ~& b
case 1: return getitemtype(item) == 1||2; break;) \6 z) h2 s; Z, p
case 2: return getitemtype(item) == 3;break;
, u. m0 c! S  b/ C. ]; _}
9 G( H5 a0 n  d+ P产生的结果为:端口1上出现3种产品,端口2没有产品。这是怎么回事呢?8 H! l( N0 `! ]  b9 k. C& t7 Y. i/ u
有谁有关于Megesort的详细介绍吗?
7#
vivion 发表于 2012-3-30 11:19:05 | 只看该作者
感觉还是没有看懂到底为什么会出现这种情况?
6#
domcylai 发表于 2012-2-6 16:14:14 | 只看该作者
case 2: return getitemtype(item) == 2||3;6 f) P; L+ ~5 w7 h. O* O! y" A9 u4 `
等于 case 2: return 2||3;$ `/ i2 B& @; {+ I: f  H* S# w! a, @3 _
等于: return 1;0 _: |4 u, u& R7 c
你的第一个程序相当于:
  S: b, h9 j1 X  b. Kcase 1: return getitemtype(item) == 1;
- a0 s' Q* |9 H: E, m& B- y6 fcase 2: return 1;在Megesort中最后一个出口,可 ...3 e4 d: E) T. n9 C" U
wj109260758 发表于 2010-6-14 05:15
* g! S$ k" s8 W

7 E; I4 `# ^) x1 d3 J理解有些问题啊,这个触发是一个判断,当每个item到达一个port(端口)时触发一次,然后判断触发:如果为真则发送,如果为假则不发送。! x0 O9 X" y' R/ D
return getitemtype(item) == 2||3   相当于判断两次,只要一次为真则整体为真,判断的条件是:getitemtype(item) == 2 和 3 ,  3总为真# t- y" q( `# H6 o: z

1 l, I3 Y/ V+ K' r* d这种写法是不正确的,而return getitemtype(item) == 2||getitemtype(item) == 3  则判断两次,所以要注意这种细节。
5#
wj109260758 发表于 2010-6-14 05:15:56 | 只看该作者
case 2: return getitemtype(item) == 2||3;
) h. {& W# r, r9 F2 _等于 case 2: return 2||3;& V+ o. f3 x0 C8 A, J8 u# F7 s4 O
等于: return 1;
9 ~# k6 u( p9 Y2 J你的第一个程序相当于:; T& ?" u! T4 ~
case 1: return getitemtype(item) == 1;
. Q, \2 n' O  ?# U. \& d2 X0 bcase 2: return 1;在Megesort中最后一个出口,可用来将在所有其他临时实体从最后一个输出端口发送出去。所以,可以实现功能!. `) `( J( d2 L# {* z$ e

8 d5 ]' t* V7 a7 Z所以第二个你的程序可以解读为:
- v/ W) ^4 J% V9 mswitch(port)" [8 y0 o; E+ j+ N2 n+ r
{
% P* I2 z" B4 S4 }case 1: return 1;(相当于所有实体可以从出口1流出)
4 x" @4 P& s3 @6 R: }) D% bcase 2: return getitemtype(item) == 3;(ITEM3从出口也可流出)
" m, j4 ^! D2 l+ m- u! C. V% A}
. V- [+ S" R& S  }- h1 L由于第一个出口优先于出口2,所以ITEM3 一直从出口1流出。
5 D" Z; O: ~& {& U3 |# K2 r0 u0 Z$ s! a8 r# ~! [' {8 z1 d. D
如有错误,请指教。
4#
wj109260758 发表于 2010-6-14 04:42:12 | 只看该作者
写成case 1: return getitemtype(item) == 1||getitemtype(item)==  2;
. f7 z' W' o. v1 B3 q' R# Ecase 2: return getitemtype(item) == 3;2 @" {4 [/ \% r3 S
6 b- S! B7 d/ _4 F- A7 Q
就可以实现
3#
wj109260758 发表于 2010-6-14 01:31:00 | 只看该作者
convery 却可以
2#
wj109260758 发表于 2010-6-14 01:17:42 | 只看该作者
很奇怪,我也发现了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-5-8 19:25 , Processed in 0.084680 second(s), 14 queries .

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

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