设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5187|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:
* @4 ^) y% I9 @9 g: k5 nis        7 p# I* {, \8 a0 K
do        ; x. r8 D, ?# N2 A
        waituntil EventController.simTime = Schedule[now_depart_num];6 {+ s. s; k. `+ I
        if zhuZhan.empty = false
( P+ D+ x% h0 [! M; w        then 4 H& ?  f5 Y) C. v% b: ^$ m8 V1 q/ [
                zhuZhan[1].move();
$ q2 @3 v% y( i8 J                now_depart_num = now_depart_num + 1;                * a# ~5 m( g  [" K
        else
& J& v5 F! Z9 O# ^7 }' ]                waituntil zhuZhan.empty = false;/ N: n8 v+ a2 w
                zhuZhan[1].move();% o; D1 ^4 ~6 D" k4 S1 t. M
                now_depart_num = now_depart_num + 1;! T$ E, a, ?4 n0 ?% l: {8 H8 y
        end;                                        4 |# @4 d6 ?  n  p& O
end;
5 N9 q* F/ g, K* H1 h
8 b( C5 @+ i7 X+ W% i但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement. - K$ |& B. L1 e2 e
若是增加一个局部变量,如下:
# i4 T: f/ o9 q% h; d' [is
3 t9 ^, l2 m+ j; `4 `/ @, h              depart_time : time;/ p5 M- J: I* {2 z0 C% v# m
do 8 n+ h  B4 {* Y, k+ z( p: ]( _
              depart_time := schedule[now_depart_num];
; j$ c( E5 S2 [" F1 S9 W              waituntil EventController.simTime = depart_time;
0 Q$ z% j6 ?5 o, N, i              。。。
2 Z# f3 b3 o& b5 e! N3 \又会出现syntax error near line 5 at <;>!; R$ M: q9 h$ `1 b+ g
" |6 o: e4 ~% w3 l: L: ]8 Y( j# F
各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。8 X! F: \* E8 T7 F- b
9 U0 C) b8 L" Z) z7 ^& D. N
now_depart_num := 1;
& |1 i. Q/ R3 u  J+ L% ?$ _begin_time := 0;
0 k; C  @+ E: [7 mwhile 1 = 1 loop
/ r0 z' R' b( ^( i! Y. v7 t) n' y depart_time := schedule[now_depart_num];
, U1 y) L: H- o  J! ?' @6 T% }/ L" S wait depart_time - begin_time;
# x: u1 q" a9 b- T. H7 P- Y ....
; O. I# W6 A& u8 h: g' E+ a! J. O& t5 i/ [* B8 N+ q: m$ V
begin_time := depart_time;
4 ]- W7 q: q, y) \) V! G2 d% s7 h now_depart_num := now_depart_num + 1;
" H7 }4 i% p( `) o' Qend;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time
7 j+ N$ Z/ C5 n7 z  _* y3 t0 Tdepart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间0 S$ K! s. K& s  n! D/ M6 `/ W
每次等待以后把now_depart_num增加1,表格就往下走一行。2 Y. X" H* N6 x* v2 U% R

' R0 O5 j' A( T+ L& s4 E$ K# D另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-11-22 09:26 , Processed in 0.017624 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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