设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14231|回复: 2

[求助] Automod Syntax 编译的一个问题

[复制链接]
发表于 2009-4-4 23:58:32 | 显示全部楼层 |阅读模式
5仿真币
想请版上的人帮我看看我这段code中的一个错误,我刚学Automod没多久,实在找不出错在什么地方了,谢谢5 u2 ?. {1 Y. j1 C. N; a( v: }, a
- k$ ]! k9 d# S# l6 z# h" ~
我的问题是,在每个P_pick的process中的while循环内,总显示错误Expecting QueuePtr or Location, but found PathPtr. 在我定义所有的attribute的时候,从来没有定义过任何QueuePtr or location or PathPtr,为什么会出现这种错误呢。 我这里面A_picks是一个30x1的array的load attribute,我想用A_i这个load attribute来读取这个array中的数值,不知道会不会有什么不妥。, K& B& }2 ]+ z# Q% T

5 z$ u& V- l0 T7 N) d/ P+ zbegin P_read arriving
  q) Z4 o  h3 O% v1 Y) w    while 1=1 do begin
3 M- n. r- ]' K5 j( ?  h, O        read A_tote from "data.txt" with delimiter "\n"5 p1 z( o6 r2 I3 k: \: A3 p. g
        read A_time from "data.txt" with delimiter "\n"
