设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5135|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:
- U/ l+ V3 U3 B1 _4 {1 {is        ( U% q* I5 @. F/ M
do        0 j6 a/ x& x! o, x5 _* m
        waituntil EventController.simTime = Schedule[now_depart_num];
8 A  c, K0 F4 S$ V* m. N5 }" @8 D        if zhuZhan.empty = false
& O( Q5 T+ W' H5 I; C* d& F: }        then / j  L  U" \% w7 m
                zhuZhan[1].move();
* ^, B1 V1 \: N! o7 u1 @                now_depart_num = now_depart_num + 1;                  D2 m1 D8 z! H) J3 u; S
        else
1 T; o& O: ?( V! Z" f6 z5 p* r                waituntil zhuZhan.empty = false;
& p+ m5 @7 Z! E; h4 R; I                zhuZhan[1].move();" E" M/ M$ L/ M- w4 `/ E
                now_depart_num = now_depart_num + 1;
- B6 K( {# U+ h1 a3 ^; d. d) N) C        end;                                       
1 B$ y# j' ~9 |  n3 @1 Zend;
8 Y6 K$ }% l% A3 Q# i& U! K
$ v# w* L0 y7 M3 [$ W( h但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement. " {6 m0 S+ `6 j$ {0 [( \$ F
若是增加一个局部变量,如下:
. G; n9 ^  B8 R8 H/ K( Z: ^! \is
& N. t. w( V8 R+ S) |8 _              depart_time : time;
  v4 `# ?- V0 _  o4 u4 Zdo
% c# U1 I* y. n6 o, X              depart_time := schedule[now_depart_num];
: r+ C  @9 ~- i% \$ r5 a" d              waituntil EventController.simTime = depart_time; & `' e5 `+ p, F3 m2 y
              。。。$ f3 a, q% I! T8 ?- @
又会出现syntax error near line 5 at <;>!
8 |  z! A* {: J# m: h, f  D, L  Q
" J% Q2 I  t% B0 n2 M各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。8 E# g, ^/ J" R* h8 G6 j8 H

+ s" o5 X0 s* i) _8 _6 ^& Dnow_depart_num := 1;
# e8 ]  O; m, J5 rbegin_time := 0;
: Z0 w% E5 X) Y# j  ?( Owhile 1 = 1 loop
( n3 K$ T, d$ o. a( A: D depart_time := schedule[now_depart_num];
( B1 M! I+ W+ }5 g wait depart_time - begin_time;
# A: S+ ]7 f! k( ]4 e8 W) A ....
" N: Y! S4 z7 B
9 w: F( i( T' F8 W6 U- {% G4 F# e  z begin_time := depart_time;
0 R9 k5 e- C/ g; |6 _, _ now_depart_num := now_depart_num + 1;
" [" Y* L; \- u: O6 xend;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time% N3 d2 }% d7 f* ]- o8 r8 W
depart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间
, {; j- U* p1 l/ V8 U; h每次等待以后把now_depart_num增加1,表格就往下走一行。: @$ p- m0 }& s: p/ r+ M

' j# T/ N) W- ~5 G8 {另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-11-11 21:36 , Processed in 0.014608 second(s), 15 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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