设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6183|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:
0 B8 X& Q. V; O4 U4 {2 r! n6 p* |3 N& \is       
1 U5 R6 B; n3 j0 zdo        0 x* B7 F8 q6 t; P9 ]9 u; s- F
        waituntil EventController.simTime = Schedule[now_depart_num];$ @. N* Q' ~) K# S  t
        if zhuZhan.empty = false: e. ~4 C6 x! }
        then $ H# n! k4 W2 M* ?- f. s; r  Q
                zhuZhan[1].move();2 t# k: k9 n& n! q
                now_depart_num = now_depart_num + 1;                3 B! }4 a' |/ ]5 a$ Q- Z9 O9 s
        else9 |4 K. _! j$ l5 T
                waituntil zhuZhan.empty = false;2 ]- X7 b, t5 W6 a) w- J4 n
                zhuZhan[1].move();9 X4 c6 l1 l! `+ F7 H' t8 f7 Z
                now_depart_num = now_depart_num + 1;
. M& L" z0 m0 l" {# D        end;                                       
5 g! P% i& C. J# u% Y: w3 c, zend;$ k4 {4 i2 `* T3 w4 [! \
; m  r7 d' H! m+ ^
但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement. ( X% V' x' h6 k- u  v
若是增加一个局部变量,如下:
8 v6 H! S' a% d# `" w, V1 Uis 0 s, Y* u+ C4 |0 i
              depart_time : time;
4 {' G3 H8 {/ `6 z/ t* zdo 9 b3 @5 f( E( i( c& n4 G, ~# K0 p
              depart_time := schedule[now_depart_num];- w& y: d2 Z- R9 H3 g% ^# |
              waituntil EventController.simTime = depart_time; 8 `% K6 ~; z( t
              。。。
# H/ H' F  I( i3 D0 B/ l又会出现syntax error near line 5 at <;>!" `: N& u5 p+ c- a& u  I

4 {  V/ N7 w- Q; [各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。
) o/ ~/ ^1 `1 C- Y# D7 q
7 G. Q/ @6 S/ w; ~- [now_depart_num := 1;
. h) ?- L/ P) }) w/ z% ebegin_time := 0;
* a  ?0 S: r% fwhile 1 = 1 loop" I6 |- H4 E  W" U
depart_time := schedule[now_depart_num];
% i# E" K' ^+ N$ a3 Q. A( p7 v3 r wait depart_time - begin_time;/ Y; S! U  X! Z% p  B/ t8 y
..... [3 W2 x1 J4 T5 ?, m. K8 ^
. [2 u# g8 a! _0 S" }* P9 O
begin_time := depart_time;
. G7 u7 @2 o, F now_depart_num := now_depart_num + 1;
4 a& Z8 f+ h2 Q2 O3 n; S$ iend;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time
1 ]8 o) b: }! Z4 p8 l" ndepart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间# u+ V( P! b. ]; t
每次等待以后把now_depart_num增加1,表格就往下走一行。
: a! C5 p/ ^/ i! y" e7 a9 ~; \" q- k: v8 Z2 W9 r! z% @6 b- s
另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-8-11 19:54 , Processed in 0.016386 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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