设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13710|回复: 2

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

[复制链接]
发表于 2009-4-4 23:58:32 | 显示全部楼层 |阅读模式
5仿真币
想请版上的人帮我看看我这段code中的一个错误,我刚学Automod没多久,实在找不出错在什么地方了,谢谢
- T. m9 C% F% k; z
8 I8 |$ u" Z2 q. e  g( {$ `* {8 @我的问题是,在每个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中的数值,不知道会不会有什么不妥。
" ~# o: \) b0 W3 W% g4 Y
' v+ w8 T, T' ^1 v" @" ]" jbegin P_read arriving
. o# P5 E: ?6 z, E. N: A( b+ [    while 1=1 do begin" U0 A3 y+ z! c$ X$ {6 Y' ]
        read A_tote from "data.txt" with delimiter "\n"/ ~  E/ r/ k: M
        read A_time from "data.txt" with delimiter "\n"  }9 u: J+ n% y# f! y; ~
        read A_leave from "data.txt" with delimiter "\n"
8 |$ ~0 C8 y: F( v8 P        read A_picks from "data.txt" with delimiter "\n"
" C9 W$ h! H2 ?( w  r. m2 L# @  T8 P        set load type to A_tote
  {  }7 O8 ?0 e, _  W, B        if A_tote="tote 1" then set A_induct to 1- u! K! i- W0 k) J! p0 }) l5 \
        else if A_tote="tote 2" then set A_induct to 2
" _9 T2 ^4 W- A7 m) \! x. T            else set A_induct to 3    6 U9 f/ \/ J; O. ^) G$ T3 {& t) e
        set A_i to 0
% `3 I2 X' e& X7 H: K        clone 1 load to P_induction
1 @# u* |7 a, }, v; ]7 h; z) B        wait for A_time sec
. R" ^9 U9 e, A  C6 t    end: I: ^" Q0 p2 N% j
end! q5 M8 t7 Y9 ]; {) k

" ?8 \; a0 A3 \% Bbegin P_induction arriving
  J% T: o0 G$ `1 U+ Z5 R0 s    if A_induct=1 then clone 1 load to P_pick1: t3 Y: X3 U, h2 @" p- L9 W3 J4 D- h* S
    else if A_induct=2 then clone 1 load to P_pick2
/ t9 \6 ~5 u( Z  F% y! p        else clone 1 load to P_pick30 l& t1 s, j9 q5 }
end
% o  Q, d$ q, L4 x) z& m' C# j; n3 h) Q. b4 \0 h: w7 w
begin P_pick1 arriving. l! q/ X% n, y3 I) U
    set A_i to 1
