设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 4587|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:
' H# X8 c) ]  A! g- Vis        " B" z4 ~3 Y5 @  S6 k4 @  O
do       
. E2 f: k3 I# j; L2 v5 H4 `        waituntil EventController.simTime = Schedule[now_depart_num];3 e" p$ [- P6 X: \- B$ v9 B
        if zhuZhan.empty = false
) I( U0 Z6 s! f        then # A, N% i( d. b. u0 d
                zhuZhan[1].move();
. `2 ?8 N0 |. \5 A5 ]/ J  o. g$ R                now_depart_num = now_depart_num + 1;               
2 \0 \! a6 p) n) _( Y        else
; P9 z' m1 M# p( E, `                waituntil zhuZhan.empty = false;; x- y  l. S5 J$ M; q
                zhuZhan[1].move();
" y/ M2 R1 S8 z9 Q/ A                now_depart_num = now_depart_num + 1;" q2 a% |3 n) p3 x/ G2 M* T; k
        end;                                        , }+ Q( }. \) v
end;4 O. a/ L/ z9 E( n. C) j

" Q! b7 Z' E! L但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement. : Z7 F' w0 _( i6 a* u" i; X' b
若是增加一个局部变量,如下:+ [, m9 o3 t& {0 o
is
4 X4 I3 v# S  W+ {) I              depart_time : time;; ^( I, f/ W: U3 l- |
do , _, m" P  s/ m5 \, e
              depart_time := schedule[now_depart_num];/ D/ [$ ?# V5 q1 D) b6 _8 a% q
              waituntil EventController.simTime = depart_time;
9 S" w) F* B, t+ l5 o              。。。/ N8 j& Z' a- Y: Y# V( ]
又会出现syntax error near line 5 at <;>!
: g+ \: R- X7 [" K1 z' z; n% K  k/ {2 P$ m$ F4 d6 `
各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。
3 n5 v3 I! T9 B7 J0 I2 X6 b- Z2 X7 q$ a8 x8 G' X/ \5 d2 Q: Q
now_depart_num := 1;8 v7 V  C: x2 I! S. n
begin_time := 0;# Q1 q2 t% _" L5 t' f; m& S2 `
while 1 = 1 loop
( T' n- @3 I0 {8 F: w depart_time := schedule[now_depart_num];
: |2 I6 E% ^6 b! r$ m5 C; Z wait depart_time - begin_time;
( P1 P6 F4 o) p& N# C5 `4 `8 n2 ~ ....
* D, f+ D4 v4 B% [( `' `* R3 w5 w! |5 a, H- s% B
begin_time := depart_time;
: m4 v- I) |$ f9 d9 i4 ~) `4 l' R now_depart_num := now_depart_num + 1;
& ^- M$ J1 s: r, y+ w; k7 X% Eend;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time
4 k- w9 |7 A% C) P( w4 U) s' Rdepart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间
- b" U  o& b2 j, Y每次等待以后把now_depart_num增加1,表格就往下走一行。
! ?! V3 z% z' J
+ m5 q( |# l1 j+ v' Z另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-7-10 10:20 , Processed in 0.016644 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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