设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13547|回复: 2

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

[复制链接]
发表于 2009-4-4 23:58:32 | 显示全部楼层 |阅读模式
5仿真币
想请版上的人帮我看看我这段code中的一个错误,我刚学Automod没多久,实在找不出错在什么地方了,谢谢
" F% o0 L/ r/ F1 C9 b8 h0 v" b4 y0 X0 M6 n' z  }3 A6 u5 \9 i
我的问题是,在每个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中的数值,不知道会不会有什么不妥。
& s. N7 N1 u2 W. D7 o
  |, e6 b; i  G. `begin P_read arriving: T- p+ h1 z' B- y1 P0 N
    while 1=1 do begin: I' `2 r0 n, g) |0 k9 B
        read A_tote from "data.txt" with delimiter "\n"' a$ E2 t- u  |# Z+ D/ O
        read A_time from "data.txt" with delimiter "\n"
# Z7 c0 i! V+ v2 j; `+ e" W$ y* @        read A_leave from "data.txt" with delimiter "\n". @: S& h: q: \7 M, U5 Z& s
        read A_picks from "data.txt" with delimiter "\n"* Y  h5 A, ^, c1 T3 i" M* L
        set load type to A_tote, u- P1 J. b0 e* _
        if A_tote="tote 1" then set A_induct to 13 o& Q) W) S: H' z; w
        else if A_tote="tote 2" then set A_induct to 2
) R5 ^6 B& H) `4 c2 u            else set A_induct to 3   
7 ?6 m+ p! @4 B; V% [- @        set A_i to 0
5 K% _$ E( S2 c        clone 1 load to P_induction
( D4 Z0 z1 N( z" z        wait for A_time sec
% o' b, h% J8 ^) h: z    end
/ R: d! \, R! d% K6 cend4 A* I8 p, W# q/ b8 y0 S
+ e  k1 B& F' t- |* [% S4 W$ X  z" h
begin P_induction arriving
' b- n4 U; v, x$ Y    if A_induct=1 then clone 1 load to P_pick1+ N6 G" [% A; g2 u4 D5 \  G* W! g" d
    else if A_induct=2 then clone 1 load to P_pick20 {( k, }$ g- b3 X1 k' {
        else clone 1 load to P_pick3/ b0 k$ i( x' a3 H8 a4 x2 m0 L& x0 X
end
# t2 i+ L- u9 M/ s% [3 ^8 J8 q/ ?2 T9 x' k$ M2 P
begin P_pick1 arriving1 l! R0 {: U* _
    set A_i to 1
( i0 v9 p4 ~3 D& \    move into Q_induct1$ y5 g1 Q9 E- j9 x
    move into pickaisle.induct1
" i# G  T. Y3 G* e9 u    while A_i<=30 do begin, ?* ~/ w) d' \
        travel to pickaisle.con(A_i)
, I0 ]! ?9 W7 J4 s- T& v        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
& C- h7 o: u3 K$ \; H+ c: F        else wait for 10 sec
7 b6 I/ Y$ w4 w8 y$ B/ r        if A_i=A_leave then send to die
8 M+ |' y) A6 `5 ]9 F) {        else inc A_i by 1
8 G) r( P- O+ s& J    end
& W0 M# C5 b- n0 G/ R8 ?end
2 `% |8 G, g" K( x) d; x; g6 x  o- A
begin P_pick2 arriving
+ d6 b9 Y* A% b! _) k. V    set A_i to 117 e) |0 N+ V5 {8 H# v! n( R
    move into Q_induct2
# N/ [6 @+ ^+ P" J' l+ a2 B    move into pickaisle.induct2  L+ x3 N' n4 e, m+ T4 ?
    while A_i<=30 do begin  {5 I& Y# D) H  d. H  W/ J! z: f/ G
        travel to pickaisle.con(A_i)! B; a  W1 O/ b' k+ ~, B
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec  }* l9 c  R  ~" m
        else wait for 10 sec, b, G3 K) I7 V3 W* Z
        if A_i=A_leave then send to die
$ |4 `  U/ R6 s/ }, J        else inc A_i by 1$ d! ?: N! t9 f) m& S2 @. ~1 S
    end
