设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5631|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:! j# ?, v6 U6 k6 [1 T6 y/ I' ]8 u% g4 f
is        8 P* Y- e0 E2 s* [6 x# q! e% t& @% T
do        , F0 I5 r5 u* y! R6 g. N
        waituntil EventController.simTime = Schedule[now_depart_num];
& ^! g+ y, Y( g: W6 W        if zhuZhan.empty = false' v/ C7 n$ v3 z3 k; b
        then
* w6 o* @3 I, `  g( D                zhuZhan[1].move();" _7 d- I6 @& m& @% @
                now_depart_num = now_depart_num + 1;               
* Z/ I# H4 T& H. q        else: ]# g' {5 ~, R% L* @
                waituntil zhuZhan.empty = false;
" T% I0 m- R" h' q) M                zhuZhan[1].move();
+ Z9 E+ T" b( \- x4 R                now_depart_num = now_depart_num + 1;
2 i3 O, @( x$ Q4 [- H: a) X        end;                                        6 @. f: {, P3 e
end;
7 ~  d9 b$ x8 ~4 d" U+ c5 y
% w! A. u7 X3 M6 s6 e3 A4 D但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement. $ N( M7 E; B( g, w; [) I8 j2 B
若是增加一个局部变量,如下:* ~% h3 m4 n  }  F
is 9 p3 Y0 ?, I  u6 d' A
              depart_time : time;: Q: i& P3 j) Z! }6 P% i! |2 n$ m
do
2 |# ^  k" p: Y6 s. a' V              depart_time := schedule[now_depart_num];- W+ m1 \" P7 s6 p6 w0 S, L% }% C
              waituntil EventController.simTime = depart_time; ( p0 C6 ~4 U  W7 H' f& {
              。。。
; U! X% O& r5 R) V, H# i又会出现syntax error near line 5 at <;>!
* k- b. N& W0 I! m: \4 J. i: F4 e  B' _
各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。
3 {/ r+ s" z' K! U8 f6 [1 [; w5 Y6 a, [
now_depart_num := 1;
5 ]) S; @7 c4 _" S/ g  Q$ Vbegin_time := 0;
0 P. R) W$ e8 Ewhile 1 = 1 loop7 _* B; T* R8 O6 h# G  j
depart_time := schedule[now_depart_num];& t( C  e7 M% w8 K3 C- ?
wait depart_time - begin_time;0 c1 m6 y/ N+ Q3 W0 \4 H
..... L1 f$ i% e' `8 k
* v$ I$ W9 r9 e+ u8 [* N
begin_time := depart_time;
1 L( ~) ?: W4 g& p0 f1 t; h+ o2 s, V now_depart_num := now_depart_num + 1;5 ~# U  c1 V1 C( Y* Z1 N. Y) \
end;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time" h3 L0 G: I% d% m# f4 h
depart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间1 s! R8 _5 f1 b4 @  M
每次等待以后把now_depart_num增加1,表格就往下走一行。
  [# g. ^5 V" p. q3 q$ H/ C2 \% U2 w& f& @4 U3 ^3 u+ J2 `, d9 X
另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-29 01:37 , Processed in 0.017862 second(s), 15 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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