设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5723|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:; h+ y, G8 `) _$ d% a# T  O* H
is       
9 d! Z0 M( W& Ido       
! c1 ^" e0 X4 M& t3 D. w        waituntil EventController.simTime = Schedule[now_depart_num];# }6 I7 }7 z8 E; s7 X
        if zhuZhan.empty = false
' r! A. N' c: V7 Z        then $ ^9 w6 o1 x1 D, Q, V% t
                zhuZhan[1].move();( A4 |8 \/ Y" x2 z$ m8 O
                now_depart_num = now_depart_num + 1;                2 p: {( \8 v: Q! d& O
        else1 z7 G' k' {; P! K5 H
                waituntil zhuZhan.empty = false;- }( ?- ~# d1 i
                zhuZhan[1].move();
' N) _2 b, m- _8 q: Z& K5 C                now_depart_num = now_depart_num + 1;4 x- n8 e3 H3 F7 ]2 S- L: B
        end;                                        . `1 R' z) ?% Q+ W- M8 o4 D* t+ m/ o
end;
/ x0 T3 V& C! L# N, N0 I$ |
- s2 ?. S6 h6 V  h6 g. ]但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement.
. t2 t7 J6 E. V6 d若是增加一个局部变量,如下:( i3 ~7 v( n/ b' q
is 4 n. A( ?" s* W1 z& H3 T
              depart_time : time;
9 c( h* }! z/ }7 f' @2 b- Odo 0 y' m3 w: s, R0 k. z% q6 \! n1 ^/ s2 H
              depart_time := schedule[now_depart_num];
) g. U& q+ J' l  a# ?. n& U; j              waituntil EventController.simTime = depart_time; - e) O+ S- R4 o) o4 A; [- ?" G1 M
              。。。0 M  S& R8 _5 H# e% l$ C% B1 `: ]
又会出现syntax error near line 5 at <;>!
" o6 _1 g' i/ [6 m. _
( X1 R* I+ v5 U各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。7 T/ K/ N0 U3 n4 O
' I% I  K( K7 i1 Q7 ^  t
now_depart_num := 1;# n2 d! R. I7 q( X0 D" v$ b
begin_time := 0;
0 [* H+ M, J2 c* M* V! kwhile 1 = 1 loop7 v; e3 _4 j/ m
depart_time := schedule[now_depart_num];
7 r8 a% c) r* p7 ?; V wait depart_time - begin_time;
  o) g. P$ ?) a8 O$ \. u  S ....1 ^5 U/ F$ I& t8 l

$ [, C  E, D# ?' L begin_time := depart_time;
, Y# S5 f) r# {$ {; f) S now_depart_num := now_depart_num + 1;- J/ u' V* h) C9 T0 K
end;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time: @) q  m$ I8 Z. O9 V; y, |
depart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间
8 o* c+ m' K, ]+ [1 \; w( a每次等待以后把now_depart_num增加1,表格就往下走一行。
6 S0 ?/ g/ E) g8 g0 V+ V/ n6 K! ?) E' e2 g6 \$ f* M- p
另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-4-18 18:48 , Processed in 0.025861 second(s), 15 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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