设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5486|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:
+ \: {0 F$ h- K! r: Q7 ais        % z* E, r  U( y: I. P( B, L
do        * B: t  H. a4 L5 |4 n
        waituntil EventController.simTime = Schedule[now_depart_num];0 M, M! [/ t1 I  K, @
        if zhuZhan.empty = false
( S7 C5 Z! j# a8 u7 ~/ L0 R4 d        then 7 u( K& p. _6 p' i' Q! ^; r8 a3 ~
                zhuZhan[1].move();& q" I: w' w; @$ ?; |
                now_depart_num = now_depart_num + 1;               
" g2 T5 C3 \+ I" U4 [% y        else9 c  f/ a- ^6 i$ v. }
                waituntil zhuZhan.empty = false;1 K' T, `) E- ]
                zhuZhan[1].move();, W7 g% z3 O; }
                now_depart_num = now_depart_num + 1;' f& d& z7 @& x- g+ j1 ]  V2 I. g
        end;                                        ! f6 ?. \  ~! u( F* c# f7 j. P# Y
end;6 N# G. z6 R. F% g
6 C$ j' O# y9 i3 [' |1 a5 G
但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement. " b% S1 N1 i0 n2 A! G
若是增加一个局部变量,如下:
. `3 o7 P  R" F* r5 d! @is
2 ~9 h( q! H( s% L4 }4 O5 u              depart_time : time;
' Z+ R* j% M4 v. z- Edo
7 B) x  T, ?6 F# @+ E, y1 q              depart_time := schedule[now_depart_num];
) q) \( @' F) Z/ F: T              waituntil EventController.simTime = depart_time;
! p5 `' n. `2 _) _/ d) g# M              。。。4 Z$ ?& J, ~3 }! v$ k- L
又会出现syntax error near line 5 at <;>!
5 V7 p9 E3 d9 m: E5 e9 z& A6 D2 r  q
各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。
# C6 r1 ]+ {4 `: Y: k
/ Q9 c1 |. T/ E& U( D% w% Unow_depart_num := 1;
/ c. X% a8 G0 L/ Q6 Mbegin_time := 0;
. P$ e5 j% F! }: K& awhile 1 = 1 loop% |. x; t+ l- [/ q- D
depart_time := schedule[now_depart_num];
( j: G) S) \' Q) l. k wait depart_time - begin_time;0 ~. A* Q8 u8 W8 U: n+ A
....7 K( x# |2 }. F" _. d) m
! ~9 _! F" U  D, U% M) u: c
begin_time := depart_time;
( v4 o$ i* W0 |5 B1 U9 V& r now_depart_num := now_depart_num + 1;, z- ^8 X5 }1 g" X) L6 r& A5 ^
end;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time
' `5 S8 b5 G; P0 Jdepart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间
# d0 c1 M, ]* O/ f1 |每次等待以后把now_depart_num增加1,表格就往下走一行。' Y8 Q* O4 _6 Y2 i; S8 N" `

1 y8 x( m4 m: J- r( x/ k/ E4 G" x. ?  b另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-2-14 05:28 , Processed in 0.017111 second(s), 15 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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