设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12338|回复: 2

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

[复制链接]
发表于 2009-4-4 23:58:32 | 显示全部楼层 |阅读模式
5仿真币
想请版上的人帮我看看我这段code中的一个错误,我刚学Automod没多久,实在找不出错在什么地方了,谢谢
) n* p2 V$ m9 D9 [  m
- {  T+ \: {. O我的问题是,在每个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中的数值,不知道会不会有什么不妥。
$ J: d7 u8 o( A' C7 W
3 b. G2 e! Q1 J: `) @  tbegin P_read arriving
3 c* _' r) L& k+ A* Q; I, S    while 1=1 do begin
; j3 _& i3 r9 \$ m        read A_tote from "data.txt" with delimiter "\n"
% `, J7 O8 [& i0 U' p  f* y        read A_time from "data.txt" with delimiter "\n"6 q* i; _& h( T: c0 e7 v
        read A_leave from "data.txt" with delimiter "\n"" z2 P! X  J; p) H2 L' a
        read A_picks from "data.txt" with delimiter "\n"% X& }. v7 i& G
        set load type to A_tote
6 F0 ~6 J. |0 Q        if A_tote="tote 1" then set A_induct to 1# _/ E! e( Z  D7 ], [/ }
        else if A_tote="tote 2" then set A_induct to 29 p7 K: b4 f4 a( L! D5 r
            else set A_induct to 3   
0 g3 t& _' D2 n% u/ f  E        set A_i to 04 W  b( s( U1 v5 ^/ x$ e
        clone 1 load to P_induction
5 _4 T$ I" q+ ^6 L: H: ?        wait for A_time sec
0 h5 s3 a; n: t+ l    end
/ O% ^* W. \6 _+ ^end
$ K4 O( f4 g# P" f8 `7 j4 [/ O8 a# C: c& q* }: `. B2 i6 q
begin P_induction arriving$ q/ E+ I7 Z" G6 [' c$ J
    if A_induct=1 then clone 1 load to P_pick1  S5 N. i) o+ E, k
    else if A_induct=2 then clone 1 load to P_pick23 Q- Y! l+ E, x
        else clone 1 load to P_pick37 ^+ T* P0 D! E3 e9 N4 @$ A
end
- |- p+ y( {# w/ a! Z1 E: ?& B' j2 X6 N! W' r4 _; p5 W) K
begin P_pick1 arriving
( F7 ?& e' a0 F6 \6 \7 ]& u  G    set A_i to 1
' P2 ^3 r" k) W7 M; J    move into Q_induct1& V/ C% o7 J: z' _( x1 G. a
    move into pickaisle.induct15 k' E3 z# D; ], v3 W! d# `; |
    while A_i<=30 do begin/ a+ H* h0 C- F' E$ O
        travel to pickaisle.con(A_i)
+ ~! p& ~+ O( x1 @& U8 V, J        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
2 L$ X0 \  n. H- a  x# K        else wait for 10 sec
2 W7 R0 \4 q  H7 x  r. v        if A_i=A_leave then send to die1 Y8 }9 e# S3 \
        else inc A_i by 1
$ d! E" G& f' ^& `/ v/ R( p    end7 j! l$ Q: f( ^) N$ ~' z
end
; n! I3 }6 P" j2 v$ N4 Z% M9 A& q( P7 x/ M4 s% f; f
begin P_pick2 arriving
- L! f4 O+ D* J4 A) N    set A_i to 11
5 t. O7 q* T; Y    move into Q_induct20 [( S/ F) x- g' T$ o) |8 y7 w' ^2 k
    move into pickaisle.induct2+ P7 T0 _8 [, x2 \
    while A_i<=30 do begin$ T8 w: ]" }+ W' R$ ~2 @
        travel to pickaisle.con(A_i)
& i3 V' P2 u: X7 b) b        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec' Y* D: K3 M+ }0 }& {: {$ l- t; P& R
        else wait for 10 sec
7 N$ W, L/ U! ?  Q: ]1 p' B  J        if A_i=A_leave then send to die5 i, W5 O4 _$ {* C
        else inc A_i by 1
; @$ m) G- f. e6 Y; {    end
9 P1 z) ~* D" `& U/ g" Uend
$ Z% }" l( O2 s7 n; |$ m+ K4 J7 Q0 x3 h6 A9 Q
begin P_pick3 arriving5 a7 k+ x2 Z, T
    set A_i to 21
' o# u- I& M, l" D    move into Q_induct3
7 B. w1 N5 P% K7 T    move into pickaisle.induct3
- O0 b9 _; L8 z) v, }0 m( `    while A_i<=30 do begin
, |9 r# j+ D1 C; T* Y        travel to pickaisle.con(A_i)
% d3 e& O. Q% V! _, p4 l, h0 I4 u        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec+ r3 C/ o+ @) G/ J% g# K
        else wait for 10 sec
5 h7 G* [  R7 P. E, G+ L        if A_i=A_leave then send to die1 o7 d" }6 e5 Z3 y! O6 o+ G6 p  U
        else inc A_i by 1
# \! J5 o" e3 E0 |% J    end" n( \  Q- ^1 T, ?$ y8 g) y: X
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是个什么东东?, W  S& {. ?& i, R
move into后面,应该是一个station或control point,或者Queue/Container/Vehicle/Segment之类的东西。看你的报错信息,这个induct是个path么?
9 H/ S: \* P% `% n
% u5 C, O# C" G- @4 {- LAutoMod Editor的语法报错信息,有时候会指在下一行,必要的时候要把上下几行都看一下。" w1 O+ J# z" G+ ?6 C) X

5 q) j, W* T4 X$ ?- W另外,你的几个P_pick是完全重复的,建议以如下方式修改,可以减少代码编写量:
5 C7 Y  z. U% a: L" X2 K. c( p" C1. 创建一个Process:名称为P_pick,number of Processes为3,其它按你的需要设置;删除那几个P_pick;
+ h% A6 ^3 c9 {* i  c3 D2. 创建一个Queue:名称为Q_induct,number of Queues为3,其他按你的需要设置并放置;删除那几个Q_induct;
. q0 q4 E" r  o( J8 d3. 以如下方式改写P_induction和几个P_pick的arriving procedure的代码:/ C& f- @$ C6 _6 K& n5 f4 u
begin P_induction arriving
; v! j5 n# ]5 A4 c- W    clone 1 load to P_pick(A_induct)
! w  \4 m! y/ aend最大的系
, t  n1 i9 J. H9 A/ O* v- h; C1 K! c" ~4 M+ [+ P  f
begin P_pick arriving1 ~, \+ k0 m' Y. a8 h
    set A_i to procindex * 10 + 10 Y! R7 g0 y7 J. g+ N8 T
    move into Q_induct(procindex)
4 A% |* Q5 {( F% X    move into pickaisle.induct(procindex)
$ m1 X* w5 @, p, k1 ?! ?3 Z# K    /*check the type of pickaisle.induct(i), for your last problem.*/( Q9 t: Z* l( I& J2 h

6 a. N2 ^- ^, Z3 V7 D4 I4 L% L    while A_i<=30 do begin
6 _4 d0 P6 R% f/ ?        travel to pickaisle.con(A_i)9 c$ w! [$ X9 l1 X) O# R6 r
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec3 e* F: }* n  y  D* m- T* M
        else wait for 10 sec& G5 y- J0 ~5 p/ D# Z8 X
        if A_i=A_leave then send to die
4 b5 e- a- u0 a% M( m( c        else inc A_i by 1
: ~5 w' Z  T( |6 k7 l; ?; S    end2 ~1 w7 T9 f- w9 |+ U& J8 J$ w# k
end$ ?) K! f& t, W, E3 f
% \5 D' h* ^0 _, F4 G  D+ F: ~( |6 a
其中的procindex为整形,代表当前process的序号。' E0 P7 J. L  N
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-1-15 16:27 , Processed in 0.022438 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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