设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3844|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:, L$ G4 k. p# Z" G6 ~4 s4 ^
is        $ c9 _/ K$ j: Y4 `; Q# B
do        . H- n  Q' ~; X" \% J0 E6 Z
        waituntil EventController.simTime = Schedule[now_depart_num];
' c$ A9 X' p. G" i9 H# m" ]        if zhuZhan.empty = false
  F" E; V, j/ j# M        then
1 l* _4 r# G2 o% r6 n                zhuZhan[1].move();
# ~+ F5 n5 R0 {5 h1 \8 z                now_depart_num = now_depart_num + 1;                + U" F3 m6 [5 R" h9 a; J0 v
        else0 P1 M) ^1 R- M
                waituntil zhuZhan.empty = false;
! B0 u, b6 ]- f! a; S$ e/ [% e; j                zhuZhan[1].move();
; o$ I  [7 n  o/ y2 o7 K* u                now_depart_num = now_depart_num + 1;
: J( `6 U" t. A' C+ \        end;                                       
" q6 l% S+ r+ _- ~end;
5 D5 G: W8 y7 S  O% L1 D' B( ?
( {' n$ l, s. g+ z& O- M: |5 [! e( d# Q但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement.
2 W+ S( n; x7 ?1 G8 P3 N- K! ?若是增加一个局部变量,如下:
# d  P  i3 H0 [: l' Yis
8 W. C- ?' u: \5 G' ^/ t              depart_time : time;7 T6 J0 p: R. Y0 V* ^# k
do
$ o5 c7 P6 V  F$ i: R0 ]" @9 p              depart_time := schedule[now_depart_num];
8 @, k7 H4 Z3 T, s              waituntil EventController.simTime = depart_time;
: q- s, Y; y+ }( d5 X0 h" i              。。。
3 g% W7 d0 `' O. t" ^又会出现syntax error near line 5 at <;>!/ g. b, {8 n/ r# ]
" c8 ]' J- a6 ]4 Y6 a- a; ?6 C
各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。
% D3 `( e2 T/ a' C+ P+ `0 m# {+ J9 ?0 L; b' E1 c( x
now_depart_num := 1;) c! }- O8 c0 q" L
begin_time := 0;$ Q& d# e0 n/ p( t/ r" w
while 1 = 1 loop  Y* J* q8 m  N& D5 a3 w
depart_time := schedule[now_depart_num];
: L; s. t& j( M wait depart_time - begin_time;
5 h. ^1 w  b9 q6 H ....1 q6 v) w% {- y3 u. p5 [
. o) o8 k5 Z$ a' D: h/ P
begin_time := depart_time;" p$ V; A1 f9 j; |2 P
now_depart_num := now_depart_num + 1;: h; Z4 z: S$ |% d
end;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time' ~+ o+ e: U- i
depart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间  e- v  x4 F0 u6 p
每次等待以后把now_depart_num增加1,表格就往下走一行。. G1 ^1 @* q2 Y6 y% Z

8 `3 n6 ?' V, r8 T5 \2 ]+ w另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-23 23:28 , Processed in 0.012989 second(s), 15 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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