设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13194|回复: 2

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

[复制链接]
发表于 2009-4-4 23:58:32 | 显示全部楼层 |阅读模式
5仿真币
想请版上的人帮我看看我这段code中的一个错误,我刚学Automod没多久,实在找不出错在什么地方了,谢谢
/ L5 s' X" v+ U* f# L0 r: s& S2 a3 {# u$ N$ i
我的问题是,在每个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# q3 d: J! W- u8 S! i9 [" R" r
9 Y' P3 |* W: Jbegin P_read arriving
( n, H& z2 Y. j- A. x$ C9 J    while 1=1 do begin/ B' d$ C9 r! t: ?
        read A_tote from "data.txt" with delimiter "\n"& z8 e2 q+ j1 w) N6 O$ @
        read A_time from "data.txt" with delimiter "\n"
5 }6 e+ j* a. ]& W        read A_leave from "data.txt" with delimiter "\n"
% A/ Q) j# d' G5 Q' U4 U        read A_picks from "data.txt" with delimiter "\n"
) K# e) {7 V, f( v8 b* G' z- v        set load type to A_tote( V. r' M* n! I- g8 R6 `
        if A_tote="tote 1" then set A_induct to 1/ @$ I( q$ M3 M# x8 ~% V! R
        else if A_tote="tote 2" then set A_induct to 27 ?; B, h+ s% W; y& u) D2 ^
            else set A_induct to 3    * a  [/ o# ~* a6 r0 y) m' J6 K8 x; r0 {
        set A_i to 02 B( E" D3 U7 l8 c" F& N5 H
        clone 1 load to P_induction
0 T- m3 R8 ?( N* Z5 F  u  ^        wait for A_time sec3 x8 [9 }; l' ?* T; U2 f! h. W9 C
    end1 }; M( l( B. ?  N
end/ i! `  T5 \' x
$ g0 z+ h! T% D
begin P_induction arriving* L& P) S- v+ \, a1 w
    if A_induct=1 then clone 1 load to P_pick1
7 m$ u2 v" c# Z4 S    else if A_induct=2 then clone 1 load to P_pick2; y; Q/ A/ ~7 |5 _# b2 X
        else clone 1 load to P_pick3) I0 Q0 u5 H- Q3 [6 b& J1 ^
end' ~" b. w3 ]: k% s

* {! W$ e; W; s. R) m, c, w( sbegin P_pick1 arriving
6 g% T: P* u; `2 b$ v  V6 E    set A_i to 1* u9 L7 p' V$ e3 B1 Y/ Y  j( }( A
    move into Q_induct10 Q5 F& |' a# B# w
    move into pickaisle.induct1) U. I0 v% _. A
    while A_i<=30 do begin
1 ]9 S# A  h( b% q" q$ [        travel to pickaisle.con(A_i)
5 t, c+ j0 ^" V3 Y/ m$ Z2 n0 v        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
1 X) I' \" c: t) B( n% K        else wait for 10 sec8 q7 p+ i' j: v9 g+ F
        if A_i=A_leave then send to die  I+ M" M: P2 h, u$ F' K) R' Y3 X4 B
        else inc A_i by 1& X& {& Y- @6 Q7 c
    end4 p6 v1 F# ~. j9 ~; E: k8 n+ ~! n& k
end2 @- Q3 p5 O! d' g% N

! H6 v5 ~2 W% J# Q( h+ R+ lbegin P_pick2 arriving1 j$ b+ x4 g* _; a
    set A_i to 11! U% U, j) a6 |
    move into Q_induct23 _5 V* A! t4 q# j  o: ?
    move into pickaisle.induct2
$ s' _& Q# _6 c' U* t; {) Y    while A_i<=30 do begin9 i% t8 i) q; I" K
        travel to pickaisle.con(A_i)
) I' y3 M- B# S# w4 z        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
) J% P- J, X& q: T2 s/ q        else wait for 10 sec& D( z0 x) f& B, p" c) T
        if A_i=A_leave then send to die/ i5 v& m+ Y  n% r1 p* O! g  R
        else inc A_i by 12 c5 P5 h; }) g! T0 R
    end+ j) a* Y3 r! ?; P6 {
end
" h) O6 v& F. j* @6 ^* y7 r' i' ?- v2 {
begin P_pick3 arriving3 U5 {; Z) z  g5 W- C) N# s
    set A_i to 21
