设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14132|回复: 2

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

[复制链接]
发表于 2009-4-4 23:58:32 | 显示全部楼层 |阅读模式
5仿真币
想请版上的人帮我看看我这段code中的一个错误,我刚学Automod没多久,实在找不出错在什么地方了,谢谢
. k! K$ c6 D9 W1 s: b; C+ d" j( u$ }' p" {. R! h" N
我的问题是,在每个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: K5 W3 _2 C& G$ C; J

5 a6 h0 w/ S, `; H4 fbegin P_read arriving* ^3 C" c) I. E/ i
    while 1=1 do begin
! @: h" e  \! C) }3 H( C+ P        read A_tote from "data.txt" with delimiter "\n"
; j0 y  W1 V$ M8 u+ F* ?        read A_time from "data.txt" with delimiter "\n"& [% q6 u: U$ ^2 N
        read A_leave from "data.txt" with delimiter "\n"4 _. v. L* z( s% C: B6 y
        read A_picks from "data.txt" with delimiter "\n"
+ g' Q9 n+ B" L3 ]: C- W        set load type to A_tote; }9 e* K) j( V" D1 z
        if A_tote="tote 1" then set A_induct to 1) P+ A1 }& S9 s& O8 X
        else if A_tote="tote 2" then set A_induct to 2: ?1 w* u! S7 D* h2 R! j2 e
            else set A_induct to 3   
1 S, M5 U& h6 z9 z% H        set A_i to 0
0 A& u5 y$ M" i7 }8 W: Z        clone 1 load to P_induction3 \. s" Q* Y( T+ m) R- g" E9 f6 V) g
        wait for A_time sec
. a* \2 X: B6 ?( `! q: `% s    end, U1 ^/ K' t7 S" T/ P
end
0 u. c& N# E8 R. D: ^2 P# R2 a" z$ L# k
begin P_induction arriving
4 T4 I" o* s# u7 e- d    if A_induct=1 then clone 1 load to P_pick16 I0 }, ?! X# C4 N4 s/ n/ z+ P; R9 M
    else if A_induct=2 then clone 1 load to P_pick2, D* z8 F7 b3 m
        else clone 1 load to P_pick3" Y, [9 m& Y( V4 b" w) B6 g
end0 g1 s6 i6 Z1 r/ P

, d* e9 v8 J- O2 O8 tbegin P_pick1 arriving
, M* Q6 ^& [* s3 W    set A_i to 1
! z+ [0 z* _; w    move into Q_induct1- e9 C# Q8 z& _7 U5 r$ e
    move into pickaisle.induct1+ O6 o& f% a0 |1 i% L
    while A_i<=30 do begin
1 Z$ e. K! K" p$ ?' H  V        travel to pickaisle.con(A_i)
/ q0 K/ l: o" g        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec3 M* B0 G8 T7 L* X: ]+ _
        else wait for 10 sec: M! |1 m7 S- u: R+ e
        if A_i=A_leave then send to die
3 ~0 T+ u! S" r. z* r8 d        else inc A_i by 12 V6 _: Y* P5 O% J1 L4 e
    end
6 z3 i9 t6 w5 V) ?8 ^- R" Fend5 q1 f1 R, u4 L) F: F! ~0 g# c6 A
0 z; `- F  r6 _
begin P_pick2 arriving
& d0 s  g! v4 ~1 S  V) m" `3 q    set A_i to 11" l: t3 Y, }. R2 a. {; q: B
    move into Q_induct2
* N, H& m9 @5 t1 q4 z3 X    move into pickaisle.induct2/ J! d% P6 \$ g4 P- ]4 Y
    while A_i<=30 do begin" U4 f$ [, D* K8 W2 Q* i0 F
        travel to pickaisle.con(A_i)' H) P& e- M- x5 \4 ~+ C$ x
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
" h# X' [" E# n, Q* U        else wait for 10 sec/ H! i2 _0 e" z
        if A_i=A_leave then send to die
