设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6033|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:
0 N  A. _4 R% D  c: ]" Vis        * n1 I/ u" b) X3 P5 p
do        2 J0 n1 z. ~2 q6 K: t
        waituntil EventController.simTime = Schedule[now_depart_num];7 P1 x* `" c5 l! [6 }
        if zhuZhan.empty = false
" c( E* O1 r: F" e        then : R. G* ~+ P* g) o( R
                zhuZhan[1].move();# v! S- r) \+ M. H
                now_depart_num = now_depart_num + 1;                4 g' @" {$ p5 M+ e$ k$ b1 i8 s
        else/ W  |! K" \/ ?0 W; m# V; |- m
                waituntil zhuZhan.empty = false;" o0 v8 W/ ^& o8 _! [  B
                zhuZhan[1].move();4 x; V( z% A3 L& B" h8 _
                now_depart_num = now_depart_num + 1;
: D; y0 X! g+ @$ o8 S8 r4 R5 k2 R  ]0 L        end;                                        4 {, z3 R2 I0 g" \, @3 h; N
end;/ U/ i: {6 C6 ~9 L2 [, N
5 N' ^# Z3 Z& Z2 U
但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement.
" F. ^, H! j0 G# Q若是增加一个局部变量,如下:! U# x: a5 ?/ j; v% K! A3 [
is 7 D4 ]0 t% K; D
              depart_time : time;4 t8 P- y' P/ m7 u+ n6 g
do 1 Z$ p/ j$ ^/ s, L3 L  X' `$ ^
              depart_time := schedule[now_depart_num];
( {! P& H. k7 ~- l. _              waituntil EventController.simTime = depart_time;
% B9 D$ O' z( O2 t              。。。
9 F. n' f/ ]. x8 R又会出现syntax error near line 5 at <;>!
- ~- s  B4 z$ g$ g& e# ^& d  V8 T! s% s0 ?9 t1 D" p
各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。9 c0 i8 T& O, y( ]) x0 `- S" W
( Q( H8 _" @9 c$ Z. j9 Y: R* S
now_depart_num := 1;. s( p! j7 G/ z! H" Q6 @: t
begin_time := 0;3 I# y0 Z; e4 N& |+ C
while 1 = 1 loop
' D8 n8 g8 I$ i9 X1 ^( D depart_time := schedule[now_depart_num];5 W1 W  O/ R8 Y* x/ n% b
wait depart_time - begin_time;2 S2 I( I- \5 f1 P5 v! Z
....
  i* X- x8 o  C4 w) R, \
3 T+ N0 J# J3 R( I6 d/ f0 k begin_time := depart_time;
: a- f8 b. k) B now_depart_num := now_depart_num + 1;6 r+ o+ g6 L% H4 C, Y0 ~
end;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time7 c  V$ T$ n9 @  q
depart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间
( J4 |; G8 Y' ^0 o" K' ^每次等待以后把now_depart_num增加1,表格就往下走一行。
( O* @4 m& d7 \! b: R/ M( T7 x( g! ~( L8 ]6 e- V
另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-7-14 14:30 , Processed in 0.014701 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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