设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5837|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:
. [: ~, O! [0 O3 k. J. ris        + h4 P* I: e) J1 r
do        + _- E4 f& Y5 k4 q
        waituntil EventController.simTime = Schedule[now_depart_num];6 Y6 P( q( U) o( `( z+ h% J  t
        if zhuZhan.empty = false1 x2 k; J" ~2 i7 ?9 e# _
        then
) y" B! S& j7 T: l+ v                zhuZhan[1].move();7 M' k! _1 e, ^+ M1 Z- ]" u; N
                now_depart_num = now_depart_num + 1;               
) C( x) c1 E3 Z$ K        else. ]  y0 l( T; G3 q! c5 `+ h
                waituntil zhuZhan.empty = false;; l0 P  p9 O( O' C& n4 \
                zhuZhan[1].move();
& ?7 G7 m3 |+ F                now_depart_num = now_depart_num + 1;
* I! |: R, n3 j2 F$ ]2 w) ]        end;                                       
4 I+ o/ Q  P; x6 p! V( |0 qend;
$ K1 @# G8 y2 b2 ^2 d! {4 f) o. a9 `/ E, N4 K
但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement. 3 a% [, m/ Q1 u2 @6 r7 H/ ?
若是增加一个局部变量,如下:( f" ?  M7 q5 M: J
is
# z) w( a# X1 W) ~              depart_time : time;
: J9 w8 @. D3 `6 Odo
2 D& X% l9 h+ N+ d. |              depart_time := schedule[now_depart_num];- a$ D) j% W: ~9 a: w* H
              waituntil EventController.simTime = depart_time;
0 F, ]' c9 B' J- O+ X# r2 O              。。。
' z6 K/ m6 g" p4 A; U又会出现syntax error near line 5 at <;>!( o+ q" n, ~  O6 L

# T+ ~3 O0 V" s" l# _& j% o  A各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。  z! B& i; g# g7 B8 r( A- v
' \6 s0 k# z! P% j
now_depart_num := 1;; l: m8 g; ]8 \: a+ b7 K  s. `
begin_time := 0;
# {, v7 d9 S# n/ C& mwhile 1 = 1 loop
! f- g+ E7 n4 X9 I4 N- W depart_time := schedule[now_depart_num];
+ @. o2 y2 B5 e. p& O7 p3 N: _' y! v& J wait depart_time - begin_time;
; \2 n5 h% H! X  @& \2 m6 W" z ....) N* ]! S3 G9 B1 y. L

+ p! I' l% R! n) S. Y1 ]+ E3 \& b begin_time := depart_time;
6 ]/ j- H( N+ Q9 N) n7 ?4 q* w now_depart_num := now_depart_num + 1;( Q9 r" b- P0 S4 r
end;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time- V5 w1 O8 T$ e, q1 k0 m* v5 n4 F' o
depart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间
& k5 C9 V' e9 Q5 n# ~. C每次等待以后把now_depart_num增加1,表格就往下走一行。
# f7 V6 s1 {& l  T, [
* i0 @# ^7 y( L. A' ]8 l8 y另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-5-14 17:03 , Processed in 0.017873 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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