设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6215|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:* x. R# G  j4 L, D3 [
is        ; c9 r+ L- A& e0 }$ N  w
do        * y& U$ s& h3 Y9 Q" v
        waituntil EventController.simTime = Schedule[now_depart_num];" Q# Y8 w' b, H! D/ [3 c- W
        if zhuZhan.empty = false
3 M6 ?' \: z7 _: Z% U& |* {& n        then * H, q7 h& _, {, |+ f' ]0 F- I% _
                zhuZhan[1].move();
1 r( B! T% \6 T( Q, x& [                now_depart_num = now_depart_num + 1;               
' P, E) b0 e' K. y7 p! ^; X: v+ L        else
$ H- N4 C5 s/ y8 n2 C3 |, k9 ?                waituntil zhuZhan.empty = false;" k  J, x* S: F8 K, k1 K
                zhuZhan[1].move();! u+ O' a( Y. X* X
                now_depart_num = now_depart_num + 1;
4 `0 g6 A, _2 I1 q        end;                                       
) M  Z7 z; Z0 N2 A/ c! s4 e1 Wend;5 y0 t7 N( N2 N% M0 J) h# ?$ }5 `

5 C% V7 M7 }9 f( _* K* r但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement.
3 \/ e8 p7 k( o- t若是增加一个局部变量,如下:
7 y5 e7 F1 y$ @; \+ R2 vis $ h( D4 D* f" u
              depart_time : time;
, \( ~0 z/ W" ?  G+ e4 Edo % C) A  s. N; W# r) ^
              depart_time := schedule[now_depart_num];" y% c2 m# F+ L3 y. [# @
              waituntil EventController.simTime = depart_time; % q3 C) o0 C1 A2 y7 u
              。。。
1 R  v1 I; r' H$ n3 A1 z又会出现syntax error near line 5 at <;>!
; |% Q( R4 v$ m2 Z( K, ^, {  v+ {+ M8 p$ @: c: c- p) e
各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。
1 ?7 H- N( e* k4 ?5 X% w. [& m/ d* M+ y* y9 U
now_depart_num := 1;' m7 n+ m) f: G3 j7 W' G: I  ?- L
begin_time := 0;
9 ?6 n: Y5 v9 w4 K. r" q+ {while 1 = 1 loop6 Q* {* P' E! W1 I* D9 s! N
depart_time := schedule[now_depart_num];0 M7 s8 O6 m4 R- {
wait depart_time - begin_time;9 K' t. q. N: O4 I9 B2 r' \- H
....
* Q0 [( v% R! p1 x! }
) c" ], C$ |8 Q: u* R$ N0 b- a2 [( f begin_time := depart_time;0 Q8 c7 Q7 S( m7 k$ i% i# B
now_depart_num := now_depart_num + 1;
# }+ X& ?3 o' t- ^" rend;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time3 {6 ?. q6 s4 o' u
depart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间
; l# _2 x. Q/ X' T1 [! h4 F每次等待以后把now_depart_num增加1,表格就往下走一行。! U* D1 M$ Z$ n. d( k: e

- M' l, R0 W4 U9 m另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-8-22 15:53 , Processed in 0.018270 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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