设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 4561|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:
* o9 r' p: ?  {- e  Y% Dis       
+ _- s$ f( c- p* p* W0 qdo       
; i1 f% m5 {: t4 L! W, W        waituntil EventController.simTime = Schedule[now_depart_num];2 i' q) ^/ b3 k' {
        if zhuZhan.empty = false& q, A* Y8 o. u) k  @  Z, I
        then
: D" T1 w6 @) z) z3 H                zhuZhan[1].move();
7 B4 _; y9 j- B3 Z' A* t                now_depart_num = now_depart_num + 1;                # R4 [" v& f  K( h0 ?
        else/ q6 X! u& t& J( C0 m
                waituntil zhuZhan.empty = false;
8 D$ s" Z4 U7 T7 @                zhuZhan[1].move();/ u; Q" g: v; @6 D8 X# u: n
                now_depart_num = now_depart_num + 1;
# N8 N/ Y) @; s& w& C& H        end;                                        + S9 H$ ~. z. i) Z, i
end;. A* O; N2 a, l8 U! z

% ^) o+ [3 n4 W$ z但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement.
: \0 D$ D4 H* y若是增加一个局部变量,如下:
6 u5 ^7 S" C/ p. bis
, d& G! B% Y9 S0 M              depart_time : time;
# Q% V' `5 T- Bdo 4 J5 w: |6 ^. |6 @
              depart_time := schedule[now_depart_num];! _6 b& T- X; [6 ?+ g/ Q
              waituntil EventController.simTime = depart_time; , A9 v4 V+ c* i9 y5 e  Q
              。。。
+ U: @4 \8 F4 m) t+ g( i又会出现syntax error near line 5 at <;>!
# ~) E2 }8 J) V; Y. u# m
$ Q+ |- [- x1 n1 q各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。
# o6 ^6 d! X2 c. a
8 P3 J" O. m- S0 s/ D8 snow_depart_num := 1;
  Q7 c- W  E- I* `begin_time := 0;% S" [1 J  a1 Q+ p' v
while 1 = 1 loop  f( S4 R5 z" p( V
depart_time := schedule[now_depart_num];
* r. c* P' A) r% y# W wait depart_time - begin_time;
2 U% h  b! K' p0 w4 C9 X% H9 ? ....
6 q2 _# q* _8 d1 H
, M  _  ?' ]' f begin_time := depart_time;8 n" U5 C4 ?2 N+ M7 |- T
now_depart_num := now_depart_num + 1;( P+ R  @' n& _! A. D8 ~. V& {
end;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time, g- M# X% I: W/ C
depart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间0 d4 e  m1 k- f4 d
每次等待以后把now_depart_num增加1,表格就往下走一行。, B) p2 m8 I4 Q& M1 h; I

( f. @& O: \5 v7 z/ t另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-7-1 11:42 , Processed in 0.013841 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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