设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5715|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:
" b2 k& y3 M' T# M7 z1 _5 Nis       
/ S4 l9 V2 a6 B' Fdo        6 m% g) u& E2 d1 {
        waituntil EventController.simTime = Schedule[now_depart_num];
3 x4 }5 d0 j' q/ M8 w        if zhuZhan.empty = false* Y' I0 t) f* d1 ]0 k( c
        then
. t! }# @' |. X4 j3 }$ T$ _                zhuZhan[1].move();/ N0 D( w3 y2 W& J* i( d, _
                now_depart_num = now_depart_num + 1;                ; m' F$ F4 ]% K5 `" x" }1 f# R3 r
        else
+ {; |. z$ k0 Y& r, A, y  d                waituntil zhuZhan.empty = false;
6 R) r# g: z7 p. M2 {+ X; ~                zhuZhan[1].move();
! v6 p) o+ S2 R2 ~) R* c                now_depart_num = now_depart_num + 1;" Y# w: g9 |! ~! W( c
        end;                                        6 o) J# |- M( Q! }6 b- B5 X4 h0 l
end;
! U& l9 p6 U0 D8 K# L* D; w; A  v9 _% l  ?) W4 d) ^1 ?
但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement.
! D7 Y& H3 I' f" t" B+ `若是增加一个局部变量,如下:
. E9 O  F- J- l5 l( fis
$ ]) L1 |5 f0 [  R, {' d' U9 e              depart_time : time;
% _; S8 g4 U; c1 h9 Tdo : Z3 A9 f( O) F, L; _& M
              depart_time := schedule[now_depart_num];, N' x* v1 E" l# ]  o3 E3 I* ]# o
              waituntil EventController.simTime = depart_time; 9 t# O) g4 |/ b6 t7 H9 |
              。。。
8 Q" j, N) l7 V* S3 I1 H# [又会出现syntax error near line 5 at <;>!
- @' X, w% s7 ?2 M: y
( x- z2 Q, I" v0 \: d, U) q& i2 z各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。
2 D+ [3 k0 o9 a* ~) a% V. e. e
; }8 B# M1 Z( v* A& {9 Mnow_depart_num := 1;8 y) Y8 C  T$ h2 M
begin_time := 0;
; Q7 n4 ^1 P3 \5 twhile 1 = 1 loop
& ~# M4 C1 B& b% |. Q depart_time := schedule[now_depart_num];' R3 e+ `- R! p0 q& _: ^+ |
wait depart_time - begin_time;% l1 m% b9 `' ]% W
....
0 \. m" T" K, i7 b$ v
& x3 M. y9 O! a% d2 p: [ begin_time := depart_time;
# X+ R  g; m$ @1 J now_depart_num := now_depart_num + 1;  W) U  h4 l0 m; }! W
end;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time
4 `' n. _. }: L: h$ a" |, e$ D1 l5 Rdepart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间
; v; {% V" C! S* P1 z. B* x每次等待以后把now_depart_num增加1,表格就往下走一行。
; T% I$ p  Z3 }0 ^2 F& s. }$ X1 t, A
另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-4-18 01:05 , Processed in 0.012369 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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