设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5995|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:
& j) X( J3 |- |( K; {is       
& C3 U5 ?/ i5 ?( \. ldo       
3 F* d3 U# _( G' \4 d7 a        waituntil EventController.simTime = Schedule[now_depart_num];
) V. ^  v9 i% A0 x2 ]! a4 O( \        if zhuZhan.empty = false
- g$ {  t# ]0 y/ f        then / t; g+ i- T* C+ `% {9 |/ \% G
                zhuZhan[1].move();/ ]* `$ m( E* ?. e$ q* R
                now_depart_num = now_depart_num + 1;                ! t4 m4 U  a$ F! _, T, I2 Z
        else
* p; r2 Y( i4 s+ Y0 S2 E                waituntil zhuZhan.empty = false;
3 S7 R5 C2 D( l& P                zhuZhan[1].move();
+ e" M+ N5 }, h# m" q                now_depart_num = now_depart_num + 1;
" w8 ~) d* w8 I' R4 Q        end;                                        % B2 O8 O6 R; E# g& b3 U3 H
end;
  h0 u. T9 ]6 E& `+ W" V% d
0 x' x1 u  U/ J/ _# R) X2 {但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement.
$ {$ H- |/ w/ t' B- E若是增加一个局部变量,如下:. ?. r7 `1 V$ ]1 ^; X1 |4 o, w
is * I" p& ?- G: ^. f
              depart_time : time;7 t8 a2 u/ H3 b, x: Q2 Z
do
3 n+ A/ C- T+ ~( [( `              depart_time := schedule[now_depart_num];( V' @! c" G. M' P8 A
              waituntil EventController.simTime = depart_time;
7 I( t" v2 m8 O1 l& y7 M) Q5 T3 l              。。。
. l8 |5 B, A8 X+ B( f. U! f又会出现syntax error near line 5 at <;>!1 D3 m% R% B, E5 }3 [7 K6 h
; L# o4 q/ Q+ f% s8 Y8 Y0 u
各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。& Q5 K4 ]) ^3 m8 O- X$ Z
' Z5 r% O2 N6 x  s6 n
now_depart_num := 1;. I! I' h2 v9 N* U- u
begin_time := 0;
/ B* v+ `8 B7 m$ Q' rwhile 1 = 1 loop
" K7 p9 \/ i6 M" |7 t depart_time := schedule[now_depart_num];6 W1 ]# c7 o6 M, D4 Q. M. I
wait depart_time - begin_time;
: F' h" b. L: Q6 H& h0 S2 V ....
- G/ o- @& j$ m! i( a( Q" Y3 B9 i9 e4 c9 g
begin_time := depart_time;$ d' t7 C# y, }- X6 b
now_depart_num := now_depart_num + 1;
) `6 Q2 }# k. x6 K) f/ E( ^2 x0 ~1 A9 zend;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time0 ~7 O# ~) x9 ^: U' A
depart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间# _4 O  y" K% ~% Z
每次等待以后把now_depart_num增加1,表格就往下走一行。9 g" e: n8 ~/ p8 D

+ w; \- M2 c6 _; r/ w1 N# e8 P另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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