设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 4605|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:2 H, r7 a! ^7 j
is        0 }5 X. Q# i* S( H7 x
do        # E# j% Q) t1 E/ b; D
        waituntil EventController.simTime = Schedule[now_depart_num];
7 W3 L! z# r' V3 D' r+ f4 _        if zhuZhan.empty = false0 [$ X# @+ p- ?  j
        then
2 K( E3 {/ Y. k, D2 w4 c+ k% M) ^                zhuZhan[1].move();
3 ~6 e, r. j) T6 G                now_depart_num = now_depart_num + 1;                : l  R9 b: P  S' M) Y! v
        else
, g, p% m2 [4 h% u5 V                waituntil zhuZhan.empty = false;; B, C% o0 F# h6 T% N. ^
                zhuZhan[1].move();6 a- y7 O  a3 }& y, M
                now_depart_num = now_depart_num + 1;
- l, J7 y2 ]/ p6 z5 `# \# X        end;                                        & ~% X$ U9 B: _* q2 X
end;
- S9 g& q* Y3 x$ J/ E2 L8 Z6 `8 H6 }6 F7 q  h1 Y8 N% t2 B
但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement.
7 t. I: f9 d2 x6 x- R  @& u" W- G若是增加一个局部变量,如下:$ b2 t6 O, H1 ?' E6 D7 H! ~! _8 z& n
is " a' \8 b9 f  ~' x$ V
              depart_time : time;4 x: r/ G9 u; m  U) }; r
do * p) M+ c2 b4 }" T8 u7 }/ _
              depart_time := schedule[now_depart_num];
7 Q3 q  b6 C% S/ v* U, g/ `2 x              waituntil EventController.simTime = depart_time; 1 c% z1 B2 [6 }
              。。。% ~- ~% s" q) t: D/ x
又会出现syntax error near line 5 at <;>!' Q6 n# G8 f# _: U. J

# u' |3 S! s, m  _5 D+ Y# \' p各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。: n& F& V- l$ C0 }# }5 x9 G

; J+ D+ w' m8 J' {3 l8 Znow_depart_num := 1;  `6 R& @5 K$ {3 f; R
begin_time := 0;
0 o# C& I+ \9 \* R. q9 \  S9 x1 m1 U5 i2 ewhile 1 = 1 loop
. q# b1 _# w% Y5 n7 x1 \9 R7 I depart_time := schedule[now_depart_num];" ?( s% c1 k! s  x
wait depart_time - begin_time;% Y8 \+ R) ]; P! z8 R
....
7 ]3 D7 }+ E# @; ?2 F( V# z" v& y. S9 q# S
begin_time := depart_time;
; u. W9 l. f" n; [1 ?( s! N now_depart_num := now_depart_num + 1;
1 n/ B+ Q4 ]. o  ?+ ]: Lend;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time. b. R" l9 c" `! |& Z$ u! ?
depart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间  A* j" {. i/ O
每次等待以后把now_depart_num增加1,表格就往下走一行。
5 P; b. i# T3 h& w" ~, p/ r. X6 R$ C9 b! t
另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-7-12 06:37 , Processed in 0.013888 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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