设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5020|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:5 O6 ?, x  L* B- H+ _7 X
is       
& o( k  b9 n! B5 H9 J' Ldo       
6 C8 i  A$ d' k+ C# z7 k        waituntil EventController.simTime = Schedule[now_depart_num];9 g! Y  r9 D* e9 h
        if zhuZhan.empty = false
' i/ D/ m. d% ~* l        then
& h( ]+ j  R, S7 N! D* {- ]7 x8 N0 k                zhuZhan[1].move();6 }1 Y6 y8 n- d9 i
                now_depart_num = now_depart_num + 1;                5 u: h$ b& D* y; [
        else
" Y5 r9 V3 y& ^                waituntil zhuZhan.empty = false;
# `0 K9 S; S5 B* i( m& o6 H& |                zhuZhan[1].move();3 W; ^& A! P2 U5 |6 x
                now_depart_num = now_depart_num + 1;
* L$ x; a0 E/ ]' a3 ?+ D        end;                                       
( r' d" N( g' b( M& bend;
, j3 W/ `  N; }, |( n% a+ B0 k* I6 ?7 O* _" @# p
但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement.
! a& P4 _; a) A. W若是增加一个局部变量,如下:/ I9 Q! z3 w7 z# U  Z
is
# h8 ]3 N/ D( D4 L              depart_time : time;
7 {$ @. b2 _1 ]0 o5 v3 Odo ( i  S: q6 _9 Y- i
              depart_time := schedule[now_depart_num];( u: ]& X; }7 j7 X
              waituntil EventController.simTime = depart_time; ) j" W: q: C8 z& @  I
              。。。
. ?7 i9 u5 f" @5 U- s& E6 f' _: m又会出现syntax error near line 5 at <;>!: W% Q$ N' G: M1 u( C/ `; h1 c

( G9 K& B8 s7 l各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。, Q* ]/ M9 j) d1 ?: K
. U% U/ ^# b9 \9 E1 G
now_depart_num := 1;; r4 |* D" g# Q& r3 @
begin_time := 0;' T$ ?/ O! b: v3 Q
while 1 = 1 loop
" q+ a3 `0 b- E- ]  X( ]7 J/ p depart_time := schedule[now_depart_num];
! t& ^+ x; }0 I3 }& _3 k0 D9 Y wait depart_time - begin_time;4 C6 m- [: V3 G5 K/ t1 C
....
/ N" X$ x6 e5 V4 V; o+ s
! M/ o+ o3 V0 h4 b) d# N5 z begin_time := depart_time;. {% Y: x/ r3 w0 D& F& D
now_depart_num := now_depart_num + 1;2 ?, F5 ~) S  m, X$ N. y1 F# L7 S
end;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time
% d9 o) z6 i. @. P. M, u: idepart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间
6 |4 G- C, G+ o3 t: ]- H每次等待以后把now_depart_num增加1,表格就往下走一行。
/ o9 h" q9 Y2 L6 V% s2 N5 R
! r  {% S# y1 S另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-10-22 18:24 , Processed in 0.015416 second(s), 15 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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