设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6048|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:0 y- K) u1 }: U0 J
is       
. O2 ?1 w8 Y5 [) X. `2 e0 cdo        1 u- P  D9 o3 p% Z* u* D
        waituntil EventController.simTime = Schedule[now_depart_num];
( `5 M% u) A9 C  J( s$ K+ X! ~        if zhuZhan.empty = false6 m, e* B8 A. z- Y1 h  h
        then + }- Y& h" s% V) V
                zhuZhan[1].move();5 R- P  s/ q2 l& Y7 `
                now_depart_num = now_depart_num + 1;                $ J- ^1 A5 X2 A2 T5 e9 p
        else
% L; k; U7 C8 f, Q7 X7 _" X) B; [" m                waituntil zhuZhan.empty = false;
2 K0 K5 z- Y* Z5 w                zhuZhan[1].move();
" @' i( {9 }3 I8 a6 c                now_depart_num = now_depart_num + 1;
4 c) p0 {8 m7 c9 H        end;                                        , R/ p2 Q+ E" n! @
end;2 L$ `# f$ E& R$ B- S$ [

2 t& K3 u$ V0 E' r+ Z但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement.
+ Z. Y6 F- t6 ~9 K/ V% A/ `若是增加一个局部变量,如下:
7 Y* y9 y9 x/ q5 t2 V4 w7 g, S# [' Xis
$ u+ f; F- O" ]" {. I7 G              depart_time : time;' M$ g, Q. k4 W" S8 C
do ) C9 {& e# V3 v' Y
              depart_time := schedule[now_depart_num];
% U$ n" z: `# N; a5 R              waituntil EventController.simTime = depart_time; / O2 a; G8 Z) Y% ~" B( |! T
              。。。+ E& ~/ B$ E% w. q
又会出现syntax error near line 5 at <;>!
4 G5 {5 A/ k2 P+ F, q7 ]. H* z( ~4 ]# {2 J/ r4 b: h8 p3 M' t0 P
各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。/ v! W6 {1 O+ P# b: J5 L' c0 e% ]

- W! d* I. u9 Q/ z9 e2 |now_depart_num := 1;
- K" b5 n- ]0 u0 Mbegin_time := 0;2 Y" b6 [1 v' F( A/ A
while 1 = 1 loop7 j+ o3 A9 F0 u
depart_time := schedule[now_depart_num];) C: c' O) R7 p" O+ b: L
wait depart_time - begin_time;% ]7 E+ l- P7 K
....2 H8 w$ e4 q( G- x4 H

! B) L5 I& R/ C: Q) S0 ^ begin_time := depart_time;
7 b! v! _- y4 d7 S" v/ m: Z now_depart_num := now_depart_num + 1;
9 Y) U* T& V- ~end;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time
5 f$ G( Q2 m' K" X- p5 ~' ]depart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间
$ ]/ s2 w: z- J/ V# W每次等待以后把now_depart_num增加1,表格就往下走一行。
) F/ [5 Q+ r$ P+ r* A4 G5 H7 @
1 Z% {8 G3 N4 ?另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-7-16 17:33 , Processed in 0.020781 second(s), 15 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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