设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5935|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:8 \. U& o2 X$ `  f7 g$ R7 B" P3 @6 q
is       
) @+ s' J2 b7 t8 L, x1 R6 I  Y+ B& hdo       
9 o% X* q/ N! o6 Y2 R% n$ v$ E1 b# d        waituntil EventController.simTime = Schedule[now_depart_num];# N+ _$ }- n+ _  c5 K
        if zhuZhan.empty = false
  ~8 p; a2 S' i8 W1 m        then
# F# J. u) P2 ]8 U                zhuZhan[1].move();
( B8 |! k! ]3 q4 C! c" m                now_depart_num = now_depart_num + 1;                  u5 p6 @# ]6 w7 E# N# S# K
        else$ ~& c2 w. M/ M7 {- }) i
                waituntil zhuZhan.empty = false;: H* E8 U3 Z+ O$ o8 g3 i& O
                zhuZhan[1].move();
! d2 c* [* ]3 i+ ?$ C+ \                now_depart_num = now_depart_num + 1;
4 A! ?: E# w9 o; x# ?: s        end;                                        - u  L- Y& h7 U/ T. U( E' ~
end;
1 a& Z! ^0 z& G/ t4 |; i3 M
0 g9 K: G( A- R1 K但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement. % i* S* h" l2 d$ V
若是增加一个局部变量,如下:
5 ~. p$ i8 v; m1 Z# q8 K. A  y3 ris
* u8 D$ B9 g0 x2 F* B              depart_time : time;
% S( |5 L4 C" z$ O! ]) O- tdo   A6 B( k5 Z" B0 x9 @
              depart_time := schedule[now_depart_num];! f4 U2 v+ G! D. I9 J' s, W# _6 m
              waituntil EventController.simTime = depart_time; . l$ O2 f' u7 n" V/ M- V6 _  z
              。。。
+ M5 @+ ]. V! M/ m, C% E又会出现syntax error near line 5 at <;>!
* L3 V& U0 Z8 ]& Y2 s. h& k" Z( C
各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。
& [; k: l2 ^) {- O$ t7 N
! J* a% l9 x! N# D$ bnow_depart_num := 1;
/ B7 u( C" @3 N5 Fbegin_time := 0;$ ~5 R# E+ l$ [% ]* Z
while 1 = 1 loop
) G9 g, v6 m7 U5 X  s depart_time := schedule[now_depart_num];9 P5 t% T- C0 ?$ Y  ^& V) N
wait depart_time - begin_time;" i) n- J8 ]) D* W4 ^" D0 L5 T* T2 e) i
....* d" {0 V$ B7 ~/ x# m
  K& `0 I* Q4 [3 y5 B
begin_time := depart_time;
8 }: u. }. l$ n now_depart_num := now_depart_num + 1;
- w7 W" W. H5 i8 Q1 Z( [2 ?2 N6 K0 m2 L7 Wend;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time
; D* b( A2 ?" g2 o' Ndepart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间
& {1 R! E* n" P每次等待以后把now_depart_num增加1,表格就往下走一行。
) ]9 M! z* C4 b5 W3 c
3 {4 j( F) m; x; ]0 K( P另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-20 10:39 , Processed in 0.015644 second(s), 15 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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