设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5839|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:5 @& T9 i1 \) U3 t; @2 t- z
is       
* B3 H; ^# \1 E/ M+ f3 N0 }6 p6 ado       
: W( z* y+ K4 z! U# G0 r" C: R6 Y, l        waituntil EventController.simTime = Schedule[now_depart_num];2 d+ X  Q: Y# K- A7 d% Y. M  n" M% D
        if zhuZhan.empty = false
8 d; h7 I: q! J) [# A& l        then ( B1 X; R* g9 k( M5 h! M
                zhuZhan[1].move();
8 o3 q( k* z) j                now_depart_num = now_depart_num + 1;                ' X" B" _/ T5 ~
        else
% ^4 r& z& G; S. e8 b# a( s/ s7 ~                waituntil zhuZhan.empty = false;
6 K9 b8 s1 _* a  J% f) L, v" n4 |                zhuZhan[1].move();  S; g: E4 P8 O
                now_depart_num = now_depart_num + 1;
5 _9 m' B  ?3 l# {! q        end;                                        * t& U7 Y* B0 U( ~+ j2 X! d4 F
end;
( Y$ _) g$ ^* J: D/ d! q
, `$ d+ ?5 F/ y但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement.
& y# I  {( N5 [% r4 U9 Q! D- j若是增加一个局部变量,如下:" A' V( ]; f* z
is
% g! |: |: u( X- x& V              depart_time : time;. B. q4 J# d+ [% c$ e7 `
do
, \* ?' Q* I$ R$ z              depart_time := schedule[now_depart_num];7 l. S' D2 ?- v3 i
              waituntil EventController.simTime = depart_time;
- `! d" x: G" P% |              。。。- {/ c* d5 v5 f: }: Y4 r* ]
又会出现syntax error near line 5 at <;>!( ]- @) _! x. j6 [% t# K

4 g- W# ?5 K" C) V4 ^各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。
9 f; w% M4 h5 o# d) `. I+ N; p* h( }* W* \  X8 X2 M
now_depart_num := 1;
; O% h1 M8 h, o. L+ g. bbegin_time := 0;; B/ S5 A5 Z) j" y% u  U' F  D
while 1 = 1 loop
, K, D. w/ Q, s( M9 Q& a5 W$ C! D! I depart_time := schedule[now_depart_num];
* d( |; s4 L& h- |6 g" ` wait depart_time - begin_time;
) m. c/ g+ t- F) r ....; q& u! K4 ^# B2 m% G

# ~" |( {* u5 j0 u begin_time := depart_time;7 `6 ], p  g) R- |( D5 f9 E, A
now_depart_num := now_depart_num + 1;6 D& C4 x$ W! |: d, e4 B
end;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time
# g0 f) [; N1 |  f' J; W% s4 }1 M' ldepart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间0 T+ y) y( C& Z- t0 M8 p
每次等待以后把now_depart_num增加1,表格就往下走一行。
1 @0 n5 O  P# a1 }: N, z8 z; r) p8 z! ]* ]3 O1 P$ p
另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-5-16 06:23 , Processed in 0.023313 second(s), 15 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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