, [& h- F" v: A    move into Q_induct1
& K, v6 N8 T* Q. P" P" W    move into pickaisle.induct1
. a! N6 {. h4 a! z9 y$ A    while A_i<=30 do begin/ W! m& [7 T/ b: a" O0 V8 K9 c7 e
        travel to pickaisle.con(A_i)
* l# g( x" ~) c) O        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec% a! S5 w: P9 E; q$ j
        else wait for 10 sec" o! u/ P7 a% Z
        if A_i=A_leave then send to die- a& ^  l* M3 W
        else inc A_i by 1
/ a- S% i6 A" l  ^4 y2 E    end
" l0 k( z" V8 {/ M; U+ [( [3 J( dend$ a! ?% Q% ]0 K
4 x6 Q$ x/ w' E. z
begin P_pick2 arriving- T: s' n3 v' b6 O
    set A_i to 11
, q- @- ^$ d' {$ V5 I8 U' ]% z8 q    move into Q_induct28 L* i( [0 g8 w# w: M- p6 L9 m
    move into pickaisle.induct2. i5 D% b& L) r6 M, |3 v, w; w
    while A_i<=30 do begin/ i0 O3 c$ v  R4 I/ ^* H; p9 `
        travel to pickaisle.con(A_i). S1 L8 @( ]' c: E/ e8 T2 p
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
+ u" c9 p+ H. }5 A. q        else wait for 10 sec
8 \) ~( |% u. S% J& _# Q        if A_i=A_leave then send to die2 s& s" c7 b: \( G1 C7 G
        else inc A_i by 1- `" g5 v7 Z4 |# x( ]/ Q
    end
: q" W4 ?( ]& b$ Fend; y) x2 i$ g: d+ Y) O5 P1 g

" w9 E" A+ w  Q+ F- g" Q+ c+ Tbegin P_pick3 arriving
3 |. ^. k& ]; N7 k% u/ [    set A_i to 21
+ I) D  B- M2 H$ _# x8 s4 G( r    move into Q_induct39 I" ~/ M  h  K' u: J
    move into pickaisle.induct3
, M( k; e" @6 {3 H5 `  p/ R. S4 \    while A_i<=30 do begin
! b& _* u0 a* O0 [/ v) x1 Q        travel to pickaisle.con(A_i)4 Q9 G, q5 {( |6 T4 h. \/ S
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec, E( ]: ]4 X, S+ x, Z
        else wait for 10 sec( K' T1 i; F) F& k0 q$ L
        if A_i=A_leave then send to die
- `: s' M; S5 l        else inc A_i by 1
4 \& }: a+ ~7 [7 P9 s    end
. D% t% o/ X0 O3 p$ hend

最佳答案

查看完整内容

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是个什么东东?
, ~* Z% m4 \: D6 A' rmove into后面,应该是一个station或control point,或者Queue/Container/Vehicle/Segment之类的东西。看你的报错信息,这个induct是个path么?# x3 p% g# A9 p7 Z* A% w2 \
1 b2 E; O% c& ~. f5 W# T
AutoMod Editor的语法报错信息,有时候会指在下一行,必要的时候要把上下几行都看一下。# B" g& D$ |. s: }6 c' I7 L3 u

+ r( L# k* @9 k( R9 G另外,你的几个P_pick是完全重复的,建议以如下方式修改,可以减少代码编写量:3 S2 Q! y1 E0 g
1. 创建一个Process:名称为P_pick,number of Processes为3,其它按你的需要设置;删除那几个P_pick;
# C6 v" E8 H7 d2. 创建一个Queue:名称为Q_induct,number of Queues为3,其他按你的需要设置并放置;删除那几个Q_induct;3 ]# v9 x# k" W8 J" y& o
3. 以如下方式改写P_induction和几个P_pick的arriving procedure的代码:
1 C/ v: q( k$ @8 Z1 Pbegin P_induction arriving, d4 G- i3 V  c2 e& b5 N6 Q
    clone 1 load to P_pick(A_induct)
4 H9 K0 V! l1 v* `end最大的系  _4 L( d  _" g- L! G# j
9 B4 t1 r% \  U3 x% D5 ^- h/ K
begin P_pick arriving
9 U' G1 B  g/ K' Z    set A_i to procindex * 10 + 1
# U5 P1 n+ y* u' S% Z4 W5 |    move into Q_induct(procindex)
5 _2 i7 V  j$ h& m% t* g! _! s    move into pickaisle.induct(procindex)0 {! z( O+ k8 x6 x2 F1 @
    /*check the type of pickaisle.induct(i), for your last problem.*/
1 N+ ]8 ?2 n1 s! N* _$ w
( t; G' Z( Q/ v4 Y0 \* ~; {7 ^# g    while A_i<=30 do begin
) M$ t. G/ R, H  b' E        travel to pickaisle.con(A_i). S, e& O8 G# O5 t5 e$ e
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
+ _" {! L  A2 R. o& i0 A& `        else wait for 10 sec7 e3 c9 ^7 U2 j
        if A_i=A_leave then send to die2 K( B# M# Q: D2 }" z
        else inc A_i by 1* M; u* h" Q( Y$ ~
    end0 D' e3 |1 U) ^* [) ~2 |  v8 Z" Z
end+ E+ f4 m% Y2 Z! _; S
# l7 Y) M1 \4 \
其中的procindex为整形,代表当前process的序号。
0 {( w$ `( o+ A9 q2 ?0 istation和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-30 04:03 , Processed in 0.015810 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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