设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 15288|回复: 2

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

[复制链接]
发表于 2009-4-4 23:58:32 | 显示全部楼层 |阅读模式
5仿真币
想请版上的人帮我看看我这段code中的一个错误,我刚学Automod没多久,实在找不出错在什么地方了,谢谢- t5 ~0 L; n  z8 O" l

/ P) y) b0 b# Q我的问题是,在每个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中的数值,不知道会不会有什么不妥。- Z0 a' ^; m" k, h1 k5 z

0 X, Y* I6 n7 B. Q1 S+ a3 h+ L1 vbegin P_read arriving7 m8 [' b0 `# W
    while 1=1 do begin
* k# Y" I. ?7 |6 j% m- A( x! [        read A_tote from "data.txt" with delimiter "\n"6 e+ \1 {5 L4 D' h; @: w
        read A_time from "data.txt" with delimiter "\n"
  ]( L( O: ^3 Q# I- C5 c  Y        read A_leave from "data.txt" with delimiter "\n"6 o# X, u8 _6 ^7 Q1 ^3 ^
        read A_picks from "data.txt" with delimiter "\n"% A* K5 z. Z% p4 R: X) |9 B
        set load type to A_tote
, v2 U1 \  z/ m- D, M# {        if A_tote="tote 1" then set A_induct to 1) D) O8 L/ n/ {7 z8 k1 @
        else if A_tote="tote 2" then set A_induct to 2& y0 d' @" D: z+ E) N
            else set A_induct to 3   
/ e) s" h- B# I6 H; V        set A_i to 0: W6 f5 o, \# W9 A+ P3 `) H
        clone 1 load to P_induction+ D4 }5 E/ ^# E- e( b2 z& g; n
        wait for A_time sec
% k  c2 X: c3 J; B9 N5 Z9 E" k    end/ q# k- C0 T. o
end/ y' T1 h5 m( Y4 ^. t3 l7 z
3 h, L! l0 c* x& w' B# r4 s
begin P_induction arriving
- ^: X2 p* {0 A* b. v    if A_induct=1 then clone 1 load to P_pick1
4 Y1 J  X4 y+ A/ U& k! R    else if A_induct=2 then clone 1 load to P_pick25 L; J2 p$ Z9 X1 l: ~4 Y- x6 q
        else clone 1 load to P_pick3
) T+ w9 _0 L4 e! X& _3 I" a& lend
: l6 w$ `1 T  K  ]1 a, O0 V' J: z$ `" ~
begin P_pick1 arriving
6 R0 D. f/ t7 h4 {1 A# e% q    set A_i to 1  f8 X( i: v5 O: ]2 Y
    move into Q_induct1
( e3 H+ H1 ~' u7 e5 j0 _: y- f    move into pickaisle.induct1
/ }; f* C" `! L7 @* o8 |4 g; q. Q    while A_i<=30 do begin; r0 z! L% v& k/ L' @4 T
        travel to pickaisle.con(A_i), D' {: f: L% w0 z  F# ]+ p$ h& ]9 a. j
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
/ X, ^: U  ]4 l! w, X3 N) |" [        else wait for 10 sec5 }) c$ |; w# }9 u8 N) p
        if A_i=A_leave then send to die
+ s9 Q8 H4 Y( ^9 h: v6 A        else inc A_i by 1
3 K! B4 e* r) {# m    end$ i8 x3 W; k& A! P% A1 |4 b
end
2 i. O, f, X8 w2 s# r! G1 G  O- o3 T- V" ~
begin P_pick2 arriving4 C% Z5 o0 _! i' _% I$ o: `* ?' V
    set A_i to 11
. ?: Z' ]3 @  t    move into Q_induct2
1 a8 }$ S" G- s0 z8 I5 t7 i8 d! [    move into pickaisle.induct22 h9 c5 b& I! D) l
    while A_i<=30 do begin