9 z( {/ M' \' k    move into Q_induct3
1 z$ S( u, @6 x9 D. k! c    move into pickaisle.induct32 y1 ^. Y. u( i5 \
    while A_i<=30 do begin2 u/ W6 z/ s( q& ~& \
        travel to pickaisle.con(A_i)
7 `# C8 _8 j* t* i0 S# D        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec/ V% P& \6 e, h# f' _# D1 m- @
        else wait for 10 sec
* i, E- j8 x4 W1 m- G- k. o        if A_i=A_leave then send to die) M$ x2 c6 k9 i$ T4 o' L
        else inc A_i by 1
) ^1 |; H  v0 L- T) B5 ^6 L    end
( k: `9 F. 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是个什么东东?1 M' u" n4 z; h. A- z( W/ |. {3 O( ?
move into后面,应该是一个station或control point,或者Queue/Container/Vehicle/Segment之类的东西。看你的报错信息,这个induct是个path么?" ?, `- P8 S& k# D- h  u8 ~$ f4 b

2 Q4 d4 ^9 ~, v" c  q* W. eAutoMod Editor的语法报错信息,有时候会指在下一行,必要的时候要把上下几行都看一下。0 w4 I  @/ C. r
4 R! G" ?2 I! Y+ S9 h
另外,你的几个P_pick是完全重复的,建议以如下方式修改,可以减少代码编写量:
6 i% B. R, |0 n; R$ c1. 创建一个Process:名称为P_pick,number of Processes为3,其它按你的需要设置;删除那几个P_pick;
. ]; M- t; s$ R0 ]: @! v2. 创建一个Queue:名称为Q_induct,number of Queues为3,其他按你的需要设置并放置;删除那几个Q_induct;
5 D3 Y& i; V' C1 A% c6 o9 P3. 以如下方式改写P_induction和几个P_pick的arriving procedure的代码:
: X; u! w3 X( Jbegin P_induction arriving
. X% M) L/ R6 m- |, S    clone 1 load to P_pick(A_induct)
/ O# h: p! a0 b0 C, X1 Nend最大的系
5 `) s" a! _1 r6 j$ x. w4 @- R. ?$ }* k
begin P_pick arriving
( k# l& c" x& x- u0 e* D    set A_i to procindex * 10 + 1" H! b3 i* Z, i2 \
    move into Q_induct(procindex)# n, t$ V. L& B" P: z, ~4 g& O: _
    move into pickaisle.induct(procindex)7 {% N% F* k0 Y
    /*check the type of pickaisle.induct(i), for your last problem.*/4 o. @/ w. q* ]2 A& ~$ R2 X

) {' |' p( O6 i1 S! j7 C- N    while A_i<=30 do begin" R' Z, M/ s$ G4 b; O+ I  U# W4 }- ?
        travel to pickaisle.con(A_i)- T* n* n' N, u5 W
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec' x$ h- m: Q* E- z  ?. V* V
        else wait for 10 sec
- ~6 N! f  ]' w, q! Q0 m        if A_i=A_leave then send to die% ?8 v. J" S4 G, d
        else inc A_i by 1  L- Y0 K0 s" G0 k. {
    end4 v9 l* m% {* ^2 v2 x, W
end
  \' C; S+ `7 ]( w3 l# C' J* `
0 U7 D% b1 i4 k; D其中的procindex为整形,代表当前process的序号。
' V: [7 O0 w. G- Ystation和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-26 07:31 , Processed in 0.015223 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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