设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5962|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:
, V# ?! X% G$ }2 D: Pis          A" ?# B: O/ y" V* I" P9 k5 |; f
do       
) r7 _/ ]0 k( Q) k3 \/ Y; e        waituntil EventController.simTime = Schedule[now_depart_num];! e0 l; y" w& U2 _
        if zhuZhan.empty = false
$ j& J8 G) {4 \/ v6 w$ \        then
% R3 C4 ~! k5 l. K                zhuZhan[1].move();3 q/ |' l1 c1 W' H" O
                now_depart_num = now_depart_num + 1;               
3 r9 q( u+ C! ^2 s* E: }0 o5 M        else4 G, r- k$ ~3 y( r2 m2 S
                waituntil zhuZhan.empty = false;5 Q! \  g# M; Y4 ]- p7 ~3 P4 F
                zhuZhan[1].move();8 ?, p8 p5 q2 P6 W5 Z& Y: M
                now_depart_num = now_depart_num + 1;
. D% [2 H* S- w/ d' d4 W        end;                                       
7 V' Y, l, k  Oend;0 O, ?' z$ Y! {! E

$ M( Y; c4 S$ ]6 H但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement.
, I, T" U% e8 P& s' h; x2 y5 U, P  a1 [若是增加一个局部变量,如下:( }) K  A- V  w5 Z: o+ t: \: X
is   m/ @5 y) o2 u
              depart_time : time;
7 ]4 j7 F5 {! w7 M' Ndo : ?$ Q( t. R% F* h0 w3 L6 P# `
              depart_time := schedule[now_depart_num];
$ z4 D0 Q6 `5 C& [              waituntil EventController.simTime = depart_time;
% n, U0 X3 k% u: f% @              。。。# c5 J$ q* b6 p' q
又会出现syntax error near line 5 at <;>!
% [8 k& F: h$ m2 h
: P8 l- O. n9 y+ |4 b各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。- v# `) ^- N8 r; b& G3 l4 U
1 H- H8 Z$ \' X; m7 D
now_depart_num := 1;; w# _# W% o1 B& K) }9 P$ f9 \
begin_time := 0;: O# r3 j) t. A% M- Y
while 1 = 1 loop
8 }: @9 I/ b; ?7 N: r" ^4 s depart_time := schedule[now_depart_num];1 x8 g% z% E; N! M
wait depart_time - begin_time;8 q! l! F, B; [4 l0 C$ U+ u
....) X  p5 m4 l, S2 s3 M. ]
5 _; y* t6 E9 w+ B' y  z" e
begin_time := depart_time;. L/ I$ O9 A' s7 j8 b: l8 E% L
now_depart_num := now_depart_num + 1;8 a( h7 A" Y5 m3 F! O
end;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time
$ a0 L  L" K8 [/ Q6 s2 o8 jdepart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间& [: k$ V7 x2 ~4 ?; u: x
每次等待以后把now_depart_num增加1,表格就往下走一行。
$ A. ]% b* K! _8 ]* A. K: ^
% }7 s/ z) f  x$ V' C0 L# a* i另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-27 10:13 , Processed in 0.014841 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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