设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 15100|回复: 2

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

[复制链接]
发表于 2009-4-4 23:58:32 | 显示全部楼层 |阅读模式
5仿真币
想请版上的人帮我看看我这段code中的一个错误,我刚学Automod没多久,实在找不出错在什么地方了,谢谢
5 X# Q' o  S6 L, B7 T! w0 {8 ?- u2 w, \! ?# \/ `2 m: k
我的问题是,在每个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中的数值,不知道会不会有什么不妥。
% L; H& `3 J' o0 g- Q, h" i: F1 \& j6 T' i  C5 s6 ]
begin P_read arriving0 E. c5 ]9 L6 N
    while 1=1 do begin
( v) z" p  Z/ ?9 J        read A_tote from "data.txt" with delimiter "\n"8 t% ~+ r: u5 N6 `  G% p4 M
        read A_time from "data.txt" with delimiter "\n"5 h6 I7 q* k* m# s
        read A_leave from "data.txt" with delimiter "\n"2 w  k6 H$ n9 D2 n4 a; B1 i* [% d3 g8 ^  f
        read A_picks from "data.txt" with delimiter "\n"
  X2 m" @$ H* I( R        set load type to A_tote
4 J! O  m# [' E1 t        if A_tote="tote 1" then set A_induct to 12 w4 A3 C* x& P7 S# f& C
        else if A_tote="tote 2" then set A_induct to 25 |7 d% h. V! b4 e8 D* X
            else set A_induct to 3   
9 p% G# w& S1 Z% A2 G        set A_i to 0  r% D2 N7 j( ^: z4 N7 z- C1 j
        clone 1 load to P_induction
" i" f& ~; s- Y; {- I5 l2 P        wait for A_time sec
+ H* X  x2 W7 b" I8 v* p9 i: C    end. ~0 m( S3 `6 s0 U! X( o# ?; N
end; k) T4 ]! m+ ^: O# ?
1 K3 r  u/ T9 [  S  I! O
begin P_induction arriving
  ^; ~; ]* D7 |$ j. Y* s' K    if A_induct=1 then clone 1 load to P_pick1
9 E: r. K3 V; }  i1 I4 {8 I    else if A_induct=2 then clone 1 load to P_pick2
- Q, v( |$ E! R! N        else clone 1 load to P_pick3
( v/ Z5 d/ J) N5 ]7 c" Z4 C. ~" Pend, ]" P+ U+ @/ u6 K0 e( G3 @! a

: p3 A2 @) e  I6 u/ T3 _, Obegin P_pick1 arriving
* v0 I' a- v9 \; _, y' z1 {    set A_i to 1% o; _0 m8 J5 ~1 n
    move into Q_induct1
9 B1 d: m% G3 z2 b1 j* t    move into pickaisle.induct1
, z( J% Y# a- ~: \' y' G, ]    while A_i<=30 do begin
0 y$ Y4 O& n% B' T        travel to pickaisle.con(A_i)
6 n  r/ I1 |7 J& w        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec& d, d3 U) U9 K3 r. C4 e
        else wait for 10 sec! o9 o  W: L7 z# q" [$ P
        if A_i=A_leave then send to die
/ L! H  n/ Y7 n! @        else inc A_i by 1' h6 K2 Z' K- x6 U6 o
    end  H0 U9 A6 `& z5 j( `* I
end2 y5 r6 K! x4 f2 p5 i0 Q

9 G, T" \% k8 U* P. ybegin P_pick2 arriving% F9 f! R- x, S4 _& k; W# i- F
    set A_i to 11
) O- l0 ?! F& l: v    move into Q_induct2
5 i$ {7 Q9 ~% h- z) ~) j) _+ G" x    move into pickaisle.induct2
( ^* M3 A" ]) K9 ~  ?" w# N- `    while A_i<=30 do begin& q* ]- |* C& ~9 d. Q
        travel to pickaisle.con(A_i)
* s) q( N; Q: x+ J        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
  S2 g! q8 z# L/ `5 V1 E        else wait for 10 sec/ m* c: r* A8 l: e
        if A_i=A_leave then send to die+ B) y2 V2 ]3 a) ~% ^$ W# ?% M
        else inc A_i by 1
