设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13984|回复: 2

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

[复制链接]
发表于 2009-4-4 23:58:32 | 显示全部楼层 |阅读模式
5仿真币
想请版上的人帮我看看我这段code中的一个错误,我刚学Automod没多久,实在找不出错在什么地方了,谢谢
% x4 |1 C" Z- P. W6 w. ^! X7 D3 n2 P. y4 ]0 }
我的问题是,在每个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中的数值,不知道会不会有什么不妥。/ o( L2 `! X8 z* T  k# J/ }
- N4 v! p6 t1 A" L/ o% g$ i1 ~  Y1 X
begin P_read arriving5 b0 l1 p7 m) J$ |$ v) z. d
    while 1=1 do begin0 X+ O- G: {/ y
        read A_tote from "data.txt" with delimiter "\n"
2 w8 l+ o! Z# V+ z        read A_time from "data.txt" with delimiter "\n"
$ p8 v* Z  x/ m9 D3 A        read A_leave from "data.txt" with delimiter "\n"4 Q' a0 G4 G2 v  V6 ?5 s! \% I
        read A_picks from "data.txt" with delimiter "\n"2 S/ G4 v3 \# e( Z/ _
        set load type to A_tote
7 v' k8 v1 P1 Y$ P5 s1 J, l        if A_tote="tote 1" then set A_induct to 1
/ ~  k7 p2 z% H4 l/ U* Q1 i        else if A_tote="tote 2" then set A_induct to 2( c# a1 D# B# M
            else set A_induct to 3   
% k# `- }) q: ^        set A_i to 0- Z/ T2 Y3 n6 H. I/ Z0 K5 v
        clone 1 load to P_induction
4 _+ \5 c3 D( O0 _        wait for A_time sec4 u; z% S& d5 l2 d
    end/ [* N# @$ |, v( K
end& F8 M/ L3 _5 r) n' w. L

+ C+ i. w1 _5 r* j( U. ?begin P_induction arriving
. M3 R' A; f5 y+ x1 I& O7 A    if A_induct=1 then clone 1 load to P_pick10 q" G: E$ S' e0 @  W
    else if A_induct=2 then clone 1 load to P_pick2/ S+ ^8 I2 |1 |* b9 u
        else clone 1 load to P_pick32 I! i* A* k+ y' Y6 R
end
4 P8 R% h5 I) A; j; [0 P
' e2 d4 ?" j( b2 v, Fbegin P_pick1 arriving! i) P% [4 x1 p# e9 y
    set A_i to 1% W7 E/ R8 @2 Q' ~  q
    move into Q_induct1
* B" k! `* q" {, n    move into pickaisle.induct1( V* x8 {0 R) i: S
    while A_i<=30 do begin
$ g- O" R8 H; v8 p/ f        travel to pickaisle.con(A_i)
: x! o6 V9 r2 r! c) d3 W) q        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec; Z- K+ k. E' r
        else wait for 10 sec
) n5 m( n. ?' J# I        if A_i=A_leave then send to die
6 N5 n  ]- r7 j4 ]8 t        else inc A_i by 1% g2 u7 }7 H- |; m. D- _
    end