5 F( d9 i! ~& s  Y        read A_leave from "data.txt" with delimiter "\n"
9 o  h. r" R( c* Z# _) j9 C        read A_picks from "data.txt" with delimiter "\n") ]7 X6 [$ ~9 O3 e  G5 h; ]
        set load type to A_tote0 R3 t$ S* q* Y" J
        if A_tote="tote 1" then set A_induct to 11 [. j$ [" F$ ^% T
        else if A_tote="tote 2" then set A_induct to 2
( w8 u7 ?9 }* ?  g8 U            else set A_induct to 3    ) d, q* E  ~1 e! y7 U1 C* |3 ?9 _8 d. d
        set A_i to 0- `* G. n/ W* ^; `- e
        clone 1 load to P_induction" |7 ]& {) }/ |9 O' l+ B) t
        wait for A_time sec3 {' {2 q- O- V, P0 r
    end. ~( i, v& d% k0 r3 x
end1 ^0 X- K% u" i0 U
( q6 d3 Y8 y; ]9 ^
begin P_induction arriving0 Z" p6 ^3 \/ t/ b6 ^- b) C
    if A_induct=1 then clone 1 load to P_pick1
6 U4 Z- P5 T" Z0 `6 M    else if A_induct=2 then clone 1 load to P_pick24 |6 f  N# z: K7 z* s+ ~+ H' C
        else clone 1 load to P_pick3
! O) N" G9 K6 j1 c* v6 Send
8 F9 ]7 r! i0 I0 m2 P
4 t! D% T/ W+ v- ?3 T2 @1 ~begin P_pick1 arriving
# N+ E- v1 I7 y; G. @. S0 _3 h( |  u, N    set A_i to 1
- e7 u& X5 [  j, o. e0 i: A    move into Q_induct1) B' k  p" R& U4 }3 b/ M0 \
    move into pickaisle.induct13 a' p* V" y) B, y0 f, {
    while A_i<=30 do begin
9 p0 i2 ]. ^/ }7 |7 `        travel to pickaisle.con(A_i)
( k/ J8 u) [+ h$ k: O4 l* _        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec; k& M, u; j& b9 H2 {5 w" A
        else wait for 10 sec; ~* l+ D$ n; Q. X
        if A_i=A_leave then send to die
/ |7 \1 r% |  s6 g) v* c  K" G        else inc A_i by 1
6 O$ _) `, G$ G0 @' q3 u, T    end
; I) }/ [, ]# b; X8 Send+ R' ]2 l: y8 z9 ~( v' b
2 k: A5 W0 C0 j+ J' o" ^
begin P_pick2 arriving2 _; ~3 V4 j6 U( S. `# s. O2 O
    set A_i to 11
# @; ~7 n, o1 e5 {: F    move into Q_induct2) c/ V! u( o: F5 M, L
    move into pickaisle.induct2. w5 F! V  @: |9 H4 w/ Z' y, a. T
    while A_i<=30 do begin
/ E& A. D* r' A+ d        travel to pickaisle.con(A_i); N* ^3 e$ _5 U2 u/ `& N' t
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
$ g; m. Y4 k# J! C4 i3 ]        else wait for 10 sec# b3 |9 N- ]* c+ k  e& g+ n; L: l
        if A_i=A_leave then send to die3 f! e7 N- f' b7 ]% R; {# g  W
        else inc A_i by 1
/ o0 P3 X& M7 C    end4 a; \1 L; o( l  m) i
end
. \/ j9 |& h! T% u+ A9 S) X% O3 z4 C& I, K0 w- {, p
begin P_pick3 arriving
6 [( h& S* C7 V    set A_i to 21+ j2 T8 |% A! p
    move into Q_induct3
  @0 T+ [, N) }( x8 e    move into pickaisle.induct3" O, R. \9 g+ j' E
    while A_i<=30 do begin
' F+ Y9 s2 N; ]/ s" ]+ X- U/ h        travel to pickaisle.con(A_i)6 H$ E2 D) Q; B. ?- b, ^
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
" y$ M5 a( @, B% K* Q        else wait for 10 sec
& ?4 O7 \& H$ h$ o( M# Z6 ?        if A_i=A_leave then send to die7 v) g% P$ `* _! d# e
        else inc A_i by 1
1 w' K+ G$ E. a5 _: @    end7 k5 @; V% c- q$ ^
end

最佳答案

查看完整内容

pickaisle.induct1/2/3是个什么东东? move into后面,应该是一个station或control point,或者Queue/Container/Vehicle/Segment之类的东西。看你的报错信息,这个induct是个path么? AutoMod Editor的语法报错信息,有时候会指在下一行,必要的时候要把上下几行都看一下。 另外,你的几个P_pick是完全重复的,建议以如下方式修改,可以减少代码编写量: 1. 创建一个Process:名称为P_pick,number of Processes为3,其它按你的 ...
发表于 2009-4-4 23:58:33 | 显示全部楼层
pickaisle.induct1/2/3是个什么东东?  j( d  s, b" Y& z
move into后面,应该是一个station或control point,或者Queue/Container/Vehicle/Segment之类的东西。看你的报错信息,这个induct是个path么?( S" Q! Z* s8 Y& c1 `! r

6 N1 ]' n! X- g, B. XAutoMod Editor的语法报错信息,有时候会指在下一行,必要的时候要把上下几行都看一下。
, N: Q' g: U" C9 F& C- R7 _8 i) R( ~7 \5 i2 o; X& ]
另外,你的几个P_pick是完全重复的,建议以如下方式修改,可以减少代码编写量:; b8 C9 |1 I% F
1. 创建一个Process:名称为P_pick,number of Processes为3,其它按你的需要设置;删除那几个P_pick;2 h: H# A4 c1 ]6 Q: S* E; s
2. 创建一个Queue:名称为Q_induct,number of Queues为3,其他按你的需要设置并放置;删除那几个Q_induct;1 Z! C+ ?, D+ Z7 S7 Y7 A  r) {
3. 以如下方式改写P_induction和几个P_pick的arriving procedure的代码:
6 g3 h7 N9 Y' d% J  nbegin P_induction arriving! ]3 s. t+ E7 J' J* n, u) c
    clone 1 load to P_pick(A_induct)
8 C! @1 K+ p  D  send最大的系
+ x% h; u6 e* r% O% W6 g, o' e! a: ]. I/ x
begin P_pick arriving
' a; G. X1 c4 v* j- s/ u    set A_i to procindex * 10 + 1
5 f1 K3 b( b9 m& [  T    move into Q_induct(procindex)
7 P2 ]" J0 B: f% L    move into pickaisle.induct(procindex)7 l. Q2 Z: S7 ^( {$ a9 A
    /*check the type of pickaisle.induct(i), for your last problem.*/# i" d. _: j( X

% ]" J  K% Q4 X" `2 Y    while A_i<=30 do begin5 @+ H( n# c' d# `" T/ h% V
        travel to pickaisle.con(A_i)* y6 R( r$ y! _9 m& n
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
3 A3 E- M3 U6 M; t! R2 ~' V6 e. h        else wait for 10 sec
: h5 S2 z5 Q+ V% U8 @! w1 E3 }1 B        if A_i=A_leave then send to die! d8 |7 R4 u4 ~5 X* o; U0 i; V/ V
        else inc A_i by 19 [3 L5 n" G2 S: Q( Q8 D$ |5 k4 ]
    end% y9 l2 S! G& x; N1 i
end
- g5 D& C: w" [" e- S; K& J
1 j) M' d! N: c; m0 W# F其中的procindex为整形,代表当前process的序号。
! x0 U4 V  V$ d' m; {3 C4 P7 d2 J1 B6 Jstation和control point只要以数字结尾,都可以直接用作数组。如pickaisle.induct(procindex),当procindex为1的时候,和pickaisle.induct1是等同的。
发表于 2009-4-20 15:33:32 | 显示全部楼层
你的主要错误应该是在move into pickaisle.induct或者 travel to pickaisle.con这两个类型的语句中,因为你的编译说明的意思是类型混淆,你查一下报错的行数,应该就能找到问题,其他的问题慢慢调吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-23 00:24 , Processed in 0.016454 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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