设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5176|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:+ A: M1 V) A' E$ |
is        + j- }' l, m, c- M  V1 n% c
do        4 d8 J0 D7 @" h" f9 M9 m
        waituntil EventController.simTime = Schedule[now_depart_num];
: ^7 r6 m: S# n7 @* e/ t        if zhuZhan.empty = false1 n/ ?9 w+ E( K7 u4 N  ~' A
        then 6 ]4 N/ @8 F7 a  e/ b! D2 V( w% S8 E
                zhuZhan[1].move();2 q3 I& @; _: K5 D9 R0 F
                now_depart_num = now_depart_num + 1;               
& J' \* |2 n$ M        else: r. |0 c" ~9 }  w8 g2 I5 Q2 P
                waituntil zhuZhan.empty = false;
0 ?; p) |3 i0 R8 m- L) x  ]                zhuZhan[1].move();1 b+ Z( p% u. b; ]- {. u) \
                now_depart_num = now_depart_num + 1;9 `8 c: @* Z- g3 B9 i/ B
        end;                                        ) ?: W5 d4 x9 _: p' r0 J
end;" \) N4 J' t5 }7 a
" G/ `" I8 f9 w6 X# l2 ^: ?& l4 ]& A
但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement.
. w2 Z* E1 s+ F/ f' n; [若是增加一个局部变量,如下:
; f" p0 S& n9 }/ {2 z1 k, q( u4 f* Xis
' Y3 V4 P& z" u) i6 W. v              depart_time : time;
  }$ w$ T$ p$ Q- K' e. z4 u7 P, Xdo . ~7 `9 z6 H: k& [0 F
              depart_time := schedule[now_depart_num];* L: e7 `3 F  |9 P1 K, h
              waituntil EventController.simTime = depart_time; + V) ~% _, S2 H  i
              。。。
' p& ]6 q# ]; _, g* j% Z又会出现syntax error near line 5 at <;>!
7 V) X( s6 t8 r) J' L) i8 Q6 Q/ }6 f2 L7 r! N0 q0 `
各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。8 Y$ L) k  a# s- A4 z6 A% d

+ w. Z; t. |/ @) snow_depart_num := 1;# {  A( X- D* T) @+ e
begin_time := 0;3 V+ w$ P( l  z+ i& K5 F7 V- w
while 1 = 1 loop0 K# W0 a& o+ i  c
depart_time := schedule[now_depart_num];' N) \6 o8 o; S* `4 X# _% q" y8 p
wait depart_time - begin_time;
: ~3 K" ]+ G7 g7 K1 h* Y ....# T7 R7 z$ a& Z7 @8 @, Q% r' o
) ^( l# Z1 k+ i  w
begin_time := depart_time;6 X+ U8 U. R: t% C2 g2 w
now_depart_num := now_depart_num + 1;, d+ ~' B0 R2 y# S
end;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time7 v9 {4 @( c" y  t- n# C" G, @
depart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间
' y% Q4 b# `* t0 ~6 Q$ H9 T0 S每次等待以后把now_depart_num增加1,表格就往下走一行。; B# y1 v3 W8 C

! i& b8 o+ Q+ e# p+ h& J6 a另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-11-18 23:19 , Processed in 0.021383 second(s), 15 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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