5 [' b+ w: e, C( h  f* `* o) Pend* w' A- m3 B6 U( R2 g# e
# J; j! S+ h) \% W3 l+ m
begin P_pick2 arriving" [7 D+ q9 S3 C0 I0 Y
    set A_i to 115 T* g5 ?; [8 j% G4 B
    move into Q_induct2% T2 S$ \3 f4 I, q8 k4 ]1 I
    move into pickaisle.induct2
. V) K% j$ Q+ m' z    while A_i<=30 do begin, Y; h2 }5 H$ ~9 ?8 [2 t
        travel to pickaisle.con(A_i)# i( H5 G8 _* R* ~
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec( z0 ~5 s, u7 l8 [# E! `& S0 I0 b
        else wait for 10 sec; k( X4 E; j0 {( G) D
        if A_i=A_leave then send to die' n; ?0 J6 z1 P
        else inc A_i by 11 S' ]- s7 g8 R) o, O& r1 f
    end) `; I3 h1 z- D1 B& C7 `  W7 U
end( j4 Y4 H3 |! z' _( S6 m' N

1 F) I' K5 A" I8 g6 h4 i8 Ebegin P_pick3 arriving
" k! A  K- C: H    set A_i to 21
& B) _: {" J, d3 w& E. q    move into Q_induct3
4 B- r3 _# W4 G' Y, \& e    move into pickaisle.induct3
+ h9 Z& C$ u# Y    while A_i<=30 do begin/ ]% r. |4 r" O2 d  X
        travel to pickaisle.con(A_i)
) C" o9 x, C0 b/ b        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec$ E+ _+ R' m- M2 w2 P0 l
        else wait for 10 sec9 @, G! ~, }' [/ q. e0 U0 i) V
        if A_i=A_leave then send to die5 O5 H% |6 ^; Z; U
        else inc A_i by 1& E( G( C6 ^2 u7 `9 @
    end
; f, |# r% ?7 q( Hend

最佳答案

查看完整内容

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 }4 ~% _8 z4 U0 e  E
move into后面,应该是一个station或control point,或者Queue/Container/Vehicle/Segment之类的东西。看你的报错信息,这个induct是个path么?
4 X7 X' i/ S  \1 R1 Z9 |, V0 `0 e* z
AutoMod Editor的语法报错信息,有时候会指在下一行,必要的时候要把上下几行都看一下。% Z/ A! J9 f6 h# j

+ a; ~+ P8 f6 e5 \5 v' Y- p另外,你的几个P_pick是完全重复的,建议以如下方式修改,可以减少代码编写量:3 r) P, R+ g4 k+ w& r! x: M* @
1. 创建一个Process:名称为P_pick,number of Processes为3,其它按你的需要设置;删除那几个P_pick;! x* A) v' W2 c$ D4 g
2. 创建一个Queue:名称为Q_induct,number of Queues为3,其他按你的需要设置并放置;删除那几个Q_induct;
. I/ K( E& M, D+ X8 H$ a+ y3. 以如下方式改写P_induction和几个P_pick的arriving procedure的代码:
+ N" f, N2 C: E6 Rbegin P_induction arriving
$ V( C9 P. ~2 `    clone 1 load to P_pick(A_induct)$ ]; x/ O3 I# r- A9 y# V
end最大的系
* X- j" Q( }/ a+ y4 t" X2 Y: z8 R+ E) V/ U% K
begin P_pick arriving9 K4 z  G6 E$ V0 `6 P- f
    set A_i to procindex * 10 + 1
, l* ]/ m% u! g2 p    move into Q_induct(procindex)# N' a, E1 C+ L4 M
    move into pickaisle.induct(procindex). Y& h, M- G* s
    /*check the type of pickaisle.induct(i), for your last problem.*/0 }8 ~. H. X5 @5 _: M  l
3 o- f1 [) g- X$ Z. Z4 C: r
    while A_i<=30 do begin
* ~1 D' ~% B  S. R/ O! s! D        travel to pickaisle.con(A_i)6 A9 l2 B' _3 p
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
& M- D: R( K+ G2 M! @9 Q/ w( H        else wait for 10 sec
$ X* [# f; H2 I5 r        if A_i=A_leave then send to die% K$ s/ T6 w" W) F: _3 m1 k2 {! V
        else inc A_i by 17 G% F, X; [% F8 `% ~  J
    end
' q# ?  C; D) x2 l5 pend7 d4 _) N& u# n" D. t# _

/ e% \1 W* p) g7 S) L. C+ X其中的procindex为整形,代表当前process的序号。
. Z, V: H! X& pstation和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-5-27 06:09 , Processed in 0.019421 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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