. i) h; v5 @+ Kend
' u% @3 U% ~7 u" Z* C( r; ?* I+ D2 o' y/ w& Y6 i
begin P_pick3 arriving9 Z$ D7 u. l" |
    set A_i to 21
7 d/ }+ ^8 f! Y* i    move into Q_induct3
6 r  V2 C5 Y) }* Q" L    move into pickaisle.induct30 h$ p5 Y; ?# a) l" ^
    while A_i<=30 do begin
/ u( q4 Y8 V/ U        travel to pickaisle.con(A_i)
) u7 E( I; u& F! d0 {' n3 U        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
. F% ~2 C/ \+ h: H0 B        else wait for 10 sec1 c; b7 C8 Y* G* B$ M) Q$ t
        if A_i=A_leave then send to die
% K' K+ L/ d, ]' i. u        else inc A_i by 1
, y3 E# ~0 f3 Y    end2 {  v$ |' R$ @7 @+ U
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是个什么东东?$ B2 I; [: c" Q; w$ P
move into后面,应该是一个station或control point,或者Queue/Container/Vehicle/Segment之类的东西。看你的报错信息,这个induct是个path么?
1 w: S$ w% i' b1 v5 m; O8 k* f+ l7 V! {9 l" f- B
AutoMod Editor的语法报错信息,有时候会指在下一行,必要的时候要把上下几行都看一下。
- _; I& ?7 j0 [! {+ H  \' S% T$ L7 H, C# N! d
另外,你的几个P_pick是完全重复的,建议以如下方式修改,可以减少代码编写量:
& J/ B# S0 b+ W* }) r1. 创建一个Process:名称为P_pick,number of Processes为3,其它按你的需要设置;删除那几个P_pick;
5 k6 H2 B. _. i$ A- T2. 创建一个Queue:名称为Q_induct,number of Queues为3,其他按你的需要设置并放置;删除那几个Q_induct;
) Y# a/ ^% g& f) b/ x% W3. 以如下方式改写P_induction和几个P_pick的arriving procedure的代码:
0 K* r, K7 ]# Y! ^. O( A7 jbegin P_induction arriving+ [' F+ h1 A6 O! I5 x7 L: A; G* P& s
    clone 1 load to P_pick(A_induct)
* `. U( N, ~6 P/ {1 U* u6 Dend最大的系" n" o3 M; G- z3 ]9 N1 S% z

7 L: @# O; Y& P9 ^7 }- q( abegin P_pick arriving4 V+ o9 U9 G3 |$ H
    set A_i to procindex * 10 + 13 L% v# _1 i7 G3 F1 S7 [5 O! D6 X
    move into Q_induct(procindex)
/ c% V2 ~: |& v: z7 K6 i. J2 p    move into pickaisle.induct(procindex)& {( m: D( m% z- Y6 X6 d
    /*check the type of pickaisle.induct(i), for your last problem.*/# j2 H4 \3 ?' X2 ~
1 Y5 L. L, o4 e) K6 s; a5 R
    while A_i<=30 do begin1 S4 M0 a2 {, N$ ?+ k) B
        travel to pickaisle.con(A_i)" G3 J" p  j) a/ s
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec/ _0 ?, q5 d& Y, z3 F
        else wait for 10 sec
, Q# z! u2 c/ o! o2 T        if A_i=A_leave then send to die0 C( r  X/ {& C$ C# J4 A% `
        else inc A_i by 1
/ r* F" l5 U8 [% u) ?    end
. M. r; R1 y; E1 {$ J9 u. l* Aend
$ j1 [  ~1 e' z6 J
! p; I) D  |) }- ]8 _; r0 e0 R其中的procindex为整形,代表当前process的序号。
7 b# ?& O  i2 G4 U, C0 {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-4-21 05:43 , Processed in 0.016963 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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