设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6358|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:
! w$ }8 q& }8 R+ Vis        6 ^& y5 H2 _+ ~/ w9 F$ i
do       
. F- x. H" ]7 ~: c, {; A1 R        waituntil EventController.simTime = Schedule[now_depart_num];1 Q$ [2 A5 n- I" L. s
        if zhuZhan.empty = false+ \9 O9 ]9 y" V0 P
        then
3 T9 H' v$ U$ E1 C8 _, L1 w8 f                zhuZhan[1].move();
9 ]* F0 _& l) ~1 u                now_depart_num = now_depart_num + 1;                # |5 S/ o3 H+ Q6 w- @
        else( {; E5 e4 b6 q& o' G
                waituntil zhuZhan.empty = false;
- f6 j8 S; T# O. q. `                zhuZhan[1].move();
1 L6 s4 I& F2 n* f9 u                now_depart_num = now_depart_num + 1;
5 Z3 N/ d* w  Y, k+ z        end;                                       
: i) O& N, ]* pend;  D) y4 D. |2 W" I
; W# d" U( }. _
但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement. , F0 X' J! j" e) j8 [
若是增加一个局部变量,如下:( c$ B- D: u; h& ?, k
is 5 @9 `: i9 |3 z5 h/ e
              depart_time : time;
$ g3 N' a' o- Q1 f4 ]do ! e. c% K! ^" ~' n  X
              depart_time := schedule[now_depart_num];* x  z& ~' V8 D+ M
              waituntil EventController.simTime = depart_time; 3 [$ Q- I; x# U$ j/ L: M
              。。。! W, b7 P& Q' m" k& G- L
又会出现syntax error near line 5 at <;>!
* h/ Y! R  E; L! E$ I2 ]( }
4 m' E8 F3 u9 C; O4 X; ~! Z各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。& K0 ]0 V0 S' x9 D

- M% R  r: P- e/ e) bnow_depart_num := 1;
( \3 A; J  }, ~begin_time := 0;
0 t3 O4 E+ O- Uwhile 1 = 1 loop. q/ B6 ^, _. \3 g1 g5 A
depart_time := schedule[now_depart_num];
3 b/ o' t; D1 |0 I: g; }1 i. ~" ]  t wait depart_time - begin_time;& @# M  C. L  {6 L
....
/ D! ^% Q1 ]7 y' O; r3 A$ V. u  {- v# C: F1 ?
begin_time := depart_time;" O$ D) W1 k2 P' Y' m
now_depart_num := now_depart_num + 1;
- q  C) [( h7 X: bend;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time
! T9 [( Q# Y( ]! F, Adepart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间: u. i( {7 Q" I" C
每次等待以后把now_depart_num增加1,表格就往下走一行。
( w3 s1 h$ j9 _! D+ x
2 D- A4 K6 B: |( r# Q7 b, M另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-9-21 19:41 , Processed in 1.629714 second(s), 15 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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