全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
ws-lk 发表于 2010-6-12 16:50:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在source里面设了三种产品,mergesort的output有两个端口,我想端口1输送一种产品,端口2输送两种产品,代码如下:
. V( h  l6 G7 T5 o{8 U) m& {; @8 n9 l$ e
case 1: return getitemtype(item) == 1; break;8 R( @$ e0 H( t6 k+ D& v
case 2: return getitemtype(item) == 2||3;break;  G* t/ z: F6 ^+ F
}
; J, M# F4 {8 J9 z/ n% y7 [结果成功了。但是,: g/ Q  d2 d, ]- O4 {, W' M
如果我将端口1设为输送两种产品,端口2设为输送一种产品,代码:
  L2 u) A- b6 b/ Vswitch(port)/ m( c0 q' ?: [% U
{% c- E# i9 e7 @+ {) H* {
case 1: return getitemtype(item) == 1||2; break;
1 r5 D# @+ w. b; T2 Y' acase 2: return getitemtype(item) == 3;break;
; i0 ?; `7 b: A5 d, h" w}
* I: p8 ]* ~: ~" ?, }产生的结果为:端口1上出现3种产品,端口2没有产品。这是怎么回事呢?( w6 e& z/ P: f5 [" G- U
有谁有关于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;
$ U# s3 M) U& v" B/ vcase 2: return getitemtype(item) == 3;( y' i. G$ G& E0 n) }* u3 _

7 e/ [- W3 b! X+ s, l$ J5 ]就可以实现
5#
wj109260758 发表于 2010-6-14 05:15:56 | 只看该作者
case 2: return getitemtype(item) == 2||3;
6 O( r9 @0 C: M" z$ l等于 case 2: return 2||3;
: |' G2 g, ~/ R4 d9 j7 j/ L等于: return 1;7 `% p' I5 l9 U- {9 i$ E
你的第一个程序相当于:
+ Z* ~+ ]- C, l/ f* b0 Y( n# Ccase 1: return getitemtype(item) == 1;
9 m. h6 J! R* g) o" b) O; bcase 2: return 1;在Megesort中最后一个出口,可用来将在所有其他临时实体从最后一个输出端口发送出去。所以,可以实现功能!
. H2 h& [9 f& d( f! l
2 R6 _# Y9 x+ f$ S+ T所以第二个你的程序可以解读为:
! {, O' O  x  t) B$ _+ j1 w( b, qswitch(port)
7 P5 }2 p: [/ T/ I4 G2 C0 `{
3 v1 j. ^; z3 _& l: vcase 1: return 1;(相当于所有实体可以从出口1流出); Y' Z- n, J6 V" K6 V+ Y
case 2: return getitemtype(item) == 3;(ITEM3从出口也可流出). }7 A( n! c4 |- Z$ I
}
+ V# B9 C8 P* M+ a0 X' s由于第一个出口优先于出口2,所以ITEM3 一直从出口1流出。' d+ K: [& ]# L) h* T# _' \

7 Y6 B) Y! a) {0 t/ G如有错误,请指教。
6#
domcylai 发表于 2012-2-6 16:14:14 | 只看该作者
case 2: return getitemtype(item) == 2||3;
1 l# V& P$ G" e- o等于 case 2: return 2||3;
7 b  X6 b+ L; c# d3 O等于: return 1;" `' z  Z4 v, o4 O" y9 I
你的第一个程序相当于:) m  W# I8 o  {: l% @
case 1: return getitemtype(item) == 1;
5 a- v% H/ K" ~0 v- u6 m, wcase 2: return 1;在Megesort中最后一个出口,可 ...% r( E, W9 a( k( f3 ^" U4 Y
wj109260758 发表于 2010-6-14 05:15
! y4 x  g( C5 V1 b

  O% }9 U. [- \$ h2 b3 G! u理解有些问题啊,这个触发是一个判断,当每个item到达一个port(端口)时触发一次,然后判断触发:如果为真则发送,如果为假则不发送。
' I& n7 l9 U. n8 r/ _2 Freturn getitemtype(item) == 2||3   相当于判断两次,只要一次为真则整体为真,判断的条件是:getitemtype(item) == 2 和 3 ,  3总为真5 S" W; u7 P6 V' X/ `* G* B
( p' z2 P1 i3 w# U  x2 j# O
这种写法是不正确的,而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-29 02:28 , Processed in 0.067058 second(s), 13 queries .

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

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