设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5861|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:
( J6 ?# r% j! b+ g) i+ A- N; d% L( Ois        ) o, S+ @* U' z7 x  i+ E- x
do       
: X# c1 X9 Q% P# b. ]/ c        waituntil EventController.simTime = Schedule[now_depart_num];/ ^, t% {/ c8 k! D, {( O
        if zhuZhan.empty = false2 R  ]# N% U' m
        then
! O6 [1 j- T9 o/ D% \0 y                zhuZhan[1].move();/ F* h( t( O) f
                now_depart_num = now_depart_num + 1;                3 \! |3 z: ~* ^+ N7 r  H
        else7 s  t+ l! d/ e( ?: z
                waituntil zhuZhan.empty = false;
7 U5 o3 L$ r1 a: ?: k                zhuZhan[1].move();
& F5 G5 T- y3 C, V& ?1 T/ K( R                now_depart_num = now_depart_num + 1;$ P7 n7 C' `$ }% C. y
        end;                                        ) p0 t6 T9 C* X* d4 M3 }1 l
end;
0 G7 R& R2 a  P- l# s* L& S% M2 \. D$ [* h% I7 z9 G7 `9 {
但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement.
( G' A" t2 h: Z# V若是增加一个局部变量,如下:
6 k* ^% G- Q+ ~" H5 p; e7 C& y, nis $ N, l) }& m% Z1 W1 Y& `
              depart_time : time;2 c2 o5 i! u. p2 k. p1 ?
do
# V2 p1 u, W( [; @6 c0 c              depart_time := schedule[now_depart_num];
% ]9 {3 Q0 ?) X( P9 n, A9 t              waituntil EventController.simTime = depart_time;
. I# V# M' Y% {5 m8 r% g; X              。。。' X7 Y2 T' \  b) Y# e# y) A$ p
又会出现syntax error near line 5 at <;>!( d3 U$ v5 g; [. O! [: j
4 Z1 k. s: D: Q# }, ]
各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。
# u3 W" ]2 d' G  q# Q' a/ k1 @5 Z5 N1 S; N" o/ Q  c- _7 i6 u
now_depart_num := 1;
3 a6 h# L: s8 o0 X) M; nbegin_time := 0;
* N2 y/ g. E# v/ {while 1 = 1 loop8 q5 Q4 h( C8 J' \- }
depart_time := schedule[now_depart_num];) V, I; f% B1 ?% W+ Q$ y% d
wait depart_time - begin_time;
7 J4 C; S" L  v" P6 _3 B$ C ....
0 D7 G; b" }' a' ]6 _+ M# l4 t4 P" ?$ b+ J
begin_time := depart_time;6 r9 Z  m) }3 G+ W% P4 Y
now_depart_num := now_depart_num + 1;
5 q0 Q  L- u. d$ ?9 Oend;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time
9 D! y5 D9 s. M8 h" Gdepart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间
( O5 A1 [- r9 J2 e3 ?/ S7 i每次等待以后把now_depart_num增加1,表格就往下走一行。0 g  d  S8 n* U% I% U& a+ o% q

# q- u; N/ _- V+ c! f6 A, ^另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-5-26 00:01 , Processed in 0.025016 second(s), 15 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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