设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13004|回复: 2

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

[复制链接]
发表于 2009-4-4 23:58:32 | 显示全部楼层 |阅读模式
5仿真币
想请版上的人帮我看看我这段code中的一个错误,我刚学Automod没多久,实在找不出错在什么地方了,谢谢0 `  |6 f1 U# X9 a0 H
4 P0 {" P% i2 J2 q
我的问题是,在每个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中的数值,不知道会不会有什么不妥。
; [5 E/ a5 ]7 [3 f+ Y( t8 }! @
/ F% T* u+ O  F( p# \begin P_read arriving+ B3 L! X) w6 B8 G1 I
    while 1=1 do begin+ k/ [1 W! |' h) f9 g
        read A_tote from "data.txt" with delimiter "\n"8 ~- L, j8 z8 r- F
        read A_time from "data.txt" with delimiter "\n"
5 K: |! i# z: ]* X" S, U        read A_leave from "data.txt" with delimiter "\n"
  s) t7 \  q4 Q+ u3 e; S: D4 j        read A_picks from "data.txt" with delimiter "\n") Z  m/ f7 S& d5 u$ C. v  y! U
        set load type to A_tote
$ v0 a  S" b! W) ^2 c4 n+ ~5 m        if A_tote="tote 1" then set A_induct to 1
) \; j' z0 O# q1 A  `6 r9 N& g; a        else if A_tote="tote 2" then set A_induct to 2* U8 g9 J2 S( X, K
            else set A_induct to 3   
2 s8 z' i5 }  `        set A_i to 0
& S7 j. q' _8 \        clone 1 load to P_induction1 L8 R' G, F1 S
        wait for A_time sec
7 W4 H' G" m/ I    end
# A  b# c5 b- G' O* f3 rend
7 G: x$ x5 o8 i  `7 f  }2 l7 K5 ?7 Q5 M. P  d
begin P_induction arriving$ s  }- ^' Z& x$ l  H" n
    if A_induct=1 then clone 1 load to P_pick1
: y% G# I$ `2 z1 j# }( A! [    else if A_induct=2 then clone 1 load to P_pick2: ^2 n: ?" |  A' J
        else clone 1 load to P_pick35 w& h& d. _5 q0 d+ g- ^  _6 e
end" r+ I) L$ o+ |
, I1 a) |; X. t
begin P_pick1 arriving
4 r; o) m8 n. v& X8 b1 K: h    set A_i to 1
. O* u1 W$ |: J: A1 y! @    move into Q_induct1
- F' n. C+ v$ P: x1 U4 @    move into pickaisle.induct1( i% }; _' n1 B0 w. [* ]9 s" F
    while A_i<=30 do begin
