设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6324|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:* F5 Y, U; l8 c! \2 K3 g# d3 r
is        : w# r$ @+ C+ W' ?5 ^
do        / L/ r  x; [' d7 O; w
        waituntil EventController.simTime = Schedule[now_depart_num];3 V' L# y* ~# h* p
        if zhuZhan.empty = false
5 q/ U# l+ K! w; u; Y. w. n3 j        then
. C. A4 \$ O/ I                zhuZhan[1].move();
2 t& R, @! U* F8 W) {4 {                now_depart_num = now_depart_num + 1;                ) F( B% F1 a3 J1 v3 K7 E
        else7 a4 U% R; Y2 O* T* h9 `$ X+ a
                waituntil zhuZhan.empty = false;7 `. b1 i* A' S* ?
                zhuZhan[1].move();% d8 V! Q& x1 g4 q/ o0 Z
                now_depart_num = now_depart_num + 1;
" Z! U4 ^& N7 z& t4 h6 ]! y' J        end;                                       
( W3 J: E6 L4 y, M9 Q( cend;
" Q( f4 |& d  s# y$ N( w
6 V3 S. P, K, R. s9 b) X但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement. 9 {& h' J+ E% [3 Y% g
若是增加一个局部变量,如下:  L1 a' T3 t  [
is 9 N5 i3 y$ y7 e
              depart_time : time;  P' \& L! W2 T5 u
do
' W  z% _+ J0 ~- O) [1 o, M7 I$ L              depart_time := schedule[now_depart_num];5 n" V3 D  K* p3 E
              waituntil EventController.simTime = depart_time;
$ o7 x- k% R8 O" L7 c              。。。
9 z! c4 Q4 q8 m! f又会出现syntax error near line 5 at <;>!
2 P8 E- X# k6 Q9 t) _- t" T+ U7 c% @( Q
各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。$ r: O. A& ?) F/ a7 V

) ]- m7 O% [' t: dnow_depart_num := 1;
; Z1 E1 y, Q" n' u7 z! wbegin_time := 0;; I9 X, b* t  E+ d2 k
while 1 = 1 loop
9 Y4 A% e! F) I/ s0 I$ | depart_time := schedule[now_depart_num];5 K* W0 r9 T& u
wait depart_time - begin_time;
; x( d& m' h* j8 R/ D; }/ E ....
) {3 N4 {7 p1 f+ K6 d& P6 O+ |6 D% F" S
begin_time := depart_time;( P% @+ b" ]* b$ i. k0 b
now_depart_num := now_depart_num + 1;
" P& q0 k* P. h4 ^6 D% `end;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time% k* ?5 {. t  S4 q+ U: Q3 |2 r
depart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间, @" C2 g( C% z& W+ m
每次等待以后把now_depart_num增加1,表格就往下走一行。
1 t: G. U/ s& C* u4 y: ~0 K8 I$ h  ~, w/ K5 ~1 O- b7 \: p+ J9 V
另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-9-18 14:35 , Processed in 0.014972 second(s), 15 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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