设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5106|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:7 ^8 M2 \4 z4 Z$ m
is       
2 u7 h7 G; Q6 ndo        ! l: V  W  S4 D
        waituntil EventController.simTime = Schedule[now_depart_num];
' d7 ~& a- V$ T6 @" e1 B" j        if zhuZhan.empty = false. P5 u3 B) N& O# {7 C9 E
        then
1 l4 B6 Q. K! i% Z( m1 x                zhuZhan[1].move();
! J/ C$ Y" I& K+ ^$ w/ C                now_depart_num = now_depart_num + 1;               
" z; |' D& h. K& p% \) ?, P        else
  j" _1 d0 L% }                waituntil zhuZhan.empty = false;
. y0 l; S* n% j+ O                zhuZhan[1].move();
5 [' i' [7 m8 Y* @2 e                now_depart_num = now_depart_num + 1;
! V2 p& I) Z, L5 ^2 U6 F        end;                                        # g! x0 L& Q; D1 i( }
end;
, p, U3 @$ T4 ~% G
3 Z! {1 o8 B! m但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement. 8 d4 H( K! `/ Z7 V
若是增加一个局部变量,如下:
- D+ a# I$ {5 o$ {is
  {6 m( x& J5 X7 u7 k% g              depart_time : time;( W( l, z0 [& P% @" e6 `  [# ^
do
( P* s/ r$ M1 |. C. M$ F4 [              depart_time := schedule[now_depart_num];, r/ U/ O: k: L5 B& t/ O) D4 q6 X3 T
              waituntil EventController.simTime = depart_time;
9 ~/ ]: |+ P! Q5 y$ q              。。。
4 R0 {6 W+ P& v8 I又会出现syntax error near line 5 at <;>!3 E. j: I3 F6 l0 I0 K. v
8 [7 v' J0 _) D* b
各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。
& S5 Y# W* b. _+ [1 j# m3 k+ w1 z% U$ ~/ `% j: z
now_depart_num := 1;
+ Y/ ~" j7 F# o3 _2 v* ]6 E9 Q* ~begin_time := 0;8 S. a4 r/ e- L( t. t6 m
while 1 = 1 loop8 a/ X) L9 I' h! W# S: |
depart_time := schedule[now_depart_num];1 q( `6 l0 a# F/ G
wait depart_time - begin_time;
& g1 q- I- W) c8 W3 K. \/ ~6 c3 C6 A ....
" Y! {0 Z2 z: P! u; l) R% H- j
! m! b% j) Z- E2 L4 d3 X begin_time := depart_time;+ `) d0 E: E$ c- O
now_depart_num := now_depart_num + 1;8 K; T% y+ j* x9 \0 n
end;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time
4 s; D6 j4 ^( h0 pdepart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间
/ a& L8 p: e' a, W1 w/ W每次等待以后把now_depart_num增加1,表格就往下走一行。! O( y: u9 B4 ]  }. r
& Y* M& f1 J0 x3 R, f
另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-11-8 02:38 , Processed in 0.017517 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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