9 Z& i4 r6 f# O9 X" k7 p5 f        travel to pickaisle.con(A_i)9 v' f: n7 @" W  d2 l- B/ H
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
4 [2 u' ?  a9 @( g: L" D+ k7 @        else wait for 10 sec7 v4 Y2 _4 y( z1 x' |% r
        if A_i=A_leave then send to die, b4 J9 `' l$ i2 Q0 X
        else inc A_i by 1
6 r* t9 m2 v, Y" `    end
6 K( C% H# I+ D2 O, dend
5 q3 m- w4 c/ N" ?+ h) K: p5 r5 P5 O) v' H2 A7 N# r
begin P_pick2 arriving
  `( B: u4 Q, b+ v9 k& r+ D    set A_i to 113 y7 `* S# {% C6 c+ K/ f
    move into Q_induct2' @' E- }: G. X( i
    move into pickaisle.induct2  m% j/ A9 `- I2 C
    while A_i<=30 do begin0 H6 [: S0 I3 i3 ~, l  e% x
        travel to pickaisle.con(A_i)
6 Y% m% t( V1 f6 y/ r% R        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec3 T" s& z2 C/ H: B  G( |4 n1 C0 s& d( [; c2 f
        else wait for 10 sec
; V. G+ g6 d5 \. t) i: m        if A_i=A_leave then send to die
0 I. t1 D0 p" k: S8 L- l6 g        else inc A_i by 1& a+ n+ y$ `5 o# U
    end$ l3 ?) h; Y# }* o
end
& \0 x* V4 h& N9 B% s+ S' T5 ^; T4 a2 `
begin P_pick3 arriving
2 P4 j5 J& B1 I" _    set A_i to 21
- x1 x) y1 D$ y8 P# t* w. ~    move into Q_induct3
9 E8 g* z9 m5 G; O# j    move into pickaisle.induct3
0 s/ `5 X- u' X8 o  m    while A_i<=30 do begin
) ]6 ^9 P, O/ G& C8 \/ Z" m        travel to pickaisle.con(A_i)
4 C( d, A- J9 a- C1 p        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec7 b' b3 U* {* m4 d
        else wait for 10 sec& e0 k, H8 \/ Q( ?- n; J
        if A_i=A_leave then send to die6 Y* u8 Z  G1 j$ d7 ]" Z
        else inc A_i by 1
- F/ v( u$ k- E+ `8 L3 w0 U6 E/ {    end
$ i; N8 o: A5 a$ m1 _1 d: y2 iend

最佳答案

查看完整内容

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是个什么东东?
! f& o' c; O: ?1 B$ T% C: U/ wmove into后面,应该是一个station或control point,或者Queue/Container/Vehicle/Segment之类的东西。看你的报错信息,这个induct是个path么?
/ \5 ]+ b1 p5 M1 z  h5 ?' i( t2 o; d' p$ ^; K# d3 K
AutoMod Editor的语法报错信息,有时候会指在下一行,必要的时候要把上下几行都看一下。
/ y5 I4 ^* Q- ~3 X
3 W% B9 D& ^: b3 n另外,你的几个P_pick是完全重复的,建议以如下方式修改,可以减少代码编写量:+ r& {6 I9 c" x* X! s: N6 F9 d
1. 创建一个Process:名称为P_pick,number of Processes为3,其它按你的需要设置;删除那几个P_pick;
% I' R, }8 w# l/ d0 t* t' s2. 创建一个Queue:名称为Q_induct,number of Queues为3,其他按你的需要设置并放置;删除那几个Q_induct;
' i5 }8 v3 M, t# r: k3. 以如下方式改写P_induction和几个P_pick的arriving procedure的代码:- i% N8 V1 ]- ^, X5 D- @2 ^
begin P_induction arriving" I! y1 S  g/ _) `, R
    clone 1 load to P_pick(A_induct)
4 q5 `5 A  s& q) r( i4 i3 a0 ~end最大的系! _% u5 W6 @. A4 Q7 j7 N2 N) ^0 A

. p+ X* D; [, o# p4 K3 mbegin P_pick arriving1 T6 r: p; H* P( [" e, O
    set A_i to procindex * 10 + 1
9 H3 h/ S9 \' \! [: e* z1 _4 N; p% @    move into Q_induct(procindex)
4 i9 v, C. z& C! b( x) D    move into pickaisle.induct(procindex)
! z: e( d% @6 }/ L# N( l; g    /*check the type of pickaisle.induct(i), for your last problem.*/
  u# ~0 j1 t4 }7 n& a1 c" S  O& e9 x+ a$ L  h
    while A_i<=30 do begin$ Z* J# K7 |. O9 R
        travel to pickaisle.con(A_i)& i: D; u6 T5 q  ]( K
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec# }  c& w+ Z7 C& S! X& k  q
        else wait for 10 sec5 i' C/ ?- B8 Q# Q5 f5 L3 ~
        if A_i=A_leave then send to die
* S* Q7 M3 i4 W* g. O: E        else inc A_i by 1
3 E& d' O9 [  i/ g( k% J. j    end
# y/ X3 m! V% o5 B( e4 Mend
/ B. H( i# e4 [: j  g' F& b  i1 y+ U0 W* n/ Q: y
其中的procindex为整形,代表当前process的序号。
- w. P% Y6 r' u( V6 R8 ?3 M1 T" gstation和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-3-10 16:01 , Processed in 0.025447 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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