设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 4769|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:- o8 m& Z* r2 L  g
is        - f6 a( ]" W) \3 i
do        5 B* j4 h1 F9 }. V( B9 _' E
        waituntil EventController.simTime = Schedule[now_depart_num];
( Z8 r) b) S9 S7 X! k2 E- A$ h) W; W; d" N        if zhuZhan.empty = false
, _# R6 o' P" U4 y7 u        then * ~5 f) _1 i0 O) b
                zhuZhan[1].move();- z! R/ C' N+ g  A3 F/ Y( X  [
                now_depart_num = now_depart_num + 1;               
9 \5 x4 T2 j) c. s+ I9 Q! U' ~        else
# N  `& Z0 X  @1 h$ E2 ]) H                waituntil zhuZhan.empty = false;& B/ x8 N/ T8 T# E9 ?- y
                zhuZhan[1].move();
) [0 G! b, r8 I2 w" K6 ~                now_depart_num = now_depart_num + 1;
/ \" M  }* @$ C, f  q* M6 i& b        end;                                        . O7 P- b8 }: q# }3 K
end;* M* j3 M% u/ a; \" k9 e
4 R9 ~$ ^/ W) c# b7 B; ?
但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement. ( |. i1 H9 v- J2 a* j) G
若是增加一个局部变量,如下:1 p3 [+ r8 V. Y0 ]
is
" s7 n' a7 `7 c! C: A              depart_time : time;
5 h' P1 d# y1 Z) n+ ]" L! T" wdo
. O8 a1 k/ I: N, l# a              depart_time := schedule[now_depart_num];6 V& |' @& e4 S
              waituntil EventController.simTime = depart_time;
0 v  P6 }: l8 N  O! Q" J) ^8 v# h# w              。。。% n- ?2 s* X" ?  l! Z  f, R
又会出现syntax error near line 5 at <;>!
/ J# j1 d, X( ^3 r8 T: K
! B# \; a# X3 H" _8 a# L各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。
$ |) q! g0 L4 f. z* Q; W6 c+ a7 C5 s7 ?: \1 v5 j3 |' ^
now_depart_num := 1;2 R; U  P: N4 [5 @9 X
begin_time := 0;" j2 x7 ?0 }8 M4 k
while 1 = 1 loop
: _6 S) c% s; l, C. |& J& O depart_time := schedule[now_depart_num];
3 b7 i) [2 h% P1 V0 i& P5 T$ g wait depart_time - begin_time;: |4 x$ ?8 q/ U) L2 b
...." _# H- n# h* V$ Y( H/ F. ~

/ i, e$ X* C4 F1 [% e2 m begin_time := depart_time;
- ^; W& O8 P( b# }3 [9 H now_depart_num := now_depart_num + 1;
5 u3 b8 \2 s" r$ Y: ~, X# v5 ]end;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time
. D& H) E; y" A  K# Vdepart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间4 L- z/ x+ m! T; Z
每次等待以后把now_depart_num增加1,表格就往下走一行。
: k! z- t+ d( l) F* p# D1 T" C( Q$ b& p9 T
另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-8-29 09:32 , Processed in 0.016644 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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