设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5873|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:
  E" S  A& S: v. lis        5 F. [+ o: c# L% o4 |7 o
do        # n5 b0 ]: Y# f- x' t* x
        waituntil EventController.simTime = Schedule[now_depart_num];, h8 W+ F$ {9 l
        if zhuZhan.empty = false
) q( x  h# ?+ b9 P0 [& j9 T        then ; r% X7 i0 l8 }9 o! w3 R  G( \% e; x
                zhuZhan[1].move();
, O3 _# h& G; Z/ B* k                now_depart_num = now_depart_num + 1;                0 H5 V+ h; t: @" O
        else9 W! w% C# T, v; Z
                waituntil zhuZhan.empty = false;1 X. v6 p# V6 A$ J
                zhuZhan[1].move();
" K* ~0 b( Y6 [7 I) Q* E                now_depart_num = now_depart_num + 1;
# S) b0 K3 U- T2 |& p/ K        end;                                       
) k$ i/ ]0 F8 vend;
. M4 f' H0 Q4 K& X2 y; u7 O# n2 z  L2 @  ]1 M1 T
但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement.
4 K0 _6 g) V* K8 R' `/ d& e# Z若是增加一个局部变量,如下:' q6 y5 I1 j' S
is
% ^5 Y. n  F# H              depart_time : time;
" f( X0 ^/ e, _  pdo * V3 B( ]( \* q: q: H
              depart_time := schedule[now_depart_num];: c& f. ?9 [- c6 W% y
              waituntil EventController.simTime = depart_time; $ d, C7 Z6 y# m" V' s: F2 K
              。。。
2 s) a: I1 h9 [2 b又会出现syntax error near line 5 at <;>!, d' B. K7 S3 ^! W) E- E
7 r9 e1 A* k/ R& D
各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。2 t5 L& `6 O8 H! R" \. w4 A" u

/ A  \* C& ]  A+ |$ l$ B4 t: |! Fnow_depart_num := 1;
: G( z- t& [8 M3 J( {2 c, s5 Pbegin_time := 0;& r6 W- b, t% [1 U" g: s/ z4 w: m
while 1 = 1 loop, p( K; @- q9 l: g# U
depart_time := schedule[now_depart_num];( R$ P  q! z+ T. X& H3 r
wait depart_time - begin_time;4 c# ?, c) C4 m
....
7 S6 y' l; ~) ~
$ j7 X! y$ B3 ^2 j9 |" N begin_time := depart_time;
" D& I" C4 }5 s1 m4 U now_depart_num := now_depart_num + 1;
8 ?, F; ~8 D1 f  rend;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time
& i2 V/ J0 L6 }6 K6 pdepart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间
0 J- ]  R8 t% O1 m每次等待以后把now_depart_num增加1,表格就往下走一行。
1 I/ M) w3 ?0 E2 n3 V. r0 C
( ~. N! V! W7 [' y7 V+ Q: c另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-5-30 05:53 , Processed in 0.015542 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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