设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 4629|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:
1 G6 k6 z6 I. q6 Q5 Eis        / m. u: }6 D' C, ~( o8 z
do        ) B8 |+ P) B- `: F4 ?2 {
        waituntil EventController.simTime = Schedule[now_depart_num];6 m% {+ d, k" G# q+ _
        if zhuZhan.empty = false8 {3 g; B* E& U# I( I6 M) Q
        then 6 H4 W) J: n. k2 R2 V$ @. W. V$ \
                zhuZhan[1].move();8 @! L" t% ?, s/ V! m. s) L
                now_depart_num = now_depart_num + 1;               
- N$ N' a3 p1 u0 z5 u/ Z# \' |        else
- E8 B$ g1 y( v+ ^                waituntil zhuZhan.empty = false;* H1 a" ~. y4 C" V# c3 r+ `: L
                zhuZhan[1].move();
: w7 [4 T, a6 n  ?$ h1 F                now_depart_num = now_depart_num + 1;' g) \7 S  q' ~2 ^+ l# K
        end;                                       
5 `9 ^5 _' {" S' @" n6 k/ ~9 p5 Gend;9 ]; ^. G2 V" p

: @2 ?- b" H4 K! }" K/ ~, }但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement. , k* D: i2 s) b5 \! A
若是增加一个局部变量,如下:; Z& r. D* m/ Q3 N3 X! A
is   }- \  X, g4 I2 T' k7 h# Y4 w
              depart_time : time;
8 k' x1 z0 v8 f2 Odo $ Z2 K$ e; u) e' ]  I( {$ W( X: }
              depart_time := schedule[now_depart_num];( s, U0 f/ @) B* `8 S& ^& v
              waituntil EventController.simTime = depart_time; ' T$ K2 V0 R, e2 d- h
              。。。3 P3 {- i( Z- M/ t
又会出现syntax error near line 5 at <;>!8 d/ {! u- x$ U* W& E4 Q6 D
: R2 r) W( Q& K9 m2 {
各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。
/ |: n7 ]5 q  l: b$ l! X' O; H/ \  |: k/ M+ X
now_depart_num := 1;
! K. g2 W& P  r& ibegin_time := 0;
  G# j( A1 {# u* h3 |while 1 = 1 loop
" g9 L& S. u( A4 ?: F& j; T: \" @ depart_time := schedule[now_depart_num];
% F5 R, z* ~6 ?/ m! v4 V wait depart_time - begin_time;
2 R* }9 ^* j, ^0 X/ R0 K3 s ....7 N- e1 F. R- V* O$ w

2 r- y* |! K+ F1 |! s+ r begin_time := depart_time;
' O6 Y  n) ?& \9 T- a now_depart_num := now_depart_num + 1;' t' ]& v8 E# M/ H' W1 S. O5 `
end;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time/ P9 E4 g+ Q2 j, X8 C
depart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间/ g# D0 h; @/ e. e- ~! U$ m
每次等待以后把now_depart_num增加1,表格就往下走一行。3 X( G" x  t4 i& z* D

" O, p. e" N& }, `3 E7 x2 t另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-7-16 04:23 , Processed in 0.014656 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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