设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 15613|回复: 2

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

[复制链接]
发表于 2009-4-4 23:58:32 | 显示全部楼层 |阅读模式
5仿真币
想请版上的人帮我看看我这段code中的一个错误,我刚学Automod没多久,实在找不出错在什么地方了,谢谢
5 w2 I. ?* f$ s8 R& Q3 a
; n+ H6 \' ?8 r4 \- 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中的数值,不知道会不会有什么不妥。
! Q0 V6 b3 E( Q1 N: c
  z( x* H. l! l7 k9 l7 J% a/ Zbegin P_read arriving
/ W' H; k- b9 s. [, F' d0 C    while 1=1 do begin
: y! H+ [9 m1 F/ f, j        read A_tote from "data.txt" with delimiter "\n"' l1 C) E2 n) |
        read A_time from "data.txt" with delimiter "\n"
7 D! k: D2 g( M* t        read A_leave from "data.txt" with delimiter "\n"
6 x! c( i) p- U0 _        read A_picks from "data.txt" with delimiter "\n"
/ J% O# w9 J" `* Q7 K( ]5 N4 O( W, ?+ S        set load type to A_tote, c+ g" b' a6 R: L5 n: n( ~
        if A_tote="tote 1" then set A_induct to 1
/ y$ v7 V0 t  Z+ Q3 d9 z/ a. l6 C) M        else if A_tote="tote 2" then set A_induct to 2
* E6 @0 u" g2 q3 U3 J2 a9 q% g            else set A_induct to 3   
- M5 x* F0 W% E" k  r* a        set A_i to 0
+ X1 r5 a2 [/ v# m, P5 m! J        clone 1 load to P_induction8 d9 D% c  M; l- k
        wait for A_time sec" u. @+ P1 o! o5 p$ q
    end5 L% O& C  M) W0 X6 H0 ~$ F/ J' C
end
  A6 f5 u1 W% l) [, z  q7 t$ ~3 Y5 ^$ j+ }: s4 z6 o* a1 w: k
begin P_induction arriving( x% d7 [1 _  W& W, Q, S; J! a* k
    if A_induct=1 then clone 1 load to P_pick1+ s7 |% ]. E2 x3 K1 g4 s
    else if A_induct=2 then clone 1 load to P_pick2# `" {  M8 Y; K: q
        else clone 1 load to P_pick3
( m8 [+ u8 [( Y4 z7 Lend# H: v, {6 P. R& D. e5 ?
% D; h6 G, h' x, }; y
begin P_pick1 arriving" Z+ B* U3 V* [0 N9 G
    set A_i to 12 s! `7 ^2 K& }% m8 ~5 }6 x% O
    move into Q_induct1
7 W  K8 u' J1 i9 L/ v2 o    move into pickaisle.induct1. ]; e) V' K3 d7 c0 w' h
    while A_i<=30 do begin
. C. U5 p6 ~3 U) V" V        travel to pickaisle.con(A_i)) w' U6 c' x/ I' z. `& T% B7 Z
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec% }' H1 i. S2 F. D& V
        else wait for 10 sec
# ~4 a. z1 y# R& T, j$ J# t- X; e- M        if A_i=A_leave then send to die
% K# k! M0 y0 s: m        else inc A_i by 16 r) o1 E- ~( d* v- V
    end
9 L% F" ^3 b$ G! F" v0 }end9 H+ A6 G7 _6 Z
" W' h! u4 I7 C* l
begin P_pick2 arriving* \8 J7 P- c$ X, T" Y
    set A_i to 11
2 l. A  o/ [4 D$ s* ^    move into Q_induct2, F) @( B. N) O2 E
    move into pickaisle.induct2/ ~5 J6 H" Z8 A$ }2 e4 @9 J& h
    while A_i<=30 do begin
& z, g: I4 p3 A3 s$ y        travel to pickaisle.con(A_i)
2 q: F2 L2 B, r1 K9 ^" d        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec  h4 i+ [2 i- _. ^: y5 n
        else wait for 10 sec/ F& D" a& s# P1 {" M
        if A_i=A_leave then send to die/ j/ Y8 U2 N0 A; J
        else inc A_i by 1
9 q  j. Q) e3 I! |6 ~    end
4 Z4 d4 E3 K% l, m5 gend/ {% I+ k7 ^9 c1 m
5 o8 f+ l+ ], J* Z) z7 g
begin P_pick3 arriving( M8 \' z; y! X
    set A_i to 217 @& o  ~  B5 L( b( v
    move into Q_induct3' v* T) N4 U( ^( i) W: g. A
    move into pickaisle.induct3
3 j9 C; ^- E4 u8 M    while A_i<=30 do begin
, U2 \3 Q; F0 }! F  q, L& R        travel to pickaisle.con(A_i)
2 E3 Y" {& [3 P9 {8 R# ?6 w7 ~        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
9 K& d* V% u2 s1 A3 d. Y8 K3 `        else wait for 10 sec( `3 Z$ \) T8 W+ T7 D
        if A_i=A_leave then send to die7 ~) @2 U! R& K+ W
        else inc A_i by 1, M, T; A7 F1 X  J
    end  M; v; n8 ]" @# K% _
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是个什么东东?8 X; x# m/ E) w
move into后面,应该是一个station或control point,或者Queue/Container/Vehicle/Segment之类的东西。看你的报错信息,这个induct是个path么?
. N) Q' O9 q6 \+ N! }  Z1 C$ q# Y1 @
! |4 \4 r; d+ e. Z, }( XAutoMod Editor的语法报错信息,有时候会指在下一行,必要的时候要把上下几行都看一下。
' Y) {7 l7 q3 t( y" M- i2 ], [
0 x; L2 b! J) c& j8 B另外,你的几个P_pick是完全重复的,建议以如下方式修改,可以减少代码编写量:  s; o9 @- c. X* b, ^( b
1. 创建一个Process:名称为P_pick,number of Processes为3,其它按你的需要设置;删除那几个P_pick;
0 E& J3 Y$ s$ g' |( @, E2. 创建一个Queue:名称为Q_induct,number of Queues为3,其他按你的需要设置并放置;删除那几个Q_induct;, M' _5 I' R% O5 j  m' E1 V# O
3. 以如下方式改写P_induction和几个P_pick的arriving procedure的代码:
, t7 B! p0 X+ f4 z& E& D/ ?begin P_induction arriving" _/ Y9 D! j  w1 |# z
    clone 1 load to P_pick(A_induct)
2 Y2 C/ [) K6 s# p  A# W1 [- _end最大的系
* k: J  c; @5 X
; ]! j" R! R% G0 ^begin P_pick arriving
5 H6 h8 v' J- D. ]! K    set A_i to procindex * 10 + 1& \7 ]$ N6 N, ^6 Q7 d( [) `5 C
    move into Q_induct(procindex)7 N4 K" ]4 J& l, a5 j: n# e
    move into pickaisle.induct(procindex)+ }1 T3 j9 h& U0 ^
    /*check the type of pickaisle.induct(i), for your last problem.*/, @& e2 K2 x7 K9 ]  j3 H9 m

! Q0 T/ o( I; s7 \+ ?    while A_i<=30 do begin
5 b' x; k* `& K2 u( P        travel to pickaisle.con(A_i). Y% ~- o# D% X  [
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec* {9 F% j$ Q" D+ z
        else wait for 10 sec
* `4 }" [" O3 d        if A_i=A_leave then send to die; N1 d; l$ ?6 K- u- v
        else inc A_i by 10 O8 l& ?  Y0 C9 u, P. `, z3 y4 c
    end
9 r3 H) I5 T( {  @end
! v! y- v# @, `# A) A2 A5 I$ H9 |# V' Y9 F& h) O4 [- M
其中的procindex为整形,代表当前process的序号。
% l0 u# \0 ^4 X2 }' cstation和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-9-22 19:39 , Processed in 0.016321 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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