设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12284|回复: 2

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

[复制链接]
发表于 2009-4-4 23:58:32 | 显示全部楼层 |阅读模式
5仿真币
想请版上的人帮我看看我这段code中的一个错误,我刚学Automod没多久,实在找不出错在什么地方了,谢谢
1 B7 [( p- P0 d# |1 i+ Q( H! n2 B% P% y
我的问题是,在每个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中的数值,不知道会不会有什么不妥。
! d2 k- x9 `; Z( R0 ]+ N+ S1 B7 s* x/ ~
begin P_read arriving2 D8 c$ I- ~, n6 F. n. @4 e5 _% A; I
    while 1=1 do begin2 z1 g/ Y. p5 r6 E
        read A_tote from "data.txt" with delimiter "\n"9 |: x/ J+ w/ \/ m. k# }0 y' s
        read A_time from "data.txt" with delimiter "\n"  A- G# _  q9 v
        read A_leave from "data.txt" with delimiter "\n"% I( O0 l# w' p4 R8 H7 v7 G
        read A_picks from "data.txt" with delimiter "\n"
0 Y, S; {9 i6 M3 m: v        set load type to A_tote
# V1 t7 j1 ^! I! ^! h' P+ ~$ ^        if A_tote="tote 1" then set A_induct to 1
: j; L) e" y0 ^  w2 I0 m8 m, D; U        else if A_tote="tote 2" then set A_induct to 2
- |' L" t- k6 H0 Y" n            else set A_induct to 3   
: [6 d- D* \( `0 @. Z        set A_i to 0
+ [4 t3 q2 Y3 O; m2 x5 [' W# R9 w        clone 1 load to P_induction
. E. u) S4 `2 x; J9 n        wait for A_time sec
) N5 j0 Q. Y) ?. i1 j+ @+ m    end7 o/ V: q* b1 |$ f
end
1 a3 P( @) B/ [# q- F. r8 [% i" Q4 l; R! b; Q0 }
begin P_induction arriving- ?4 n% O$ l1 i  V
    if A_induct=1 then clone 1 load to P_pick13 ?6 ~* t4 {" }, f/ @( x- s9 \
    else if A_induct=2 then clone 1 load to P_pick2
, w$ F# O, j" T) E0 V. @+ x: v0 G        else clone 1 load to P_pick3
* N* L# }3 W0 C( D/ a( s# Q8 Bend3 ^4 p' e4 }) r8 G+ ^+ y- T6 A
2 m2 ]; F3 l7 i# r8 ?8 U% E; A
begin P_pick1 arriving
- ]% K+ i5 u% k+ c# w- C8 ?1 |9 ?    set A_i to 17 _$ k& D( D  y/ K6 {$ Z
    move into Q_induct1
& }! O# ?- L$ \- ^    move into pickaisle.induct18 B/ z' c4 u6 C- z: C
    while A_i<=30 do begin
  P: M4 q5 y7 a        travel to pickaisle.con(A_i)5 g: X$ T% i+ {9 ?$ E* P
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
0 ]4 f4 _% p; q# s+ T9 x        else wait for 10 sec! q2 ]2 z9 C+ v' C3 W, W
        if A_i=A_leave then send to die
& r3 t' w8 `& i3 l' A        else inc A_i by 1
+ B# p% G. \( w3 t3 {$ w7 x' k    end
2 I: J0 ^6 W- D1 ?$ T/ Y5 I' `end
. j. x: X2 v4 e, C, K& y9 a' R- ?# K
begin P_pick2 arriving
! v, o' M7 Y+ i% |    set A_i to 11
, h; d3 A) K0 [7 n5 r7 @    move into Q_induct2
  ~" v' ]  C: T) f0 H2 N    move into pickaisle.induct2
  \3 \& ^- m1 Q, Z: Q8 ]- e* a    while A_i<=30 do begin6 Y& r9 ~3 X8 S/ D& ~" H
        travel to pickaisle.con(A_i)( _) ~' u- C* H
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
2 I5 U& j5 |3 n" d' ~" K        else wait for 10 sec
" M, H% t0 R2 O6 W$ t        if A_i=A_leave then send to die
8 x- N, x' J5 y5 ?; {7 {0 D6 ^; n        else inc A_i by 16 C8 X' n% Q/ `, |( n2 A
    end
' g. J6 y- U6 V* c1 l2 Cend
0 Q. d) S. m, a) t8 d2 r) a$ }3 L4 R" j+ j' x
begin P_pick3 arriving
9 j8 {. r. O) Y    set A_i to 21
; F1 ~6 k8 k1 ?9 ^" G6 @    move into Q_induct3
; f( O) @& Q) Q    move into pickaisle.induct38 N" `$ n8 u; n% S4 b
    while A_i<=30 do begin( U& o7 L; Z. g& t' m
        travel to pickaisle.con(A_i)
2 ]) b) Z; w% C- T        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
/ l7 n) o, g& ^$ x1 \, _        else wait for 10 sec. A' i8 j0 S+ G5 c8 b
        if A_i=A_leave then send to die6 `* e2 l9 {/ S& N  O/ Y
        else inc A_i by 1" a7 o/ w$ y) s8 ^- C! r" _5 y; H
    end
1 v8 |: f4 t& c" ~2 p+ Send

最佳答案

查看完整内容

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是个什么东东?
7 Z+ @2 ~$ [( i0 F$ ~move into后面,应该是一个station或control point,或者Queue/Container/Vehicle/Segment之类的东西。看你的报错信息,这个induct是个path么?" F, s" |& w8 z* J' \6 \
* \0 Z8 T- X. K( ], O
AutoMod Editor的语法报错信息,有时候会指在下一行,必要的时候要把上下几行都看一下。
# P5 c- c) J5 p6 d2 }8 p5 V+ e/ f; ^1 O4 R  z
另外,你的几个P_pick是完全重复的,建议以如下方式修改,可以减少代码编写量:
9 @3 t3 B8 V& X/ B4 D- r1. 创建一个Process:名称为P_pick,number of Processes为3,其它按你的需要设置;删除那几个P_pick;: j. ?4 ]6 n" g8 ?: x
2. 创建一个Queue:名称为Q_induct,number of Queues为3,其他按你的需要设置并放置;删除那几个Q_induct;8 b, T4 @" {. X; ]) K, }
3. 以如下方式改写P_induction和几个P_pick的arriving procedure的代码:' H3 G5 i+ L5 f# \
begin P_induction arriving
' M/ ?9 }, B6 c: z( Q    clone 1 load to P_pick(A_induct)* }% I& v$ s. K; O' h
end最大的系# m7 {2 @3 M. [# ]9 ~& ~

! R" Y' g, y3 b( Z; ^1 I" Q8 dbegin P_pick arriving3 t0 D0 {5 T; o4 E
    set A_i to procindex * 10 + 11 m1 H% \1 P0 O9 G
    move into Q_induct(procindex)
- W7 Q; Q8 O3 @: q- n" D    move into pickaisle.induct(procindex)
& q$ H3 C# X5 D' C, R+ g    /*check the type of pickaisle.induct(i), for your last problem.*/, {9 }) ~- j/ m9 ?( y; A8 a

5 l2 b$ Y! A2 p) o. q    while A_i<=30 do begin
1 l7 u8 g7 J- X6 q+ ]) @2 N9 r        travel to pickaisle.con(A_i)+ @/ ^* h1 D! P. m- X
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
' N/ ?! r0 [# O$ v9 x+ P# r% f        else wait for 10 sec
: H1 j) t: S% j2 d# Y: b: ~' W# v        if A_i=A_leave then send to die9 p) @0 S' Y3 ~7 [3 m
        else inc A_i by 1+ [9 ^4 N% N( O) X/ e
    end* @7 Q4 N& C& M$ |( U
end7 p/ ^% W/ p- e, V, ^% M
: N. I% K- y# ~- p. j6 U4 R6 C
其中的procindex为整形,代表当前process的序号。
( q. [: z& A# c( v+ [$ s3 estation和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-1-11 05:01 , Processed in 0.018300 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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