设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5496|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:
& k7 e: @" w8 }' V! ]' _is        & n% w( J8 R0 j& F7 ]
do        ! o; W) K5 i  `! {
        waituntil EventController.simTime = Schedule[now_depart_num];& u6 ?5 u" H1 s, L6 E, w  D+ Z
        if zhuZhan.empty = false
2 o" @% F4 z: ^! V  K: L$ u& N" S        then
$ \& d0 K, f0 _, w1 y! V                zhuZhan[1].move();! m6 l) T2 F7 d" d- y2 q7 o
                now_depart_num = now_depart_num + 1;               
3 y& n* h5 Q" I) o        else, v7 {( k9 y* g9 f
                waituntil zhuZhan.empty = false;' n7 c4 D9 X: \% @1 N3 i
                zhuZhan[1].move();
0 R  F" X$ F& r                now_depart_num = now_depart_num + 1;
9 o! m% W  r% x5 m  P6 ?        end;                                        * S6 i% ]  O( V
end;4 r3 M- {9 N: G6 g1 O! }* N5 [8 E( q
  |5 [; g  K& c  v# m) r  K4 r
但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement.
8 E! c$ ^' Q: I3 a1 z( ]若是增加一个局部变量,如下:
1 u5 g9 |  ?5 A6 f( G# [is
( Q' {3 V, G1 e$ y8 d              depart_time : time;) [' Y, L* D1 C) K4 L$ V
do " k' R0 k! U6 W; L- k8 g
              depart_time := schedule[now_depart_num];$ V3 r& Y" h- L% h
              waituntil EventController.simTime = depart_time; 6 w, c( ]0 N# y4 R
              。。。% y9 g  M8 ^2 j/ O
又会出现syntax error near line 5 at <;>!% h8 H; d' i4 Q9 D% M
5 H0 t' B& {  P- x1 L# Q1 }
各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。; c9 j' I/ I- h% W" j2 j
1 v+ M  h8 b9 [( F6 \3 g4 F5 t
now_depart_num := 1;( @( k: [: p0 Z) Z
begin_time := 0;
! w: u" T) e" B7 N* Fwhile 1 = 1 loop" i1 a4 e9 L9 O; @) p1 B; s
depart_time := schedule[now_depart_num];
* Q1 f3 Q4 S! x wait depart_time - begin_time;5 g/ D, R5 D5 W% @9 |$ }
....
8 l6 ~3 Z! `2 z) b) X$ x7 s! \3 k6 x( U6 L5 d8 H5 A
begin_time := depart_time;
" H9 j# ?5 m: u) P now_depart_num := now_depart_num + 1;
" t4 o+ R) x) `9 A! D5 A- send;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time
$ _( n, ?; u6 i; z. s( vdepart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间
2 M+ U/ ~+ I+ t8 W/ L, G& p* O每次等待以后把now_depart_num增加1,表格就往下走一行。
. o6 a0 F5 b- g8 [! a) D7 L, U9 ^" p5 W: c
另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-2-21 05:38 , Processed in 4.103484 second(s), 15 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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