设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13377|回复: 2

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

[复制链接]
发表于 2009-4-4 23:58:32 | 显示全部楼层 |阅读模式
5仿真币
想请版上的人帮我看看我这段code中的一个错误,我刚学Automod没多久,实在找不出错在什么地方了,谢谢
" v" f: P( K! j6 c# I9 n4 M$ s2 ^0 X
我的问题是,在每个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中的数值,不知道会不会有什么不妥。  H. h* u* E4 B6 _- L+ h
! s+ f, M4 u* W$ n. s2 g
begin P_read arriving
* c% Y1 \2 Q& E+ o7 c    while 1=1 do begin
5 I) s5 O( V7 C& ]        read A_tote from "data.txt" with delimiter "\n"
  g% Y" L. [7 s- |4 Z' t        read A_time from "data.txt" with delimiter "\n"
) C3 \! f! F1 H& p        read A_leave from "data.txt" with delimiter "\n") @7 f  l- B' A/ I5 {9 P" Z0 ^
        read A_picks from "data.txt" with delimiter "\n"( R* l) U' N& \& C( I3 W% h
        set load type to A_tote; ?& J6 F( K; R* f! h. @3 s+ G
        if A_tote="tote 1" then set A_induct to 1
& ?3 A' T' |+ t- r- w) x8 e3 a        else if A_tote="tote 2" then set A_induct to 2
+ h+ ~) R+ |+ Q- G, J$ H; H            else set A_induct to 3   
4 B4 U% k3 ^) M0 M! N- L  h        set A_i to 0
% m5 C5 O' q$ [  [: s- V3 d/ k        clone 1 load to P_induction
0 T0 i/ ~; r2 d6 V/ G6 {* N        wait for A_time sec
  s4 ?+ g+ m  c. \% X; g. d: [    end+ u" A* Q( R% I
end6 O! V: X, J( t

/ I2 g* p: k  y9 B; ?9 ]begin P_induction arriving
) U# |/ Z+ [0 j' u    if A_induct=1 then clone 1 load to P_pick1, c3 D& T$ u! B. Q
    else if A_induct=2 then clone 1 load to P_pick2& }5 O+ Y$ V. n- p, s0 x
        else clone 1 load to P_pick3- V0 c& z& T0 N
end
/ c" S; O$ c+ E0 O; p6 U2 x8 o6 i4 q& D( ?4 y3 O/ r/ W+ N8 H
begin P_pick1 arriving  v- Q# g8 S4 b# p' z  X
    set A_i to 1
