设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5134|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:) J" b4 N: K' c. p
is       
2 z  M) `  p( P2 _' _5 k1 O3 Udo        . l) l! `# q; h0 E7 _$ q
        waituntil EventController.simTime = Schedule[now_depart_num];* W, F7 ~3 s1 w# c$ x% C/ s7 n$ f
        if zhuZhan.empty = false
4 _) c; C& Z, I4 u7 U8 |! e0 d        then 7 U& M; @8 W, W2 U9 B
                zhuZhan[1].move();
; k6 I% |/ P9 T* q7 E# p0 v& n                now_depart_num = now_depart_num + 1;                . R. x$ v! S2 H% ?4 l
        else; J5 A( k& Q. g  b! d1 G% Z; ]
                waituntil zhuZhan.empty = false;1 r/ e$ [$ S! A, G' a
                zhuZhan[1].move();1 |+ z- ?5 I4 n* l. b
                now_depart_num = now_depart_num + 1;
3 W/ h6 Q* j% f( u; c3 p$ ?# z        end;                                       
1 A5 j6 X3 b8 g: n+ I  Eend;
* e& W, @5 c( O+ G6 u3 x- N7 |) _# `
" {! ~6 L5 |' s" }2 ]4 t+ A但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement. # |; @9 J, ^: @0 G
若是增加一个局部变量,如下:
# h" t1 @5 i$ p& p  Sis 4 L+ U* a0 t3 O$ o" n% Y7 d% }$ d
              depart_time : time;5 \$ X, \1 X5 |$ w
do 3 H6 r- w( @1 _* _# m/ l  w
              depart_time := schedule[now_depart_num];7 W: C3 Q! ]. s6 `, u3 c  R6 \
              waituntil EventController.simTime = depart_time;
3 l  Q4 u$ G& V2 S              。。。
! d$ d+ u- |( v* Z又会出现syntax error near line 5 at <;>!, _0 r+ t( h7 i, v7 W. ~; J
0 V+ B& s. p" ~- |2 [4 [" N7 t6 L
各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。
8 B6 m  t0 M) M! w
; s& q  s$ {$ o: T* C; N; Qnow_depart_num := 1;
0 W5 G) B" m8 l3 B8 ibegin_time := 0;
% C3 c% t( t% K& F0 g: p) kwhile 1 = 1 loop
& e! B6 v* _2 ^0 {: O! K; \ depart_time := schedule[now_depart_num];8 _! M3 ]% Z8 w0 }
wait depart_time - begin_time;
, j( F( @; E1 ]6 k5 @5 s( q! R1 z ..../ r! k) U$ y" i9 @+ D

, k% P. Z+ R# B) T6 @( ` begin_time := depart_time;- H' b! Q* R+ q  w# d( @$ V6 H& d6 J
now_depart_num := now_depart_num + 1;- i% o, h9 B3 s: S4 [
end;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time
, [9 j: ?9 W* b( O( O( E- X7 {depart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间" p7 ~2 `& y" r/ M% I
每次等待以后把now_depart_num增加1,表格就往下走一行。& s6 p0 H7 ^9 T% j3 y- Y  o

# H# y* t. {/ m5 I& q另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-11-11 19:31 , Processed in 0.019025 second(s), 15 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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