设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14170|回复: 2

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

[复制链接]
发表于 2009-4-4 23:58:32 | 显示全部楼层 |阅读模式
5仿真币
想请版上的人帮我看看我这段code中的一个错误,我刚学Automod没多久,实在找不出错在什么地方了,谢谢& `6 j  k" [! m) B$ i' o0 N
- `' m7 D* ~/ J6 {
我的问题是,在每个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中的数值,不知道会不会有什么不妥。
" s' F4 g& L! I& J, y- Z% \' z1 ?( n0 g" S$ C. r7 s
begin P_read arriving
7 `5 r% s3 v7 `. D! [- N2 S    while 1=1 do begin
8 J- X! U* A4 [: V' }7 Q4 i! ~% f* ]        read A_tote from "data.txt" with delimiter "\n"( D: O  [' z- Q: f
        read A_time from "data.txt" with delimiter "\n"4 b/ p3 a% n4 j. h. y/ d- r
        read A_leave from "data.txt" with delimiter "\n". ~3 O; S! W4 B+ d$ S
        read A_picks from "data.txt" with delimiter "\n"& z9 J( N6 E- r% N3 f1 @" G
        set load type to A_tote
/ l8 `# H% j1 H1 V        if A_tote="tote 1" then set A_induct to 1# \# U* V: u$ Q4 R( h$ Z4 e4 c. i2 B
        else if A_tote="tote 2" then set A_induct to 22 w( Z5 ]! ~6 `; c3 s
            else set A_induct to 3   
0 A8 V: W; Z6 Q; I8 k, J        set A_i to 01 ?4 P. R7 ?3 C0 x, T$ B' u
        clone 1 load to P_induction8 X8 I) T: j& I7 x6 r, q8 k
        wait for A_time sec: g5 l* n2 ^  Q8 s" d* }
    end, a3 F% _) I, r& c' B' ]
