设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6154|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:
" e1 Q3 |; @7 ]- A0 xis       
* M# I& H& _/ \- I( q' S0 {: mdo        0 t" j+ u! U: D
        waituntil EventController.simTime = Schedule[now_depart_num];
5 P4 Q: v8 A; l1 S        if zhuZhan.empty = false
2 ]4 F$ h6 I8 g/ w3 q3 d+ k2 j7 L        then
, P9 k8 D0 T$ q+ n" P% N" R0 }: N                zhuZhan[1].move();7 H* D7 w* G4 N* q) p7 |, U. O
                now_depart_num = now_depart_num + 1;               
( c$ ]4 y% n# b0 [' K) m% ^  j        else! @) B; k- }/ X; [; P4 E9 E
                waituntil zhuZhan.empty = false;; j! w: A( J$ h  u! c& W# S1 t: ?6 J
                zhuZhan[1].move();
7 b2 s: ~+ x9 n) ?3 T$ P' ^$ ~                now_depart_num = now_depart_num + 1;
" U) c7 {+ C) x6 T4 l+ _. k2 q        end;                                        " @, y: \  W  |4 L% D- |# F( T. ?
end;1 s8 X7 @. V9 x

5 F/ G% v! h! D7 I2 i, n8 V+ D但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement.
7 z# n$ w+ G5 f6 x; I5 m若是增加一个局部变量,如下:. q0 a, C9 d/ v8 V3 _
is
8 B9 C# G; D. k: G2 W' g) e              depart_time : time;: E$ v" y. |6 i# j- O
do
# d" \5 y* Y7 }              depart_time := schedule[now_depart_num];6 J$ S6 T8 y+ C$ O7 }
              waituntil EventController.simTime = depart_time;
# y! n) ?& G9 Q: \5 N2 A7 w              。。。
5 E: ?2 t0 z0 b7 W1 g又会出现syntax error near line 5 at <;>!
! E- }; H2 T4 Z+ b" R  F* @" H+ K) j, G7 p" B5 q4 V
各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。1 Z* _' l5 ~+ _7 O0 F

) ~6 C/ f: B; h: R2 _* I* y0 G" nnow_depart_num := 1;: n8 C: i, H% \; u
begin_time := 0;& ~" w4 _' Z  t
while 1 = 1 loop
2 M7 e5 O8 z) U" D8 I$ u depart_time := schedule[now_depart_num];( L2 v- g: t1 x+ O
wait depart_time - begin_time;
# d2 q. ]3 h, d$ j# o: r3 Q ....% E, W4 o9 ~. q1 W( k% z

; i, q" d6 I/ Q3 { begin_time := depart_time;
) {, H1 f+ D9 i$ { now_depart_num := now_depart_num + 1;
/ M; {  i8 p$ Y% x/ T1 eend;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time  K; g# K& f* t* [  @3 {, ?/ ~9 v, _
depart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间% W4 h' Q2 q" L+ {7 e' j
每次等待以后把now_depart_num增加1,表格就往下走一行。% l, S. E0 E+ S, d

( ?+ J0 }  `( P  [另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-8-5 14:55 , Processed in 0.015171 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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