设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6223|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:
9 F2 z% R9 j. {/ Y6 eis        . ~7 G& t- }6 Y( O  P9 C3 U
do        ! G, ^6 p4 W/ I) J- @. m
        waituntil EventController.simTime = Schedule[now_depart_num];
2 `. U9 g6 }& o8 J9 t        if zhuZhan.empty = false0 I, U8 n- ^8 Q
        then 1 c0 ?0 l7 r& d* h' M" o) Q$ J
                zhuZhan[1].move();3 f: T2 W2 Q. H% Q& }2 f: E1 ]
                now_depart_num = now_depart_num + 1;               
) ~- H& K0 i. w/ E* P% y        else
4 W$ G% X! E  x. |( V- {* ?. x6 C' i                waituntil zhuZhan.empty = false;1 w) E+ q  b3 ^% _
                zhuZhan[1].move();. ?8 [  J8 `) d
                now_depart_num = now_depart_num + 1;8 s2 R! J8 r- }+ j
        end;                                        5 {5 K  ~8 H5 ]9 h  k2 ~
end;; r* C) w$ x; \& x* R* p9 J5 X& C
9 w5 ?; s* x/ W. b, J8 g9 \6 t1 v
但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement.
6 X7 ^  f' h: I9 |" H若是增加一个局部变量,如下:) w) ^7 x9 u- S( Y
is
# y( g+ o: y, f3 y1 O              depart_time : time;
+ b& v9 Z% f) E3 Q7 ]+ Hdo
# n$ S8 w( z7 ?8 H/ p! d1 @& \# k              depart_time := schedule[now_depart_num];
! X# R) O+ U& {3 ]3 C7 N" j$ I$ L              waituntil EventController.simTime = depart_time; 0 Q  E$ K9 p, x6 p4 P
              。。。
9 u% w+ Y& Q- G/ k& q7 D1 z: g又会出现syntax error near line 5 at <;>!1 W) A' H, f0 |( t8 p9 B- n
. G' h+ C, S: |
各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。
3 O6 h, ]2 Y& {+ |6 b/ c! F2 O8 [
' D: e! X& @5 M- U& c# hnow_depart_num := 1;
; U! b+ C2 h( j( ]9 u' ~1 h/ Bbegin_time := 0;
/ p) Y9 g9 l# x, |7 b8 _while 1 = 1 loop( J. y' z, K8 f/ C
depart_time := schedule[now_depart_num];
0 P) i% Q/ p% \3 I wait depart_time - begin_time;
5 I5 Q- Z* a6 R6 ?7 l% { ....% P5 o8 E; X) j9 N
9 j- K! E# d; v2 Y# _
begin_time := depart_time;
7 M: V8 V, O$ A& f now_depart_num := now_depart_num + 1;  N$ t0 ]0 V' z& M; X! f
end;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time
# |; J0 y6 r1 W6 M( z, x. \depart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间: I4 y) _4 Y( S* P# m! M  c' U
每次等待以后把now_depart_num增加1,表格就往下走一行。4 _7 x$ X, ~8 ^. }" c% F

+ D+ b9 E/ ]8 Z. w另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-8-25 05:57 , Processed in 0.022739 second(s), 15 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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