设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5455|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:" X6 J% \4 a2 [) n* F
is        4 ~& ~7 I: s2 x' \1 \- c/ ~
do       
1 A3 y: v: }1 p# e  G" o        waituntil EventController.simTime = Schedule[now_depart_num];
' K$ @7 X8 l) s        if zhuZhan.empty = false& D( h: r0 U# q) h* r5 t8 I
        then
0 b6 Q; K9 b0 K' \                zhuZhan[1].move();  r4 A0 X* T6 E8 h" S. L
                now_depart_num = now_depart_num + 1;                ) h2 S5 \7 C. Q
        else% V2 s: w+ \' {# k. \2 g; O! P
                waituntil zhuZhan.empty = false;
# C2 P% x2 z3 j6 ~9 U                zhuZhan[1].move();
  N7 v* O2 K% g" k6 r5 B                now_depart_num = now_depart_num + 1;
- i: G( i& U! D4 \        end;                                        % z! P9 F, p: V0 E( g
end;/ L  R3 R0 ?% ^' q: [7 h
  F0 ^  i2 m/ \. `" @* \
但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement.
! ^: B* m* `1 Q" _0 l- D% H1 v若是增加一个局部变量,如下:1 d, y4 k* F5 Z) d* w  Q
is ; l! b% R4 D" v- u$ y
              depart_time : time;6 _2 f# x8 D! f, t! ?3 D
do ) ~* U9 B. s; M( g& m- L8 l
              depart_time := schedule[now_depart_num];$ J; D: C; P: F& ~
              waituntil EventController.simTime = depart_time; / H' m. e9 \* M* S. L( T' D" [# J
              。。。
! a! [2 ]- M* g* T  s又会出现syntax error near line 5 at <;>!" j8 H3 Z$ ]# s8 q) {. d8 }2 z
. W* B6 P( X( H9 H+ ^
各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。9 u0 y1 D) m$ J3 M* B3 s

4 B' K8 X+ [' A2 V* R) hnow_depart_num := 1;+ o+ |1 x, o! l0 u  K$ o: p3 Y- K
begin_time := 0;
+ X' h7 O4 E" }0 C: u7 G0 e, F5 zwhile 1 = 1 loop, N$ b6 `2 C  h' b" z, x: c( D
depart_time := schedule[now_depart_num];7 \2 ?8 Y; S; ~4 G
wait depart_time - begin_time;3 B$ k: B+ }: z( `
....5 [* w: G" T  h! Q) l
' I. g8 }! R& K& l1 O  Z' U
begin_time := depart_time;
# M7 G# v# W- L/ D7 M5 e# i now_depart_num := now_depart_num + 1;
) i4 R7 L3 ?$ i" @end;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time
8 h$ q6 D1 n/ E- q8 j3 rdepart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间
; b( M- P8 U6 C2 {7 U+ b每次等待以后把now_depart_num增加1,表格就往下走一行。
& {7 ?. c" y% A2 X) B/ ?$ k2 {# d& o8 U6 G
另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-2-5 19:49 , Processed in 0.015781 second(s), 15 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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