设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5560|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:( j8 f8 l. U3 [- d
is       
+ k5 F; J, b8 r6 L# b1 Ldo        : N' T4 u: {2 h( R: g& v
        waituntil EventController.simTime = Schedule[now_depart_num];* c+ L" z/ h9 J- K. I0 M
        if zhuZhan.empty = false3 L/ @* A, P! S4 i! h
        then . h# e: T+ x6 m$ u! ~5 R
                zhuZhan[1].move();" v$ r- z5 Z- }" n7 t
                now_depart_num = now_depart_num + 1;                # f4 H5 x' @$ M8 O: Q; ]6 C9 a
        else
6 x" ?) S5 O5 N9 _7 W                waituntil zhuZhan.empty = false;) w, J( e( ^6 `4 Z5 l2 E: v
                zhuZhan[1].move();4 X+ v3 D0 g1 n/ m( _; P1 D6 v+ R
                now_depart_num = now_depart_num + 1;9 u7 R; L  S: y: ?. a+ Y
        end;                                        , j+ @- Q$ ?2 d" C1 M
end;5 L$ n* O# {, w( {; M  w3 b

7 p) z& N6 T7 B9 K但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement. ! c. Y! ~, J+ H) w: d
若是增加一个局部变量,如下:
6 U& x4 H, B2 p3 zis
# c# L/ `9 C9 r* g: x1 P3 T7 p              depart_time : time;
) b8 t1 l# p- u' Z% T: j4 Bdo 3 d! b- Z0 {3 t2 d/ ~& {
              depart_time := schedule[now_depart_num];4 X% J4 M8 i( ^$ I
              waituntil EventController.simTime = depart_time; 8 ]" X1 r- l+ K# F* A) e) s5 V
              。。。
) u% d) b4 L3 ^: ?又会出现syntax error near line 5 at <;>!
6 @, y' @( e- T8 J+ ]% t$ K. q% h! m
各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。6 ]; U* @; D4 L1 K' _7 E

" X0 k  N& ]) }8 n5 r0 `7 Tnow_depart_num := 1;
; I% I- n5 }8 }" \  x4 Wbegin_time := 0;
3 R9 u5 a9 e+ c: X1 {1 Iwhile 1 = 1 loop% J" S6 Z  n" A( q, Z
depart_time := schedule[now_depart_num];
/ f5 i9 f* B8 |8 T7 D% i6 C wait depart_time - begin_time;3 Y* _+ O2 v, P$ ~1 D
....
$ R9 p! }# y8 R6 \
& C! l: m' q$ ]7 U. X+ a. R begin_time := depart_time;
* L! b) Q# V5 ]6 c$ E" T now_depart_num := now_depart_num + 1;
& N& X8 g5 x# h# @! y5 c" vend;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time
& @7 e8 b' U: V8 Y8 T, G2 M: m/ R, ^depart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间
8 C8 g! `# K; m每次等待以后把now_depart_num增加1,表格就往下走一行。
0 A. @+ h4 t1 M; p7 ?% h& e8 I, X5 [# X! ^7 i  a
另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-7 22:23 , Processed in 0.021796 second(s), 15 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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