设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5458|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:0 R$ @% y% l" P* B8 y# K5 ?/ D+ M$ x
is       
7 @  l3 ]- @& N1 w, Edo        8 y; p% u, q5 t. y/ ~1 S0 X+ n
        waituntil EventController.simTime = Schedule[now_depart_num];; v0 w, Z, c3 t' O4 A% A
        if zhuZhan.empty = false
+ ~* v- P, a9 |" ^! h2 ?        then
. y+ _' q) l2 x3 F. Q, U, x' U                zhuZhan[1].move();
; ^2 k- o& w: e5 k6 b1 q                now_depart_num = now_depart_num + 1;                3 U; R( N, Z& c- k# N* I
        else  o" d$ _, ?6 R2 o+ y
                waituntil zhuZhan.empty = false;1 N& c5 @# H' p4 s% t0 s  a
                zhuZhan[1].move();4 N/ x7 D: u' I2 {# [) j4 l7 a
                now_depart_num = now_depart_num + 1;
/ y% c6 _7 z% P$ e: }. O# y4 p        end;                                       
" d! V  ^, r6 K4 h1 kend;0 h) k$ C3 [/ R1 v
* Q7 S$ j2 z/ w
但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement. " i7 L- Y) \* b' U5 z/ c) W& G4 I
若是增加一个局部变量,如下:/ z3 O- Y& Q- w
is & K: L8 T0 s$ H& M; v" ?
              depart_time : time;' v7 g: m  @' m8 F5 ?% S
do 0 `) e! Z3 `* w( n& A  j; V9 `
              depart_time := schedule[now_depart_num];% s& E4 W+ a* A$ m
              waituntil EventController.simTime = depart_time;
! V7 ~, U' L3 s6 F; \4 t+ r              。。。4 t7 {+ p% y/ B4 `! e  K. X
又会出现syntax error near line 5 at <;>!
1 R* H% L, X( c4 x, u1 J( S: |
5 F9 T7 J! l1 }! d2 f; `各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。/ |8 k9 K2 A; k" g/ K! Y) b3 |. z
2 S% k9 d; x2 ^) z% H
now_depart_num := 1;7 y) c- P- `- K. W( F  T
begin_time := 0;5 Z3 V6 d$ W7 }% g& G/ J6 q
while 1 = 1 loop
, h' L% x6 w* Z' U7 d- A depart_time := schedule[now_depart_num];% F. I* [) M) e$ o* ^+ A& r; T
wait depart_time - begin_time;! A# T6 n. g4 C; E- R9 q& S/ w- T
....
: V0 D! I" H4 l8 |! V, ^7 H3 E- T, _& t( w* m+ O* ]! n  ~& }+ O
begin_time := depart_time;  g: {; ~4 p# \3 {6 C3 P# T
now_depart_num := now_depart_num + 1;
+ x' l$ I) z7 W  jend;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time
8 Q, k) m$ G- H4 y8 X) P' }6 C4 zdepart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间
4 F8 K8 i8 \3 i每次等待以后把now_depart_num增加1,表格就往下走一行。% f: N+ q, q( o$ `% p- P5 ^2 _
9 j  M# n" C/ ], w. x# {8 ^
另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-2-7 11:19 , Processed in 0.013441 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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