设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5961|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:) ~+ C. C& w6 O9 y' T4 n0 Y% n( w
is        % B7 ?' B7 J: t& H9 }+ V
do       
& G6 h: a) j# z% x2 [        waituntil EventController.simTime = Schedule[now_depart_num];
) l- X4 u% Q5 Z4 {6 q. ^- l. ]  ^        if zhuZhan.empty = false3 ~/ F/ p! M2 W+ i
        then
2 X) k$ |3 i7 z                zhuZhan[1].move();
" S/ A3 L7 B0 u2 a                now_depart_num = now_depart_num + 1;                2 n+ {7 q6 I9 f, q, }: r* H
        else( `9 B8 k7 n; C, R9 K  j8 G
                waituntil zhuZhan.empty = false;
( P$ X9 v3 D* H1 W! n+ w8 D                zhuZhan[1].move();7 c  m, R% F, o& M( e$ @
                now_depart_num = now_depart_num + 1;* w; \- j2 t* f" c9 j+ l
        end;                                       
" a6 }0 i: H2 f' B! b2 b0 c. M5 Dend;( F  k, w* m% e4 l' m& a2 N
* C( y. v4 j3 C# U! P* |1 u+ o& o# {
但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement. 8 d& N2 ~) c  j
若是增加一个局部变量,如下:9 A# y6 _" t5 i, [) t
is + l% ^, d2 C# v: R& J7 l
              depart_time : time;: @7 \! @0 x8 m
do
% e! ]) s$ g: y- d4 M  k) W0 O              depart_time := schedule[now_depart_num];
- n& u3 }4 B4 Y              waituntil EventController.simTime = depart_time;
. @- u( x% f: m) N0 N              。。。4 y# a$ w6 P% B7 ]: V. |( a6 H
又会出现syntax error near line 5 at <;>!
5 ~: A3 g8 m* h1 w- T4 _- L9 D% c1 s- I
各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。' W. i( z0 l! f; k, Z% Y5 Z

/ f4 f6 Q2 K" W! \/ vnow_depart_num := 1;
+ \) y: `* X" x. j: q: v' Ubegin_time := 0;! E+ i4 ^  V+ i+ j5 v
while 1 = 1 loop7 X' [! B: Q+ R$ l: Z; [
depart_time := schedule[now_depart_num];
0 _3 K% P1 F( t- b) k  t# x" {1 s  ^ wait depart_time - begin_time;6 w3 J9 _4 E( d- e
....
( l- P; ?/ q. v5 e
6 v% n* x) T  j5 \) W begin_time := depart_time;9 c5 N# L$ |( y8 H& c( L( V( U. s. P
now_depart_num := now_depart_num + 1;, Y. l8 b+ C/ L+ ~2 `3 g; P% b( U/ c
end;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time
, m; y9 B7 \9 ?* Zdepart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间1 C1 z) f/ b7 ]' q/ Y8 v; o. b
每次等待以后把now_depart_num增加1,表格就往下走一行。
0 [, \5 w$ k: D/ |
: p- i( v5 M( O4 g2 C8 X( S另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-27 01:28 , Processed in 0.014923 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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