全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
ws-lk 发表于 2010-6-12 16:50:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在source里面设了三种产品,mergesort的output有两个端口,我想端口1输送一种产品,端口2输送两种产品,代码如下:
' A4 c0 V" u% ^7 d  k* o{
- v% R8 f4 {6 J# s0 K0 mcase 1: return getitemtype(item) == 1; break;
3 v: x; ^* g# P- Rcase 2: return getitemtype(item) == 2||3;break;
; c" t6 i. }5 B  w}
' s- v7 E5 {; i结果成功了。但是,
( `1 E- B+ v# j& |3 e) A4 U如果我将端口1设为输送两种产品,端口2设为输送一种产品,代码:
4 r5 D6 e) k- Y8 Yswitch(port): ^: W# z0 k6 U6 n) \- [
{* b) O5 s, q% {  J
case 1: return getitemtype(item) == 1||2; break;  G3 n9 v5 v+ v6 D% |& r
case 2: return getitemtype(item) == 3;break;! V6 `& n& `5 D! Q3 Z: O! o
}! q5 S+ B# _8 j$ d9 f
产生的结果为:端口1上出现3种产品,端口2没有产品。这是怎么回事呢?
  h6 w# n. Y2 `有谁有关于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;
) s; |$ M' x6 ?/ \* R/ s* hcase 2: return getitemtype(item) == 3;) A& j# j1 c2 L2 J

" K3 Z0 a& e( `4 u- y就可以实现
5#
wj109260758 发表于 2010-6-14 05:15:56 | 只看该作者
case 2: return getitemtype(item) == 2||3;2 Y0 h, _) Y* t! M) n& {! V# y
等于 case 2: return 2||3;; o4 u6 `. X( D- }2 F  V
等于: return 1;
0 z+ k5 r( \7 O' ]: Z0 }5 V5 G3 K  _你的第一个程序相当于:% [  q' T$ o; |7 x" e  g
case 1: return getitemtype(item) == 1; ) `) A. ~* T& A8 W8 \
case 2: return 1;在Megesort中最后一个出口,可用来将在所有其他临时实体从最后一个输出端口发送出去。所以,可以实现功能!
- ?( Y( k/ \6 Y0 W9 k4 Y+ E+ p  E: L! l
所以第二个你的程序可以解读为:
5 {! [1 E4 O( e% i1 M+ x* Lswitch(port)- E1 R" ]. M( B3 a2 k+ h
{
1 p  U6 r8 R3 R( ^1 ccase 1: return 1;(相当于所有实体可以从出口1流出)5 H: S$ D! e2 F! L
case 2: return getitemtype(item) == 3;(ITEM3从出口也可流出)  Y, V- I6 ]; r( T; k6 `
}4 t# R. v/ d4 p) t" x' P
由于第一个出口优先于出口2,所以ITEM3 一直从出口1流出。
3 f/ L' i% E7 @# o9 t) q  z/ G% _: |, c
' d# ?+ B+ Y* I; Y如有错误,请指教。
6#
domcylai 发表于 2012-2-6 16:14:14 | 只看该作者
case 2: return getitemtype(item) == 2||3;! C* z* H6 D* Z5 D& M
等于 case 2: return 2||3;
& l# ?. y/ J! R1 y8 D等于: return 1;
; m) C0 A$ S7 D/ k# N8 A你的第一个程序相当于:+ A4 |. D2 `* p. \
case 1: return getitemtype(item) == 1;
7 d/ a3 Q8 i& q- k3 J5 m# Y0 z' r. Icase 2: return 1;在Megesort中最后一个出口,可 ...
) N. ~' Q" a5 _$ d, @+ V; dwj109260758 发表于 2010-6-14 05:15

) g7 W( g0 Z+ L, f4 c( J# T  w$ T5 Z
理解有些问题啊,这个触发是一个判断,当每个item到达一个port(端口)时触发一次,然后判断触发:如果为真则发送,如果为假则不发送。
* z% W2 t4 |8 r- p5 Mreturn getitemtype(item) == 2||3   相当于判断两次,只要一次为真则整体为真,判断的条件是:getitemtype(item) == 2 和 3 ,  3总为真
  u) o8 z: M9 X7 c, Z+ a" Z; v
/ {) e) R; m$ t& c" \这种写法是不正确的,而return getitemtype(item) == 2||getitemtype(item) == 3  则判断两次,所以要注意这种细节。
7#
vivion 发表于 2012-3-30 11:19:05 | 只看该作者
感觉还是没有看懂到底为什么会出现这种情况?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-10-19 07:48 , Processed in 0.088304 second(s), 14 queries .

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

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