设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 4800|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:
% l0 t3 d. A( e* x" r9 G: f: wis       
" I5 h6 G+ N3 W2 W7 |- k- X& ?6 X3 hdo       
+ {) y& |. ?3 \4 d# X1 b        waituntil EventController.simTime = Schedule[now_depart_num];
3 [( O# `1 T+ O( g5 s( K        if zhuZhan.empty = false
/ r1 L9 j; J  C# [" ?        then : }0 a* ^/ f; n' f
                zhuZhan[1].move();
5 v' ]8 Q" l5 P+ S! H  a* Y6 K9 T1 S3 ^                now_depart_num = now_depart_num + 1;                , ^0 a. P3 T6 M4 c6 Q1 m5 z$ J- W
        else
) M7 f# ?8 @% Z                waituntil zhuZhan.empty = false;
8 `* A% u' M4 Q+ {) h% t% s                zhuZhan[1].move();
% A1 z/ M0 X! X) X! E- p                now_depart_num = now_depart_num + 1;
) x( c' F# G- A. i1 u" a        end;                                       
) {% Z2 F$ b* [! a) t7 s, a" Z* N" Aend;  Q9 Z  S$ x; x; i+ j: W
9 v6 _; M' `* A  ^# j
但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement. ( m% v0 F# n" l1 r8 B% k$ R
若是增加一个局部变量,如下:
/ ~8 r" \8 w+ c: h8 G6 Zis
' N; b8 }# O5 z* ~, R              depart_time : time;* Y6 e0 @! e: u- n( P+ T: [# A
do 1 \2 ^/ o8 T1 V# j# w' r
              depart_time := schedule[now_depart_num];/ U3 p/ e, o9 s) U: _& @
              waituntil EventController.simTime = depart_time;
5 Z# `# g- w% v, s. W- r; {& G) w              。。。( A3 R2 P! z' u+ D
又会出现syntax error near line 5 at <;>!
) H  |# {& o9 T1 z$ _6 m, j$ n% Z% @' {: X
各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。
( i* t5 ^, v- a! V
; T; r' x$ U8 I  Q& know_depart_num := 1;9 {) M/ s5 c3 ^5 t; a. o7 F
begin_time := 0;+ b) E9 s( [9 ~. A, `# E% r) l; _
while 1 = 1 loop) L; O1 ^) l' N  Y  `0 F$ _1 `
depart_time := schedule[now_depart_num];$ J3 V  z; t* J  Z  p$ A# T4 Y
wait depart_time - begin_time;
; m0 J6 r  B$ W9 O3 G& y9 G2 n: w ..... v& t% S2 k, m! G+ T8 d( v$ g% v
" v2 e$ D% X; {
begin_time := depart_time;
1 q- G! q! R1 }0 m now_depart_num := now_depart_num + 1;
4 h  u3 b" j: n, @% Kend;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time, a9 a7 d/ x! B3 c" C3 |8 S
depart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间) O/ \& B3 F- z, w5 r, H/ Q
每次等待以后把now_depart_num增加1,表格就往下走一行。3 a. M5 n; y' h$ u- @+ \

1 J( |* W5 ]$ I3 C- L8 v3 B另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-9-11 02:50 , Processed in 0.015542 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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