设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6202|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:
% c4 w" |0 A  v* |6 ~is       
/ r0 X. O! _& C) h- I, @do        / _: p$ `, Y0 G. I( Y3 i8 ]+ |- y* U
        waituntil EventController.simTime = Schedule[now_depart_num];4 R8 ~7 p# Y, h9 u0 D
        if zhuZhan.empty = false4 n/ j7 a# s* o
        then 4 m- B- T* u1 w( N
                zhuZhan[1].move();+ P! B, y& B" u5 t) `% b' C* `
                now_depart_num = now_depart_num + 1;                * A# @/ Q, l4 @4 V% G8 p
        else
/ ~; t, s7 F& b# }* R                waituntil zhuZhan.empty = false;
! d& Z* Y) w" K                zhuZhan[1].move();
3 B/ U  x% s* a* y6 A' b                now_depart_num = now_depart_num + 1;( I) [1 ^2 S8 t* b: o' _
        end;                                       
# e! e9 ?) M* p+ x2 l! Lend;
- U- ]" Q$ |/ m! w1 B, S) }) v$ \& p4 B3 Y3 Q+ i+ f
但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement.
" S+ g3 c( H1 }2 U! Z" Q若是增加一个局部变量,如下:* P) r( v, l1 [5 V1 T+ k, `
is & L5 q# I& V/ L- T
              depart_time : time;
4 k/ H5 E! _2 E5 {2 V3 T0 ido
+ j2 \6 N8 C; c( S              depart_time := schedule[now_depart_num];
' [- J8 V& n+ \8 }- u              waituntil EventController.simTime = depart_time;
- L( a1 e; x4 h$ g1 m9 L# Z              。。。
8 v# l0 {3 K5 U! o又会出现syntax error near line 5 at <;>!
5 J+ A: T' E5 h$ p8 S, O. @$ u0 R" j$ \3 W  O
各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。
, i) X7 z3 Z5 \& @# Q% I0 b
* H4 F  z% _5 j6 h; vnow_depart_num := 1;8 w' g( a3 w$ z- @4 O
begin_time := 0;
* e) d0 J4 A: f7 X5 n- u+ dwhile 1 = 1 loop9 I3 i9 \' h4 S) k* d
depart_time := schedule[now_depart_num];
2 x$ f* t- ^" F3 p wait depart_time - begin_time;1 W* t& b+ w8 W3 r  ]: i9 C- E" d# f
....
* L1 Q. Q$ {0 I$ |" K5 ~" P
: D# n$ G; P* U begin_time := depart_time;3 a" r) F5 b; [' H3 B6 M
now_depart_num := now_depart_num + 1;4 ?. V/ V9 M3 O; E  X& }- x
end;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time
8 l0 ]! j% X; f( D$ Odepart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间& i! c1 H) D) r9 N; P
每次等待以后把now_depart_num增加1,表格就往下走一行。
$ E; e, B/ C6 B% b; P# y" Q" L+ H4 e" Y. J' G
另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-8-19 22:36 , Processed in 0.026734 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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