" n9 v, Z6 O% v# H2 C        else inc A_i by 1
7 k! U$ c! a% |7 ^2 T    end
' e1 v+ ]6 T) m$ dend
2 I5 v9 e( b& l% p6 {4 s# C/ M8 ]3 G
begin P_pick3 arriving' G5 c+ y9 \- R
    set A_i to 21
, _5 P- U: I/ X! @5 Y! j7 \    move into Q_induct3
4 O, V6 u4 Y0 }+ n& y$ Q    move into pickaisle.induct3
  i; V( q. a4 e& W$ C5 i4 M; _    while A_i<=30 do begin
) H! ?) S  r/ Y+ b2 r        travel to pickaisle.con(A_i)
  h: `; }% Z, D7 M; w& h& D$ C        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec) }" H6 V8 A: v4 p
        else wait for 10 sec
2 a2 K. v. d, A7 j. }: {        if A_i=A_leave then send to die
3 P: w. y' ^+ L% s        else inc A_i by 1
0 {0 c; D9 O6 f5 i# ~, [    end
: r0 E4 H2 S& A9 v: K4 s. Aend

最佳答案

查看完整内容

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是个什么东东?
+ ?# J$ D' P$ [move into后面,应该是一个station或control point,或者Queue/Container/Vehicle/Segment之类的东西。看你的报错信息,这个induct是个path么?+ o& ]% M% ~" V( ?" I9 R% M

: B& K# k% M) c1 TAutoMod Editor的语法报错信息,有时候会指在下一行,必要的时候要把上下几行都看一下。4 N4 [4 v# ?- r: C& s( A

6 X! J. {9 _: }8 R" P2 N另外,你的几个P_pick是完全重复的,建议以如下方式修改,可以减少代码编写量:6 D1 C; m0 c2 x
1. 创建一个Process:名称为P_pick,number of Processes为3,其它按你的需要设置;删除那几个P_pick;
, q( u1 ^2 L+ ^) G2. 创建一个Queue:名称为Q_induct,number of Queues为3,其他按你的需要设置并放置;删除那几个Q_induct;5 ^* W: f& t+ X1 R$ ]
3. 以如下方式改写P_induction和几个P_pick的arriving procedure的代码:+ b1 F/ T  C& L1 r* `1 E
begin P_induction arriving- o# @+ T9 M4 |  I6 A7 r% r
    clone 1 load to P_pick(A_induct)8 P6 [1 u- O7 V5 C
end最大的系
" p5 ^# i! S" j* e2 d
/ V5 w6 y2 E9 h# N6 x% V. q+ ebegin P_pick arriving
% l) V( Y9 R+ V: M    set A_i to procindex * 10 + 1
( h% d: g* v0 ], a9 f7 u- ^    move into Q_induct(procindex)
# z1 X& j5 P# ~+ ]' u# T% S9 p    move into pickaisle.induct(procindex)9 U$ _; b) H, j$ L4 H# y4 R
    /*check the type of pickaisle.induct(i), for your last problem.*/: n+ y4 y4 q' f+ o7 V* e0 V
' y1 d" _% w9 ~" j
    while A_i<=30 do begin
, Z6 U8 u' |/ G2 r% k1 C1 ]        travel to pickaisle.con(A_i)4 g# ~# P* N: ^! A  _" o5 e( `
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec& |: d7 s$ j$ x1 u' ]9 A, ^0 c' g
        else wait for 10 sec
# P' O0 \) L# e( O$ ~2 R' E  O4 S        if A_i=A_leave then send to die
9 x; \  r: m: @5 a' x$ _# A+ c  a: E& u        else inc A_i by 1
/ [7 i0 n  H, V    end+ J1 x6 u9 Q8 b1 m( c6 f6 f
end
% p$ z; [! M4 f" h  R; o. G4 N7 N) F" j. t) A7 H: i! S
其中的procindex为整形,代表当前process的序号。
8 l& ]6 k5 O# z* M& p' a( s8 istation和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-12 02:29 , Processed in 0.015031 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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