设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6297|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:
/ @# b/ U" Q  `" lis        5 a0 {9 u; b/ z5 ]# I/ x' r
do        0 x9 k: ^5 b4 I( _9 @
        waituntil EventController.simTime = Schedule[now_depart_num];; o, e1 p3 {* z
        if zhuZhan.empty = false
  }9 P  c" q, J9 M* L        then 7 _! Y1 L  V0 {0 Z3 q. w: z
                zhuZhan[1].move();3 C) l' L# s1 w' _- t/ i5 G
                now_depart_num = now_depart_num + 1;               
* }8 C0 t3 P2 @# m7 L& U: @" A5 s        else5 f8 P" Q. `+ v
                waituntil zhuZhan.empty = false;6 U5 d+ t( R9 v
                zhuZhan[1].move();4 f3 s8 \! }& j. F. r$ f) u) v7 T
                now_depart_num = now_depart_num + 1;
, r2 r8 O  H5 Y; k3 B- Q        end;                                        0 m% i; z/ N( l9 l0 S8 q# H
end;
8 c. l5 H8 z  ^; q& G" Z( \" ?
- v  y3 z2 d" _9 E: z# f但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement.   @- C/ E7 ^5 h. O
若是增加一个局部变量,如下:
3 H" n# K& C6 }5 U3 {8 Gis 6 @. h" z. G& X' [
              depart_time : time;
9 E: j  f$ [" n% ]1 k- C6 m) Qdo
4 d( D* `1 H; o1 Q              depart_time := schedule[now_depart_num];
1 G2 A! I. I4 M& `1 `              waituntil EventController.simTime = depart_time;
8 o( }( `- S8 z' M; ~# {6 x              。。。+ S$ J: z8 t% A$ u
又会出现syntax error near line 5 at <;>!
! z  \- I8 W" P) V4 |& \. ^
$ p5 s! o8 [2 c7 x# {6 n0 E各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。
8 I( ~0 x* C" r5 U) o! w6 H, g# a/ y
6 m: ?( [) u6 ^now_depart_num := 1;
! a/ ]/ e+ q' @8 w9 W9 L3 j' Kbegin_time := 0;7 b8 q  I) D5 d, U' R
while 1 = 1 loop# G$ x2 z% B, R7 |9 V
depart_time := schedule[now_depart_num];8 ?( q: h% ], @! f
wait depart_time - begin_time;- n. ]" C; R+ V) i4 s. I5 R
....9 [$ M: M" `5 D1 _# Y0 s( n3 ~

1 V  c/ M$ Q9 h; @+ g4 @: ^5 v begin_time := depart_time;
* t& g- t' k% ` now_depart_num := now_depart_num + 1;, n& d/ n: T# J% K9 i
end;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time
' \8 Z) H" _; Z# l6 N' s3 I$ jdepart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间$ J1 ?! ]1 b: n1 K# ?
每次等待以后把now_depart_num增加1,表格就往下走一行。
: v8 Y4 u* P6 S( E8 |0 P9 p" }
4 ?! @& X+ a- \- g9 v$ Q另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-9-13 13:23 , Processed in 0.016431 second(s), 15 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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