设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5227|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:
  w( b; G& F, y7 w- D9 ris       
' c% P& l" I" g  B5 s- Vdo       
# t9 M. x0 H( x0 q6 S; K0 K        waituntil EventController.simTime = Schedule[now_depart_num];' r# f+ \- d  F( w' {% S$ u
        if zhuZhan.empty = false2 c+ {9 s  E$ u: n8 q
        then " ?, n( O0 \& H. B
                zhuZhan[1].move();$ o) _8 H; Y7 i. \2 i* B
                now_depart_num = now_depart_num + 1;               
# a4 Z' I2 h3 Z: _9 |6 r: ?, E        else4 j, Z4 N: T- k. ]$ T1 |0 `
                waituntil zhuZhan.empty = false;8 M5 I) G; h) {
                zhuZhan[1].move();' f' U% `5 Q4 }) Y) u
                now_depart_num = now_depart_num + 1;
$ H( D, x, s  @        end;                                       
4 ?* r+ \5 d6 u" R" v/ J9 ]end;8 |) b, j# ?# x* ^' W! R
1 H7 _# H% |$ i% M: R' D
但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement.
. q* S& z6 }: r; B& B% }若是增加一个局部变量,如下:
" t' D* X3 V5 H& Y+ H( ]is 1 Q7 o+ E( R3 b, `5 ~
              depart_time : time;8 M) Z4 o/ ^0 @& c/ K6 R4 h: d1 S8 W
do
- w& B0 k$ E# [7 e              depart_time := schedule[now_depart_num];  g% S8 U' o, r
              waituntil EventController.simTime = depart_time;
3 u# O$ O, a6 L. C6 N" b% Y              。。。
. X5 Q7 V, ]0 J4 d. m* F0 b) f+ a又会出现syntax error near line 5 at <;>!4 l, w) i/ U7 O+ W' v$ [2 W

& E$ ~1 a; K4 h5 A各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。* Z1 P8 M6 K! p6 \7 K) W7 O' G

2 @: t2 |* P, wnow_depart_num := 1;3 P' y9 s2 a: F  x
begin_time := 0;
  u1 Z. l& W- f, ]" \* x$ Ywhile 1 = 1 loop
& w: N8 |7 n4 F- ` depart_time := schedule[now_depart_num];
& ?' s# G2 v/ D7 d6 U5 q8 B+ w, T wait depart_time - begin_time;
( ^" d" p' n" B5 Q, n ....: q6 p, j/ m9 E% {) @- H
) J+ f2 U+ {$ S- w6 m. g7 Q
begin_time := depart_time;: b* m* }2 i5 Q6 S
now_depart_num := now_depart_num + 1;
- m% q- P8 ^5 ^2 Zend;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time
+ z; n' V0 U" J* r2 x6 Q/ h: k6 sdepart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间
- w7 f: `2 y* ^每次等待以后把now_depart_num增加1,表格就往下走一行。
5 o) c) x9 ~- B- L
4 N, y* B3 j0 ]8 o- M7 O另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-12-2 05:24 , Processed in 0.020523 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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