设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6058|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:  ?: U$ o& s4 k4 i9 e+ f6 i
is        4 B( e4 h' w8 ?7 I% Z- |$ A& H# V
do        ; P: T1 n/ [! q* p4 B7 p7 O
        waituntil EventController.simTime = Schedule[now_depart_num];
$ u* K% _: |+ L! M2 ]        if zhuZhan.empty = false2 K. M3 J4 ]* d1 q% i" ]
        then 0 J' l, R8 _. t/ F% Y
                zhuZhan[1].move();
* J+ ~" G* t2 e% a7 N                now_depart_num = now_depart_num + 1;                & Z% u9 D+ X5 o8 F: R/ ^
        else
- {& y# \0 D; [9 U8 _- _7 N- P                waituntil zhuZhan.empty = false;
# |) X7 D3 N+ m- W! H7 S                zhuZhan[1].move();4 w& v8 p$ y# e
                now_depart_num = now_depart_num + 1;
1 K2 U% K! E2 M& u3 E# }# L5 r, z0 u        end;                                       
0 o4 W% Y) |- V5 N- z, g0 Wend;+ v4 s; r. g: t7 Z1 o1 ]% M! Y
( ?6 x9 h9 E: f; v, S4 H
但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement.
: N3 A9 g! t- S  R若是增加一个局部变量,如下:
0 w  u6 ^/ I  t# z: q1 Wis 1 y# Y3 N, l' k5 j- a0 C
              depart_time : time;1 ?& o$ T7 e) H
do * d% \$ W# L; u! U* h* t' v
              depart_time := schedule[now_depart_num];. @& I4 q0 o6 z4 M$ O
              waituntil EventController.simTime = depart_time; # Y9 ^) Y7 @$ t# @* }( K' N
              。。。9 {0 @! Y6 ^3 ]( y. g# H, A
又会出现syntax error near line 5 at <;>!3 O0 u4 d! z8 K, Q7 W9 B0 ?
1 i6 \, W5 S* P$ E; A8 }
各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。
' S! ]* u0 h4 F/ f* p: G. I! }7 M7 r% ^  T0 }
now_depart_num := 1;
0 w1 H$ M5 s- O$ _3 v0 [- }: C  W% nbegin_time := 0;; d0 E+ q4 C* _, x- V/ p2 s4 s: t
while 1 = 1 loop
! n" O. t. j, u2 M: W depart_time := schedule[now_depart_num];
7 b% c2 B4 q; ^& y( r wait depart_time - begin_time;
# I. @& B7 t5 P0 p ....
7 J& f. g% u' P8 M
* c* k1 C' f  o0 j begin_time := depart_time;; H' K' w/ a: O. Y: i3 x+ z
now_depart_num := now_depart_num + 1;# Y1 x! K3 [; R1 |2 |
end;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time" [; c& i9 \. E2 E, }
depart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间
: {% u: O. b9 C3 s/ t# b% W) x每次等待以后把now_depart_num增加1,表格就往下走一行。
; r/ f+ b: h5 S' V6 J: G' }6 h4 M# l$ y7 |
另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-7-18 16:23 , Processed in 0.018456 second(s), 15 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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