设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14156|回复: 2

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

[复制链接]
发表于 2009-4-4 23:58:32 | 显示全部楼层 |阅读模式
5仿真币
想请版上的人帮我看看我这段code中的一个错误,我刚学Automod没多久,实在找不出错在什么地方了,谢谢' o+ v) u* m1 p# [3 g* Q7 ?/ F
0 ?( m& e, y4 Z$ _# [
我的问题是,在每个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中的数值,不知道会不会有什么不妥。' P( Q7 n" U7 k/ U
+ g' x  Z5 g( ?: o3 G
begin P_read arriving
. e* H. p& h! H. e! Q. w    while 1=1 do begin
5 u1 J3 F) w/ N8 g& P; C        read A_tote from "data.txt" with delimiter "\n"
  B4 K" a; j2 v, I% c7 _        read A_time from "data.txt" with delimiter "\n"2 L/ Z( G( j, o% n. m. ~% P9 y9 C
        read A_leave from "data.txt" with delimiter "\n"
4 }! n; t* i% B& ~        read A_picks from "data.txt" with delimiter "\n"6 m& [6 l) Y. c# V
        set load type to A_tote
; a6 W% ]& ~( L2 G5 `6 K        if A_tote="tote 1" then set A_induct to 1
: ?8 T$ i+ Y& A' r$ |4 {3 G        else if A_tote="tote 2" then set A_induct to 2
$ S: I- m: r* v$ \; ?* |2 [            else set A_induct to 3   
- Z6 e( I8 u6 n" e        set A_i to 0
& [) g. M$ F5 }/ a1 d  V        clone 1 load to P_induction
: ]$ f& v% \4 _- e# \        wait for A_time sec
0 z4 B# T& T1 B' ~4 a  w3 X    end
* o' T3 g6 @; @$ j/ `4 v; m) c3 o. Yend' s" o; s1 {% A

9 \9 f6 y+ P$ S- X7 fbegin P_induction arriving
! x  B6 z% |* C  R0 k9 }; r# \* e1 q    if A_induct=1 then clone 1 load to P_pick1
! H5 J% \4 u2 w) _. Q6 {5 G    else if A_induct=2 then clone 1 load to P_pick25 W9 @) t8 L8 i7 \
        else clone 1 load to P_pick33 @* q* E. C/ [% `- M4 m
end
) M& `, D# N0 P3 b
- M8 `) e6 e- G* r/ e. zbegin P_pick1 arriving
9 n$ f" {% ^; W7 o! [2 a( H0 ]    set A_i to 19 {; ]+ @- x( V9 J' p7 F
    move into Q_induct19 f# {! n+ d9 r0 s' \) C" m6 b, P, `
    move into pickaisle.induct1
) a! E3 u7 H- x' q3 ^& d6 F    while A_i<=30 do begin
$ {8 _4 ~+ I% w" I        travel to pickaisle.con(A_i): T" m% N& x! G! p
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
" \& n6 v/ Q4 J: e* z        else wait for 10 sec
% Q) r7 D' g4 }1 s# ]+ \0 k' w        if A_i=A_leave then send to die  D8 ^1 h& r7 e, x, M
        else inc A_i by 1
