设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13488|回复: 2

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

[复制链接]
发表于 2009-4-4 23:58:32 | 显示全部楼层 |阅读模式
5仿真币
想请版上的人帮我看看我这段code中的一个错误,我刚学Automod没多久,实在找不出错在什么地方了,谢谢
# K6 E- {/ x- y% c7 q9 w- y$ e2 z8 M$ j: q/ f/ q! E
我的问题是,在每个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中的数值,不知道会不会有什么不妥。! X( g- X( [8 P% N3 [; ?! e8 o

! a6 A2 y" S% j( S8 G/ u2 [; {begin P_read arriving- V% ]; v5 U1 E+ G
    while 1=1 do begin
; B; U0 `6 l1 L( v% x        read A_tote from "data.txt" with delimiter "\n"* Z/ T" B$ N1 M2 v; {$ f+ d
        read A_time from "data.txt" with delimiter "\n"
  _3 C. m4 S- o. p/ }& u        read A_leave from "data.txt" with delimiter "\n"
, {2 b3 u7 S7 f0 [3 o4 `  @8 c. G. U        read A_picks from "data.txt" with delimiter "\n"
! A2 s4 Q9 h/ k5 ^6 v3 q        set load type to A_tote3 l1 R' r0 S& J, l* b" J; P! H" n
        if A_tote="tote 1" then set A_induct to 1
$ w$ `2 K/ q. D( U        else if A_tote="tote 2" then set A_induct to 2
( K+ B* O5 @" K! a: k" P( S+ K            else set A_induct to 3    9 r9 \* f: k  _( v& e+ p; k2 ^
        set A_i to 0
& H' f" H0 D0 D& x5 F1 I        clone 1 load to P_induction
/ J* o; K% G( v; q' \        wait for A_time sec
: @6 w  k9 b5 U4 L" F; p    end! K; p0 }  H; m+ }7 {+ J6 p
end( ^# `1 r* q$ B; D# V& Y5 M
9 J' M' g$ p7 `7 M
begin P_induction arriving
$ T9 M3 X  J" Q. i. S/ d    if A_induct=1 then clone 1 load to P_pick1
. _$ d4 ^* P: j, F3 v. D    else if A_induct=2 then clone 1 load to P_pick23 E$ r2 w/ H: A/ ]
        else clone 1 load to P_pick3
" a) ~+ \5 N4 D2 |4 ^  _6 y2 Rend  J8 x! J2 x8 B1 @* r& o0 L9 o5 i
  F: x5 W3 ]* q0 W/ G  A" x" m% r  O
begin P_pick1 arriving- N( i4 [, {. L0 d  j
    set A_i to 1
; t/ o$ u( F# Q8 i, e' z* K    move into Q_induct14 C. l' Y" ?% p# G
    move into pickaisle.induct1" ]6 e" A1 p# |# q# N
    while A_i<=30 do begin7 Z+ W( Q7 q3 V# J: ~% S+ A
        travel to pickaisle.con(A_i)
8 b# ~( `$ Z3 L' @4 h& d' l        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec" n8 Y& V+ W* @4 G. E
        else wait for 10 sec% S. f: W: @" S% K
        if A_i=A_leave then send to die
, C5 X% o) i& J' q" `        else inc A_i by 1
3 P3 i( k) ~3 r% G    end" G1 T- N/ p. r% w+ M$ _3 t9 ~' }! s
end- W1 ^; k, G' g: U  b: l

" W3 ?0 J% F# p3 z' S& n9 ~begin P_pick2 arriving
/ c8 v: o# J3 C- h7 {! r( Q    set A_i to 11+ M$ Q7 g) i* D" A# I# r: h4 T/ A
    move into Q_induct2" S) p! r" S; r
    move into pickaisle.induct28 f) p$ J' ~8 y: j( t4 \: k
    while A_i<=30 do begin
* z8 Q0 k0 c9 v2 ^6 ^        travel to pickaisle.con(A_i)) i/ c! M+ a( R
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec2 {# |2 I  K$ T. n* F
        else wait for 10 sec
0 D1 a; G9 w$ B( ^2 b        if A_i=A_leave then send to die6 P% S9 y0 {# [% f3 k) m
        else inc A_i by 19 t5 o4 H! t; J
    end; C/ D5 N# W; s' F! S0 W. P
end
6 q9 F8 F2 p" `4 S/ }% A1 z+ N. @6 N* d: e; s8 w! e0 x
begin P_pick3 arriving  O, X, a4 S$ ?5 J8 c) o$ p! `
    set A_i to 21& _/ d. k* {( y, n1 d
    move into Q_induct38 c; m' m5 Y% M4 |
    move into pickaisle.induct3
4 M% N2 u( l0 ]3 a+ z( z* O    while A_i<=30 do begin
7 p" k4 S, W- b5 p( g( l        travel to pickaisle.con(A_i)5 N  n0 T% W. y& y* E
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec5 p4 F# W" T* w4 @) `
        else wait for 10 sec
& x1 `% ]) O4 z( @  {        if A_i=A_leave then send to die: M2 U$ m: U. U1 R# C5 T% O7 i
        else inc A_i by 1
0 |: B& ^  a/ j4 P: S    end
1 G. Q1 d9 D0 G, ^end

最佳答案

查看完整内容

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是个什么东东?
3 |6 ?  V- S8 Smove into后面,应该是一个station或control point,或者Queue/Container/Vehicle/Segment之类的东西。看你的报错信息,这个induct是个path么?/ @- |, N  h2 K: ]: N7 o5 Y4 _) J5 I
* D+ R3 a# Q, Z" [( r5 J
AutoMod Editor的语法报错信息,有时候会指在下一行,必要的时候要把上下几行都看一下。; X- G8 A  M5 `9 c3 A  I
# ]( ~+ T5 r7 `0 {+ Y+ N8 M
另外,你的几个P_pick是完全重复的,建议以如下方式修改,可以减少代码编写量:: c% d, ?& C4 N, S
1. 创建一个Process:名称为P_pick,number of Processes为3,其它按你的需要设置;删除那几个P_pick;6 F' d7 o/ I% N7 b# K, `7 q
2. 创建一个Queue:名称为Q_induct,number of Queues为3,其他按你的需要设置并放置;删除那几个Q_induct;
) D$ I6 x; r% ?' X# o; c: O3. 以如下方式改写P_induction和几个P_pick的arriving procedure的代码:$ l, p  e2 D2 k! t& L3 S5 m4 Z2 K0 J  x
begin P_induction arriving' w) A* A4 w& ?8 g. {( I
    clone 1 load to P_pick(A_induct)6 Z$ v9 K1 W* _) |/ K" |
end最大的系
2 T5 B9 Z1 J9 X/ L9 L. e
9 N3 o7 a: s' Q! L0 C4 dbegin P_pick arriving1 q$ g' F4 G* f- K: l) x& I3 n1 q
    set A_i to procindex * 10 + 18 {% H9 `8 z. Q, x( Z
    move into Q_induct(procindex)* u: ~. m6 l. v" j& V2 R9 ^
    move into pickaisle.induct(procindex)4 Z6 _9 F3 R. z( _: {; i* `. n
    /*check the type of pickaisle.induct(i), for your last problem.*/
$ ]( w: q& R$ S  J! z. S3 L+ v& H! O: J' B
    while A_i<=30 do begin
+ r; E$ R+ q4 t4 v" h) g" `' B        travel to pickaisle.con(A_i)
+ @0 V; x- D9 W2 v        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec* ?9 t  u$ |2 w: s
        else wait for 10 sec3 R4 t# v5 R" Q3 B$ W  Y
        if A_i=A_leave then send to die  ?5 u$ I& R& e* e: @
        else inc A_i by 1( w6 d0 ^: v# n1 `6 `9 `
    end
, \/ {' i  m5 `1 z$ ]4 n: Tend
: N3 y& s- t3 v8 `3 l$ k  P% a3 k! t; i
其中的procindex为整形,代表当前process的序号。
/ V7 C/ s+ r: d9 `' n4 p  {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 14:31 , Processed in 0.019475 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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