设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6008|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:
' u+ n8 e1 c1 [6 m3 K$ pis       
+ l2 b2 _* h/ m" u. d4 V( Rdo       
  |1 u/ N" r! [) Z        waituntil EventController.simTime = Schedule[now_depart_num];
7 n4 K+ r( B  v. O3 f! M* S( [        if zhuZhan.empty = false
' r! B3 H8 R; n& D* [7 e/ J# m3 S        then
. f+ @* n+ T+ V3 O7 o$ i                zhuZhan[1].move();
; n. x5 L" `  |* y                now_depart_num = now_depart_num + 1;               
% O7 r  [; @9 x        else1 [2 V* J8 L8 {  {( Y1 N
                waituntil zhuZhan.empty = false;, i) k( n7 d$ `# \/ b0 {: ~' r7 w" |
                zhuZhan[1].move();; \- v( o7 a( k! S+ L
                now_depart_num = now_depart_num + 1;& m3 ]5 i3 y: S" s
        end;                                       
9 n& U: {/ P% }: G9 Cend;. j, C' y/ o! D) X" j

' ]8 r5 y7 r! ]8 k% ?但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement. , b% N1 X8 S- t. R
若是增加一个局部变量,如下:; K; c8 m: f1 j* X. Z1 D0 V
is
) j! p1 k4 v( w3 J6 l3 V              depart_time : time;
* l4 r# i8 ^  y3 V* f& N' ?do $ T* r% m: v. J& z. z1 ~# ?  y
              depart_time := schedule[now_depart_num];
/ R6 J8 A4 T% v) `) N              waituntil EventController.simTime = depart_time;
9 Z& H9 F: Z9 B* g& t' u              。。。' P/ ^4 h' c: P- B# {" @% ~
又会出现syntax error near line 5 at <;>!
1 y2 C( F6 c* W! f5 n: X' F9 L# w7 s+ _% R) z4 }
各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。2 A5 k2 @" i$ B: G3 x" T
9 M9 {" w- E( t4 }; P/ U3 z9 [- \5 v3 S
now_depart_num := 1;8 ?1 x! i2 R. M
begin_time := 0;
+ n/ g- I. c# q# }while 1 = 1 loop
4 |3 d. W4 [" d/ P4 U3 y7 p# V5 l" G depart_time := schedule[now_depart_num];$ e: D7 I/ E. q. Y" o
wait depart_time - begin_time;
+ b' u% k: P4 B  Z  n; H0 U ....6 d$ ~: n! K2 S
/ ], w4 Q, @: Y( H6 x9 Q' A
begin_time := depart_time;( O+ g3 X& ]. N3 g
now_depart_num := now_depart_num + 1;
. o, P% N9 q# I: b- ]% gend;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time
$ T) E. @  A$ ^depart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间! V1 j% r  q2 p# z
每次等待以后把now_depart_num增加1,表格就往下走一行。
7 U/ R* Q+ J3 m$ V/ W. _. \' f# i& ]+ }) X$ ?  t9 T* a
另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-7-9 04:10 , Processed in 0.018354 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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