设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5233|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:
- r& ?+ S: \2 x) `1 Vis       
8 L0 y$ V% [% Kdo       
7 Y' Y$ |$ i' ?+ a6 W8 v' V! O7 W        waituntil EventController.simTime = Schedule[now_depart_num];6 f  h: t) N9 G9 W
        if zhuZhan.empty = false
) P0 {7 K- u6 [3 F        then 9 O; h  Q2 @5 s. s
                zhuZhan[1].move();, S/ C1 x3 g5 O! o5 s
                now_depart_num = now_depart_num + 1;                ) w: G+ ]5 S; Z2 T- {3 `" o4 P
        else; H0 r: i1 C. l6 Q! E
                waituntil zhuZhan.empty = false;
7 S' I. u" ^. R- ^- r                zhuZhan[1].move();
  R) L4 R1 K0 O' J. G                now_depart_num = now_depart_num + 1;6 T( Z4 Y, E1 w; o% a( _
        end;                                       
% o, f" `$ o9 C+ {0 S  K9 Rend;
2 P) a6 |2 Z2 P# Y, v# ^$ }4 j0 m0 n. O
但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement.
+ _' Q6 r, l" {& Z/ b" t" H若是增加一个局部变量,如下:
9 a$ {. v8 d; J- jis
1 j5 W& e+ B8 T# t7 U              depart_time : time;; {5 D8 z5 K" ^2 c" f
do
2 T6 o5 i# l$ E              depart_time := schedule[now_depart_num];
  e1 s* `7 p/ ]& o: Y              waituntil EventController.simTime = depart_time; " m( Q# j& Z$ f+ d( B0 ]
              。。。8 ~; f' E5 e% r; y
又会出现syntax error near line 5 at <;>!# d: m: b5 X/ o3 l( y- }0 a. N

. ~& J) D# S' D: h  Z* I/ A各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。
0 X' T! \. H. R( r, T! D9 }) f4 w" T1 ?" w+ R4 P( x
now_depart_num := 1;
) O# H$ ]# f# ], J9 obegin_time := 0;
+ i0 ^2 R3 i/ `2 P' c% _while 1 = 1 loop; `3 q: X; q' q( |  S  x3 ^& N/ B
depart_time := schedule[now_depart_num];2 |+ ?9 C7 f" T. |
wait depart_time - begin_time;9 d# i3 Y3 {# c  _5 A/ z) _
....
0 c4 ?3 y: R6 c7 D8 N' }% m4 B# @4 a: M/ O+ ~! b% ~% |7 _, V
begin_time := depart_time;
8 y# c  [- U$ ~! B now_depart_num := now_depart_num + 1;
9 X7 }% T" z9 G7 I. S9 `' Y3 vend;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time: i9 H" q# y# E4 M
depart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间
3 ?: z- {' ^4 a9 b  M每次等待以后把now_depart_num增加1,表格就往下走一行。
( `& C- G+ n( i( A+ B+ e& \( k
. }+ y- u+ C3 G6 B) L另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-12-4 15:47 , Processed in 0.018962 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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