设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11948|回复: 2

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

[复制链接]
发表于 2009-4-4 23:58:32 | 显示全部楼层 |阅读模式
5仿真币
想请版上的人帮我看看我这段code中的一个错误,我刚学Automod没多久,实在找不出错在什么地方了,谢谢
2 a" C& Q0 D# L3 F, t
. Z& i5 t3 o$ F# T' n/ j我的问题是,在每个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中的数值,不知道会不会有什么不妥。
+ }& [4 Y# @0 b& z
! Y5 ]. j+ |" y& ~begin P_read arriving7 I. `: A; Y+ e3 e8 f. q  N
    while 1=1 do begin
+ v& _$ |$ h, ^' g! ^6 w: u        read A_tote from "data.txt" with delimiter "\n"
/ c. ^( i  i$ s$ l7 t. D# r        read A_time from "data.txt" with delimiter "\n"
2 j! e, H/ i; p* J0 b        read A_leave from "data.txt" with delimiter "\n"  M) n+ ?; [0 T  V+ B/ V
        read A_picks from "data.txt" with delimiter "\n"; e4 ~1 k- M  Q1 p# I% k1 N
        set load type to A_tote
5 m8 E" _0 G& ]' _( v        if A_tote="tote 1" then set A_induct to 19 |: k, f# O7 H
        else if A_tote="tote 2" then set A_induct to 2
$ ^! @9 M& a0 R5 w  G' G            else set A_induct to 3    9 j6 a( R0 ^- _8 f$ z, g  u) v
        set A_i to 0% _, _* h1 [* Q7 h3 f' l
        clone 1 load to P_induction
% B2 L7 }/ c4 S  h) g4 O8 R/ c# E        wait for A_time sec
4 Q5 `4 R8 D: E) O  |/ R$ ?    end
* S" s* v* D6 W4 J( Uend/ q2 p: O2 t1 i! U- L6 z) }7 t
9 J9 ~1 L% _- i% a7 W$ R
begin P_induction arriving
' G1 s7 F4 D8 ]: \. Y% z# l* j/ W) ~8 z    if A_induct=1 then clone 1 load to P_pick1
3 J/ I% |3 Y. O  z# F  ]    else if A_induct=2 then clone 1 load to P_pick2
: u1 Q2 _4 W& o+ r0 h, `3 G        else clone 1 load to P_pick3
( S9 A/ l/ ^8 C- Wend  `* o% @0 e" A" a% Z

( C8 A% x4 l8 j% f6 P+ Pbegin P_pick1 arriving
0 q1 Z, q/ [& W0 ~0 Y" @! B3 p    set A_i to 1* E) E8 I6 \- u
    move into Q_induct1; q/ ~2 c8 b) r# K
    move into pickaisle.induct1
: G( I  @1 g9 U( W( w) p    while A_i<=30 do begin6 @3 ~* ^7 X7 P! F+ f
        travel to pickaisle.con(A_i)
5 }+ M1 m% S5 e# f: ~        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec& h  u1 v, c/ c
        else wait for 10 sec8 d$ O$ \# M2 G
        if A_i=A_leave then send to die
$ `: j! ^0 A$ E; O7 p2 [+ Q        else inc A_i by 1+ T9 E; v  v' B! f' g
    end! p$ C9 c+ J" o2 K! p9 O: C9 B
end
/ m) T/ b3 q# I% Z
0 M  [* N- h4 R0 x: U) ]begin P_pick2 arriving  @# w4 M$ p3 C1 ~! D: N. R
    set A_i to 11; _6 Y; f! B6 {$ I- T5 S
    move into Q_induct27 h+ x, i& e2 J
    move into pickaisle.induct2/ v- b( l' U! O" o( r. {/ B
    while A_i<=30 do begin
" f4 s# _& D' Q& @/ T5 m9 }        travel to pickaisle.con(A_i)1 @3 z1 p" a. ?. p! f( i8 {
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec+ L. Y& m' [. o4 o4 h' R
        else wait for 10 sec
* J3 }. L% v6 x: K1 {0 k        if A_i=A_leave then send to die3 @& {" i8 b: ]- [% m6 _
        else inc A_i by 1
9 i$ N) y7 L1 Z  J    end) S$ y) _. h/ v$ `$ U# u5 Y+ L
end
) d# p4 V, J4 @) m+ j# L3 {- A+ y. X) P7 A: N# f8 [/ o
begin P_pick3 arriving
3 G2 P4 I) ~! p    set A_i to 21
4 E) {2 i( \. x, H    move into Q_induct3% ]" e0 U/ G  v; D5 G
    move into pickaisle.induct3. f" I9 z2 @$ c  s8 D
    while A_i<=30 do begin
0 N8 t* E- L4 R: C% C: k        travel to pickaisle.con(A_i)# L6 \, p+ V7 b6 ?
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
' q5 r6 d& I8 d+ v- A/ \: I* c        else wait for 10 sec8 h9 r3 f# p7 T$ a' L% M
        if A_i=A_leave then send to die, x$ z" e" V/ u. |0 R$ p
        else inc A_i by 12 j4 l& \! t+ W" {
    end
& c/ e0 d/ U& x9 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是个什么东东?" T! y' k0 o* X* r+ D7 O0 B
move into后面,应该是一个station或control point,或者Queue/Container/Vehicle/Segment之类的东西。看你的报错信息,这个induct是个path么?/ d0 N. q/ K+ W5 m
! Z" W; b; s0 @- H
AutoMod Editor的语法报错信息,有时候会指在下一行,必要的时候要把上下几行都看一下。
9 A6 l4 H  F: E2 `( M3 G( `  W5 B9 N( `" A( ]( L) Z8 ^  Q
另外,你的几个P_pick是完全重复的,建议以如下方式修改,可以减少代码编写量:
$ [4 j3 J, T. m1. 创建一个Process:名称为P_pick,number of Processes为3,其它按你的需要设置;删除那几个P_pick;6 T8 v9 P2 h! @/ Y7 t
2. 创建一个Queue:名称为Q_induct,number of Queues为3,其他按你的需要设置并放置;删除那几个Q_induct;' U/ x2 `8 f0 J/ v* u+ k0 }' G# t- S
3. 以如下方式改写P_induction和几个P_pick的arriving procedure的代码:
" Z) E7 A5 L1 m6 zbegin P_induction arriving
5 l8 D( r; s& p3 k6 b) ^    clone 1 load to P_pick(A_induct)
/ q) Y5 e& p  E1 D7 Z  P: N% }( ?6 ^end最大的系
! T( k. e2 _+ ?7 P" e3 J) F& S/ W& X! W
begin P_pick arriving
" K! V/ e! L1 k% R    set A_i to procindex * 10 + 14 u, o" q/ Y8 j' @
    move into Q_induct(procindex)  s1 a5 i- `# U  c. A9 S4 L0 F' b
    move into pickaisle.induct(procindex)3 Q7 I2 f% F+ r/ p
    /*check the type of pickaisle.induct(i), for your last problem.*/
; S4 _8 G* y" |2 }4 s: `! L* L: x" _
    while A_i<=30 do begin% L+ k) A  P* Y) w7 K& w
        travel to pickaisle.con(A_i), K1 b5 N2 z0 ?9 z
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec0 g5 L1 m3 g2 [9 K* b
        else wait for 10 sec
; u$ q4 |2 }  d        if A_i=A_leave then send to die
$ C' E  ], ?( [( s2 j% d/ ?: b        else inc A_i by 1
7 D8 f" O' q% P) L$ }) o    end
4 z( g# Q5 Y9 [' x; u$ v5 jend  v5 j# c5 Y7 K! L$ H
* ~$ z; ~5 \+ l
其中的procindex为整形,代表当前process的序号。$ e% C' e' V" o' {0 v4 Z
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, 2025-12-17 04:58 , Processed in 0.021765 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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