设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 4831|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:
- U6 o9 N+ f4 F1 {7 f; his       
# J. I5 M! R- |: gdo       
, S7 F& W  c* P6 a' q        waituntil EventController.simTime = Schedule[now_depart_num];
; g3 M- o1 D; D1 B; ]. n        if zhuZhan.empty = false2 p. @+ a( `) V; N; v
        then   h# L% `/ P) b& r4 H
                zhuZhan[1].move();/ v. Z* P2 t  F3 I/ v1 W2 v
                now_depart_num = now_depart_num + 1;               
+ u6 n7 D8 n$ b0 b* L3 ?% e        else
+ y" t2 T" A$ I" O2 C+ G                waituntil zhuZhan.empty = false;2 c  z: |* j' d8 R' c$ X( f8 V
                zhuZhan[1].move();$ P! G. B- h2 I( i( Y
                now_depart_num = now_depart_num + 1;% u9 h8 y4 j0 m5 }/ a
        end;                                       
1 u- ~! l7 e0 S) V$ D, B# [- g" send;. \, v; U; P/ D0 j( `

0 {6 p$ A) K% j; B但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement.
  f. c( g9 c; K5 j, ]" p9 c3 U若是增加一个局部变量,如下:
4 y8 V, |) f6 N6 \7 @' z# |2 xis 2 ]+ {$ x- S3 r- x' J
              depart_time : time;; ?! c. o3 q3 P# y
do 6 ^: [0 S$ I! r' ]7 \  X: ~  A
              depart_time := schedule[now_depart_num];% n% X3 L; q  p: g
              waituntil EventController.simTime = depart_time;
4 g  t. f# ~5 e$ A; @- l: P              。。。
& [. n2 ]- Y$ z" V/ {6 }2 y又会出现syntax error near line 5 at <;>!4 k: Q! o7 @* W( Q. E: A0 h

6 \& u) D# g' L各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。8 o+ \7 @! j/ o1 [0 v

' O6 v6 ?* [  K* Tnow_depart_num := 1;
1 ?; U$ |9 `" f+ _/ `begin_time := 0;
$ m: q- h9 |: G( L- w  }' rwhile 1 = 1 loop
( N7 E' W. W/ J9 q3 M1 \, ?4 A depart_time := schedule[now_depart_num];  m- X4 _9 y# p, Y: v
wait depart_time - begin_time;
$ h+ Y$ c$ G0 c ..... ^5 \8 x  ]$ ?8 C
8 v" W. I% [6 |* S  @0 i- N- O
begin_time := depart_time;
! P% z' M7 q4 N+ G. t now_depart_num := now_depart_num + 1;
* f' d( k6 {0 q% g6 mend;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time& x$ A! u5 m( @2 k& L' A/ |# r6 K" V
depart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间
- J. Z8 \9 b/ A4 J每次等待以后把now_depart_num增加1,表格就往下走一行。
7 K. v7 X1 N( p! B5 d6 O+ t5 |" H/ m+ |$ U* p
另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-9-14 22:39 , Processed in 0.015941 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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