设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13495|回复: 2

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

[复制链接]
发表于 2009-4-4 23:58:32 | 显示全部楼层 |阅读模式
5仿真币
想请版上的人帮我看看我这段code中的一个错误,我刚学Automod没多久,实在找不出错在什么地方了,谢谢
8 P5 K3 d( R4 n# k$ i  R/ p1 v- h+ F5 F1 `1 i2 ]1 K
我的问题是,在每个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中的数值,不知道会不会有什么不妥。
" {+ F6 n; T  `0 \* A( K; v" d, d! R: T2 k6 B9 x
begin P_read arriving
2 H4 v+ [* ^/ C9 o$ M    while 1=1 do begin: j+ u4 l2 K4 j0 W3 O  H4 e5 v- ~6 t
        read A_tote from "data.txt" with delimiter "\n"5 s4 e$ a' D9 K' J. J8 |! w
        read A_time from "data.txt" with delimiter "\n"
# z6 [9 [7 _9 r        read A_leave from "data.txt" with delimiter "\n"
$ f/ s% s- L8 K2 z/ G: C        read A_picks from "data.txt" with delimiter "\n"" k) ^: U, J: _
        set load type to A_tote2 ?2 m2 v- G& U7 s. c2 m
        if A_tote="tote 1" then set A_induct to 1
3 U6 U, t  R5 t# W$ q+ ^/ J+ W        else if A_tote="tote 2" then set A_induct to 2
: P/ \: ^- E! g5 O- x            else set A_induct to 3   
- y2 x. G& E  f+ V        set A_i to 05 U0 r: Q" S% x+ O* I' C7 V
        clone 1 load to P_induction
, c: j2 }$ M. X) Y; A6 G7 _        wait for A_time sec
& X% G* E5 x8 F& }. r# `% O, \    end
  d% |8 T" g7 ?+ B3 y$ A2 ?$ Kend' \0 |; K! {" t2 W0 t
5 w) {: _3 h( ?" c
begin P_induction arriving
. ?- J* p2 H8 h: a9 r; I5 y    if A_induct=1 then clone 1 load to P_pick16 X: O$ q6 j- ?$ H) \) b
    else if A_induct=2 then clone 1 load to P_pick2
! |2 _  E1 M# f) [7 W        else clone 1 load to P_pick3
" L* z; Q5 `) g' Xend
* w: M" L- H, c3 z& C) c: F* f
! N2 Q2 J/ u1 O0 a8 ^5 q, l$ lbegin P_pick1 arriving
4 R& C9 g; O8 N/ W( v    set A_i to 15 Y7 F" w; V7 T
    move into Q_induct1
1 \: o( \7 A1 l0 F6 F    move into pickaisle.induct13 m8 f" N; c! U. d0 n
    while A_i<=30 do begin+ B0 x8 c6 S& g" I' e3 r
        travel to pickaisle.con(A_i)" k, N2 ^1 P* b+ n7 [: H" K- ?# o
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec* r* v* o: L* o/ A$ |2 w) B
        else wait for 10 sec
( C1 {6 \  e7 _3 a) Z        if A_i=A_leave then send to die- h: p: K7 g" v6 i( ^
        else inc A_i by 17 n' R9 S2 p7 U* i; [* W; v) H: P" T
    end
8 w: \& `: h& p  Z$ s4 Bend
. W: U: R. a* K) `" z% @3 q# I8 p$ [* r) U
begin P_pick2 arriving* a" M1 E7 T" m. @
    set A_i to 11  u' m9 z$ U- x3 {( ~  ]* v# U
    move into Q_induct2
) U* O8 r  M% X5 R6 s  [    move into pickaisle.induct2
8 v  [" ]/ M( U( }# x    while A_i<=30 do begin. A" V0 s) }/ ]% q9 ]: x4 @0 ]
        travel to pickaisle.con(A_i)6 t& M: M. k1 V% F4 j
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec% f- w1 ~9 j( z, _
        else wait for 10 sec6 }3 }1 Z+ u$ w, g. U! s
        if A_i=A_leave then send to die
