设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5951|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:
: k! Z6 Z+ a8 T( k6 Wis       
6 c) P9 r1 j8 o/ P8 b* \. w$ ado       
& s. R0 t* c6 p: S$ ^! W        waituntil EventController.simTime = Schedule[now_depart_num];% {0 w& k$ l6 b4 J$ b7 [
        if zhuZhan.empty = false2 s6 L7 G1 O6 U
        then ( y% z- h0 n6 B8 k2 f# u! Y2 P
                zhuZhan[1].move();
3 a! k3 `3 P1 I% i4 u* j2 X                now_depart_num = now_depart_num + 1;               
. n2 Y; s; E; i3 L        else
3 C$ q! J' T3 x                waituntil zhuZhan.empty = false;
4 u* w# d( v& D  s- z/ ~                zhuZhan[1].move();% H/ E7 q0 g4 d2 r) X- t
                now_depart_num = now_depart_num + 1;: ?( V5 t- A& a7 S( }
        end;                                       
/ X- ^6 P  H3 Q' J  U8 `end;/ B! p" |' l: n9 Z% J0 @4 t

$ T+ G9 ?. D+ I) W$ @但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement.
0 ?& \# O2 b( G: ?8 L' }若是增加一个局部变量,如下:+ ?: b. z* w; p8 {5 H
is / y+ }# D" d- v
              depart_time : time;: v% K) h, u$ o  T( V$ w
do
) o4 t/ `! v" t' y              depart_time := schedule[now_depart_num];8 D2 q, f9 Z/ k/ t1 ?: a( u
              waituntil EventController.simTime = depart_time;
& c& x; C: E2 Z! D% X( D+ w5 m              。。。
) S# }6 f7 h% K: U3 o又会出现syntax error near line 5 at <;>!7 h: b, J- w( b! Y2 q  Q

# e7 q) J. O0 E) B( s1 o8 A各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。
+ G: k: F8 P' b; l. c) |) R. \. v$ W1 \* |1 G
now_depart_num := 1;  s1 S6 y- T( P- q# Z& q
begin_time := 0;
, a6 `' b+ I1 w' i; Z2 O* R1 Nwhile 1 = 1 loop
$ e0 m' }0 e6 Y' Q7 H9 e6 p6 e5 g depart_time := schedule[now_depart_num];; N1 b7 h- X% g# [& N
wait depart_time - begin_time;6 e; q8 _0 n4 T3 H  F, k* M
....
3 I; E% K. K5 j; _6 @, c1 S
. s/ Y6 t6 M' Q begin_time := depart_time;4 P+ T# q. u) j( r. g
now_depart_num := now_depart_num + 1;
: D+ E2 t; G; q9 V2 J6 Qend;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time
. G; L- z. O8 _) `depart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间
5 }# Y& S9 b! f1 y/ B- J7 T每次等待以后把now_depart_num增加1,表格就往下走一行。# w2 e% a" v' {( M: j: a3 N1 S

' @- f5 {$ v! ]3 l( _4 v另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-25 10:21 , Processed in 0.016188 second(s), 15 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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