设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5376|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:
# k& J4 f5 G% Pis       
- \, B5 D( V2 J5 `* a3 A' Z) U2 tdo        5 Z+ u6 `5 C4 t' O% |$ V5 l, n4 f9 h. }
        waituntil EventController.simTime = Schedule[now_depart_num];
% D& ~9 r0 K2 P/ N/ l6 v; k        if zhuZhan.empty = false
# X5 C/ C' \* W" `6 j2 M! y        then
) r# |2 c$ p' H  m/ m/ |                zhuZhan[1].move();2 D7 E& G/ S6 X& U& h# i
                now_depart_num = now_depart_num + 1;                ; k5 I  R2 w3 _7 R% ^
        else
6 n; @5 [6 r6 x: e. N                waituntil zhuZhan.empty = false;
$ F' V6 b0 f- a: h# D# A' F                zhuZhan[1].move();
4 T2 `; S( z0 W- C4 a& j/ I/ Y( X                now_depart_num = now_depart_num + 1;1 y7 b+ m. v4 q/ d$ Z+ |
        end;                                       
9 D# \% r8 y( I1 Cend;
' J/ |8 k, _& a* S9 v; g9 G6 x& c" u6 C! b5 p& B
但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement.
0 m/ I  H; r% `% N) p8 a8 }. z若是增加一个局部变量,如下:+ k/ m6 i# K/ E% e4 K1 ~" C& @5 e
is , ^7 ]3 T& y7 _; ~) g; C; p
              depart_time : time;  g. I0 R9 `0 Z8 ^8 K; S
do + ]3 g7 d; H; t6 w9 A6 [7 p) l
              depart_time := schedule[now_depart_num];& |8 V+ H! e4 H8 K* p( i
              waituntil EventController.simTime = depart_time; $ `: j$ R" }* D+ }: {& r
              。。。
: w* e# F$ B+ I8 X又会出现syntax error near line 5 at <;>!% ~0 B/ E. m  y) q) J* {1 U3 y

+ y" m# i* T) p1 o5 U, K各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。
( X1 ^- B! R8 r6 v
- n3 |3 m8 f3 I1 |" f/ X8 u1 Qnow_depart_num := 1;
6 Q0 Z) T! o, G( o2 N9 B/ u$ V8 H: Q( \begin_time := 0;
- J* `& o2 Z: s2 i) }& {2 I, Vwhile 1 = 1 loop$ |6 @+ L; }- |- H
depart_time := schedule[now_depart_num];, z# n* \: ~' ?& C% c
wait depart_time - begin_time;
! D! ~8 _, W6 r% |0 ~9 p; o ....8 @7 i8 x/ y/ e2 f/ @
# \! e! O$ A, l( H* m4 f3 I# s
begin_time := depart_time;
! p+ A/ g& e9 n& M now_depart_num := now_depart_num + 1;5 h  B! o, h, E* K: a
end;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time
+ u9 B6 r, N- S2 Y0 Fdepart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间
/ p/ v7 g# A, |4 e0 V- U) [  p' C每次等待以后把now_depart_num增加1,表格就往下走一行。
8 d- _1 x8 B" }) }5 U+ z: x; v% p2 f1 W' v5 ^/ P$ [
另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-1-7 21:44 , Processed in 0.018128 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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