全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
ws-lk 发表于 2010-6-12 16:50:07 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
在source里面设了三种产品,mergesort的output有两个端口,我想端口1输送一种产品,端口2输送两种产品,代码如下:2 r8 ~4 p6 d( r% @
{
4 y2 b2 X$ H  v$ ]( ~% ocase 1: return getitemtype(item) == 1; break;4 O! c% F$ O% W; x
case 2: return getitemtype(item) == 2||3;break;1 x3 V& ]4 o) i5 w: Y
}
# D+ F; g" e! h$ V0 Z! }结果成功了。但是,6 p9 y( ^5 t& Q( |; ?2 o1 y- O
如果我将端口1设为输送两种产品,端口2设为输送一种产品,代码:3 R! ^. u- x" \  F
switch(port)
/ @6 I9 n" x  t6 E8 S& q{" @8 x( f, ]/ T5 w
case 1: return getitemtype(item) == 1||2; break;
1 `- s% c/ x: j3 m  D, S  Icase 2: return getitemtype(item) == 3;break;% y4 L* b5 n7 C! M* A
}
/ j  a" G( Q! i8 h9 [6 F- l* q产生的结果为:端口1上出现3种产品,端口2没有产品。这是怎么回事呢?
' A0 l% ^$ b  l; f有谁有关于Megesort的详细介绍吗?
7#
vivion 发表于 2012-3-30 11:19:05 | 只看该作者
感觉还是没有看懂到底为什么会出现这种情况?
6#
domcylai 发表于 2012-2-6 16:14:14 | 只看该作者
case 2: return getitemtype(item) == 2||3;
5 j+ u' H1 i/ z5 [0 E, U% j等于 case 2: return 2||3;
( ^2 z4 P" `1 `等于: return 1;1 D+ k' z8 _* r  J; h2 p
你的第一个程序相当于:
: Z0 ?& ?4 ?* s; b+ p0 kcase 1: return getitemtype(item) == 1; ( ?7 A% Z- n3 F
case 2: return 1;在Megesort中最后一个出口,可 ...% W4 e: i5 M7 Q
wj109260758 发表于 2010-6-14 05:15

6 r* X. Y8 }( y" I& p' ^
2 t5 Y+ j% v; @, f/ l7 R' X! Q( N理解有些问题啊,这个触发是一个判断,当每个item到达一个port(端口)时触发一次,然后判断触发:如果为真则发送,如果为假则不发送。
# B. ^. H% k! r( o( @1 x* X" areturn getitemtype(item) == 2||3   相当于判断两次,只要一次为真则整体为真,判断的条件是:getitemtype(item) == 2 和 3 ,  3总为真2 E: J  U, `/ M7 C- l; b

( B1 I% l; U4 O& V' `6 _这种写法是不正确的,而return getitemtype(item) == 2||getitemtype(item) == 3  则判断两次,所以要注意这种细节。
5#
wj109260758 发表于 2010-6-14 05:15:56 | 只看该作者
case 2: return getitemtype(item) == 2||3;3 N5 P. _) |$ y: M1 `6 }7 H
等于 case 2: return 2||3;+ G4 [/ O- K4 Y6 ]+ x' u* ~  I; t3 R
等于: return 1;
* H( Y% a9 R& X- t, A- T, w! O" y你的第一个程序相当于:! a0 k( x- R# G* t. ^, q
case 1: return getitemtype(item) == 1; 1 U# {7 q7 f) h
case 2: return 1;在Megesort中最后一个出口,可用来将在所有其他临时实体从最后一个输出端口发送出去。所以,可以实现功能!$ y9 V+ ~+ J6 ]1 V" {; B% h
  p0 p$ t* v# B4 P
所以第二个你的程序可以解读为:
8 O6 h" @5 j' E' Lswitch(port)
5 ?& X0 k/ O, r* b" g7 F{
$ _; M7 r1 D4 y2 \case 1: return 1;(相当于所有实体可以从出口1流出)$ z3 M* o$ h/ {, M6 R% I
case 2: return getitemtype(item) == 3;(ITEM3从出口也可流出)# M# t& f# G0 _' u4 v! i5 Q
}- ]* K5 y9 D- S
由于第一个出口优先于出口2,所以ITEM3 一直从出口1流出。
9 f& I9 @: e: `4 m  D  a' w: R
' t# n! x& N: \) x% j1 J如有错误,请指教。
4#
wj109260758 发表于 2010-6-14 04:42:12 | 只看该作者
写成case 1: return getitemtype(item) == 1||getitemtype(item)==  2;$ J8 T- {% A: V4 A4 V
case 2: return getitemtype(item) == 3;
  ^) W0 P2 J# w4 V! F
- _; s, M0 g- ^就可以实现
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-9-1 16:37 , Processed in 0.073230 second(s), 14 queries .

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

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