全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
ws-lk 发表于 2010-6-12 16:50:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在source里面设了三种产品,mergesort的output有两个端口,我想端口1输送一种产品,端口2输送两种产品,代码如下:
4 y1 V8 o, s  u+ B{
; R( u# {2 ~0 J: p! Zcase 1: return getitemtype(item) == 1; break;, z# `$ S/ Q' p& Z- i! X
case 2: return getitemtype(item) == 2||3;break;: T0 {2 T6 ^! A2 A! ^& r
}: c# {9 y) I) l& ?3 Y' ~! J) C
结果成功了。但是,
- [9 P, @- a# g7 ^9 v如果我将端口1设为输送两种产品,端口2设为输送一种产品,代码:$ J% O- q. s  K
switch(port)5 E4 V& G0 Y, [) C
{
6 T5 e: _6 d/ c; h/ B  L9 Ucase 1: return getitemtype(item) == 1||2; break;2 O) J! d, J$ _) h& A& l+ p4 F. l
case 2: return getitemtype(item) == 3;break;
: E6 Z+ ^  Q# L; ]# d/ s}
* K. ?" T5 U  ?产生的结果为:端口1上出现3种产品,端口2没有产品。这是怎么回事呢?& j8 ?/ R* _+ ^  A- w& Y
有谁有关于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;* {9 f: E3 s4 u
case 2: return getitemtype(item) == 3;
* i. W/ m+ F: h, R" Q2 {
1 W! A1 U' _" F* B; ?就可以实现
5#
wj109260758 发表于 2010-6-14 05:15:56 | 只看该作者
case 2: return getitemtype(item) == 2||3;
% j7 G( c" U% h+ H等于 case 2: return 2||3;' K1 R! J, q1 D# y$ H
等于: return 1;( ]$ u4 H; p- c0 j" r
你的第一个程序相当于:$ m8 n2 c6 g& h7 {) r$ B. C
case 1: return getitemtype(item) == 1;
- f/ b1 `: n$ u$ vcase 2: return 1;在Megesort中最后一个出口,可用来将在所有其他临时实体从最后一个输出端口发送出去。所以,可以实现功能!
2 O" _) r' R, A6 j, M; |; t5 [. w
/ _7 t4 S  l  t所以第二个你的程序可以解读为:
! A' ^; n( ^" B; y5 Nswitch(port)
+ m" w+ q5 ]! g* M/ A  r{
! m: O3 F$ E8 P( d6 Z- Pcase 1: return 1;(相当于所有实体可以从出口1流出)* i& T1 w' d5 p- A/ w, J; n) {
case 2: return getitemtype(item) == 3;(ITEM3从出口也可流出)
0 M. O+ T1 y3 c, n}% K( A+ a, U/ Q1 n- Z1 M4 I2 ~4 G
由于第一个出口优先于出口2,所以ITEM3 一直从出口1流出。
' e3 S" L; T' K0 O3 {- A4 c. h1 Y' @6 s, k: j2 @6 {; q
如有错误,请指教。
6#
domcylai 发表于 2012-2-6 16:14:14 | 只看该作者
case 2: return getitemtype(item) == 2||3;
  Z6 c  Q! L; v4 X- g. L等于 case 2: return 2||3;
4 r/ _3 o8 {/ e- [3 l  D7 F# e, W2 o等于: return 1;
5 S" `) M) d- E+ T7 C9 V# R你的第一个程序相当于:2 E" t4 C9 M8 W* h
case 1: return getitemtype(item) == 1; 5 j- |  Z! X0 z# l: h$ B- i& }4 {
case 2: return 1;在Megesort中最后一个出口,可 ...
4 g+ ^* h* ^3 O1 Uwj109260758 发表于 2010-6-14 05:15
2 t# n' [5 S5 q6 }! ]2 O  Z
+ Z( g6 ^& ?- T1 V, w
理解有些问题啊,这个触发是一个判断,当每个item到达一个port(端口)时触发一次,然后判断触发:如果为真则发送,如果为假则不发送。
# s9 U- t) N0 U: [6 q7 h) G0 |return getitemtype(item) == 2||3   相当于判断两次,只要一次为真则整体为真,判断的条件是:getitemtype(item) == 2 和 3 ,  3总为真
' D9 K, {# e4 r$ J4 R& G- q- S) m6 y7 Y' V
这种写法是不正确的,而return getitemtype(item) == 2||getitemtype(item) == 3  则判断两次,所以要注意这种细节。
7#
vivion 发表于 2012-3-30 11:19:05 | 只看该作者
感觉还是没有看懂到底为什么会出现这种情况?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-9-1 16:36 , Processed in 0.075390 second(s), 13 queries .

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

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