end
6 m5 X8 `( J% ]7 [% i8 v( b6 F
7 a, a7 Z5 m7 ^2 `+ s. _begin P_induction arriving( P- J5 x6 d! O7 a" z
    if A_induct=1 then clone 1 load to P_pick1
7 N% [4 _5 l3 p# n1 o& ?    else if A_induct=2 then clone 1 load to P_pick2% J4 [& _1 g+ R
        else clone 1 load to P_pick3
% d" h" g9 J* h& C! A* rend5 Z( E% T' U$ u! k

+ ^- Y) Y1 n" d- }begin P_pick1 arriving
: s/ n, p& Q* i( B  }  {2 r    set A_i to 1/ M! K- s- w! q6 Y, V8 l
    move into Q_induct1* K; C# b" d- A$ X+ E
    move into pickaisle.induct1, ?: ~- T" E& K& X4 Q! M
    while A_i<=30 do begin& ?, e$ U# ~. i6 {# T
        travel to pickaisle.con(A_i)
8 p/ v. x. v4 d9 E2 {6 j+ S        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
; w, U5 E7 K8 K+ g* h  T        else wait for 10 sec  R+ U% Y8 b3 P& @, I9 [
        if A_i=A_leave then send to die/ f- K+ Y- v- J0 Y
        else inc A_i by 1; R) F8 O  }" P9 `' ~
    end* \9 m$ f1 i. v8 {
end) U4 G5 T" m  Z7 E  u$ Z5 F) A
, q. N, d- S; B( y% F
begin P_pick2 arriving
! Y; M# s! s2 c9 n" D    set A_i to 11( l! H0 U8 @) |) U* x$ N9 E; X7 Z: L
    move into Q_induct2
, T7 f# K3 n$ _& b! q1 c$ @# h; S    move into pickaisle.induct2
  f, c4 O* }2 i    while A_i<=30 do begin
' K/ c" a: \% R, ^& e2 [5 R) f        travel to pickaisle.con(A_i)
7 ^) x+ l; `( t, ~        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
' e8 B! R& `. |! ^) C        else wait for 10 sec
* {: {& q& M6 h        if A_i=A_leave then send to die
9 _+ n# m5 {8 M& v4 C8 J& e8 R5 ]: C        else inc A_i by 1* U0 p# l6 N6 U' D
    end7 g) W- L* p1 R# N1 \8 |; u7 T4 C
end
4 C/ F! J  t( y: a: h5 @% s! I0 X: |' J: }9 W/ ~; R
begin P_pick3 arriving
! n+ Z7 v; A$ V% L& U    set A_i to 21. c6 [- z" \; D1 P) m' z
    move into Q_induct34 R& X4 Q3 Y' o2 _
    move into pickaisle.induct3
' |: Q2 S% e5 @8 k    while A_i<=30 do begin
' p7 u* ^! Y1 `" F9 j4 L. }        travel to pickaisle.con(A_i), |" w- c3 V$ @4 @
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
2 K5 [, H: y7 V- j! W' d        else wait for 10 sec7 d* ?$ s, a$ F! v
        if A_i=A_leave then send to die" F0 V. @4 i- s- Q5 ~
        else inc A_i by 1
, K1 b4 [% A5 O6 |& S) a    end
5 Z% g& c/ {  ?. S/ V9 b- Send

最佳答案

查看完整内容

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是个什么东东?
7 E- D( K: v- _/ Cmove into后面,应该是一个station或control point,或者Queue/Container/Vehicle/Segment之类的东西。看你的报错信息,这个induct是个path么?
  c4 C, W/ u% _) ^! g3 K* w' @; H: ^
% o! _" o+ u5 ~$ DAutoMod Editor的语法报错信息,有时候会指在下一行,必要的时候要把上下几行都看一下。
% {7 q8 x0 \% J8 E4 Q7 U. @; N# G3 c
另外,你的几个P_pick是完全重复的,建议以如下方式修改,可以减少代码编写量:
+ V* R5 T3 W: N* t4 w9 K* a1. 创建一个Process:名称为P_pick,number of Processes为3,其它按你的需要设置;删除那几个P_pick;
6 R) j, h* L1 H7 i2. 创建一个Queue:名称为Q_induct,number of Queues为3,其他按你的需要设置并放置;删除那几个Q_induct;
5 H; f5 t0 {* |1 ?; v3. 以如下方式改写P_induction和几个P_pick的arriving procedure的代码:
0 u! m& J) {0 y" t7 P7 {0 Gbegin P_induction arriving' k" P7 \! s9 v: {
    clone 1 load to P_pick(A_induct)) H8 G8 ]. m( J# g! _" y
end最大的系: x/ @9 J: k% [; L' I1 B0 X* [/ w

! T- v! J- O: K! K. o$ Ibegin P_pick arriving7 \; w! Y1 B7 v9 }- c
    set A_i to procindex * 10 + 17 d5 O+ }% \4 z( d% C7 J5 n' P' D
    move into Q_induct(procindex)# W3 S) ]9 J) ?2 j5 ~8 r) Q
    move into pickaisle.induct(procindex)
7 L# T6 f3 v# S    /*check the type of pickaisle.induct(i), for your last problem.*/
# o+ {6 S) e, ]3 i; w7 G3 d1 T4 r4 p( b
    while A_i<=30 do begin
  l. I% j/ {: N6 [0 a- M        travel to pickaisle.con(A_i)+ Q2 @* y# `8 R* c  d" ^+ d
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec, B- \) k3 U/ C2 Q
        else wait for 10 sec
) S8 _5 T4 S* r$ j$ ?) r+ E2 x        if A_i=A_leave then send to die8 ]/ R5 _0 R1 z  r: O# U$ Q$ D
        else inc A_i by 1
' U$ z, u; \" O5 Y4 i! w  }# g    end
* w3 G: n1 W1 I+ P3 i. {6 H- mend
$ `6 L0 P2 U+ H' w6 U/ I  ~9 y& P  I! z$ D. S% d& [
其中的procindex为整形,代表当前process的序号。
& i6 ?3 G2 ?' C, ], 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-6-17 07:25 , Processed in 0.014646 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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