设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14915|回复: 2

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

[复制链接]
发表于 2009-4-4 23:58:32 | 显示全部楼层 |阅读模式
5仿真币
想请版上的人帮我看看我这段code中的一个错误,我刚学Automod没多久,实在找不出错在什么地方了,谢谢$ m- A3 z2 T3 o
2 E$ o6 N. J: F1 i5 M: S
我的问题是,在每个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中的数值,不知道会不会有什么不妥。
) \, e' h1 j% x% D- p8 a. u* b% J* i; P7 }* w
begin P_read arriving
0 A( X/ Y4 H$ g) L: R9 X    while 1=1 do begin
- q+ q, n+ q9 V8 E3 {6 h1 G" N        read A_tote from "data.txt" with delimiter "\n"
% q) T; k+ w5 `1 o        read A_time from "data.txt" with delimiter "\n"
. T. Z- q; {9 `) @        read A_leave from "data.txt" with delimiter "\n"9 R) l2 k8 d- m; ~
        read A_picks from "data.txt" with delimiter "\n"
/ p/ ?0 N' y' [, J: ?  S        set load type to A_tote$ X% T' Q  Q( b3 L% f7 h
        if A_tote="tote 1" then set A_induct to 1
6 `1 z3 M9 q6 u/ o- O4 E        else if A_tote="tote 2" then set A_induct to 2* b1 E0 O& p3 t/ n& W2 _
            else set A_induct to 3   
9 P4 ~. |. o* _; e8 N2 B, ^        set A_i to 0
& T- m1 X4 W8 M  L1 O5 i3 v* L        clone 1 load to P_induction
3 c3 `9 w5 U. p& l: I! l& k8 i        wait for A_time sec, j/ V. m: `* F  q: ~
    end6 f* J! x- R# c0 e/ t
end
6 p. K! T. T; u% n( ~* ]8 u: X& ]+ ~3 e) r) T
begin P_induction arriving7 ~* p$ D* W( |4 [5 C. k; l
    if A_induct=1 then clone 1 load to P_pick1
  B$ W8 t, y: {  ]    else if A_induct=2 then clone 1 load to P_pick2
: v0 P; A7 R$ |  ]! Y8 V/ e* G        else clone 1 load to P_pick3
! ?+ A7 m3 i! b$ zend5 [& g' ^* N" S( h- B
, M9 g$ N/ r6 l! m
begin P_pick1 arriving
1 R( I3 V' X$ e& O    set A_i to 1- N2 Q" {% Q, d3 v  j
    move into Q_induct1
5 @/ w0 N; v! X8 a) P. r3 Z4 q    move into pickaisle.induct1( n# [# V: Z* n
    while A_i<=30 do begin" W0 W7 C' r6 v% T: w. d+ @
        travel to pickaisle.con(A_i)
5 L! }$ H* `. [& b- R        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
( _6 @) I) X2 d2 c! q3 X        else wait for 10 sec- S2 Z6 d, U! w# G
        if A_i=A_leave then send to die
9 t8 |0 g) }  m& a4 O+ q  r$ T5 {6 \        else inc A_i by 1
: x( e  j$ w# F5 e" M    end; q$ m) \  m) k6 d6 J
end3 }6 p% d# Y1 D3 ?

4 Z  j! v4 _7 ybegin P_pick2 arriving
, {6 M; x9 q3 t5 I( S4 l; T- z- c    set A_i to 11
; b& ]* W: p! \    move into Q_induct2
2 q9 s8 s( Q5 |. J# K' S- q2 `0 {    move into pickaisle.induct27 D' [( H# ^  l, Q7 X. [' A# h: \
    while A_i<=30 do begin
4 {  N7 F$ j0 H9 M; U        travel to pickaisle.con(A_i)$ K2 }0 ^, M8 Y: W, }# [
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec! F9 {, ^" m' \) p- d- x
        else wait for 10 sec
- C) u3 `7 S; w, G8 d        if A_i=A_leave then send to die
& v7 R2 ^6 \/ X% N        else inc A_i by 1+ N8 Z# ?# J- Q+ N/ `
    end8 C5 L2 j. m, x5 ~
end
2 R0 i  s8 ^) |* B" y
' N" o* @5 ?0 ~begin P_pick3 arriving+ T# w% U3 A) Z8 t1 T
    set A_i to 21
) R! J. `1 G( ]: [# @3 |  t" z7 W    move into Q_induct3
# O1 b% z9 z6 P, ]3 }, C    move into pickaisle.induct3
$ S  c; ]9 v: T, E! A    while A_i<=30 do begin9 Y$ w2 q/ Y4 }3 i
        travel to pickaisle.con(A_i); ]9 P5 J8 r% \$ k/ o, ~$ |
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec7 z$ T% D+ L2 W& I. v
        else wait for 10 sec
3 B" o8 x8 c. {1 x8 [/ n6 F        if A_i=A_leave then send to die
0 {% p% a: @. o6 X# i        else inc A_i by 1
2 b& K5 F' Q1 T5 u% y+ W( X    end; F- N4 m0 d8 [
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是个什么东东?
. S9 @1 F: g& u8 u( cmove into后面,应该是一个station或control point,或者Queue/Container/Vehicle/Segment之类的东西。看你的报错信息,这个induct是个path么?# K% L: N; N" O9 K* i; t" M) m
+ r! \+ e( `, O1 Q" K/ ]
AutoMod Editor的语法报错信息,有时候会指在下一行,必要的时候要把上下几行都看一下。
: l/ c+ j- p. l% V7 h2 [8 r
. n) d! z8 D+ R1 s$ B6 N另外,你的几个P_pick是完全重复的,建议以如下方式修改,可以减少代码编写量:
( m* L; u- {+ g1. 创建一个Process:名称为P_pick,number of Processes为3,其它按你的需要设置;删除那几个P_pick;# H: s3 P) p* T! F
2. 创建一个Queue:名称为Q_induct,number of Queues为3,其他按你的需要设置并放置;删除那几个Q_induct;
8 J9 Q# A) L. Z" \8 i4 z3. 以如下方式改写P_induction和几个P_pick的arriving procedure的代码:. s/ P' d/ L" w. f. _+ D' [$ h
begin P_induction arriving/ t$ R- H/ Z' S
    clone 1 load to P_pick(A_induct)
( L! I8 K" K8 B; i+ A+ A. rend最大的系
$ ]1 b7 ]4 y2 D0 l& ~/ B, ]( |" q$ v2 w' X- u9 N
begin P_pick arriving; {: O- H# S8 k9 g0 e: w7 a
    set A_i to procindex * 10 + 1
' `8 I( a% j, }- G; f9 L7 t& {    move into Q_induct(procindex)
* n- C6 U) Z. }! a5 c2 w, P    move into pickaisle.induct(procindex)
$ M/ e' {7 k/ F( A. I    /*check the type of pickaisle.induct(i), for your last problem.*/: r6 y, L) _: C0 k6 h3 N2 @/ ^+ b

1 W8 z) O6 Y# _' J  l( b    while A_i<=30 do begin( q3 i4 C, y6 ]0 g5 W; i: {( F
        travel to pickaisle.con(A_i)
0 F3 u1 V6 r, M2 ~2 u        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec3 S# J4 k" o, F& x. ]
        else wait for 10 sec, N$ V- a; I+ [3 F
        if A_i=A_leave then send to die
6 B3 w5 a# l  Y        else inc A_i by 1/ D2 Q4 B( \5 \; f. L
    end2 T1 T1 A# `& U( r  Y) p) `3 v3 h
end& Q1 r0 h, I" J- C& }0 }
% I" r% e, r+ Q) C7 W. u0 w& E8 r
其中的procindex为整形,代表当前process的序号。
5 ]) A0 k; s4 M% P0 Astation和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-7-31 05:40 , Processed in 0.017745 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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