全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
ws-lk 发表于 2010-6-12 16:50:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在source里面设了三种产品,mergesort的output有两个端口,我想端口1输送一种产品,端口2输送两种产品,代码如下:& y  k; S9 {4 d
{
% N* `! u/ R. `6 V5 vcase 1: return getitemtype(item) == 1; break;
4 \7 {" a; v, T" n7 L8 m1 S3 Rcase 2: return getitemtype(item) == 2||3;break;
! }" o8 N# X+ Z}) i% o! B- ^1 \* n
结果成功了。但是,
1 J: B2 r8 l2 L如果我将端口1设为输送两种产品,端口2设为输送一种产品,代码:1 q- \1 o3 t) Z/ Y  _- {7 @
switch(port)$ U9 I  O2 Z( ~- g
{9 K7 ~: M" H6 N/ ?
case 1: return getitemtype(item) == 1||2; break;
. m- Y: a4 _4 W% L7 ?case 2: return getitemtype(item) == 3;break;
( Q+ F  c; z4 n; y9 A2 t2 R  d}
. _6 f5 N8 {! d产生的结果为:端口1上出现3种产品,端口2没有产品。这是怎么回事呢?% y7 J, }8 a! a$ t: F1 ?2 b
有谁有关于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;& Z9 |; ~* g" [' n( e
case 2: return getitemtype(item) == 3;
" N3 a' b0 E4 |2 n6 K2 i8 H, ~% G$ i& k7 \7 R4 g
就可以实现
5#
wj109260758 发表于 2010-6-14 05:15:56 | 只看该作者
case 2: return getitemtype(item) == 2||3;  I+ q% Z# `$ A" h
等于 case 2: return 2||3;8 w  k9 @& z3 w5 w0 B" x) Q
等于: return 1;
9 J5 x- @1 k+ J6 {5 Q' U' ^你的第一个程序相当于:1 R/ L5 ?+ s0 u2 a6 g1 }+ @
case 1: return getitemtype(item) == 1;
1 A! U0 m! z! B+ rcase 2: return 1;在Megesort中最后一个出口,可用来将在所有其他临时实体从最后一个输出端口发送出去。所以,可以实现功能!8 K/ Y/ Z5 @8 ?

' B2 A  e+ e, `所以第二个你的程序可以解读为:3 E% P$ a, \1 v' N0 ^7 g- E% b, a
switch(port)
. [% Z5 E3 _6 a7 z: c- z{
8 Y& O( V+ V! v: ?, Z  Dcase 1: return 1;(相当于所有实体可以从出口1流出)
; ~; J) z, G$ r5 S7 Z$ ccase 2: return getitemtype(item) == 3;(ITEM3从出口也可流出)
* ~4 U/ ]4 F  x}! E$ a- D) l& }: Z+ b) f; ?
由于第一个出口优先于出口2,所以ITEM3 一直从出口1流出。4 E0 h% W: _# @" r3 m
8 c5 X5 `% h/ G6 }5 U
如有错误,请指教。
6#
domcylai 发表于 2012-2-6 16:14:14 | 只看该作者
case 2: return getitemtype(item) == 2||3;
3 {" r! C+ K% a( A) x等于 case 2: return 2||3;
1 Q0 E+ ]8 E( @2 ~$ S) O5 `, T# n等于: return 1;
" ~1 `' v. p0 J: P8 G1 w# d% P" o你的第一个程序相当于:9 w0 z; x% v* E1 }) |
case 1: return getitemtype(item) == 1; - B0 h! s! D' [1 _( o" ]- ]+ }
case 2: return 1;在Megesort中最后一个出口,可 ...' p- {& g8 R9 M9 f
wj109260758 发表于 2010-6-14 05:15

# i/ `! B2 ^4 f5 b
9 x" A& c8 t  q0 q, m5 N, i, F* w9 {7 I! P理解有些问题啊,这个触发是一个判断,当每个item到达一个port(端口)时触发一次,然后判断触发:如果为真则发送,如果为假则不发送。* B8 i! D, S; Q5 d. ^# P
return getitemtype(item) == 2||3   相当于判断两次,只要一次为真则整体为真,判断的条件是:getitemtype(item) == 2 和 3 ,  3总为真+ f9 A* ?6 }* m, W2 _" r
# U2 o: y0 F. Z. I; @; j5 y$ m
这种写法是不正确的,而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 23:43 , Processed in 0.061676 second(s), 13 queries .

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

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