设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5736|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:
" F4 d8 y6 D1 L3 Wis       
7 r, e3 @8 |3 G0 F3 `do       
$ Z! R; J" ^" A, Q. @/ \3 e0 p        waituntil EventController.simTime = Schedule[now_depart_num];* l3 j: D" S) B5 p  C7 |- G
        if zhuZhan.empty = false# f% [# C$ ^# M( d
        then 0 e% @; O2 _) v" u! @9 u
                zhuZhan[1].move();$ V6 s: f5 g+ {- }( M
                now_depart_num = now_depart_num + 1;               
$ U. x! L4 ~1 O2 ^; x, v" h1 W) I' x+ q        else
3 }! t; n( v3 o" P" `, }2 [                waituntil zhuZhan.empty = false;1 G" [9 A+ y4 ~! e, J$ \( X
                zhuZhan[1].move();
0 }6 d4 r0 m( J3 M                now_depart_num = now_depart_num + 1;
9 n- }% D7 R1 v+ m        end;                                        # z) ]9 |" ?% b9 D
end;
+ U% `. i+ a) B+ }# d4 |4 \; E3 ~7 w- D
但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement.
6 v$ S: F+ \+ A1 w- W若是增加一个局部变量,如下:# Z0 O$ B7 \& S$ D& f$ C* P! P
is
5 R# v1 o9 d' g7 b              depart_time : time;  L: e/ p- Y+ c+ Z1 m7 O( o2 ]
do - L) U9 X2 y* H6 l1 e6 a
              depart_time := schedule[now_depart_num];$ |2 ?' h5 h4 u7 o
              waituntil EventController.simTime = depart_time;
, g: P" x& p/ t4 \+ k              。。。
! j8 |# r# }# ]4 H6 N6 I0 Q! l又会出现syntax error near line 5 at <;>!# m% L( F2 L5 o
" [4 F: v. E$ |8 h+ ^( b2 E
各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。- {) E  ~3 N6 d, A  `' ^0 `2 ^! t9 b) L# b

% e/ P0 v5 d4 A2 Q! Know_depart_num := 1;
9 U) M5 Z3 ]$ w, tbegin_time := 0;
2 P( {5 M( f9 k' O- u; b1 z: rwhile 1 = 1 loop4 x8 g9 t; L# @  W2 D- {1 C
depart_time := schedule[now_depart_num];# A3 K# K1 r* w" E, c+ y" ]
wait depart_time - begin_time;
5 F. f8 m/ P5 v: z ....0 |: g% O7 A! u0 z# Q( |* R/ F- M

7 P( m8 D2 p0 R- X0 X6 @& y/ K* _ begin_time := depart_time;
% R$ }5 b$ ^  H$ K5 O: m) ~& l now_depart_num := now_depart_num + 1;8 s5 m; l/ Q6 {& X: P
end;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time
- _, R/ n# |4 w) ]/ Gdepart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间
. e) D7 W$ d5 ~. i& ?每次等待以后把now_depart_num增加1,表格就往下走一行。, z; _! h2 C5 O' u; P9 @

4 e& R) m, Z6 d+ t# r另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-4-22 06:16 , Processed in 0.016043 second(s), 15 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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