设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14734|回复: 2

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

[复制链接]
发表于 2009-4-4 23:58:32 | 显示全部楼层 |阅读模式
5仿真币
想请版上的人帮我看看我这段code中的一个错误,我刚学Automod没多久,实在找不出错在什么地方了,谢谢
0 W1 N( [1 e' F8 r* R8 z& N; l. O" A, b' ?8 d: c) v
我的问题是,在每个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中的数值,不知道会不会有什么不妥。
4 n0 P8 F6 j- R* b0 A  T* ~' Y* X$ M6 h9 g
begin P_read arriving
6 [% c) Q" o! J; O& u6 v9 @& c    while 1=1 do begin
  i3 N8 A( ^* s        read A_tote from "data.txt" with delimiter "\n". d8 Z& N& x; H. I, {/ o
        read A_time from "data.txt" with delimiter "\n"
* ~4 k  K0 [/ I( l: l        read A_leave from "data.txt" with delimiter "\n"
" {  }0 }; C) S/ {, u        read A_picks from "data.txt" with delimiter "\n"
& ?3 q: D0 V2 O1 U        set load type to A_tote
; D6 ]0 q. A/ g. W  x        if A_tote="tote 1" then set A_induct to 1
9 V7 |4 T3 |# R7 B        else if A_tote="tote 2" then set A_induct to 2
2 A  |, e% C, o# r  j            else set A_induct to 3   
+ u7 t3 A% a( u6 s$ y7 F$ c) G        set A_i to 0
4 Z9 v" _4 I/ g, \        clone 1 load to P_induction
' |# O& ^0 \8 x# i        wait for A_time sec7 _4 i2 Q4 w- M. P; G
    end
3 I- L5 C/ i% c+ R/ Fend
% }% v9 G& G' h  r& _6 W) e$ L- W$ h% n. }8 B8 h" i3 ^
begin P_induction arriving
. C" Q% s+ U4 N; b( Z    if A_induct=1 then clone 1 load to P_pick1
; R6 K- a* I" G5 k    else if A_induct=2 then clone 1 load to P_pick2" {9 ?. p' |$ M' T
        else clone 1 load to P_pick3) o) M# u* @9 O6 u1 Z0 z  Z8 \% m9 z
end
: t* [" p$ B% L* C3 y) ^; D
4 F& j7 I# Y0 P3 K' q6 o' n' kbegin P_pick1 arriving
2 _$ W$ W4 D7 b& C& K. ~2 ~! {    set A_i to 13 x! K& |; n6 G. Z4 g( ~
    move into Q_induct1
7 [! g5 L. H# D$ E1 j( J& s4 Q, Q' S    move into pickaisle.induct1
* Q! [5 ?* l0 c+ Z  }% D+ L    while A_i<=30 do begin% S* j6 @5 C# m, ]% f
        travel to pickaisle.con(A_i)  V6 b0 e) l# B1 ?  F
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
2 i! \, g7 ?# x) a% w* h9 Y$ p( v* X        else wait for 10 sec
0 e6 q" S7 f5 e3 @4 |) L2 _* C( C- |        if A_i=A_leave then send to die" K1 }  a1 y" o
        else inc A_i by 1
# T" l/ I8 l# y; h: J, s1 g, `    end6 ]/ t( \! E7 Y7 W& d* m
end  W9 r1 {3 }$ l

4 h8 [' \: t9 B8 Ubegin P_pick2 arriving
3 i( t3 H% Q$ x- X9 X( S! z% v5 ~    set A_i to 11
0 @2 X5 n6 ^5 G    move into Q_induct28 \1 Y4 ~' c- e* i
    move into pickaisle.induct2
' R* Q1 W) M* Y/ g    while A_i<=30 do begin
& D6 t+ }1 ^5 G0 V4 I# m        travel to pickaisle.con(A_i)' K: j$ }( q( A9 C, p. z2 w
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec( C, C: k% D3 M. u9 e$ T
        else wait for 10 sec
1 H  a7 X+ `& u3 X; R        if A_i=A_leave then send to die7 |+ z" c5 x7 ?1 l
        else inc A_i by 1; \. t7 V% g2 M! R# T6 B* X, R1 N
    end3 Q4 I2 P, G9 G! K
end
4 b! k8 M  Q# X+ _1 D( w
3 d3 R- ]# p: Q7 a" l5 zbegin P_pick3 arriving
' g! F- D! G' \( {7 a4 L    set A_i to 21
& M& {& ~$ [. G: {4 K: l- z; f5 y    move into Q_induct3
9 H8 D$ d& d: f3 S( q' z8 A  c    move into pickaisle.induct35 D. M7 _0 I/ Q  `# X! A7 U& z
    while A_i<=30 do begin
1 ]9 p5 N) R1 ~+ z$ s, z: o        travel to pickaisle.con(A_i)
$ v  ]" Y; q$ i1 y" g        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
, ?" A& i0 {) P$ J6 B% ?5 \8 T+ D        else wait for 10 sec
7 a: y" O0 T8 d& M- F        if A_i=A_leave then send to die
8 m1 _  z4 ^3 C; h' \6 W, `; S" f        else inc A_i by 13 Z9 C6 M3 h3 k; H6 O/ j
    end' C6 T0 m3 }6 @
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是个什么东东?
1 o7 [7 O7 j' D# W. v/ _move into后面,应该是一个station或control point,或者Queue/Container/Vehicle/Segment之类的东西。看你的报错信息,这个induct是个path么?7 F6 F7 E8 s5 M. y2 e9 g, u
* a+ }& _2 ]6 m3 V$ z/ H6 Z3 s+ I
AutoMod Editor的语法报错信息,有时候会指在下一行,必要的时候要把上下几行都看一下。
' W0 k7 C! X# u# \: `2 t% d/ q/ ^' L) x
另外,你的几个P_pick是完全重复的,建议以如下方式修改,可以减少代码编写量:
9 b5 s( ?7 I4 }7 r5 j1. 创建一个Process:名称为P_pick,number of Processes为3,其它按你的需要设置;删除那几个P_pick;0 _5 E3 h; `: E$ D$ [
2. 创建一个Queue:名称为Q_induct,number of Queues为3,其他按你的需要设置并放置;删除那几个Q_induct;
( {% q+ k  i7 K* V' C3. 以如下方式改写P_induction和几个P_pick的arriving procedure的代码:2 _2 O6 R+ v# J9 s" n" D
begin P_induction arriving& o) L- a- f+ w. i5 U- @' H
    clone 1 load to P_pick(A_induct)1 y6 G  i! W" a- ?' O6 m( Q
end最大的系
7 `3 G/ J) e( A) b; \
% m- ^2 l9 m) g" T. @3 c' }( Rbegin P_pick arriving
; h1 P6 o& N% K! V, z5 M    set A_i to procindex * 10 + 1
: W- s3 M+ f0 q/ a    move into Q_induct(procindex)
/ T% k; k' k  ]! s# n4 t$ ^    move into pickaisle.induct(procindex)0 K5 U/ p' [' x( ?
    /*check the type of pickaisle.induct(i), for your last problem.*/
6 V/ f9 A# L# ^0 @* Q! M! I# m1 A: x0 H  s2 E; s
    while A_i<=30 do begin
; r7 G/ z/ ?, ?7 t        travel to pickaisle.con(A_i)
7 h' I+ Y# J  k% _' H" O        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec  q) ]4 ^/ l9 k! y' ?  O2 p+ o$ |
        else wait for 10 sec
( V% F2 c; X( S5 T% }: K. t/ z        if A_i=A_leave then send to die0 H, q  A/ S6 f' g
        else inc A_i by 14 y! s5 a7 Z2 q
    end
" I( A9 ^' d/ z; u. S' ]end" @' @, f7 o0 ]4 y5 F: L, E
4 f% z4 j! [, G8 }7 \+ ~. O3 A
其中的procindex为整形,代表当前process的序号。7 o2 _. c  l* j/ h: c% z: J
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-7-24 13:19 , Processed in 0.017928 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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