设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5503|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:
# O4 J. }2 h+ U5 ^is        * H* I' {# e8 g2 r6 f
do       
" E  D: C9 i- ^        waituntil EventController.simTime = Schedule[now_depart_num];1 [, M6 m4 L4 z* k; M
        if zhuZhan.empty = false
- m6 D) p0 c7 \        then 2 N+ X% }8 u; c5 |4 Z- ^/ e( s" M
                zhuZhan[1].move();
6 C  r4 H+ j% L                now_depart_num = now_depart_num + 1;                9 G% q& f7 ?6 h5 z, n$ ]
        else3 b- X; E/ \7 T. ?
                waituntil zhuZhan.empty = false;
- Q6 h' J6 h; e  E                zhuZhan[1].move();8 e. |9 k/ K8 B( S( m8 L4 P
                now_depart_num = now_depart_num + 1;
# l) Z6 K% H; b, j# r' {        end;                                       
/ c- w0 D+ C% R2 R: [' h3 O6 mend;
& F! p) u5 j/ _9 l/ q
# ]7 R/ {! z: {  b% |/ P7 e但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement. - r5 \4 c# ~( ~+ ?0 P
若是增加一个局部变量,如下:
5 c* W& \( @0 P' g; e+ Nis
7 g3 f! T) b+ T$ J5 G7 I+ Q              depart_time : time;1 E8 ^1 E2 B  g
do 7 E& H( `6 ~, {4 k
              depart_time := schedule[now_depart_num];
+ h$ b; A! M/ P6 F0 L( U- j              waituntil EventController.simTime = depart_time;
5 @, ~8 k" Q6 ?' d5 b; X  L0 K              。。。2 Z, v) C$ r4 g! k2 k
又会出现syntax error near line 5 at <;>!1 M  m3 j6 Z2 z
7 y! o2 ?/ z5 w0 t
各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。: z0 a; D9 X, t1 }$ m

0 _' d* E0 C/ V$ X0 ~* V3 _now_depart_num := 1;
% u& z0 r# [( `* d3 Q1 Mbegin_time := 0;
3 R2 s' z, ~, C9 ^+ p* V$ v$ Y+ Z4 Zwhile 1 = 1 loop% G; L6 u& P& |9 H8 X
depart_time := schedule[now_depart_num];
1 a6 g, Y4 V  e/ O( P wait depart_time - begin_time;$ z: [* ]8 T0 V8 ^
....5 k  w# i3 r: ~, I
6 ~) [! |" r* L/ M' e, ~1 Z
begin_time := depart_time;
& y9 l; c* b) ?) q7 v now_depart_num := now_depart_num + 1;$ I" y5 A4 L/ S$ a; ]' ]# T
end;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time
2 t) r! O# a; e" g5 b$ qdepart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间0 j$ h0 l; }* C5 _( m( S) n
每次等待以后把now_depart_num增加1,表格就往下走一行。
/ K8 }+ d2 J- l! l4 l3 q6 r, y6 _1 }' T6 b7 J' b" e
另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-2-21 20:36 , Processed in 0.015931 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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