设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 4555|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:
  t* S& ?6 r. {- qis       
' ~2 C2 m8 k# Ado        + x4 s6 F; U& ~+ C/ L& ]
        waituntil EventController.simTime = Schedule[now_depart_num];7 \3 E/ Y: o. d( D
        if zhuZhan.empty = false
; e+ K8 n9 k0 C, G; ]3 o4 [- P        then ; ^, M1 v3 I2 P7 B" o  }" z" r) |
                zhuZhan[1].move();7 _! @8 @% r4 P' r2 P4 p
                now_depart_num = now_depart_num + 1;               
, Y& M& _1 P" N0 W+ F! |3 L        else. `1 I+ ~/ W" v& u, G- X
                waituntil zhuZhan.empty = false;
- G/ |3 j  F# p9 l! s. }1 c                zhuZhan[1].move();% S" I3 D% ]6 K$ ^) ?& c# k) y
                now_depart_num = now_depart_num + 1;
2 ~6 q# M: V/ F! l6 j4 A6 i        end;                                        9 t: q! G" T" g& ]* S
end;
' Y% W; d. k. v& U, [9 {1 b: I" m& g; v9 N$ s% _: ^/ O: Q
但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement. 9 r6 H2 F' s' k$ f
若是增加一个局部变量,如下:: J( o5 ?7 V7 ~9 h
is
2 l. n4 {# T5 n* g0 ~5 F              depart_time : time;
4 r2 N6 u4 s& @% Jdo * Y' \8 p3 O& L5 k! q  t
              depart_time := schedule[now_depart_num];; `- W3 O4 E8 k$ ^. z
              waituntil EventController.simTime = depart_time; / c" @" p9 {3 B. N2 ^; z! C9 f1 K; S
              。。。6 }) z, H2 i; F) _! a7 {- t4 C# n
又会出现syntax error near line 5 at <;>!
- ~. ~9 E- I( T' }. @7 }: n" _6 s; s, t3 V' }
各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。
+ B. D9 k" [+ D4 ]) U$ c: L1 `/ n1 p2 A& F6 X+ V) a& ?5 ~
now_depart_num := 1;+ s" w+ I) F6 n7 _
begin_time := 0;
1 |1 {5 Y9 g  S6 O4 l& ^0 vwhile 1 = 1 loop
: h( }. l; [, ]1 J* \ depart_time := schedule[now_depart_num];5 l2 d/ w8 I; `0 H; B- X
wait depart_time - begin_time;
8 L! g( [( p. m* K! M8 b ....# t+ Q# _) O' U3 e" j

) {& b- b. s$ r begin_time := depart_time;
) b  B- T& x! ^6 A! h' q3 y% i3 i now_depart_num := now_depart_num + 1;2 n& L1 g+ c& t& D# Y3 Y
end;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time% U/ f" K3 V* W
depart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间; g- H: s* u% ]1 q9 I  F: s
每次等待以后把now_depart_num增加1,表格就往下走一行。
9 \# ~7 ?. b8 Z2 L4 Q+ U, c( n+ C0 j' Q, X, F8 T* S! p
另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-7-1 02:47 , Processed in 0.013237 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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