设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 15002|回复: 2

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

[复制链接]
发表于 2009-4-4 23:58:32 | 显示全部楼层 |阅读模式
5仿真币
想请版上的人帮我看看我这段code中的一个错误,我刚学Automod没多久,实在找不出错在什么地方了,谢谢1 J: Z5 J. h+ M' z) x$ `
* f  B9 X! L# \/ s; q8 G2 j6 D
我的问题是,在每个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中的数值,不知道会不会有什么不妥。
6 B1 }" q7 p- K4 C$ s1 k& Y" w
; v8 n9 l1 Y5 v3 ?9 N# q4 mbegin P_read arriving
2 \( c0 ~7 m' `; N    while 1=1 do begin
& @  D' n' e. Q$ W8 J, [        read A_tote from "data.txt" with delimiter "\n"
. N2 W4 b# e2 [- H        read A_time from "data.txt" with delimiter "\n"
/ [7 Y; b2 E) g0 T9 L        read A_leave from "data.txt" with delimiter "\n"
+ [9 ^- H; ?3 {9 U* U        read A_picks from "data.txt" with delimiter "\n"
, K7 x4 }( {# u1 f        set load type to A_tote
9 }$ j- F* g5 d* y7 A* A# C        if A_tote="tote 1" then set A_induct to 1
, E+ z0 y) U. _3 C1 T# _  r/ o/ k; }        else if A_tote="tote 2" then set A_induct to 2
- [1 ^. S- S' W" ]# ]            else set A_induct to 3   
, q; P2 ]% s8 _& i* B5 m        set A_i to 0
+ b$ [5 M. V4 R& o        clone 1 load to P_induction
$ l% L0 L8 n% l* _$ I; O& t        wait for A_time sec9 F1 K( i# v, k. Q& X" x4 G
    end
9 j! f9 x: B' }0 }3 ?: dend
" M* B( Y: \5 [/ j9 Y3 W, F
6 @, B/ S0 J* V! U1 cbegin P_induction arriving
; S6 C8 A6 x3 R1 k    if A_induct=1 then clone 1 load to P_pick1
  `! M5 o: b3 ^, G- n    else if A_induct=2 then clone 1 load to P_pick2
" Z( i6 N4 ?% l1 s        else clone 1 load to P_pick3
& U$ K# W0 }- R& e( `. qend
3 J8 `$ _1 N% e0 w0 L* K1 `+ ]! {" @, k4 f$ @9 p
begin P_pick1 arriving
- R3 J" ~$ r. a2 U1 n    set A_i to 1
! i  V2 \1 n( m' N7 i    move into Q_induct1
  ^/ K% [6 p/ @2 W    move into pickaisle.induct1- R+ U8 u9 w4 p0 C5 G7 D& ?# j( N& @
    while A_i<=30 do begin
: N. g' ?* W, P& Y% `: j' x        travel to pickaisle.con(A_i)
; z1 P0 R. M8 Z        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec3 d9 P6 o; S* Z- ~3 W
        else wait for 10 sec. x. q# l4 x& B2 @" Z8 M8 z9 I3 i
        if A_i=A_leave then send to die
# {, ]- W2 L% g; q  O) k0 h        else inc A_i by 1
7 G7 e' T( A) w( l$ p    end! f2 j5 W3 j" W$ B% J1 l7 C& ~( g
end
8 I" [9 g$ z1 W( L. X& g/ B8 ^5 D: v, b
begin P_pick2 arriving7 b( |( J$ N; ?: A' U* I! N
    set A_i to 11
9 N5 F( u; X4 q  ^; j/ u) Z* e3 K  C    move into Q_induct2
9 C2 h/ I2 T; w9 r    move into pickaisle.induct2
2 D. i9 t$ o# \7 L3 o/ r    while A_i<=30 do begin
9 ^3 ^4 \( M, T8 _        travel to pickaisle.con(A_i)3 o% U& L& p" k2 Q
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec: C) N9 `5 K! p
        else wait for 10 sec
' r0 M. h  N* }1 }/ J9 e8 H6 j* x& Q        if A_i=A_leave then send to die
  d2 n8 W3 r1 ?0 n6 F. i6 e        else inc A_i by 1
+ C# S& ~6 m" h/ p% a  d& h    end: Q1 R( X8 P/ e1 x2 ^
end
; m/ n$ y4 E( d7 @2 B  J& ]  r4 P6 G0 d& o& W2 o
begin P_pick3 arriving2 e( m- g3 b1 Z. ]% L
    set A_i to 21
7 h% S! M9 P, `: Q0 J7 H6 w    move into Q_induct38 C, t" p0 U7 V4 y1 m9 m0 z
    move into pickaisle.induct3
" A4 K0 O/ y* v9 o* @2 Q    while A_i<=30 do begin
9 b! A7 r2 V9 A) g* S. X6 k        travel to pickaisle.con(A_i)
* Q3 V, R. u* S+ @% m7 e        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec9 z- f2 O6 @; f" d8 y
        else wait for 10 sec7 h0 |& x8 A0 ]% P0 z! N
        if A_i=A_leave then send to die
2 j( k& }. ]1 D        else inc A_i by 15 e' \) K- D/ c* y  f; Z. [
    end
8 [( P1 Y5 a" }  h0 j# Jend

最佳答案

查看完整内容

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是个什么东东?: q% P' j& |. h" C+ i1 D' B2 T6 Y
move into后面,应该是一个station或control point,或者Queue/Container/Vehicle/Segment之类的东西。看你的报错信息,这个induct是个path么?- m' V4 p5 j" S4 ~/ O
2 f5 B$ r* |9 U3 o
AutoMod Editor的语法报错信息,有时候会指在下一行,必要的时候要把上下几行都看一下。$ J; y2 |1 `& F  r/ |7 W
* U6 |( X$ }$ T( I
另外,你的几个P_pick是完全重复的,建议以如下方式修改,可以减少代码编写量:* i  k" P0 P' M4 Y
1. 创建一个Process:名称为P_pick,number of Processes为3,其它按你的需要设置;删除那几个P_pick;
  i" i$ ~4 R( B  o3 @: J2. 创建一个Queue:名称为Q_induct,number of Queues为3,其他按你的需要设置并放置;删除那几个Q_induct;, N) O. Q3 R8 i; w
3. 以如下方式改写P_induction和几个P_pick的arriving procedure的代码:! B% I. \" ~' X8 e; [' G! d
begin P_induction arriving
) `6 |- J% c! V5 d    clone 1 load to P_pick(A_induct)) c7 x1 D4 _3 x$ \
end最大的系2 S# S3 V  `  P" d0 V5 |0 S+ y

( w5 S' w( E# b) T) k/ Q; ebegin P_pick arriving3 Q1 Q; g# h+ [- a$ d# x% s9 E
    set A_i to procindex * 10 + 1  M4 v0 \# F& H% O. m" l
    move into Q_induct(procindex), D+ k+ Z% p( g6 d
    move into pickaisle.induct(procindex)% d$ s0 v( e8 E+ L: _& Y" c$ e+ T
    /*check the type of pickaisle.induct(i), for your last problem.*/
! N) k5 }. Q' [0 C7 K+ B  q
  Y! a2 m" W* J  v" d    while A_i<=30 do begin- c; [/ V! ~: j2 C# N) V
        travel to pickaisle.con(A_i)4 h" b6 F0 `/ ~/ E: o/ M5 J2 X
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
$ @% P( Z5 c5 \        else wait for 10 sec( y5 n9 S( [/ e( `+ ?: l
        if A_i=A_leave then send to die
" l% W0 T! R& L9 F, M. [3 _# R        else inc A_i by 1
) x) Q" F4 t0 g% ^    end
) p5 ?$ |, h7 D) hend1 d& @* u# a# G

# R9 t  Y% ]+ E# D0 q其中的procindex为整形,代表当前process的序号。4 ~# |' {+ z- K* G+ Q) c2 I
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-8-3 11:06 , Processed in 0.013256 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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