设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12329|回复: 2

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

[复制链接]
发表于 2009-4-4 23:58:32 | 显示全部楼层 |阅读模式
5仿真币
想请版上的人帮我看看我这段code中的一个错误,我刚学Automod没多久,实在找不出错在什么地方了,谢谢
7 X2 [5 G& q, g" ~4 |$ ]+ F, b# k/ C3 @! l" r! y: s3 E( P
我的问题是,在每个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中的数值,不知道会不会有什么不妥。
2 G0 s* G* b6 u8 K$ Z
9 D6 \/ h+ y# J- ubegin P_read arriving% g) u2 N- C+ A( m
    while 1=1 do begin
" h( I- z8 s$ u2 g" v        read A_tote from "data.txt" with delimiter "\n"  ~. Z0 D! \9 J4 a
        read A_time from "data.txt" with delimiter "\n"7 E5 R! V' q& D% m& v
        read A_leave from "data.txt" with delimiter "\n"8 y& I, Z1 _6 U7 }: G
        read A_picks from "data.txt" with delimiter "\n"$ s% u1 X) T; P2 [
        set load type to A_tote
' K& w/ _# J* n' s        if A_tote="tote 1" then set A_induct to 1
+ W5 A9 @6 _: \/ \5 [# G7 {        else if A_tote="tote 2" then set A_induct to 2
1 O+ R" b) Q! i# b& V            else set A_induct to 3    " R4 @/ F1 k( B0 x+ Z  T
        set A_i to 0
% S( ?  \5 U  F8 W; Q% }4 {        clone 1 load to P_induction
+ w: c1 {2 L- K% J% Z        wait for A_time sec, v' r$ X) A5 I7 B3 B" s4 [" w
    end
0 L# M! o7 @, a7 p/ lend
, @6 {) J  a% U; W% j" Z! D
* n5 ?5 Z4 Q$ P6 {) Hbegin P_induction arriving6 D  t" L; |: K& U
    if A_induct=1 then clone 1 load to P_pick1! V7 Z% |% _1 c8 `1 @
    else if A_induct=2 then clone 1 load to P_pick20 I# s1 j8 q1 T, X, N
        else clone 1 load to P_pick3. D3 |1 B$ H3 a
end; {: [; \% _. b: ~5 O# X

6 n; t" w# k4 R; |2 }; ~. m4 X5 Obegin P_pick1 arriving3 [8 N5 o/ H. h- O8 s8 b
    set A_i to 1& |8 B/ J! D2 l. }1 E
    move into Q_induct10 ^$ C# f0 y0 D7 ?/ E
    move into pickaisle.induct18 B' i5 M8 x- P2 X( |9 \2 ]- ]
    while A_i<=30 do begin1 v; q- h  A# h% ^5 b
        travel to pickaisle.con(A_i)5 X+ u2 @9 @# h7 H3 L- a% x
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec9 v1 u3 B& {+ I2 y. `7 z3 b3 g3 E
        else wait for 10 sec
6 l% Q! P& u$ ^2 P) O        if A_i=A_leave then send to die
+ u7 y: j- B5 Z  y% u        else inc A_i by 1/ s2 b0 l$ h5 K
    end: H4 s: p1 m" t3 l4 D
end
- H9 E% G$ G& V; t+ J3 F
0 @7 B5 Q  ]& O: N4 M4 `+ zbegin P_pick2 arriving3 f3 L+ c. P% @! \
    set A_i to 11& J, A! q. {, p- D) x
    move into Q_induct2
' G# `: Q; J) n/ {    move into pickaisle.induct20 x1 j0 \4 u/ r5 m4 m
    while A_i<=30 do begin
. \' M/ G. ]- \, Y        travel to pickaisle.con(A_i)
6 m4 V& o& G* a  a$ m' H        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec/ ]) T. U. V+ r5 f1 o/ G
        else wait for 10 sec
! m% |+ _- q; D( U# P5 t        if A_i=A_leave then send to die
- R! s+ @. m2 S. u( \. g: c        else inc A_i by 1
3 z- P( f- S, Z# ]4 N    end7 [7 K7 \* S6 S2 \& i
end
, d8 H6 c  H/ j; H' \1 [8 f4 d6 h& O$ e0 x7 ?: E
begin P_pick3 arriving& W* b( }: ]/ c/ B) M! C
    set A_i to 21
) H) Y/ [4 M4 }( \( R0 @    move into Q_induct3+ Z- }7 O8 {# E. _
    move into pickaisle.induct3* M- F  f1 r- i7 b7 @
    while A_i<=30 do begin% q2 S( u. `: N, I4 _& e! S
        travel to pickaisle.con(A_i)
$ R) k) A5 s2 M# ~' D; C- E8 G        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec9 R% a! u9 l3 _& ?  P+ _3 \$ v
        else wait for 10 sec
/ ?, ^$ T6 D5 f4 \1 N! W        if A_i=A_leave then send to die
- S% m7 i: R; g        else inc A_i by 1: ?2 x! k% q. z+ L6 p+ a- U" E
    end! B3 j1 q( G" P* ~
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是个什么东东?
) X! m0 S" W3 W* Fmove into后面,应该是一个station或control point,或者Queue/Container/Vehicle/Segment之类的东西。看你的报错信息,这个induct是个path么?
# [5 q0 \$ q5 p; s5 `6 [
, K) h! e, }' k% W. Y! l8 Q4 s6 \AutoMod Editor的语法报错信息,有时候会指在下一行,必要的时候要把上下几行都看一下。* p0 k  F( C2 [: Y* S* e
3 J& s. t- G4 g% t, a! N; ?9 I
另外,你的几个P_pick是完全重复的,建议以如下方式修改,可以减少代码编写量:
( J+ p9 Q' E* ~9 K1. 创建一个Process:名称为P_pick,number of Processes为3,其它按你的需要设置;删除那几个P_pick;
# q8 p9 l: a; Q1 \2. 创建一个Queue:名称为Q_induct,number of Queues为3,其他按你的需要设置并放置;删除那几个Q_induct;
2 d) B0 ]$ A  j8 ?; ~3. 以如下方式改写P_induction和几个P_pick的arriving procedure的代码:
/ z, V4 X7 ]& V0 q" K# ?+ Ybegin P_induction arriving+ g8 z# g8 L' I( ~0 Q9 {" ]0 \/ C* X
    clone 1 load to P_pick(A_induct). `# y, Y% c8 T" S4 Y0 c
end最大的系$ o4 M# s! J3 f* G- ?/ H

% ^( z. v" _6 X1 ^1 o/ G$ T) P$ M* [begin P_pick arriving
7 ?6 Z/ R1 f4 x6 A! l2 M0 v3 ~    set A_i to procindex * 10 + 1
+ e; h' ?4 U+ _0 t    move into Q_induct(procindex)
/ `* z% ~/ R7 K) i    move into pickaisle.induct(procindex)
% ?; O& B1 a. g    /*check the type of pickaisle.induct(i), for your last problem.*/& K2 V) [- q# `) M1 U% ?; K

& ^& S8 T0 w$ K* T    while A_i<=30 do begin6 L4 V9 s9 K6 ]! m2 P8 F' ?
        travel to pickaisle.con(A_i); v7 j( a+ c: c8 ?
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec) p8 }4 i! [9 O$ o
        else wait for 10 sec
' D; i5 }/ I/ d2 ?3 q        if A_i=A_leave then send to die6 @; \+ J: g5 ^% g
        else inc A_i by 1+ d7 C! U! V, J8 U: a, N* l' r
    end% v! @7 e) J) c/ U) U- A
end3 s% F1 D% a) p' h8 M, `

: c* |% t9 Q, E: ]+ ?其中的procindex为整形,代表当前process的序号。; Y% G: v3 f/ ?- L
station和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-14 07:24 , Processed in 0.018103 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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