设为首页收藏本站

最大的系统仿真与系统优化公益交流社区

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5998|回复: 3

[求助] 不能在waituntil的statement中访问table

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:
/ ^! Y3 C' b  L' C4 Pis        0 `! g* i( G) l! M
do       
/ \0 c+ Z0 p. z8 A- \! q' ?( C' ]        waituntil EventController.simTime = Schedule[now_depart_num];# a+ E2 d* m/ E2 B9 n
        if zhuZhan.empty = false
) }. p! x; J% ?2 K: U4 D4 A! }        then
1 m  l' x8 a* i6 i# Z- W                zhuZhan[1].move();8 Z, I3 ^3 }+ p7 P$ i) m  x  c) y
                now_depart_num = now_depart_num + 1;                * \) P1 r( D  U: T; y' R/ f% {6 n( S2 |
        else0 `/ ~+ x8 x8 m  _
                waituntil zhuZhan.empty = false;+ [) v, o- D. @# F# i
                zhuZhan[1].move();! @4 r0 e7 C( f9 f- s" w! \
                now_depart_num = now_depart_num + 1;7 N# N$ W0 V0 v" Y: ]
        end;                                        4 ?) H8 j2 t6 V4 w+ X9 k
end;
* g7 S6 O' H) b) p! o- C7 u
0 J( w$ e# S4 |% R% A) ?但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement. " [9 A8 E) R: N- z  |7 M
若是增加一个局部变量,如下:1 H+ K- f8 R3 b
is
( p# C3 R# A! a- ?+ W: ?. P              depart_time : time;$ P  n1 z! s6 F; |/ s1 H
do : P5 d4 M$ m9 L
              depart_time := schedule[now_depart_num];( I; Z5 @! r8 z0 S
              waituntil EventController.simTime = depart_time; ! f3 s: Y5 `/ u  k
              。。。- i  T  `: `) \9 q+ g- I6 {
又会出现syntax error near line 5 at <;>!5 o1 [6 x  s  R& s
" Z* G& t; l8 e$ H- M3 l% R" m4 J
各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。  }: s+ c: y! L! h3 q  v
# Q/ Z( `6 h7 G  f
now_depart_num := 1;* K& U. Q$ f- B2 v- i
begin_time := 0;
& O$ O1 o* M4 ?0 u. fwhile 1 = 1 loop/ u, ^; f. X( J# p  h+ Q3 p
depart_time := schedule[now_depart_num];3 j) b' I( u( E
wait depart_time - begin_time;* v+ t" Q2 @' g+ u6 t5 y: g4 L
....7 \9 n1 r# D! z( F: [* q
$ L- M, ~+ N9 c9 p+ I; e4 s
begin_time := depart_time;
+ {# }' @1 ?6 k& _ now_depart_num := now_depart_num + 1;
5 u) [( I; O6 \; E9 G- Wend;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time
; A/ }1 _- h7 Y, Rdepart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间0 }$ n4 J# o9 b* v4 w. O: l% N( \
每次等待以后把now_depart_num增加1,表格就往下走一行。, V$ \' ^3 {! J& z. Y: C9 y

; b8 x! e  z: A8 s. X另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|手机版|SimulWay 道于仿真   

GMT+8, 2026-7-6 21:19 , Processed in 0.013285 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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