设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5248|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:1 q+ g& T. z! E# m" _; x1 ^
is        : a' M' o1 M9 s
do       
% ~- I  g  Y0 t, L  f0 v3 y8 n, [        waituntil EventController.simTime = Schedule[now_depart_num];
, o: p# w5 _' K, h' a) j        if zhuZhan.empty = false
& ]. X) E: W* l) m" @4 `) o* S        then
, S" t- P. g/ s" i3 X                zhuZhan[1].move();/ r# \5 W& V; o: _# X4 x0 L5 }
                now_depart_num = now_depart_num + 1;               
% @( [' D4 P( C! j9 {+ h1 W. m        else
3 m0 U. ], J# W                waituntil zhuZhan.empty = false;
1 @. {; t1 F* u; W$ u2 r                zhuZhan[1].move();& ]$ S1 f& g0 ^5 I; O0 J* T, D* d
                now_depart_num = now_depart_num + 1;  |/ p9 G" u4 S4 j+ _% s9 h
        end;                                        : r& H4 c4 ~! z  [
end;
/ w3 C4 p* }! k2 s
7 P" A" Z& R* G但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement.
: W# o! m! M9 N* b! E若是增加一个局部变量,如下:9 o- r# z' Q3 Y- u/ p6 }* m
is 6 [8 X! C, V/ Y* i# E% N/ c
              depart_time : time;
  F/ [9 r+ P3 ^- R- j, g+ L+ Vdo
! q+ V* A+ ?3 x. y( X1 _$ q              depart_time := schedule[now_depart_num];3 J% U: ?5 s9 V6 G9 H
              waituntil EventController.simTime = depart_time;
* w4 ~4 I& Q3 h& B              。。。( [* c0 s; X7 \! c+ Z& }* ?1 _$ i
又会出现syntax error near line 5 at <;>!
0 @% S8 ?4 c& ^& f
0 }& t  _# V, O5 z  N各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。3 M* u6 Q" T# B4 \7 X! Z: V
) K6 R" h8 {1 z* Z- x- a4 a8 B# L
now_depart_num := 1;
0 h1 T0 E3 [# E; t! {begin_time := 0;
# S: r) M$ }( y# Q. w* uwhile 1 = 1 loop+ Y% ?7 z" q; k8 j
depart_time := schedule[now_depart_num];  T0 V1 `5 e2 h, J. P
wait depart_time - begin_time;1 e8 [; k; @: ?/ B- d  J
....! q. v& p6 p, {$ ?: M

) v' K0 I. W+ ^) C- D begin_time := depart_time;
% t' M) B2 s5 {4 L now_depart_num := now_depart_num + 1;
" X/ Y9 f2 J; ^4 m5 @4 v* }; cend;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time1 j) T# s: `3 ^
depart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间' b8 T/ c2 e: a- \- y
每次等待以后把now_depart_num增加1,表格就往下走一行。5 L( }1 `) L: y9 _/ s2 I

6 G; U/ L+ c: B4 f8 B另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-12-7 07:00 , Processed in 0.016321 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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