2 _$ w% u: X; l6 Z: \( m        else inc A_i by 1
* I/ S' S8 ^$ U* a' K! u, u    end9 h/ v( P4 Q3 v6 W
end
% I6 A, v" M% v/ M- J- ?7 i$ J* S& ]  \( p1 I/ p0 i3 k+ h
begin P_pick3 arriving5 A, w8 q* M4 g% h0 Y
    set A_i to 219 m$ n) u% Y9 u; k2 w  i0 c
    move into Q_induct3
9 ~! L4 R( s9 I: K. O# \8 D  m& [    move into pickaisle.induct3
6 Z; }% J/ h5 N( l7 q+ b# O5 w, b7 h    while A_i<=30 do begin
+ h/ q4 Z# ^3 z3 q        travel to pickaisle.con(A_i)
: J' s' {9 C: {( j7 ]- [        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
& V1 I7 U. g* K( ?1 M        else wait for 10 sec2 h4 o' Q! E  Z4 ~7 Y+ M
        if A_i=A_leave then send to die
; e* r% U1 L" n" L: r3 |! R' ~        else inc A_i by 1% g) o3 G4 Q$ u4 E9 p+ W
    end
$ k6 B2 F7 V4 z  ]6 U( F  j9 Mend

最佳答案

查看完整内容

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是个什么东东?4 e  j' g) o, [! Z, D
move into后面,应该是一个station或control point,或者Queue/Container/Vehicle/Segment之类的东西。看你的报错信息,这个induct是个path么?
# {/ [8 ?- ^/ @! v( M
8 S+ N9 s) v5 C5 d3 P) T2 CAutoMod Editor的语法报错信息,有时候会指在下一行,必要的时候要把上下几行都看一下。
3 y, k' o* @# G  w, v2 C! c: e' B7 Z2 ^( s* r. T% `/ a+ n1 H
另外,你的几个P_pick是完全重复的,建议以如下方式修改,可以减少代码编写量:
' @9 f' a& u( m' X" F8 o* n3 V1. 创建一个Process:名称为P_pick,number of Processes为3,其它按你的需要设置;删除那几个P_pick;+ h" q5 e. M8 ^; Y" {7 J' C0 b
2. 创建一个Queue:名称为Q_induct,number of Queues为3,其他按你的需要设置并放置;删除那几个Q_induct;- J* j# ]: g  p5 r! f: T; B# m
3. 以如下方式改写P_induction和几个P_pick的arriving procedure的代码:
7 t& `! I* n  _$ Z6 Xbegin P_induction arriving
1 U9 W& h+ ]8 E  p0 N: z- K& N. p    clone 1 load to P_pick(A_induct)" a" G0 K* H0 y' \
end最大的系
+ q2 R5 f% ~6 n# w. g
  I% y% H8 ^4 o5 a( s, cbegin P_pick arriving/ D" _6 o# x  p( r, ?* Y/ S
    set A_i to procindex * 10 + 1
4 R+ P  m+ c1 H" ?8 x; p    move into Q_induct(procindex)
5 J' |6 S- d. S% @9 q) n6 e    move into pickaisle.induct(procindex)
, Z, x% v8 ^  G- X( f    /*check the type of pickaisle.induct(i), for your last problem.*/
5 f8 b5 n* a) O0 j0 u. m8 t
0 e# o5 h3 U2 D; ?+ v    while A_i<=30 do begin
0 h2 _+ W1 i) w$ D- H        travel to pickaisle.con(A_i)6 E+ k7 v1 f, ]! ]) K7 ]8 z; P" J
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec: h. \( y% ]( u* t
        else wait for 10 sec
3 e. ^. |  n, W4 b& j9 _8 N+ U0 Q* _        if A_i=A_leave then send to die
8 R! M3 M/ I3 g        else inc A_i by 1/ |& `, F1 Z$ V% F
    end/ t* }% i3 C5 {7 \" e% P# K$ J2 b
end: k; \0 i9 @5 p+ A, [- Y

2 s" _6 N: F9 Y0 |8 L, J+ G) Q其中的procindex为整形,代表当前process的序号。% t5 }& d7 k- h& M4 S+ E0 K
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-17 19:14 , Processed in 0.015414 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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