设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6238|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:1 b8 ?3 c9 F" ?2 ]: l
is        % m/ R% b( r- f- a8 a1 u
do        - y: N$ Q: h; \, m9 M
        waituntil EventController.simTime = Schedule[now_depart_num];
9 s  L/ [! P+ \" ?: W1 K" d/ n6 q) a        if zhuZhan.empty = false3 R$ B3 c3 `7 O% s' S* [- H4 b
        then * n3 r, Q, i/ F) E+ r0 z# B6 k) ?
                zhuZhan[1].move();! k, g. \- P+ \5 V( y% }( L
                now_depart_num = now_depart_num + 1;                3 ?7 R% p) p' I# O& M  n  z1 b
        else; n7 d! D- L: X
                waituntil zhuZhan.empty = false;
& g3 N; o  c3 q1 N# |/ `/ o. n4 r# O7 r                zhuZhan[1].move();4 i+ E- r8 @% |1 t! v# o* Q
                now_depart_num = now_depart_num + 1;% Q* a$ E! k( J; i0 i
        end;                                       
& [, T  ^$ J1 M' J" aend;+ M& ^0 R, A( [% g) V( I/ {

; Z: `% |+ ?; T9 D但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement. / U0 w3 g& K+ ^. s9 a9 J  H
若是增加一个局部变量,如下:
0 x* }/ h3 k; s! j! H  T' Bis   {& B9 G3 R5 I( h7 U" @( z
              depart_time : time;. R+ u& p  k5 |2 F( q2 C4 j- }( M
do
+ T) L( v' R3 D' k' L2 S              depart_time := schedule[now_depart_num];2 c0 l. z- J* m
              waituntil EventController.simTime = depart_time; # [+ u1 C2 P2 D6 ^* M( G
              。。。
# y" g& H  B1 M5 h, h3 d又会出现syntax error near line 5 at <;>!
$ i3 H& Y6 F4 D+ u" a3 D3 s5 k( c1 U: T6 B2 ]8 m
各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。
; S/ b4 g  E* R4 l" H0 _1 W2 o2 N# F1 @0 f* E1 ?; @  Y
now_depart_num := 1;( S* `# [" l4 L$ _
begin_time := 0;% ^% _2 C' D0 ~! G
while 1 = 1 loop
2 Z3 l3 n( c+ q# H: x depart_time := schedule[now_depart_num];
/ w% o8 l( J* z4 ~) | wait depart_time - begin_time;! K  M, q. ]) X* ^
....% `, @$ C) O. c
7 P$ c$ z" [. x# ?  z  @
begin_time := depart_time;
: X5 @' S9 m% }, v. g7 u0 @) O% M/ l  F$ [ now_depart_num := now_depart_num + 1;
# H; N# }3 X7 x6 q- N  ]' B, Yend;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time
& T: z. e4 A+ Q4 y8 \9 c. d% udepart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间  J& n( Q* b- s1 C2 b
每次等待以后把now_depart_num增加1,表格就往下走一行。
( _; w6 p! }3 O1 H; q" }
# q  z/ }. U: a8 \另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-8-29 19:46 , Processed in 0.016451 second(s), 15 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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