设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13783|回复: 2

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

[复制链接]
发表于 2009-4-4 23:58:32 | 显示全部楼层 |阅读模式
5仿真币
想请版上的人帮我看看我这段code中的一个错误,我刚学Automod没多久,实在找不出错在什么地方了,谢谢8 ]8 M: }. H" K- b5 h# D9 P) f

7 b7 W$ I2 P2 r8 Y( Q: A; a我的问题是,在每个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中的数值,不知道会不会有什么不妥。! @1 f& G8 [! n3 ~/ i4 v
# X* ?+ S" Q) W
begin P_read arriving9 p& A3 o: i4 \" h) `# N8 q" `
    while 1=1 do begin
3 L: F1 c7 u3 k) ?% ^        read A_tote from "data.txt" with delimiter "\n"
- |" E' x. l+ @% o        read A_time from "data.txt" with delimiter "\n"+ ^5 P' n- a( l# P: m, o  I
        read A_leave from "data.txt" with delimiter "\n"
6 N' _/ }! m3 s0 G        read A_picks from "data.txt" with delimiter "\n"
* M% \. p  Q4 W' G$ o  A" C8 n/ C  [        set load type to A_tote: p# Y$ a1 h2 P( S0 w9 O
        if A_tote="tote 1" then set A_induct to 1
# B$ u( Q: ?, Z, n6 ?3 S4 M        else if A_tote="tote 2" then set A_induct to 2, A2 i+ i2 i* j
            else set A_induct to 3    + J5 \+ @3 Q6 U' l; d/ j
        set A_i to 0! F2 K+ o* [: V' O1 l' N( [3 m
        clone 1 load to P_induction
+ o: U; w  o( |# M' y4 [  e5 s        wait for A_time sec
6 M' T& Y" u5 A) F% d! L. |) k5 t    end
( H  J' J: ~; b0 {7 b' bend1 C' k2 [: B* o% ]$ k

  w* {) X5 Z3 s& H; n6 v7 Wbegin P_induction arriving& O0 M1 t8 p) l: H- [3 k! W& H" Q
    if A_induct=1 then clone 1 load to P_pick1
+ s* L! J1 H, }! `* o) J: ]    else if A_induct=2 then clone 1 load to P_pick2
1 p; n/ i/ N6 l/ v  \4 n& s" r        else clone 1 load to P_pick3
4 L1 G( o* Z( x, B' Mend
8 q9 v+ ~2 w  B* K# e
4 s( F5 V2 a4 \; [$ N7 d9 o" z6 nbegin P_pick1 arriving
+ U4 u' Q/ V  X/ h3 t8 @    set A_i to 1% E0 l( ?) X$ J& y5 }
    move into Q_induct1
, |( D' ^* V1 V    move into pickaisle.induct1" X/ _% F/ n) C" z8 J% u! w! X
    while A_i<=30 do begin
0 E+ S" O5 T2 F) ~        travel to pickaisle.con(A_i)
+ L8 U4 G& l$ ^+ L  F        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec; d. y: w. i4 f9 R$ X6 u2 g
        else wait for 10 sec* Q; m3 _& }0 w7 u
        if A_i=A_leave then send to die0 ?+ `' G$ }% F2 d
        else inc A_i by 1
. S7 I; d0 a: P0 t' o9 E9 z$ G    end
- F  C/ P& q% K% W. jend4 C0 F7 K* \( v2 U

9 b0 a5 c. J" \" z  R% x% f, Pbegin P_pick2 arriving, F' e  f' y$ W2 R1 G! \
    set A_i to 11
% b' ]8 o. [. B    move into Q_induct2
. `$ r3 z+ C( }5 r6 F    move into pickaisle.induct2% N* O# u- o* W; r+ m
    while A_i<=30 do begin
8 i* e( r+ b2 ]5 C) u/ L4 L% g" \        travel to pickaisle.con(A_i): z: `0 ^5 Q& w: E4 K7 S7 \: ]
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec, [- `, Q3 i! o" g
        else wait for 10 sec
1 B+ Y7 b* g  x( W        if A_i=A_leave then send to die
# x0 @( |; v4 Q( \% {) Q( I        else inc A_i by 12 u( Q  B) R6 l& {1 j7 O
    end2 v. M5 A) O) I0 f
end7 }+ ^" y6 Z$ t4 ^6 @
8 b( D7 G! m1 q; z3 T1 e1 V$ q
begin P_pick3 arriving' S* U0 h- |+ Z7 f
    set A_i to 212 s  J2 M0 v" x/ Z+ [
    move into Q_induct3
1 e+ ^" |; P$ O/ T    move into pickaisle.induct3
' `, N+ V" D2 t0 w    while A_i<=30 do begin
5 _8 Z' l) ~  u  `4 P( R; B        travel to pickaisle.con(A_i)
$ E6 ]& P+ h8 H: L8 w# g        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec' k" a8 Z; j- R: m. U. s" m1 O( X
        else wait for 10 sec" ^; }, x+ T+ r# l% S5 p7 p" z
        if A_i=A_leave then send to die
6 \) i6 [% n! B, X1 }6 L$ R9 x' |% E  E        else inc A_i by 1
) p8 i$ B( m( l4 h! S    end
7 a( H, P4 s8 t! O/ i) ]* j7 qend

最佳答案

查看完整内容

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 X& r  @6 f9 ?% j0 M  k7 t
move into后面,应该是一个station或control point,或者Queue/Container/Vehicle/Segment之类的东西。看你的报错信息,这个induct是个path么?
3 m; i1 `4 V4 h5 _! N& }/ X' f1 g$ H) h
AutoMod Editor的语法报错信息,有时候会指在下一行,必要的时候要把上下几行都看一下。
& N! d! h- d% ~% v) [
* @6 h& k# ?( a6 N: h4 V" D另外,你的几个P_pick是完全重复的,建议以如下方式修改,可以减少代码编写量:- ~8 r5 e3 y$ P2 T  ]8 K
1. 创建一个Process:名称为P_pick,number of Processes为3,其它按你的需要设置;删除那几个P_pick;
. x( J# E/ ^6 Z5 Q5 Y2. 创建一个Queue:名称为Q_induct,number of Queues为3,其他按你的需要设置并放置;删除那几个Q_induct;4 e5 f  y0 z" }* P5 r0 M9 U- e
3. 以如下方式改写P_induction和几个P_pick的arriving procedure的代码:
, Q; i7 M" p. ?begin P_induction arriving' A) G" V+ ^7 o. l
    clone 1 load to P_pick(A_induct)3 i' S( G2 ^/ y
end最大的系6 c. v9 Q$ s* J6 C5 I

3 n2 m) B3 i/ _9 l1 ^; _begin P_pick arriving
% X) D/ U+ ?6 U1 j" G- C  ?    set A_i to procindex * 10 + 1
; L9 x; u9 g& |4 Y  \    move into Q_induct(procindex)% v8 w3 U! }3 P. h% W; V
    move into pickaisle.induct(procindex)
$ I2 I- U6 K- H9 _# l7 J    /*check the type of pickaisle.induct(i), for your last problem.*/
- x9 j- U5 J. \3 q$ r( Q5 C1 K, ?# Q9 @, Y; K
    while A_i<=30 do begin
( l' \; `7 e! Y4 ~3 z* f        travel to pickaisle.con(A_i)( q& W+ ]1 q* G# w% W+ D0 f& X. t
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
* g+ A+ A0 N# u. d+ x7 W        else wait for 10 sec
  j( R; R2 I, j1 ~        if A_i=A_leave then send to die
" O$ N. y* A/ I9 Q" N        else inc A_i by 1, h* s( S4 i& K% p+ d
    end' z# y% `- w! _# h- s3 ~
end4 l+ X. q6 _' Y+ S7 b% k. V

, G9 r4 D# G! x  X7 X其中的procindex为整形,代表当前process的序号。) e& S' C4 ?2 R7 N1 ^8 e# t
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-5-5 12:14 , Processed in 0.016485 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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