全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
ws-lk 发表于 2010-6-12 16:50:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在source里面设了三种产品,mergesort的output有两个端口,我想端口1输送一种产品,端口2输送两种产品,代码如下:* \) z! G2 ?4 q
{
& k* ^! l+ O. b$ \! P7 F: Vcase 1: return getitemtype(item) == 1; break;, l/ J" r" K; ~$ i  z9 p  J; D
case 2: return getitemtype(item) == 2||3;break;
0 h  Q. W) V3 ?$ N" d}4 r% {0 I2 K4 V$ h( F" y. Q8 i1 H
结果成功了。但是,
! j% B9 e( E1 j1 |( ^! O5 Y( G如果我将端口1设为输送两种产品,端口2设为输送一种产品,代码:5 I3 @2 s; @1 O% _# d
switch(port)
; }- x7 l9 G# |& Z{/ i- B6 J0 B& R0 r
case 1: return getitemtype(item) == 1||2; break;& K* m1 h! h& s2 T' c
case 2: return getitemtype(item) == 3;break;; B. W4 T% F8 o* b( l# p7 m' J6 x# @
}/ W! m9 m" p! U4 i  m5 p  K% }
产生的结果为:端口1上出现3种产品,端口2没有产品。这是怎么回事呢?4 e( P- t" A5 J( p' q4 U0 V9 i
有谁有关于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;& b" ^, c: L5 p
case 2: return getitemtype(item) == 3;
. c" |" `' v3 C+ p' E8 \( B, R
. Y; `4 U2 q2 o/ z0 A) `就可以实现
5#
wj109260758 发表于 2010-6-14 05:15:56 | 只看该作者
case 2: return getitemtype(item) == 2||3;  M* W+ O3 }& k& U* V4 j$ f
等于 case 2: return 2||3;
  r( ~/ ^+ `; y: y/ U" j9 C) D等于: return 1;3 n6 U4 E! @% R6 g! L/ E
你的第一个程序相当于:' L$ u7 s1 g" }* }9 V' x: W5 C' t
case 1: return getitemtype(item) == 1; : l5 i6 I& r% `5 D# e
case 2: return 1;在Megesort中最后一个出口,可用来将在所有其他临时实体从最后一个输出端口发送出去。所以,可以实现功能!
3 Z) c% E  Q, k6 _  o) b3 r, j, K+ v$ S
所以第二个你的程序可以解读为:3 N% n/ W1 t& z6 f2 K
switch(port)
' ], ?/ y# i: C- e' K: I4 ~{
7 r: k1 l# |: I7 f; T; X# Pcase 1: return 1;(相当于所有实体可以从出口1流出)
: H0 x9 k* t2 ^+ w* Ocase 2: return getitemtype(item) == 3;(ITEM3从出口也可流出). A3 B6 V2 j$ e( c
}. e( y2 a- U7 \
由于第一个出口优先于出口2,所以ITEM3 一直从出口1流出。
; G; i4 _3 Y9 V5 q% O/ U) J( l. R( l
如有错误,请指教。
6#
domcylai 发表于 2012-2-6 16:14:14 | 只看该作者
case 2: return getitemtype(item) == 2||3;- B2 o3 S. k6 _# V1 d
等于 case 2: return 2||3;
4 q. `3 [) v8 e2 m等于: return 1;
4 k$ Y' @  G' f% ~你的第一个程序相当于:- e+ h9 G, G7 @/ a8 k; X' M' ~
case 1: return getitemtype(item) == 1;
! w6 i9 {' Y' p& tcase 2: return 1;在Megesort中最后一个出口,可 ...
* ?* u* H6 ~  ?7 ~: J  Rwj109260758 发表于 2010-6-14 05:15

- @, {6 u  U5 L5 e8 a6 x# Q# N- _1 T, `; q& I) d$ E" W
理解有些问题啊,这个触发是一个判断,当每个item到达一个port(端口)时触发一次,然后判断触发:如果为真则发送,如果为假则不发送。
  F; ]  x+ [* R7 yreturn getitemtype(item) == 2||3   相当于判断两次,只要一次为真则整体为真,判断的条件是:getitemtype(item) == 2 和 3 ,  3总为真
# G8 ?! C. K! |2 f# @7 H0 E: T1 |; o; \2 l1 a" r, o$ u' E
这种写法是不正确的,而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 19:07 , Processed in 0.064703 second(s), 13 queries .

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

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