设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6256|回复: 3

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

  [复制链接]
发表于 2010-9-27 10:51:09 | 显示全部楼层 |阅读模式
我写的一个程序想实现在IObuffer中的MU按时刻表exit,若需要exit的时候IObuffer中没有MU,那一旦IObuffer中有MU就立即exit。IObuffer的名字是zhuZhan,程序如下:
3 n8 i# X. [2 {8 ]is       
( K. M  P' ~8 {4 m6 odo       
* g& A0 V6 L& _4 R, O        waituntil EventController.simTime = Schedule[now_depart_num];8 W4 K( }+ E$ b- Y0 D1 P% ^( Y, U$ y
        if zhuZhan.empty = false2 Y$ S- |3 A: \* q( Q, J, O% U8 q
        then
& s2 W1 N  }5 E# X2 U                zhuZhan[1].move();
4 {' j5 o% B  j% \1 M7 V: F' ^                now_depart_num = now_depart_num + 1;               
# b: p3 k" k2 i( r- {" w        else
, S& N9 E: `+ R                waituntil zhuZhan.empty = false;
/ c9 G$ i& e: l2 Q& _                zhuZhan[1].move();$ `& z& p# [; }4 v* D5 B6 V
                now_depart_num = now_depart_num + 1;- `- ^! d& i6 G5 A5 f* J; g/ ?
        end;                                       
- P# }0 g+ Y9 K# w, ]: S# Fend;
# J' {- x2 r; S0 m/ L% e! _
' l( `0 p; {: D; \" X4 k但是一直说有错误,提示信息是:access to tables is not allowed within a waituntil statement.
' ^, d4 C) w) V2 x0 X若是增加一个局部变量,如下:
7 {6 @- f6 W! B6 A% |1 f/ x+ Xis ) D! \8 e4 B5 T$ B1 T, [0 K$ u
              depart_time : time;
( H" m6 ^" L6 }( v! `$ j9 tdo
8 J' I( e) [+ W" F! A              depart_time := schedule[now_depart_num];+ @$ p1 h& h: a" r! Z' P% L
              waituntil EventController.simTime = depart_time; 5 c& o) n% _) M; w* Z5 Z. d
              。。。4 k2 S+ P) q, E3 ]! m7 m
又会出现syntax error near line 5 at <;>!- D, b% h/ q, h  ^* R: _

: U% ]1 i) v$ V: Z# p& w7 V  s& c各位大侠帮帮忙,或者教我怎么改程序的错误,或者教教我用别的方法实现我的目的,谢谢了!
发表于 2010-9-27 15:54:06 | 显示全部楼层
waituntil 有很多限制条件,监控variable是可以的,表格好像是不行的。另外,这个命令对程序的performance有很大影响,能不用就尽量不要用。有一个技巧,通过不断循环的方式来实现时间点的控制。8 H3 Z; Z0 I! L; i# `
; N# X( Z: }/ ?% B; D! B8 U
now_depart_num := 1;6 C$ \& \/ ^; \% G/ C7 e
begin_time := 0;: c; x- ~# U6 c- n
while 1 = 1 loop
6 F1 i, n. R/ F" R* P depart_time := schedule[now_depart_num];7 ~# I: s0 b( Q* n0 f
wait depart_time - begin_time;0 V; u& J- E$ n( p2 S2 l7 n6 [8 ]
....
; t  z9 R+ U3 c( k# x2 v1 F, p) }9 Q2 S( L, {8 j
begin_time := depart_time;1 Z5 G9 A0 E% D5 a
now_depart_num := now_depart_num + 1;
% Q9 ^( e7 E$ w9 A# F/ ~6 Send;
 楼主| 发表于 2010-9-27 19:31:24 | 显示全部楼层
回复 2# SimChen谢谢楼上热心指导,只是我还是没有太明白,尤其是begin_time在程序中是起什么作用的?它是怎么从0变成now_depart_time的?
发表于 2010-9-29 13:28:22 | 显示全部楼层
我尽量用你的变量定义,增加了一个begin_time+ u, E- R; q) y* x/ `
depart_time和begin_time的差就是要等待的时间,也就是表格相邻两行定义的时间: N; P* y1 m, V0 \/ N* v3 c) @
每次等待以后把now_depart_num增加1,表格就往下走一行。
' T9 b1 F1 x6 R* X* C% M4 `7 s- I' o, K
另外,这个程序原则上由Init调用,所以起始时间是0,然后每次等待后上一个终止点就是下一个起始点。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-9-3 08:55 , Processed in 0.018104 second(s), 15 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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