设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5905|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:$ W  q+ {8 P3 B+ r
is        : \$ V$ r0 J& `, W6 S
do       
  d$ U0 [; p/ c2 {7 _. V9 l1 Z/ o        waituntil EventController.simTime = Schedule[now_depart_num];' t9 ~, k: @2 I$ v* s1 o
        if zhuZhan.empty = false% l$ s, @6 \1 f' a8 {
        then
. l. ]) u: [1 J( e) }  `                zhuZhan[1].move();  e+ @0 R  p8 I4 e9 C& F0 v
                now_depart_num = now_depart_num + 1;               
7 a- j0 S/ w- I        else
# ]6 u( A6 s3 v& T                waituntil zhuZhan.empty = false;% }: s! ]2 x3 a( n, G4 f% Z
                zhuZhan[1].move();7 t' n- x  S9 @) J: y
                now_depart_num = now_depart_num + 1;
8 \+ o1 Z& C/ s+ {  G        end;                                        8 N/ j) }: C7 i
end;& L- o6 j# I# g) a* X& w

1 }- f& x7 W5 p$ k! o6 o0 L  ~但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement. 5 J( K  Z( o5 Y% S$ e
若是增加一个局部变量,如下:
, M0 h+ J% L, E4 ?; k: ~is
$ v, E" w+ |9 Y' r              depart_time : time;) _/ b- s. y8 ?8 l- W: k8 P3 C
do 8 r0 J$ s* J5 w, Z4 J
              depart_time := schedule[now_depart_num];& q3 s0 d; Y# X/ |# S8 B# B9 h% E
              waituntil EventController.simTime = depart_time; 3 ?! a" C( {! [. y3 L+ V7 D  j$ B
              。。。( L0 H6 c$ I) U! w* u" m
又会出现syntax error near line 5 at <;>!# f% U6 g8 N( \" c
) }& r$ A6 X) k
各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。
! n( r$ O+ m- `/ [! I) e  f8 v: s0 A, \& T4 ]
now_depart_num := 1;* x, f- y' m( L
begin_time := 0;
: {% m" `8 h2 M9 Xwhile 1 = 1 loop. s% J6 {6 {0 a: X
depart_time := schedule[now_depart_num];, O1 Q" T2 _; G/ c% y7 _
wait depart_time - begin_time;
$ g# G4 @4 p0 M, |, t5 W0 F ....- S* G" d% N/ R3 b5 ]3 U0 I

) X) h, \8 x4 n5 K begin_time := depart_time;. O+ ?  a5 |* \9 z2 W& Z5 j
now_depart_num := now_depart_num + 1;+ H, G( O$ J: y. M3 u
end;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time& t8 C( I" \% r7 h6 G4 A
depart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间
, _& k6 V% o/ o: S" l' V; c$ }2 B, J8 g每次等待以后把now_depart_num增加1,表格就往下走一行。2 t  T6 Z5 `/ J8 Z) t* @* j
& ~, M& |  @* o0 [" G, A1 N: G
另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-11 22:30 , Processed in 0.015283 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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