设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3845|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:
. {# P' I0 a0 ~9 x' w+ bis       
  V7 ?4 ^* M; p/ f- g, S. qdo       
& s0 p6 p, ?. y* P) s        waituntil EventController.simTime = Schedule[now_depart_num];
1 ?" `9 K. ?, e2 l. J" E        if zhuZhan.empty = false. Z+ i, ^- G1 a( V8 M8 [3 i
        then 8 _8 L& f8 X! b2 {3 F& _5 A5 I( [
                zhuZhan[1].move();
* u4 P) `, `# o* r                now_depart_num = now_depart_num + 1;                  m% p9 B+ M4 c. o4 F) z
        else2 q; O6 F: Z) m6 W$ {* X
                waituntil zhuZhan.empty = false;
- a+ y6 b, x2 l+ H                zhuZhan[1].move();7 `0 J; t' j9 h! n
                now_depart_num = now_depart_num + 1;7 p" K/ V7 R8 D
        end;                                       
! b4 n% `' w2 L& g$ K. X: V' kend;  C, e/ w- p9 {

) p4 `1 t5 m/ {  u' i7 w但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement.
. j2 Z1 I( }1 j  J+ I( T/ ?若是增加一个局部变量,如下:" u6 |/ `# `, n  q( c0 p
is
# @" H: L+ B! V: \+ o" u              depart_time : time;
9 j7 Z* J0 f% u* C# \) O) ndo
8 h8 B4 ^+ m( _% d0 M              depart_time := schedule[now_depart_num];6 O# U% \% \8 |- b
              waituntil EventController.simTime = depart_time;
8 N; S, T$ D- n% K3 `' W( R* K              。。。
" \  I; S1 a9 L; Z9 I; y3 j# \  [- Y又会出现syntax error near line 5 at <;>!( v! L5 K% E+ V4 i5 T

$ j8 n* ]" }$ g/ |各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。
# U* A; E% P! }, Q$ i+ `% Z5 a# G0 p, h5 X; C. J
now_depart_num := 1;( g' N$ J, m, J- g
begin_time := 0;8 r1 _7 ~5 z4 K/ ~0 P
while 1 = 1 loop
. Y# v$ m9 g- W! Q# v7 m$ L depart_time := schedule[now_depart_num];
- @6 J2 }  x& S2 S) C  T% ]( a wait depart_time - begin_time;3 Q5 N$ l3 q& P
....& M/ W1 E; n! p: f
0 N4 d; u# E# ]0 T8 F% {5 |
begin_time := depart_time;
3 I, o. ~0 T7 R- @% ]+ @2 H6 y0 o now_depart_num := now_depart_num + 1;$ e4 Z$ A+ s- [
end;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time- x) j% u6 I! R+ z% x
depart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间4 {0 _+ k! w0 g9 m" n) Q+ n$ c
每次等待以后把now_depart_num增加1,表格就往下走一行。
8 @* w$ c; _! U) E
+ Y- j$ h/ V; ?/ b" W0 L另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-24 00:03 , Processed in 0.011354 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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