设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3673|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:6 W$ d4 r8 }: S
is       
7 L, m; O$ y/ ldo        6 U& \# ]- f. L+ r4 O9 r
        waituntil EventController.simTime = Schedule[now_depart_num];
  l0 n7 s0 {- N; q. _5 C& b6 K- e        if zhuZhan.empty = false
3 M+ r+ O! l7 ^" L        then
/ u. }3 x/ p1 w4 \. i                zhuZhan[1].move();. v( D' g- X% g0 F( C% s
                now_depart_num = now_depart_num + 1;                ) J% D) D) [' D3 q' J
        else
% M: Z& t& q9 I) ^                waituntil zhuZhan.empty = false;
6 ]6 H. a& X, {* ?  V  H! [                zhuZhan[1].move();
0 N( D  a6 l5 g5 x! a                now_depart_num = now_depart_num + 1;: z9 ]$ L+ U- @3 G" S% T
        end;                                       
* {7 }, }0 }& {  m0 K) tend;
( j6 P0 ?4 v7 X: K3 p* S
( K; M  O  C6 f+ J0 z但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement. / x# a0 x3 r8 C2 |1 h
若是增加一个局部变量,如下:
4 J) a& J- o0 ~/ M% bis
- R: l: V, e/ v5 Z% l              depart_time : time;- e$ K, V$ K! w  Y; k. A/ `  H
do + N/ h5 [; O# e5 m1 v) {8 C) R' H/ u
              depart_time := schedule[now_depart_num];
! i8 _& y) d  [$ {; t% q              waituntil EventController.simTime = depart_time; % j, I* _  G. `
              。。。
) S% ]4 I: E$ z- o" @. @又会出现syntax error near line 5 at <;>!- b: J9 q' j" B, o

' ]1 w- r! ^* }. q各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。
6 t( J; u1 g6 B) c/ X( h- k& K, k% `% G1 l; _1 x4 p
now_depart_num := 1;
& Z" ^6 N1 b- abegin_time := 0;. T3 e! C# A2 q2 B. V# W( p
while 1 = 1 loop/ l  x- m! y7 a& C
depart_time := schedule[now_depart_num];
2 |1 d6 M' ?4 h2 @# b( J wait depart_time - begin_time;/ ]. Z  E) O5 l4 W& I( \* C
....! D: g; L. _% h$ ~4 E6 w: W
$ }8 {* o0 ~! d/ V
begin_time := depart_time;
. p8 y/ h, r( z# r& ~ now_depart_num := now_depart_num + 1;" J4 l3 D5 q+ a' P3 O, ~, t
end;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time
- K" I; g( k+ K& k0 idepart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间
4 J+ X& ~9 D) e每次等待以后把now_depart_num增加1,表格就往下走一行。
7 k6 v+ c! X- |! d# G; Z* ]- _8 g3 r4 B" S
另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-27 01:32 , Processed in 0.012902 second(s), 15 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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