设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6285|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:: g" z: A; {1 T' J6 a
is       
  y% {" Z7 E. O( j, F! i" ldo       
3 L+ l# O" P! X% P& a# c8 r        waituntil EventController.simTime = Schedule[now_depart_num];' h, O% k. v( R  |9 {
        if zhuZhan.empty = false
, X9 _3 m+ o5 M5 n& [        then
7 g) y7 |. a6 ~0 w# |# a6 U                zhuZhan[1].move();9 C) M9 v0 n% S; g( K3 i: a
                now_depart_num = now_depart_num + 1;               
8 I4 K' r  ~" X) E. Q9 O$ G( C        else2 r6 J- j1 L  ~: \) r  c+ L6 }/ r
                waituntil zhuZhan.empty = false;. j0 _3 w4 H' @9 T/ F$ Q! F
                zhuZhan[1].move();! u- A4 c$ c( c! C( \
                now_depart_num = now_depart_num + 1;+ _8 T1 X5 y0 z( ?; B
        end;                                        ' b0 U* w" J( u
end;
6 q& L* m9 X6 O' T# v; T/ i/ h. z' K1 @
但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement.
6 x) s# }; W3 S若是增加一个局部变量,如下:
3 z+ i; J: E; I! x( G5 Dis
& F- N0 z9 R5 P: l. f7 H6 V" l* b              depart_time : time;
' L/ D" M, p3 H* udo
) S" J+ m1 N4 m: k              depart_time := schedule[now_depart_num];' h* n, @% u: N2 g* M& ~6 j
              waituntil EventController.simTime = depart_time; 1 X, t: _$ ]: Y) H+ j+ v# U
              。。。
, k* a& w0 }( W; W0 C% G0 b又会出现syntax error near line 5 at <;>!  b% c4 d# k, @- @

2 F7 p6 c" i6 X8 r4 ~" s9 Z$ S各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。
+ \/ Q( ?( T4 t# A9 H
: q  j' ~8 M& H% M$ bnow_depart_num := 1;
1 H+ w- D. m3 ^0 k2 O6 fbegin_time := 0;
' I6 N# u& z  Y$ Z: Ywhile 1 = 1 loop
3 z/ }. E' j* \ depart_time := schedule[now_depart_num];; p' q7 u' C8 h7 I4 W/ |. N6 o
wait depart_time - begin_time;8 v5 i( o, U! [7 }: [9 [
....3 Y# b& \. w  Q9 J( k6 R

+ e3 @4 ^( V! F0 N3 e, d/ V& Y6 Y begin_time := depart_time;7 m& m0 I4 X+ a/ P& p" A
now_depart_num := now_depart_num + 1;
+ k" z2 _. s) M7 ~4 Yend;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time
5 q( B7 P. r/ }% v/ G' J9 P( Mdepart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间
0 w6 w% l! m2 h6 w, g- }每次等待以后把now_depart_num增加1,表格就往下走一行。
9 R' Z; l4 s) n9 B
+ b- p4 o7 B+ {- E3 W& M另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-9-10 22:56 , Processed in 0.014658 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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