设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 15121|回复: 2

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

[复制链接]
发表于 2009-4-4 23:58:32 | 显示全部楼层 |阅读模式
5仿真币
想请版上的人帮我看看我这段code中的一个错误,我刚学Automod没多久,实在找不出错在什么地方了,谢谢8 T; c& V, l2 i  W! I, m
" L* p1 W9 q5 G1 M5 m
我的问题是,在每个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中的数值,不知道会不会有什么不妥。$ A7 n/ A; o- A# V, y5 j& a, @" X

" b- M4 j0 L0 d( \) f% lbegin P_read arriving
: f$ C7 s: E! [' X+ z3 v1 y8 ^4 D% s    while 1=1 do begin
& B8 D" G) ~& ?, |        read A_tote from "data.txt" with delimiter "\n"% B0 w$ I, s1 _5 j( X- z
        read A_time from "data.txt" with delimiter "\n"
; y8 y- O7 e/ d        read A_leave from "data.txt" with delimiter "\n"
9 n' {6 j9 ~. V4 m# G        read A_picks from "data.txt" with delimiter "\n"4 z, ?) _& K2 Y+ i' D
        set load type to A_tote
" N* ?8 T$ f7 n; C1 \4 H        if A_tote="tote 1" then set A_induct to 1
: W8 ]  v. |5 I0 @* o& f8 q        else if A_tote="tote 2" then set A_induct to 2& j: o! j% f2 O( w% P8 f5 W
            else set A_induct to 3    : |- u1 F/ i# K. v; T  |2 {
        set A_i to 0
+ j  x' a( J; p        clone 1 load to P_induction
8 w$ `! \* \; v5 @8 B; d6 I        wait for A_time sec
# Z$ m: r1 _# \/ i    end4 t& t" q- H* u* U. X
end) B: d/ a1 O9 j* p6 W2 z3 X# X
1 n+ W; l" Q+ B7 p
begin P_induction arriving
! c$ ]' E! T: H, S    if A_induct=1 then clone 1 load to P_pick1
$ O& d4 b) {0 F0 K    else if A_induct=2 then clone 1 load to P_pick2, L8 X  I% P( z) _: G* j. P0 x
        else clone 1 load to P_pick3* Y# m3 ^: O9 p1 A0 K  r8 l
end& Q/ _$ {% q5 n2 l
1 }" V: R  O5 }* \6 C/ }
begin P_pick1 arriving. x4 Q( v, w( X- p+ A; g7 z
    set A_i to 13 Q3 Z& D9 X( ]5 K  N# {# ~% y1 i: i$ J
    move into Q_induct1) D/ A7 [5 `5 ~/ C. r2 Y. U" d
    move into pickaisle.induct1
/ j! b8 W+ n# s/ O    while A_i<=30 do begin! `2 X7 ^+ i* f9 p, B# Y
        travel to pickaisle.con(A_i)- x. U, f2 Y' E( u, j
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
% U' m% }7 A) M3 x        else wait for 10 sec
2 k$ u; W( B  p* J        if A_i=A_leave then send to die
( o- Z6 J( f+ r  f5 `! h1 X; {) M        else inc A_i by 1% Q, O' L6 U  t( K' ]* W) K/ u$ c
    end
$ K! r5 m; @$ c: G' f% b6 y) B* _# kend# ~( ~0 H0 ]7 v

; m5 D% Q3 l: h$ ]  Zbegin P_pick2 arriving
! Q  a8 f5 ?: W" w- O    set A_i to 11, _" S  ]; c. P, X# u
    move into Q_induct2
- j) B& s8 X# u- m) ~    move into pickaisle.induct29 U" a! M/ k) U4 r7 i* [
    while A_i<=30 do begin2 G9 A, h1 C( z6 P+ M% ~
        travel to pickaisle.con(A_i)
1 g7 j5 N; I$ l" n. h        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
: ^9 a* q7 @% i        else wait for 10 sec
" i, G' |' I& r( P        if A_i=A_leave then send to die  r' W5 J5 j, x$ |6 p% }6 G/ O
        else inc A_i by 1
+ v1 H" ~2 a. {    end$ ~0 z9 t! F# c
end3 X5 J. S! L0 M- \; ?4 |' H1 `% q
" d3 M; w; n$ q/ y! F. I  I/ z
begin P_pick3 arriving
1 _0 e1 ?* t' @    set A_i to 21
* f5 {7 W0 I4 h/ ^& A    move into Q_induct35 T) P- [% ~. b0 Q; @
    move into pickaisle.induct3
, I5 i0 l  M/ U2 x' d4 s    while A_i<=30 do begin
% W2 G+ z0 D- X+ p, k+ c7 \        travel to pickaisle.con(A_i)! Y' h% w$ |) G) \
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
! e9 e) [, X! S        else wait for 10 sec6 @2 }  W: {, U* D, N- T" o
        if A_i=A_leave then send to die
( l, ^! Q# h, ]! |, \& z0 |        else inc A_i by 1
+ h" F8 T( y& W2 @( {    end
6 }5 z6 a! C% Z& Z! t' {$ |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是个什么东东?4 ]5 Y0 p0 U) ~6 w' u1 ?/ r7 ^
move into后面,应该是一个station或control point,或者Queue/Container/Vehicle/Segment之类的东西。看你的报错信息,这个induct是个path么?% [4 P# S1 N3 U2 }$ f  p

5 Z* C9 z2 ~8 v. A7 @5 K0 I' lAutoMod Editor的语法报错信息,有时候会指在下一行,必要的时候要把上下几行都看一下。3 c! @% e1 A' J

& y. B* r2 y8 S& L另外,你的几个P_pick是完全重复的,建议以如下方式修改,可以减少代码编写量:
+ C! W  W5 K, h' S  n  x1. 创建一个Process:名称为P_pick,number of Processes为3,其它按你的需要设置;删除那几个P_pick;0 Y: O4 J" k3 F( M. x" g, X% i) C9 ]3 o
2. 创建一个Queue:名称为Q_induct,number of Queues为3,其他按你的需要设置并放置;删除那几个Q_induct;& V' z3 k. k0 o# d( X8 B$ Y
3. 以如下方式改写P_induction和几个P_pick的arriving procedure的代码:
6 @! ~+ i5 Q' ^$ Xbegin P_induction arriving  `6 v) C# R5 c2 {
    clone 1 load to P_pick(A_induct)
8 j  Z6 X, q2 c6 k+ _' K5 Xend最大的系
7 ?5 K8 h5 F) z; Z# _/ y
$ O% x9 a+ ?2 i) Pbegin P_pick arriving
$ m% T; G$ ?% N. \+ s0 H4 M    set A_i to procindex * 10 + 19 t0 H' g( A# d9 B! Y
    move into Q_induct(procindex)/ f$ w. e# i  @) X
    move into pickaisle.induct(procindex). Q5 L, \, i- A. T+ H
    /*check the type of pickaisle.induct(i), for your last problem.*/' |# Q0 ]# B& X# g: _2 z9 g
/ [4 b$ y3 i0 w* ~/ z0 r
    while A_i<=30 do begin
) W7 v7 k) D/ o3 m4 l9 D/ j* R        travel to pickaisle.con(A_i)* M3 N# V# W8 K6 x
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec. t6 t& l& I' h6 D% |6 l5 ~; p
        else wait for 10 sec# ?$ R5 W0 E$ K" a3 ]4 x# Z& j
        if A_i=A_leave then send to die2 {9 b7 _) S# j( \
        else inc A_i by 1
6 p% B+ B2 u+ \7 `* [    end
; @- Y% y* z1 V; H7 H5 tend
' K2 X$ G/ h: n+ x" Z, i; E0 h& ^/ Z& g; I; c5 D5 T
其中的procindex为整形,代表当前process的序号。3 I: Z7 f* q" c* d
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-8-12 11:00 , Processed in 0.012386 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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