设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6185|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:
0 q0 o9 [5 ~1 |( @; j" Iis        6 N5 C2 D1 @2 F  R: C& u
do        + T' N% h/ z+ O; P8 Q
        waituntil EventController.simTime = Schedule[now_depart_num];
& O8 o. d  |  B        if zhuZhan.empty = false
+ Z5 L+ G& {- Z( N        then + Y- c: a$ \+ y4 R; ?; ?, F/ S7 o8 \7 L
                zhuZhan[1].move();/ V  l. d$ y: @7 m5 s
                now_depart_num = now_depart_num + 1;                & o: A  F) h% F. \, p
        else
8 q: M/ P- A  k& M" ^2 a                waituntil zhuZhan.empty = false;
7 B, D8 d6 ^- r. q  \1 Z! F5 z( X, j                zhuZhan[1].move();
; D& W5 c7 m. o. I0 R                now_depart_num = now_depart_num + 1;
' R5 D- o$ A8 \  z4 m0 r! t' k        end;                                       
* W8 m/ W) Z- e/ ?8 fend;' ~1 u( V4 D9 v- _* F* U4 r

* \, R& z, w7 Z% z但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement. , @( _" c$ X; G' S) C$ X4 }
若是增加一个局部变量,如下:
6 _& v5 H% K. c0 y# Ois & ?, a% ]$ T5 x# Y: p1 ~  O& ~
              depart_time : time;! m2 U/ Y; o3 L  i( b- ?' P
do + {( }$ c$ N! S$ ^; ]0 b
              depart_time := schedule[now_depart_num];
/ O7 r$ L% h: a, D; H4 z              waituntil EventController.simTime = depart_time;
% z: X5 a4 y4 ^. Q) C! h, ]              。。。! \% @9 P% a' X. m# r; E
又会出现syntax error near line 5 at <;>!  _/ l3 f. B/ W

+ I1 `5 {, A1 Q  g6 d各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。
$ G$ G$ Q- e* M7 O5 A/ d) S8 }3 v" w! _  _0 }# U
now_depart_num := 1;4 U; c( h6 l  k( a
begin_time := 0;+ g# C, h( ?! _4 Q
while 1 = 1 loop% g, H# |" v% h( Z
depart_time := schedule[now_depart_num];' ]# K6 _( [9 r  l+ Q* N
wait depart_time - begin_time;
* Z7 O6 }0 r% s0 ]% R0 D ....2 e% W+ ?( o: c7 K2 @& ]1 b6 K

; K$ n. w, N4 {0 P  @( P begin_time := depart_time;
" V- u) ?& N# K. } now_depart_num := now_depart_num + 1;
/ @6 l+ v" s3 v0 P% W1 Eend;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time
6 n' D5 u# G+ K3 {, b3 ?! Bdepart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间
% A; Q" r: y# M每次等待以后把now_depart_num增加1,表格就往下走一行。8 m+ S4 X7 _7 _. ?% p1 {" E
5 y$ I1 ]7 d* d9 D3 t/ p4 S& J
另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-8-13 03:52 , Processed in 0.017322 second(s), 15 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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