设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5908|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:9 _, P9 p: a: K+ Y( h7 u
is       
$ S" I! c9 `+ C& Q6 P* Vdo        % u$ X: i1 N4 O$ T
        waituntil EventController.simTime = Schedule[now_depart_num];+ [# U. k0 H) \0 l
        if zhuZhan.empty = false
" T; X" P% u2 C; r3 Y+ z        then # P* g5 d* j% @. b- j, J) t% f
                zhuZhan[1].move();% l/ d+ {6 w" [1 i2 C  p$ c4 H2 B
                now_depart_num = now_depart_num + 1;               
' Y0 ?' C& k9 A, q& _# y        else
1 o! A0 T& q/ W' K+ R" R2 D" _                waituntil zhuZhan.empty = false;
* `- o& v( S0 c% C8 y                zhuZhan[1].move();4 T! v: J* c8 O$ |0 f. [- m
                now_depart_num = now_depart_num + 1;
& M5 |0 Y5 j1 G- V& i        end;                                       
, ?* h$ Y5 g9 N8 z5 k) I5 hend;
/ l7 t- q! o  c; h1 y
5 B! ^- P9 R5 Z但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement.
+ P- H% Y! \7 ]. y" H. o* ~" D若是增加一个局部变量,如下:. p. J/ z, T" {' @1 Z6 l
is
5 h9 B8 I/ h! N0 C. X7 ?3 M; }7 w9 }! S              depart_time : time;$ l2 Y4 D* b6 P3 v9 x: H
do 3 [- ^! x0 P( u4 R: A6 W( a
              depart_time := schedule[now_depart_num];% q" r/ {- p; W; }7 r+ k1 h' ]4 W
              waituntil EventController.simTime = depart_time; ! J2 z6 K4 P% g7 C: t2 b
              。。。" X/ i8 H9 W8 U4 J( k6 a! ?
又会出现syntax error near line 5 at <;>!
8 P- @& m! ]. W! C  G( N( B+ K! d& g. I0 }: c& g
各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。
- _3 c6 R! |$ E2 C7 O4 a+ M; [, T
: a) z: Y) C+ l" E( @% _! A' z( Bnow_depart_num := 1;
; c# X9 G* p$ \) _begin_time := 0;% m) k. J" O8 Q
while 1 = 1 loop
. q* f% i. j, x' y depart_time := schedule[now_depart_num];; E8 w) x  m+ K6 R, m# N" y# }4 K
wait depart_time - begin_time;
! c5 h- u& l) {+ q( k$ }( w/ o" \ ....
) [; e# C9 s3 S7 o/ q5 W; u: r3 ^: ^* Z
begin_time := depart_time;
4 y2 h* q$ _) c: {( e now_depart_num := now_depart_num + 1;* r& E- x( U; e- W4 o
end;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time
2 {4 P" K/ y& J# T5 G$ ]depart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间
$ I: i, W, _/ m每次等待以后把now_depart_num增加1,表格就往下走一行。. @4 m/ B, x/ |+ t, S
8 g+ L; h/ v9 D3 k$ ]
另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-13 04:53 , Processed in 0.014454 second(s), 15 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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