设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6126|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:
  @3 C$ k  o( E( y' G, eis       
4 R* h6 h3 j# y* tdo        # V/ _( F& G7 ?% O0 K% N1 ?' `' r
        waituntil EventController.simTime = Schedule[now_depart_num];
, F2 Q( ]1 e" T4 u+ y        if zhuZhan.empty = false& I. o1 o, q) R9 U: h/ e( E$ l
        then
3 f  A* F' b  M) w                zhuZhan[1].move();
% w5 {2 z7 @( Z/ E% Q; H                now_depart_num = now_depart_num + 1;               
1 z& d9 V5 a2 ~% y6 r7 Q3 o        else
4 v7 _+ o1 o# t8 @! E; p& _6 W; {1 r                waituntil zhuZhan.empty = false;
$ f/ @* K, m* W8 p, q                zhuZhan[1].move();
: ^6 t& v- n  l" D                now_depart_num = now_depart_num + 1;
' j, i* j8 E1 T4 |8 Z7 ~        end;                                        - R& a8 h0 V: |6 o! H! C% Q
end;; G- t9 K' |! q* J* g

5 v/ T% T, D+ {7 W! n但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement.
2 d0 L2 J6 D# t$ B8 ]+ v% V若是增加一个局部变量,如下:2 j3 ]$ [. v9 N
is
* G) ~, T( Y$ L  V' e- P; j              depart_time : time;# M5 F) ~4 F. l9 o- @# |
do
4 O+ d) k' c) u              depart_time := schedule[now_depart_num];, x9 i2 ]1 g) M2 g0 X
              waituntil EventController.simTime = depart_time; : g% R4 J( L& `) D; A3 Y% P
              。。。
9 i9 V1 U5 j8 m! j又会出现syntax error near line 5 at <;>!5 y4 T; H5 Q- P4 ]8 }* d4 W3 L0 M/ G# j
" @# k& e. l7 e3 x/ |. B5 g$ R, {. p! N
各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。& f2 z# a" z; o' X3 o8 g

: K5 z- ]* F! L1 k, X  ynow_depart_num := 1;
' \$ @9 B3 X0 A! Qbegin_time := 0;! o% b, u7 a# _! J1 a- o
while 1 = 1 loop3 l8 J0 F9 W; K, o* c& N
depart_time := schedule[now_depart_num];9 A: T2 e4 S6 e  a
wait depart_time - begin_time;; m- H, n) E* k4 g& R
....9 ?" j* j$ @3 D
  z4 c( {: ?5 P2 O+ u/ n
begin_time := depart_time;
) _1 ?! R' n6 R$ r- q- [% z now_depart_num := now_depart_num + 1;
% k- M2 J1 u6 f5 Oend;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time0 L  M  ^" }$ ^
depart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间$ J* a# F; N) P+ o6 z5 T
每次等待以后把now_depart_num增加1,表格就往下走一行。
( T2 L. H; c; L: F# J1 t4 ^' q9 d+ Y5 V- M& d
另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-7-31 19:52 , Processed in 0.021830 second(s), 15 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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