- I2 {5 u0 ]- ^, N2 X    end0 m& S- I" g" w/ |) k. L
end. u5 \% E* a. G, M1 a# ~$ F  t

/ O5 c2 }5 D6 |( e0 S9 fbegin P_pick3 arriving
1 @( @0 v6 S8 H5 n$ o$ U    set A_i to 21
+ q$ j& X0 B* d7 {/ r! n    move into Q_induct3& i& Q: |0 N. c$ T
    move into pickaisle.induct3; r  t/ V# `7 q' e( q$ S2 R- t( H
    while A_i<=30 do begin
) A3 m* a: b3 x# T$ {, M# V& c        travel to pickaisle.con(A_i)
! t" O* J# g1 ~1 ^- s        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
3 A# K. o( u8 |( l7 y* Z        else wait for 10 sec/ `9 [: q! m0 t. e/ H9 V
        if A_i=A_leave then send to die
% w2 V  ~7 P7 D8 O        else inc A_i by 11 u2 l7 C; f. B& I! o9 C
    end0 [# O( b6 ]0 c* p. x0 K% u: _7 t
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是个什么东东?2 {+ W4 m& }9 Z9 H' Q: p( l4 ^
move into后面,应该是一个station或control point,或者Queue/Container/Vehicle/Segment之类的东西。看你的报错信息,这个induct是个path么?( N; c3 H5 R. P3 a- f+ B

! |% e5 p1 q$ i* b2 n" tAutoMod Editor的语法报错信息,有时候会指在下一行,必要的时候要把上下几行都看一下。1 U' H2 w& L5 V1 m

6 A* L  a4 g7 J# e另外,你的几个P_pick是完全重复的,建议以如下方式修改,可以减少代码编写量:
* Y) `% }: [) ^, l1. 创建一个Process:名称为P_pick,number of Processes为3,其它按你的需要设置;删除那几个P_pick;$ }; r- y/ e/ g# F* b$ G
2. 创建一个Queue:名称为Q_induct,number of Queues为3,其他按你的需要设置并放置;删除那几个Q_induct;3 E7 w. I# q1 g2 T7 m1 n% Y1 m
3. 以如下方式改写P_induction和几个P_pick的arriving procedure的代码:
* P; J4 r3 H* y% {7 ?3 sbegin P_induction arriving  }9 _; m: B2 |$ y( p- w: o2 J+ Q
    clone 1 load to P_pick(A_induct)
3 u* C* g4 P2 a% |, o/ t: I9 send最大的系2 A& [7 x! _5 o! }" X- N4 W  N9 T
" }0 X$ Q4 {; N0 B6 W  i
begin P_pick arriving
3 Y/ e4 d# Z6 v" b/ \; J    set A_i to procindex * 10 + 1
% d7 V5 h) r7 y1 k* O. [    move into Q_induct(procindex)1 x, ^7 G1 e* D& d, f4 `
    move into pickaisle.induct(procindex)0 v% [; e/ c" N- g3 H% s1 }4 K
    /*check the type of pickaisle.induct(i), for your last problem.*/- x: n# k7 v; Q- I, c/ p; |; E! h6 q! S
: ~# q- ~; S- l, E) W6 i8 Q+ a2 h/ _* h
    while A_i<=30 do begin
( E1 R: {+ D/ |/ Q        travel to pickaisle.con(A_i)
2 I! f  D- f- b  j) W7 l        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec) q" x. s( t2 L
        else wait for 10 sec
$ z2 X3 H, d" W1 \        if A_i=A_leave then send to die* D: _5 m6 p: V% t! U6 G/ k5 S/ [3 N8 H
        else inc A_i by 1
% ?4 L' X4 r1 K    end
' l+ s) j0 `, ^/ W: G: J+ cend- l% P/ Z+ t8 N& W# s
) D. C3 Z8 u' I( a2 G
其中的procindex为整形,代表当前process的序号。
9 }( E! N' h' [9 i1 c0 J! jstation和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-8-10 16:31 , Processed in 0.021820 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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