全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
ws-lk 发表于 2010-6-12 16:50:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在source里面设了三种产品,mergesort的output有两个端口,我想端口1输送一种产品,端口2输送两种产品,代码如下:
5 k; T$ m( ^$ X5 e{# ~; f8 H2 E6 V  g, C" K
case 1: return getitemtype(item) == 1; break;8 a+ |0 ^' K! B" x! D: l" }/ h
case 2: return getitemtype(item) == 2||3;break;' w) D9 L0 b, l, X" p
}7 {+ G. R6 B0 Z; U, s) ]+ y% ^
结果成功了。但是,$ r' L' J& ~0 ^% z' Q& e
如果我将端口1设为输送两种产品,端口2设为输送一种产品,代码:9 Z# @* ]2 c  J1 d
switch(port). V* Y# O, Z: r1 \6 ^) S
{; r: c  p! T6 Q2 e8 J7 h
case 1: return getitemtype(item) == 1||2; break;% q2 s- d/ _2 Q/ j
case 2: return getitemtype(item) == 3;break;. P5 D2 J4 d. k& X: |5 x
}1 Z; A' h2 T4 w1 K) `2 A
产生的结果为:端口1上出现3种产品,端口2没有产品。这是怎么回事呢?
! A8 r1 w% b  Z# F+ S5 J1 J有谁有关于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 W8 c. n$ B- t) Icase 2: return getitemtype(item) == 3;8 E8 `5 `( z# _4 k" p

2 e  y9 S& K* a7 n. l+ ?# x就可以实现
5#
wj109260758 发表于 2010-6-14 05:15:56 | 只看该作者
case 2: return getitemtype(item) == 2||3;! V2 Y$ \& a/ H1 w8 M
等于 case 2: return 2||3;0 }, g* K$ a- |
等于: return 1;
$ K/ \( i7 |& s9 S# s你的第一个程序相当于:/ V# d2 W( L" ~$ h4 {. l
case 1: return getitemtype(item) == 1; 7 _) S5 P2 H# h6 `) w9 P
case 2: return 1;在Megesort中最后一个出口,可用来将在所有其他临时实体从最后一个输出端口发送出去。所以,可以实现功能!; L9 m5 O- ^6 M# w8 d
: R* z, J# x( Q2 a, s0 e
所以第二个你的程序可以解读为:
& z5 G+ [& h6 n7 L* iswitch(port)/ A7 M. N. e4 K0 s
{
; l8 S% m" A$ S$ b% Rcase 1: return 1;(相当于所有实体可以从出口1流出); c% s5 C# J. `
case 2: return getitemtype(item) == 3;(ITEM3从出口也可流出)
( a- O) h: Q6 |: F/ f: W4 }}
3 h+ I% N- M" X% N; i由于第一个出口优先于出口2,所以ITEM3 一直从出口1流出。) I5 r. i4 @1 |, T$ c% n1 Y6 h* o

6 {: F; p1 n2 T4 y2 t' Q8 P4 M  `5 s如有错误,请指教。
6#
domcylai 发表于 2012-2-6 16:14:14 | 只看该作者
case 2: return getitemtype(item) == 2||3;% F. B% W, t# H& |% f# z  ]5 L
等于 case 2: return 2||3;. ]1 u* L1 O: V" y( V1 L8 P) ^
等于: return 1;% Z0 W1 e. p$ X* y6 r9 \- ~
你的第一个程序相当于:
& B9 p+ c1 V, i4 ^7 _+ T6 Jcase 1: return getitemtype(item) == 1;
% R) C9 M& t5 Z* Wcase 2: return 1;在Megesort中最后一个出口,可 ...2 U( S; ^' x! u) W. w+ A3 d
wj109260758 发表于 2010-6-14 05:15

0 R$ C8 {" l" [9 N  B! o& ^
6 J+ ^' q! s' Q# y9 r$ {7 `理解有些问题啊,这个触发是一个判断,当每个item到达一个port(端口)时触发一次,然后判断触发:如果为真则发送,如果为假则不发送。
% l3 |* `' R: z+ \return getitemtype(item) == 2||3   相当于判断两次,只要一次为真则整体为真,判断的条件是:getitemtype(item) == 2 和 3 ,  3总为真
$ n$ @9 h7 S0 n
) P5 W7 t; M8 f- R8 k% M! L这种写法是不正确的,而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 22:21 , Processed in 0.061751 second(s), 13 queries .

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

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