全球FlexSim系统仿真中文论坛

标题: Mergesort上产品类型与端口数目不相等的问题 [打印本页]

作者: ws-lk    时间: 2010-6-12 16:50
标题: Mergesort上产品类型与端口数目不相等的问题
在source里面设了三种产品,mergesort的output有两个端口,我想端口1输送一种产品,端口2输送两种产品,代码如下:
! [2 p$ x* V% ~{0 r* h/ C4 M( u
case 1: return getitemtype(item) == 1; break;; S4 J2 ^1 `" L* |6 `
case 2: return getitemtype(item) == 2||3;break;: R' L' Z- W" j" [1 ?4 u/ s
}
5 a1 N4 T% B% r; ^+ y结果成功了。但是,
5 t: \$ j) r% C; J/ g6 y如果我将端口1设为输送两种产品,端口2设为输送一种产品,代码:
" \) T6 M5 \/ ?0 G; H: l# zswitch(port)
2 f! ~7 a& B/ [" y8 B6 ~{
5 o4 u% G; c& F( G0 zcase 1: return getitemtype(item) == 1||2; break;5 \+ [; R: {' Y- b- P8 ^1 C' [
case 2: return getitemtype(item) == 3;break;
' _5 E7 r2 ]" N}
5 \3 S) |& y- L' h( ?产生的结果为:端口1上出现3种产品,端口2没有产品。这是怎么回事呢?
9 S  g3 ?. F; S  X有谁有关于Megesort的详细介绍吗?
作者: wj109260758    时间: 2010-6-14 01:17
很奇怪,我也发现了
作者: wj109260758    时间: 2010-6-14 01:31
convery 却可以
作者: wj109260758    时间: 2010-6-14 04:42
写成case 1: return getitemtype(item) == 1||getitemtype(item)==  2;
" k9 G& B2 k) ]: c6 L7 P$ K, ?: Acase 2: return getitemtype(item) == 3;% Y* ^! d6 _' z& u
7 P% Z1 J/ G. A  D; _! q/ }+ ?/ Q
就可以实现
作者: wj109260758    时间: 2010-6-14 05:15
case 2: return getitemtype(item) == 2||3;* E- {; z' g2 G0 [
等于 case 2: return 2||3;) s$ r2 b/ e' L9 O8 c8 G6 G# H" |
等于: return 1;
4 J+ q6 w& B. r( N+ I4 T9 f你的第一个程序相当于:: t# L/ M* M' }: ?9 R4 I; r
case 1: return getitemtype(item) == 1; ) Y+ n4 f- p; h! o/ X
case 2: return 1;在Megesort中最后一个出口,可用来将在所有其他临时实体从最后一个输出端口发送出去。所以,可以实现功能!& u: C, m+ r4 O

. P; s$ w8 |1 M5 _1 Y2 b所以第二个你的程序可以解读为:  o8 H" v5 U  C' m" f  ?
switch(port)! u6 J$ Z: P3 Z4 {2 _* L
{
# Y/ _$ [& C1 u* o. W# O; gcase 1: return 1;(相当于所有实体可以从出口1流出)* `3 G& y3 B& b$ }/ u7 s4 |, {
case 2: return getitemtype(item) == 3;(ITEM3从出口也可流出)* K) E" f$ I5 Y- C* g; D: H
}9 x. r/ x" d# w7 |6 @
由于第一个出口优先于出口2,所以ITEM3 一直从出口1流出。0 Z$ Y% b2 A9 x6 x# i! P
0 u1 I! ]* M7 _. T" }; W% B% c
如有错误,请指教。
作者: domcylai    时间: 2012-2-6 16:14
case 2: return getitemtype(item) == 2||3;
* T) f0 s( Y# x. L) d6 A. `等于 case 2: return 2||3;
' c# s& _( f/ A/ f; x% b等于: return 1;
6 E8 H3 O( F' Y& M' F9 s3 M你的第一个程序相当于:$ U7 D  f( R' P' R8 o* m
case 1: return getitemtype(item) == 1; 2 U/ \6 Z7 r& M2 y8 Y
case 2: return 1;在Megesort中最后一个出口,可 ...
9 w2 T8 f1 e7 L7 Swj109260758 发表于 2010-6-14 05:15
% t- h/ v" k. y8 I: I
) x9 N% w3 W7 ~6 p6 O2 X0 A) h# l5 ~
理解有些问题啊,这个触发是一个判断,当每个item到达一个port(端口)时触发一次,然后判断触发:如果为真则发送,如果为假则不发送。
) K/ c  A4 @) x4 kreturn getitemtype(item) == 2||3   相当于判断两次,只要一次为真则整体为真,判断的条件是:getitemtype(item) == 2 和 3 ,  3总为真
. k8 e* S+ {" x% w: ?% J9 f1 P+ V& p* K% M
这种写法是不正确的,而return getitemtype(item) == 2||getitemtype(item) == 3  则判断两次,所以要注意这种细节。
作者: vivion    时间: 2012-3-30 11:19
感觉还是没有看懂到底为什么会出现这种情况?




欢迎光临 全球FlexSim系统仿真中文论坛 (http://www.flexsimasia.com/) Powered by Discuz! X3.3