设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6213|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:, R& m" X  {# O4 Z! c; W
is        ) `: ]3 }* R3 p" [
do       
& I2 x- q/ \) o& @        waituntil EventController.simTime = Schedule[now_depart_num];% r9 a% k( H6 i( X. G) v$ x8 d
        if zhuZhan.empty = false8 `% I, L" g+ ~. G5 p! o' \7 ~$ P( Y
        then ; V! _1 U7 J6 v# O0 P& S! R' `
                zhuZhan[1].move();
- E5 ~7 {, i0 S4 S                now_depart_num = now_depart_num + 1;               
( K5 f) n+ M1 \, r4 `8 m$ G        else
& f3 z4 m4 W9 V                waituntil zhuZhan.empty = false;( A( d& g9 s* q
                zhuZhan[1].move();5 T+ r" |7 s7 U, x7 }5 w( ]
                now_depart_num = now_depart_num + 1;
; a# S$ F4 g+ s* M) z) o        end;                                       
3 ]$ K2 n) l: ~5 e8 d9 Vend;
/ }9 u, ?& h6 F0 S+ g# n! K* _/ C
但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement. 7 v+ F8 J/ g* c9 |0 q
若是增加一个局部变量,如下:
0 i) F9 m, Y& o- K; f" }is
: @. [5 Z7 p1 \9 l7 c2 U              depart_time : time;
; Y* r! ~: g$ A* ado 9 U* H: p. e4 O" m1 M' x
              depart_time := schedule[now_depart_num];: v- o2 @; [" B1 \
              waituntil EventController.simTime = depart_time;
+ L4 ^! z3 v2 Z              。。。; J# |* K& ^- V( H7 j& x1 ^+ F
又会出现syntax error near line 5 at <;>!6 ^( J7 w0 z4 I6 J0 s& W7 S
0 o0 i4 v- n8 c6 q  Q
各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。
; M. }/ g- `7 S' X( q3 W' g+ ~! \2 a+ D& B
now_depart_num := 1;' c3 d, O! R' B( X
begin_time := 0;* A7 v9 p- l, t7 F7 o
while 1 = 1 loop
2 g5 G1 m( S: k5 A8 S8 z7 m2 h. g depart_time := schedule[now_depart_num];4 c! T2 ^0 W0 L. ~: p1 g
wait depart_time - begin_time;
! w0 r  A+ a3 Q* F1 T* p6 C4 T! v. }% ? ....
$ T) E6 a4 P! A1 X# K
+ E- C2 e4 }. K0 x: i' _ begin_time := depart_time;
0 r. c/ q% X9 I now_depart_num := now_depart_num + 1;& ]* l  V' ]2 o; e1 a$ z
end;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time
/ s- h9 R. d; B0 Z0 k+ {  Ydepart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间) H* b2 I) M" w- Q2 [& `
每次等待以后把now_depart_num增加1,表格就往下走一行。3 E6 O5 r  L+ n" h. f; J

8 @- \2 R# _% d/ j3 c. r另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-8-22 09:14 , Processed in 0.014776 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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