全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
ws-lk 发表于 2010-6-12 16:50:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在source里面设了三种产品,mergesort的output有两个端口,我想端口1输送一种产品,端口2输送两种产品,代码如下:
; G4 z' ~; g7 c5 Q- D% o{! t: L) P$ h# K! {' K" J& r
case 1: return getitemtype(item) == 1; break;
6 x* {8 L1 ]# C+ l& }case 2: return getitemtype(item) == 2||3;break;
, i% @" |8 q, w- N}# @2 T2 E6 Y3 v' S7 I" M( b+ n
结果成功了。但是,0 Z( e( I$ J0 ?1 W( Z+ E
如果我将端口1设为输送两种产品,端口2设为输送一种产品,代码:% e" Q* a6 Y2 [8 S
switch(port)4 m' f9 e. t4 y' l, s! N
{
$ }7 }7 k- g! X+ F9 T# S# m+ d3 I. kcase 1: return getitemtype(item) == 1||2; break;+ X# ?2 y5 f. M. D0 A5 K7 v9 [
case 2: return getitemtype(item) == 3;break;; M' a1 t% x8 F1 b
}
! e) W- {3 I( l" Y0 J2 k3 m" A8 O3 @" L$ Q产生的结果为:端口1上出现3种产品,端口2没有产品。这是怎么回事呢?. i2 s$ v% s  y5 A( R! {% L7 ]
有谁有关于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;$ ]" [5 g' g( |  a5 j. r: j$ w7 ?
case 2: return getitemtype(item) == 3;
+ ?  e/ f# l$ i% a9 @/ l  }( p$ X: Z7 M: a, a. U6 D
就可以实现
5#
wj109260758 发表于 2010-6-14 05:15:56 | 只看该作者
case 2: return getitemtype(item) == 2||3;5 }* ~2 M' B, Q1 t* @2 L
等于 case 2: return 2||3;) z2 H0 _- s9 W6 f5 l! y6 r" {
等于: return 1;
# ]* ?; e! b* k( ^0 k! Q* |9 r+ t2 i你的第一个程序相当于:7 l1 u. R9 ~1 ]# P" T; n
case 1: return getitemtype(item) == 1; ' B/ z- {. O+ [
case 2: return 1;在Megesort中最后一个出口,可用来将在所有其他临时实体从最后一个输出端口发送出去。所以,可以实现功能!
1 L* ^& t. d  D  [( x7 J& X
% K/ D8 U  R& E1 M1 C所以第二个你的程序可以解读为:% }! x8 l4 [) s$ G$ X
switch(port)
) S  R+ Z2 h& O; [{' J* t3 I' j4 w9 a* I" V  M3 [. S
case 1: return 1;(相当于所有实体可以从出口1流出)
, I  a9 i2 r/ X+ r2 Bcase 2: return getitemtype(item) == 3;(ITEM3从出口也可流出)
$ X6 ]  u. }3 D2 v; j}
9 q" L7 t: c3 Z6 b1 H5 H' y由于第一个出口优先于出口2,所以ITEM3 一直从出口1流出。% A9 W$ J+ f2 z, f

( q  a8 [* w9 z1 `! [+ ], X如有错误,请指教。
6#
domcylai 发表于 2012-2-6 16:14:14 | 只看该作者
case 2: return getitemtype(item) == 2||3;
1 Z# m. u& {6 Y$ [& \- ?等于 case 2: return 2||3;  Q* r/ Y+ ?$ l/ X
等于: return 1;% p, w4 P0 g3 M4 Q/ W
你的第一个程序相当于:! u5 y0 n6 c3 o6 i, N7 J
case 1: return getitemtype(item) == 1;
, X4 k2 h) K0 ]% M$ D% \9 L+ icase 2: return 1;在Megesort中最后一个出口,可 ...8 t5 ], \" g, H! d- ]; \8 @
wj109260758 发表于 2010-6-14 05:15

* y4 X. n- R3 b% @8 B9 Y
$ h7 O# c* c: U8 i: p# F* V理解有些问题啊,这个触发是一个判断,当每个item到达一个port(端口)时触发一次,然后判断触发:如果为真则发送,如果为假则不发送。+ ]8 A& |/ R+ G$ F
return getitemtype(item) == 2||3   相当于判断两次,只要一次为真则整体为真,判断的条件是:getitemtype(item) == 2 和 3 ,  3总为真) x0 p9 N' p" F0 Q7 i" b
7 I& r9 [+ Z3 X! ]4 z, |! ?1 f
这种写法是不正确的,而return getitemtype(item) == 2||getitemtype(item) == 3  则判断两次,所以要注意这种细节。
7#
vivion 发表于 2012-3-30 11:19:05 | 只看该作者
感觉还是没有看懂到底为什么会出现这种情况?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|全球FlexSim系统仿真中文论坛 ( 京ICP备14043114号-2 )

GMT+8, 2025-6-30 16:51 , Processed in 0.084230 second(s), 13 queries .

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

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