- K2 i7 E6 l& d: C! ~        travel to pickaisle.con(A_i)
9 a. Z2 G7 K7 ^/ ^8 j2 l+ N* a: d        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec0 L; {7 p; u6 i  M  q( T7 G
        else wait for 10 sec0 K5 x# o1 Q- c5 r: k' r
        if A_i=A_leave then send to die
9 G# y# z1 V& ?! @2 K# c' E+ N# c        else inc A_i by 1: E; L) o8 J3 `% N! V$ `% o; x8 `
    end; \7 Q8 q. |$ Z& F0 H
end) Y; {9 d, A: e/ O, O8 ~" k3 Y
: J& \) V$ K  r
begin P_pick3 arriving
6 r% x! Z! N, {0 {    set A_i to 21
5 C* @+ m1 d' z  @( [( o' h8 d0 u    move into Q_induct3
" a8 g0 \3 ~- l4 o    move into pickaisle.induct3
' ^4 w4 D+ E+ g  v, u    while A_i<=30 do begin- N* z) M; Q; r* U7 Z
        travel to pickaisle.con(A_i), l. b- e3 E6 \" {
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec, a6 J* O% b% J8 p3 s# c
        else wait for 10 sec& m6 M  P( f# A7 B) Z0 N
        if A_i=A_leave then send to die
: \  ]! N! `) [1 j  y: O5 f        else inc A_i by 1
9 A) X+ E4 n& X; \! I    end
% ]% }) ~$ e3 W8 J4 q2 X6 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是个什么东东?. O0 B' f" i0 @+ z$ ~# s( ?
move into后面,应该是一个station或control point,或者Queue/Container/Vehicle/Segment之类的东西。看你的报错信息,这个induct是个path么?
1 L# f1 I; ]& e8 x: _7 L/ ?7 ?$ a- _! v- K3 [0 M
AutoMod Editor的语法报错信息,有时候会指在下一行,必要的时候要把上下几行都看一下。6 @  a$ b# u4 ~  z6 `+ x
2 Z9 n1 q4 B# i
另外,你的几个P_pick是完全重复的,建议以如下方式修改,可以减少代码编写量:6 c5 l0 a- z" }! f- V
1. 创建一个Process:名称为P_pick,number of Processes为3,其它按你的需要设置;删除那几个P_pick;2 o2 N/ }) r. R1 [: N6 P6 E! g
2. 创建一个Queue:名称为Q_induct,number of Queues为3,其他按你的需要设置并放置;删除那几个Q_induct;8 n6 E3 r7 m2 p9 R" i
3. 以如下方式改写P_induction和几个P_pick的arriving procedure的代码:
$ n, H- r" {+ W* cbegin P_induction arriving
$ e  X; V- D# j: ?9 T' P    clone 1 load to P_pick(A_induct)
/ D3 ^1 a3 k) x) Pend最大的系& g5 D6 w0 |2 M- @1 N& G
* u) ]9 N3 I' n7 E1 |+ y
begin P_pick arriving* ~5 t! N6 P- w  M5 ]
    set A_i to procindex * 10 + 1* A( }& _! R" K1 _9 o+ a% V
    move into Q_induct(procindex)
- a0 k/ x5 y$ w5 ^1 H    move into pickaisle.induct(procindex)/ n% l4 S6 S* B: c- U! D6 w
    /*check the type of pickaisle.induct(i), for your last problem.*/. u# H, `& j* w+ y3 r2 z

# C7 S& f1 A1 S1 z    while A_i<=30 do begin% i) I2 N; H) g9 I- ^* s3 C8 U2 ]
        travel to pickaisle.con(A_i)1 n1 e4 R; c' ~- J
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
8 h! i- a& a( P! m3 @+ s+ v        else wait for 10 sec& ~: c5 ^; n* k% b4 K' ]( s8 u7 t: r
        if A_i=A_leave then send to die, B/ l" F7 \7 c0 Y9 `5 ]
        else inc A_i by 1
9 e- ~2 m" h$ P' `    end; }  Z: h! A3 a3 ^' U* h
end
2 \( E+ z* l& T+ j0 s' F% Y  v
+ X' A, Q- p9 F/ h  D其中的procindex为整形,代表当前process的序号。
$ ]3 |! {: T' N0 f4 g0 [$ hstation和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-30 10:22 , Processed in 0.020285 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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