全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
ws-lk 发表于 2010-6-12 16:50:07 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
在source里面设了三种产品,mergesort的output有两个端口,我想端口1输送一种产品,端口2输送两种产品,代码如下:
; K. a6 ^/ g! J, C{
* C, X) U# R4 i* A2 zcase 1: return getitemtype(item) == 1; break;% i. W8 U: }* ~
case 2: return getitemtype(item) == 2||3;break;4 |: _% y  {6 m% t0 A! I( t: N+ Q' ~
}# {  X/ B0 V! G* u
结果成功了。但是,
+ c: ~3 h; n8 n  y+ J( k如果我将端口1设为输送两种产品,端口2设为输送一种产品,代码:
' D0 y( h$ U' H9 Jswitch(port)
1 L" Q& {* k7 d9 h8 c# g# [8 N! r{
6 h$ H7 Q& B2 c: {8 tcase 1: return getitemtype(item) == 1||2; break;7 R7 l' }/ Z) A+ d( y3 s
case 2: return getitemtype(item) == 3;break;
) M$ R) O$ r' o) B& [  J7 w}
* T; ?+ t; O) r' }' I9 h- y% n产生的结果为:端口1上出现3种产品,端口2没有产品。这是怎么回事呢?) Y; W" j5 I1 A" H$ F+ B5 |
有谁有关于Megesort的详细介绍吗?
7#
vivion 发表于 2012-3-30 11:19:05 | 只看该作者
感觉还是没有看懂到底为什么会出现这种情况?
6#
domcylai 发表于 2012-2-6 16:14:14 | 只看该作者
case 2: return getitemtype(item) == 2||3;
  f# P2 n/ b1 v& w9 n) I2 w* j等于 case 2: return 2||3;
, r* H' t8 i5 J  B$ C/ a等于: return 1;
+ n6 Y2 O8 F8 K) h你的第一个程序相当于:
" m) Y' H" c1 |# Q3 Zcase 1: return getitemtype(item) == 1;   b* c+ q3 [% z6 t& W
case 2: return 1;在Megesort中最后一个出口,可 ...
0 j# w% d. N; K, x: f- iwj109260758 发表于 2010-6-14 05:15
: A: S- `" V# V: }; d

+ Q. B: t* y6 X3 v0 f理解有些问题啊,这个触发是一个判断,当每个item到达一个port(端口)时触发一次,然后判断触发:如果为真则发送,如果为假则不发送。& E. ^4 Q) C9 E" `& h6 W0 Q7 y7 y
return getitemtype(item) == 2||3   相当于判断两次,只要一次为真则整体为真,判断的条件是:getitemtype(item) == 2 和 3 ,  3总为真* _/ E' P* @- ~' ?; ^
3 x6 Z3 l( ~3 Y3 j% _' D: j3 j
这种写法是不正确的,而return getitemtype(item) == 2||getitemtype(item) == 3  则判断两次,所以要注意这种细节。
5#
wj109260758 发表于 2010-6-14 05:15:56 | 只看该作者
case 2: return getitemtype(item) == 2||3;+ ?( m* }/ Z5 [0 |2 T# f
等于 case 2: return 2||3;7 D, B/ r2 v. t' z! A9 D
等于: return 1;
( B( n2 t) f- |6 L你的第一个程序相当于:( |) }! f. e3 Z# L+ Z4 W+ v9 S5 u
case 1: return getitemtype(item) == 1;   q/ K- o; j8 d# O2 B1 }% ]
case 2: return 1;在Megesort中最后一个出口,可用来将在所有其他临时实体从最后一个输出端口发送出去。所以,可以实现功能!" X+ I# `$ b1 V2 O( b' i
0 d) V+ c' ~! o- Y
所以第二个你的程序可以解读为:) U5 D3 {* O* C
switch(port)
' G0 Y7 E6 y/ C" H/ p) H( e{
/ `' K) t( _- G; e& Icase 1: return 1;(相当于所有实体可以从出口1流出)
6 d! I4 I  d" o. M. Y6 X0 Scase 2: return getitemtype(item) == 3;(ITEM3从出口也可流出)
9 t& W) r% [/ \* `  C}9 m6 e3 F2 z$ W. g6 r: X1 S/ h
由于第一个出口优先于出口2,所以ITEM3 一直从出口1流出。
9 A2 o! t: y/ \2 b  w1 e* O& x) s: w# C+ N
如有错误,请指教。
4#
wj109260758 发表于 2010-6-14 04:42:12 | 只看该作者
写成case 1: return getitemtype(item) == 1||getitemtype(item)==  2;' [. m6 w7 u9 Q/ ~% f+ d
case 2: return getitemtype(item) == 3;
2 R' S5 |% q- |+ [! f/ D  R6 ^3 g9 _& V
就可以实现
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-6-29 20:18 , Processed in 0.083302 second(s), 14 queries .

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

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