" q7 o+ T0 b' m    move into Q_induct1
; j- E; H/ A& N7 m0 `    move into pickaisle.induct1
0 Z" S+ B; J/ {) E. _. [+ ^    while A_i<=30 do begin, @" p' Z# e8 a  C0 G
        travel to pickaisle.con(A_i)8 `, k: [# d9 i& @9 v0 J
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec- m( Q/ A7 ?4 I$ E
        else wait for 10 sec- J' n, S7 {" K5 z( F- z* }
        if A_i=A_leave then send to die
( P% h4 X$ H) v' a        else inc A_i by 17 S" h8 k6 o. U9 x
    end
% w$ P, d$ S  E* F- }0 z7 pend1 Z2 ]- y& y5 R& }. Z
8 z7 x; R% ~  ?% [8 b2 Y
begin P_pick2 arriving4 [9 Z" n. t8 |6 c8 ?7 w
    set A_i to 11; q7 Y) J" T7 W+ k% D
    move into Q_induct26 u: H3 c0 J0 |+ {$ \
    move into pickaisle.induct2" s5 Z$ z9 E: e- `7 u; u7 o
    while A_i<=30 do begin
& R( @: m1 D5 N2 Y/ m        travel to pickaisle.con(A_i)- G8 t$ @  {" U( S
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec: y) F& x% m3 ~2 U8 u4 |8 B
        else wait for 10 sec; e1 A' k9 u% k4 f; Z9 Z- [
        if A_i=A_leave then send to die
% ?" a6 ]+ K, _. W. c( r% k) J        else inc A_i by 1( N4 P4 T% U  B# B
    end
  v$ l9 O0 e+ e% e$ Yend
) k2 d' E' k+ i# _. `" O4 @, [% q3 E- G: Q* f: `0 o9 Z
begin P_pick3 arriving
* B4 Q1 x5 p( K' y    set A_i to 21
+ j6 H! r5 _! @0 x- K+ }    move into Q_induct3
6 L  [  A8 r$ I    move into pickaisle.induct3
: k" Z3 K8 ~! S* j+ g7 \- m% r+ v    while A_i<=30 do begin
7 }5 x2 {: h8 B8 P5 z; X/ P        travel to pickaisle.con(A_i)
) [" p- N$ \+ [' z/ e        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec. }+ j7 ?  S/ q, |7 A
        else wait for 10 sec
) S/ j" G8 @! K& j' V8 w% X        if A_i=A_leave then send to die3 q0 l& F0 u5 _- B8 f
        else inc A_i by 1% p. L6 u0 r+ d3 j1 L5 K: S
    end' i8 X, V# W0 L" D6 M; r
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是个什么东东?
) T+ {, {7 g7 j1 Wmove into后面,应该是一个station或control point,或者Queue/Container/Vehicle/Segment之类的东西。看你的报错信息,这个induct是个path么?
2 B; e8 K+ w1 G* b& O! W1 z  C2 z* h* ?7 V( i1 `
AutoMod Editor的语法报错信息,有时候会指在下一行,必要的时候要把上下几行都看一下。+ I$ k3 T" K* b  l

. p, X" S8 o7 T# d另外,你的几个P_pick是完全重复的,建议以如下方式修改,可以减少代码编写量:
! V0 R4 ]" @; h7 x: `8 ]6 Q. U1. 创建一个Process:名称为P_pick,number of Processes为3,其它按你的需要设置;删除那几个P_pick;+ t, e$ f6 O* F; a1 E
2. 创建一个Queue:名称为Q_induct,number of Queues为3,其他按你的需要设置并放置;删除那几个Q_induct;
  C5 Y0 Y4 {! M3 @6 F( _8 E' A3. 以如下方式改写P_induction和几个P_pick的arriving procedure的代码:
) U3 o7 B8 {' r2 Obegin P_induction arriving
0 v; U- R' t5 h6 l1 r; O    clone 1 load to P_pick(A_induct)8 t" d; y# y) U, w: h/ l9 o5 M
end最大的系" y1 v5 |2 s5 {' l- ^5 B0 r1 `
; a3 z. D& u- K' j0 _* ^
begin P_pick arriving0 N6 E3 Q! c; D$ \: ^* G
    set A_i to procindex * 10 + 17 M$ r! q! J" H3 M# S
    move into Q_induct(procindex)
: W7 \$ _/ T5 q1 W8 m( |. F: A    move into pickaisle.induct(procindex)
) Z4 c- T$ k( o. M" h7 D9 p- E2 Y6 ~    /*check the type of pickaisle.induct(i), for your last problem.*/
: C4 w- ^8 H7 Q! y) o! n+ c2 D% |$ w1 w% |
    while A_i<=30 do begin/ S" \) h  W* C0 U1 o( ^
        travel to pickaisle.con(A_i)
: H9 d- B- ~0 d- P. N        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
& |% X- s, \8 W/ _+ D        else wait for 10 sec- c- R( u* I$ N; \6 }
        if A_i=A_leave then send to die
1 }; w( W6 ^! e/ e# \6 ~) n' S        else inc A_i by 1
! o3 E1 s" c) e7 Z' E# S" O8 x    end* h. p  M7 W4 Y7 n/ C# T7 f
end' ?: P* c5 [1 {: q0 `0 t
/ H' O% Q  y, O3 ]3 i1 o3 Q/ a. u
其中的procindex为整形,代表当前process的序号。' P" n8 M  B: Q+ d( V/ Q
station和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-4-8 07:02 , Processed in 0.018563 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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