设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3942|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:
8 W( D9 r7 e- H) Dis        6 ~( e) M( ^( D0 i, w' n
do        . C/ J" Q& R1 `0 r; I( r$ J- Y
        waituntil EventController.simTime = Schedule[now_depart_num];
9 @6 o  U9 s% Y/ V        if zhuZhan.empty = false1 o, X7 k. m& `# D1 p% D
        then
' I" n; U; M8 h7 P& h" P' M" @                zhuZhan[1].move();" X& M* \+ O9 U! A+ g# K6 C
                now_depart_num = now_depart_num + 1;                4 E! v0 H) T) X4 Y: R$ y4 d
        else
8 j9 e$ e6 F' l                waituntil zhuZhan.empty = false;
* I: S& T$ T' |: J0 X# B1 u                zhuZhan[1].move();
0 l- B& y' C7 |$ u' l                now_depart_num = now_depart_num + 1;$ e: A1 ^3 `( u! ?5 ~
        end;                                        8 e/ G" F0 i# L) h
end;5 A4 d. D2 V# V  [- v  T
- [8 D7 P$ g' j
但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement.
! e! h/ S( E# j; T2 a若是增加一个局部变量,如下:+ F( \' |; j/ Q& h
is % I" H0 l- j" d! r$ E( E: w2 o+ D5 A' R
              depart_time : time;( N! k; J- I' b, a9 W( ]2 M2 ]
do
6 N+ P( o2 {% D0 C5 M              depart_time := schedule[now_depart_num];6 k/ m+ p# F, J' Q; E6 C+ i/ N
              waituntil EventController.simTime = depart_time; 9 Z: J; W/ V6 B3 t0 j" U& }& n8 f
              。。。
% q4 `9 k! e0 T1 G- B0 l又会出现syntax error near line 5 at <;>!  k/ A2 B! t$ O8 N. l

* }: _" ^5 d1 W5 c; W2 o; ]$ G各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。3 t# Y4 J. K6 J; s' J7 K
7 A8 H; H( @" [- Q3 r1 v" s" y+ h
now_depart_num := 1;% e, X& ?9 X- J" H
begin_time := 0;
$ p6 T, R' `, p: v# \while 1 = 1 loop0 b. m4 b6 }! i9 E# T, k1 U" H
depart_time := schedule[now_depart_num];* u2 E* ?4 `$ E  e) z- I
wait depart_time - begin_time;
3 J0 U5 \- N) Y ....
: }4 N, `; W. D
! m7 Y- s) l; K+ }( t  G begin_time := depart_time;) M" l) Y1 ^" S$ U. A4 U" D
now_depart_num := now_depart_num + 1;
3 [, R) w5 M+ a0 Dend;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time( ]% L0 S9 h4 D' P' z0 a
depart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间
3 e; z$ {$ A+ V6 B每次等待以后把now_depart_num增加1,表格就往下走一行。9 w; H  S6 L- m) `& H+ E0 ?
* ^5 N( ^3 d' J, n
另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-1-23 14:48 , Processed in 0.012618 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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