设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5302|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:1 c% D; G  t: S9 a' ?' ?
is        " d( S4 X3 \7 E* Q3 B
do        3 T& ^8 N- S% y- `
        waituntil EventController.simTime = Schedule[now_depart_num];
6 i& V: g& _( H8 h6 N: ^3 n        if zhuZhan.empty = false
4 i! {2 F+ @5 K        then / y' _0 p/ ?) d+ p. o  M) z. ^
                zhuZhan[1].move();
, t/ i0 i. y! i5 U, U, x                now_depart_num = now_depart_num + 1;                . D. C8 ^+ S, A
        else
8 T9 z, o+ C$ m+ x                waituntil zhuZhan.empty = false;
/ M5 ]  ?1 H" Q6 T: F# x* B5 c. r                zhuZhan[1].move();
/ ?  P2 O+ c" O4 e* i) [4 P) m- H                now_depart_num = now_depart_num + 1;9 k; U6 g! @: G$ q
        end;                                       
3 H3 l- _" W' Send;  f& w/ D' c, D
- P6 N- }& q0 y" l1 Z
但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement.
2 K$ N! ^& Z& G3 O8 w/ c. G/ T1 ~若是增加一个局部变量,如下:# e, o" C1 p1 Q! P4 ?
is
% X2 f6 e1 r$ z4 q9 Q8 f; ^              depart_time : time;2 {) [- r* ~! H( K
do " \5 R( @; x( m# a+ s' _) s8 _
              depart_time := schedule[now_depart_num];
* |, ^& n% n+ U2 f7 E              waituntil EventController.simTime = depart_time; 1 m+ D* r0 q9 ^7 D; `! Y( G6 b5 t
              。。。0 z* H/ N0 T$ A. l+ K
又会出现syntax error near line 5 at <;>!6 f5 @  Z$ V& _# X6 v. O
# N2 `. Y4 t5 l
各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。
% R$ f) q! G$ C# D' L6 `. j$ `1 h# y) ?( y
now_depart_num := 1;; b: M$ ~1 l2 b' m# m
begin_time := 0;
6 K- e# s5 ^2 q! A/ c2 ]while 1 = 1 loop" ]/ Y9 e0 u6 F7 ?, A, X8 I" t6 X
depart_time := schedule[now_depart_num];! _; I9 U3 \$ x! U
wait depart_time - begin_time;
, d; B7 K  B7 L: @4 G ....& k9 j9 m3 u) F# N

2 G! x, T8 \+ Q9 @# f begin_time := depart_time;* t/ d, x& r9 s0 L7 g3 N  ^4 r, O
now_depart_num := now_depart_num + 1;
: X* P- x7 N1 H5 s3 d! {end;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time
  p$ c" M2 H! J, Vdepart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间
: L3 V, A; K" B' [每次等待以后把now_depart_num增加1,表格就往下走一行。
  M# q- [# L% n5 p" y, g" j
& R. W+ L" l9 J另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-12-16 03:47 , Processed in 0.014283 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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