设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5229|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:4 d  R- o- E9 H. ~  {
is       
$ Z. n: E0 t2 N: R! ^# Hdo        + P& z1 j4 P, d$ _8 }( S6 B
        waituntil EventController.simTime = Schedule[now_depart_num];0 ?# Y( |; o8 A" F  l
        if zhuZhan.empty = false* c0 E: S1 t+ M$ {  |- p
        then
+ K  ?( L7 ?% D+ C                zhuZhan[1].move();/ C' p  n* N/ Y
                now_depart_num = now_depart_num + 1;                " Y8 _1 \  u3 q4 I* a
        else
/ @2 M3 `% l6 A/ n                waituntil zhuZhan.empty = false;; Y) @+ T1 S$ f4 U
                zhuZhan[1].move();
4 i- _$ u3 G" \/ ^' i, y9 H                now_depart_num = now_depart_num + 1;
  E. i. C1 _4 X# I5 j, c/ O' [        end;                                       
" z" C$ p. S4 H1 z2 Jend;% Q3 o7 d; R3 \. x* k0 G- ]3 t/ y1 O% a
$ W' y& F- Y; y" }( `" D. q% {
但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement. ) M1 F5 G7 R8 N; Z. a8 m! {
若是增加一个局部变量,如下:, _- J1 R4 |) Q2 _* F
is - Z9 a: J" n; P. P
              depart_time : time;, m& M2 k4 k- L% D
do . a! m0 @. W! P+ y) Z/ I9 m
              depart_time := schedule[now_depart_num];' Z5 Z. z/ X: h- M( q" o& n0 T
              waituntil EventController.simTime = depart_time; - Q3 @7 Z, w9 Y$ M6 ^* D
              。。。, n2 a6 I+ s3 M/ s) R3 x5 L  c
又会出现syntax error near line 5 at <;>!
4 d2 h& L7 _+ N
$ s. |* d8 g* H% T3 N0 d各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。4 r$ A  A, R5 j5 ^
0 p5 T4 R9 ?0 E4 b
now_depart_num := 1;" R1 X; U: a! w- I1 ^$ @5 l( V
begin_time := 0;
( E3 w# E2 f/ \7 U, F) Swhile 1 = 1 loop" B3 y8 W" S! z& g# |& _# x3 N3 m
depart_time := schedule[now_depart_num];
) i# c/ x0 x2 X: p* e' ]. V! _- O wait depart_time - begin_time;- R4 r% B) f% r0 B1 L. Z' f. a; \
....
/ w% @0 `. `5 i. F3 L% `* X; D  q% e
begin_time := depart_time;$ r" R% J1 t2 f* {
now_depart_num := now_depart_num + 1;
, k% f4 T. T. [6 Oend;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time; u  K- t# Z' U% P
depart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间2 t2 L  U: s- s- V( e
每次等待以后把now_depart_num增加1,表格就往下走一行。
$ L/ r3 i$ y- z+ t) o3 K6 `' s6 v0 w+ D0 r5 u
另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-12-3 14:32 , Processed in 0.016351 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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