设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 15470|回复: 2

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

[复制链接]
发表于 2009-4-4 23:58:32 | 显示全部楼层 |阅读模式
5仿真币
想请版上的人帮我看看我这段code中的一个错误,我刚学Automod没多久,实在找不出错在什么地方了,谢谢/ h% U# H) u$ C
1 s% b7 X: Y+ w% [; D, e
我的问题是,在每个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中的数值,不知道会不会有什么不妥。* \. M- N- S5 k( q; B) c  H: \! T
& H3 N, s3 `$ G0 M8 Q5 b
begin P_read arriving+ \+ r8 M1 ]2 R  N1 ~
    while 1=1 do begin
" @) N' e# v" t1 i  o' C        read A_tote from "data.txt" with delimiter "\n"* d1 Y, j. Y4 ?9 }4 V& w) n
        read A_time from "data.txt" with delimiter "\n"4 r% x% q% N% \6 j/ d1 U# s
        read A_leave from "data.txt" with delimiter "\n"" d5 l2 y8 m9 U9 F* u- y; X
        read A_picks from "data.txt" with delimiter "\n"
7 k* K% \# R8 N        set load type to A_tote
2 b0 _- Q1 w9 a. y5 K) o' Z        if A_tote="tote 1" then set A_induct to 1" l" s8 u( j4 v6 ~1 S
        else if A_tote="tote 2" then set A_induct to 2
! O5 Q% r. |& l/ ]: ~9 h4 H- H            else set A_induct to 3   
. {8 T6 G8 e- g        set A_i to 02 }; m8 z5 w/ s- k9 J
        clone 1 load to P_induction& A5 c( D1 `5 u; ~  c( W: G2 [! q
        wait for A_time sec5 w% L5 l% {  Q  w5 q- d
    end/ ^! W4 [  R1 }& p/ ~
end
7 _1 B3 s3 G* |
3 `9 b! @- ~6 B8 P5 r$ Abegin P_induction arriving& a2 \& k( u8 a3 e
    if A_induct=1 then clone 1 load to P_pick10 |" g+ }- F9 S! \1 S% k
    else if A_induct=2 then clone 1 load to P_pick2
; a1 S$ j) b! y0 [        else clone 1 load to P_pick3- S$ S$ H8 i3 K1 U! c1 V& W
end& a8 t; q5 h3 d- y' y

+ j3 |+ }6 Z! c: f8 Pbegin P_pick1 arriving
  b, |: J6 o. b    set A_i to 1
; n* G4 s1 `- j' z    move into Q_induct1
1 X/ g2 d/ k/ `, @6 W) H2 a    move into pickaisle.induct1& d8 M  h, L2 A/ q
    while A_i<=30 do begin4 z* o/ d' D4 m
        travel to pickaisle.con(A_i)
  W6 p2 {3 d# E$ ]  P        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec, S" Z% N% b0 A1 R8 v  r1 Z
        else wait for 10 sec
  {; S0 Y! e2 R# ~. R3 ^& C        if A_i=A_leave then send to die9 H' X9 Y0 e2 \7 T
        else inc A_i by 17 Q9 R% _2 }. d
    end: [. R6 r/ V( z- m) E. h3 f
end
7 p- q# V! Q. [% R
0 e7 k. p3 `) Cbegin P_pick2 arriving' m5 C. V6 Y9 l/ W' Y5 e
    set A_i to 11
, C; ^# i+ f. u    move into Q_induct2
$ b+ i4 l( D3 [7 m" h    move into pickaisle.induct2
0 D' T% r# N4 C+ r: w    while A_i<=30 do begin5 H& E! V5 d) T& ?# ~! K
        travel to pickaisle.con(A_i); b4 v2 F' T' C
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
- a& ~$ x7 N5 y+ d+ I        else wait for 10 sec5 A" q, c& U' |, K" A' K2 ?
        if A_i=A_leave then send to die5 L- d+ u0 p" b" U9 K& O) C
        else inc A_i by 15 `$ R' L) |. ~# d4 x: U2 ]
    end
2 g8 V  c) q% O) M" ^$ aend5 s& B4 l. ~% E1 V
3 E) W. q! C/ U6 i+ J2 R- @& y; _; q0 k- Z
begin P_pick3 arriving2 `  S9 y; |) A7 h
    set A_i to 21
. n1 I9 i( U! ]. r9 T  @    move into Q_induct35 B& b! X6 F1 H3 t
    move into pickaisle.induct34 M) N5 s! A! J* Z, M8 ?4 A
    while A_i<=30 do begin' v" X  p! L8 ]( r
        travel to pickaisle.con(A_i)& r$ Z( @& P6 _, {: d" ?) B3 p
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec- |7 n% s2 ]2 t' ]: {
        else wait for 10 sec
3 _! v  Q0 G0 W3 t9 X. \        if A_i=A_leave then send to die
: l4 y8 N3 P- ^6 O        else inc A_i by 1) l0 l" T& s8 l2 {* j
    end0 }$ [9 y  X; _6 ^5 L, C& y
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是个什么东东?
3 `" A- f, d& k5 rmove into后面,应该是一个station或control point,或者Queue/Container/Vehicle/Segment之类的东西。看你的报错信息,这个induct是个path么?
" ~: r. \! n/ y  `1 W' k/ o% f5 w, l8 p' i; B
AutoMod Editor的语法报错信息,有时候会指在下一行,必要的时候要把上下几行都看一下。* I* o# l- q; z( }8 u" k: l1 d; d
& b& }4 f' L! v- V3 {
另外,你的几个P_pick是完全重复的,建议以如下方式修改,可以减少代码编写量:1 x. |4 |0 v( w1 K8 S7 K0 b2 d
1. 创建一个Process:名称为P_pick,number of Processes为3,其它按你的需要设置;删除那几个P_pick;
8 x6 h" N0 Q! I( I% J3 `6 r. |; I2. 创建一个Queue:名称为Q_induct,number of Queues为3,其他按你的需要设置并放置;删除那几个Q_induct;
' C4 U2 v4 [) {; f' o7 r, t% H3. 以如下方式改写P_induction和几个P_pick的arriving procedure的代码:
% h, L1 z7 _- Cbegin P_induction arriving
4 V  m) {2 Y. g. _    clone 1 load to P_pick(A_induct)
! v/ O/ {% M- f6 O5 hend最大的系
6 m7 N( T; K+ B) z7 e' i6 v" Q" A# W9 p  h; ]
begin P_pick arriving
' E& y# I# w' W/ k/ G$ ], ^    set A_i to procindex * 10 + 1
% ^# G' t4 v" j" s  z- L7 e; p1 X0 I    move into Q_induct(procindex)1 C2 F8 H/ i1 \
    move into pickaisle.induct(procindex): s4 o& k2 `* v
    /*check the type of pickaisle.induct(i), for your last problem.*/4 f1 s. y; N& d+ O

6 t- V5 J2 ]" |    while A_i<=30 do begin$ `; X( P. a2 ?& C( s7 H3 N
        travel to pickaisle.con(A_i)! b, H$ k' f2 C3 N) S9 T% M% d' `
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec7 ?' }7 Q3 R+ ~; Z: _' _% f+ P
        else wait for 10 sec* i! e- }3 n' P
        if A_i=A_leave then send to die
. |. q$ F3 k  x4 f        else inc A_i by 1
' e# c! X  y5 M6 P) T    end
8 w1 T1 g, {: J- k3 ~7 z( c4 A0 \end
; P/ I) U3 E( ^+ R! U3 K, f% }5 d* W) K( [" r7 S
其中的procindex为整形,代表当前process的序号。  ]7 j* Y% W  L, l1 L* S7 [
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-9-12 15:23 , Processed in 0.015396 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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