设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6262|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:3 z" p8 [! G: M( c: O) c
is        0 Z! S' d1 G# W6 _
do       
/ E$ |! y" v- a  Q8 S5 h4 g/ T7 Z; X        waituntil EventController.simTime = Schedule[now_depart_num];
+ Z$ F: K. \6 \9 ?        if zhuZhan.empty = false- B3 _- ^3 ~: i2 [8 V0 q
        then
# g# M" n- l; v, U                zhuZhan[1].move();
$ K7 ]: r! @. U8 R0 L: k/ [$ `                now_depart_num = now_depart_num + 1;               
* P+ @8 o* o. C        else3 E) U# Y; Z0 m$ o
                waituntil zhuZhan.empty = false;0 v( w9 U% q( ^, R9 m3 J  v
                zhuZhan[1].move();$ i3 v; o: Z4 x; O3 L
                now_depart_num = now_depart_num + 1;9 B  l5 a: L: o* W& K- A
        end;                                        / s. z" E% E  t, @1 b, q0 ]
end;
0 M6 Q) ?& b" f/ z* {& N* ]! F4 Y6 u
但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement.
! @4 d1 X) }/ f# I6 F# n若是增加一个局部变量,如下:
; n) s0 d" b. }& xis % a3 _  R) h0 A3 C) r( v( I
              depart_time : time;
& p& h3 W8 x& V; B" N3 w5 t& Ydo . \* n% s, ?3 A8 D6 x3 S  y
              depart_time := schedule[now_depart_num];
* }, w% c5 h' X& O& [' Q" _              waituntil EventController.simTime = depart_time;
0 h$ B" @% R+ H& u: H! q              。。。1 J. C3 M$ G3 F7 Y4 `
又会出现syntax error near line 5 at <;>!
! h: B1 N* n' @* s) w5 k) K& K) y) \9 T" {$ p
各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。$ Q/ t4 |1 }  E$ p1 P
+ u: v; r4 M9 l/ t1 @8 V% J% e
now_depart_num := 1;# ^. Z) ^" T0 X/ O+ g) K& V' Z
begin_time := 0;
3 Y0 ]6 t/ p9 X) a8 }while 1 = 1 loop
! [1 W5 u: S+ u7 y; U. h) F depart_time := schedule[now_depart_num];
) U5 v% k" ?- M2 f3 M0 ? wait depart_time - begin_time;& [' w9 P; `( }7 q
....
$ S1 I. i. A* l- A+ ^# H3 p
+ n1 J/ p3 Z3 M! {; |- q begin_time := depart_time;
3 v( U5 `8 w- b* ~, N2 X8 ]+ h now_depart_num := now_depart_num + 1;2 |% q3 m& w' m" D8 r
end;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time
" F6 W: V$ G6 K7 ~$ y/ |8 b( k1 I4 Bdepart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间0 @' ~" C8 T( A. x
每次等待以后把now_depart_num增加1,表格就往下走一行。
/ Z0 M7 J0 K9 g' C
2 C$ T6 b. U  T+ q& J另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-9-4 22:41 , Processed in 0.020392 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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