0 l$ S& r5 T3 C% m    end
& i, \( I* W5 C2 @# V6 W1 n% e4 zend, W6 J9 P# R' C# v% P; G  ^4 b
$ A3 W, _! s, z
begin P_pick2 arriving
9 }0 e9 b0 C4 `1 q8 n. ?7 A    set A_i to 11
0 _! W" q7 y: @    move into Q_induct2
0 |& q$ z/ u4 C% g0 N- p. ~    move into pickaisle.induct2( h3 d" u7 a' G. U) k( K
    while A_i<=30 do begin$ H* L( g  c% S" f
        travel to pickaisle.con(A_i)
7 H) r9 v; j0 ~# e3 Y        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
9 ?) |- \6 x8 q: z+ R/ @8 M6 p& m        else wait for 10 sec
! v/ Z5 ^+ C. S2 C) b        if A_i=A_leave then send to die, @* S* q( F; z4 U* f
        else inc A_i by 1
9 h. {# H# t" p% @  w* `    end
' s2 N$ s% c1 Cend6 Q+ e, |$ T4 Y; l) m' ~+ [6 X2 _

; v6 {( H! g9 x5 qbegin P_pick3 arriving
# U+ T( A0 W, _& U2 P" a# h7 u& r6 g, Z    set A_i to 21
+ `4 b4 f5 P; X- \* e    move into Q_induct3
& u/ {8 K% w* Y7 p* J& F    move into pickaisle.induct3+ I6 `$ C' Q) V% t
    while A_i<=30 do begin+ Y% U5 H( g) i4 j
        travel to pickaisle.con(A_i)7 n6 }: F- M8 K4 g& H* J
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec# b  d: w9 Y! B/ i# f
        else wait for 10 sec
: z4 m7 T. ?$ A* y) N  V6 X        if A_i=A_leave then send to die$ I4 X7 a+ D7 _/ l% ~
        else inc A_i by 1
: S+ N( ]" O: j) o( j9 V! b3 S    end8 _, X! R7 G' Z" C9 i5 L! n
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是个什么东东?; I4 M4 ^1 s3 Z1 ]: E+ [  E$ b
move into后面,应该是一个station或control point,或者Queue/Container/Vehicle/Segment之类的东西。看你的报错信息,这个induct是个path么?
9 \0 O- }" a/ k- q0 p% S4 u2 s% k8 J- w
AutoMod Editor的语法报错信息,有时候会指在下一行,必要的时候要把上下几行都看一下。
/ H+ b! P1 L- N% q1 J2 T7 W" m5 s1 a/ c( N# X7 @7 p
另外,你的几个P_pick是完全重复的,建议以如下方式修改,可以减少代码编写量:4 r7 _" _- M7 p4 }- m
1. 创建一个Process:名称为P_pick,number of Processes为3,其它按你的需要设置;删除那几个P_pick;' s  p& `* ^7 X9 _5 ~9 W
2. 创建一个Queue:名称为Q_induct,number of Queues为3,其他按你的需要设置并放置;删除那几个Q_induct;
- U5 F+ x! ~' I8 b3. 以如下方式改写P_induction和几个P_pick的arriving procedure的代码:
% i3 b% q4 ~4 H) Bbegin P_induction arriving
1 Y6 u2 @+ ^; w1 }1 z1 w6 v    clone 1 load to P_pick(A_induct)
, i& W' g( r+ b0 i* @. L8 mend最大的系0 a3 B5 |# ]8 A2 ^! z5 ], t
- W: ~1 ]6 `1 B
begin P_pick arriving2 p2 E& o  t- Q; C+ k& \
    set A_i to procindex * 10 + 1
, i2 @% z" ~9 i( s    move into Q_induct(procindex)4 b8 k' V( `$ `
    move into pickaisle.induct(procindex). L5 z; s" v4 p: g
    /*check the type of pickaisle.induct(i), for your last problem.*/
" w9 L1 E: l9 f- z0 t
& K) h; q6 f5 g' E4 i    while A_i<=30 do begin
  A( ?1 D! X1 S; t' q0 W        travel to pickaisle.con(A_i)
- S; W3 j: `5 I1 _; u0 \; s        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
; o) X' H5 h1 k* E        else wait for 10 sec1 v; W) o. P+ W) s' S6 M
        if A_i=A_leave then send to die
, C8 ^5 Q  i5 c1 ^3 b        else inc A_i by 1
2 ?; B4 V& Z- {' }: ^* L6 s& }1 [) m    end6 U6 t2 q: M/ W
end3 X' e1 [! y) h

- k9 f& o2 w0 [$ S! ]3 `& s其中的procindex为整形,代表当前process的序号。
/ F8 U" e* G, Z* o9 V" kstation和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-15 09:50 , Processed in 0.014135 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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