设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6370|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:
( X' G5 t; S6 C; Z% T, E4 Z! f# }is       
. `( j' t2 c0 _# I3 U# p5 ?do        6 j) ~7 U/ ]9 w% p4 [1 J& ~# B
        waituntil EventController.simTime = Schedule[now_depart_num];: L6 }' [# s" w8 \
        if zhuZhan.empty = false
- J. K- c( {# A9 v7 h% g- o- E        then 9 S8 Z* l' ^* I
                zhuZhan[1].move();$ g' Q/ f  q7 t. a0 H6 c
                now_depart_num = now_depart_num + 1;                ( O+ u5 _& A7 H5 S# a7 j
        else
) y# g9 X$ e" D+ {                waituntil zhuZhan.empty = false;: d0 c# c2 g9 ]0 I: ]
                zhuZhan[1].move();
0 F, u) ~, s, Z: P$ H5 e6 j                now_depart_num = now_depart_num + 1;2 L  ~; J# X7 l& P
        end;                                        ! H8 o9 X7 j* j, b2 B
end;
( D7 i0 F+ j! N, L3 ~) R7 |! r0 ?6 y: s/ O& S
但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement. - ?  S* ~) G/ M# _+ V) ]4 P
若是增加一个局部变量,如下:# v: L. m; ?1 E
is
3 a4 B! z* j5 u- S: B% V              depart_time : time;; X3 I5 j: f: A( m$ h$ E
do
: v8 v; K) F: ~8 p              depart_time := schedule[now_depart_num];
( n' f# P" W: h! Z; Q              waituntil EventController.simTime = depart_time; 5 O- {5 B) a9 g! c) d
              。。。
" n6 ?! w0 L2 O2 ?又会出现syntax error near line 5 at <;>!7 ^! E* s2 {) @2 D: ?1 o" V( c- B( x

- Y* [. P( N2 C# {3 X6 b; M3 m2 z各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。
+ i* r# D/ t) V8 [: b# }6 i* h5 F" \* K, U8 p7 d
now_depart_num := 1;5 w4 x7 l: p* E4 B" a: d3 e
begin_time := 0;
8 k% a( I# w9 r6 R3 Uwhile 1 = 1 loop- ~" v3 t# p. x7 \1 j) P
depart_time := schedule[now_depart_num];6 ~7 q0 S% ?" `. M; k) F: ^$ q* |7 @2 V
wait depart_time - begin_time;' y% }; {" Y6 J5 ~$ M4 b
....
( m% f% \" K% v) F6 B  m- g+ R4 {- `  y* a8 S' G
begin_time := depart_time;9 w) ~7 c: F/ q6 J/ Z) i* [
now_depart_num := now_depart_num + 1;
9 I- U5 m8 T7 V) e# v/ |end;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time
% M* l& V, k$ Q/ Wdepart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间: Y8 i2 b4 a$ J0 ^1 w6 U3 Q' M$ ?
每次等待以后把now_depart_num增加1,表格就往下走一行。( o3 r/ @0 Z; _6 r8 j4 ~8 E4 s3 F

% L$ f1 m8 ?4 `5 k9 r9 t2 O/ R另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-9-23 01:46 , Processed in 0.018355 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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