设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14467|回复: 2

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

[复制链接]
发表于 2009-4-4 23:58:32 | 显示全部楼层 |阅读模式
5仿真币
想请版上的人帮我看看我这段code中的一个错误,我刚学Automod没多久,实在找不出错在什么地方了,谢谢
1 R& N3 ]! L" t; T9 o
+ _: I: u; B% J& d  S0 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中的数值,不知道会不会有什么不妥。
) J5 _) [$ W' v' Z' i: k/ A/ a4 \. e: X+ n
begin P_read arriving
* g5 R& U" S; o) R( M4 t( g    while 1=1 do begin
0 x# R/ k4 O+ }7 {6 |% U/ J$ ~( k        read A_tote from "data.txt" with delimiter "\n"/ q) {, }. z8 r0 r+ p& A) e
        read A_time from "data.txt" with delimiter "\n"; i* ]& D! ?0 ~! C5 }. t3 M
        read A_leave from "data.txt" with delimiter "\n"- \% q, O# \: Q' S* ?
        read A_picks from "data.txt" with delimiter "\n"
* Y% J  V, n5 ?( s8 {        set load type to A_tote2 W& w+ p+ `' x, ?. P
        if A_tote="tote 1" then set A_induct to 1
2 v' g9 L% T4 k; P        else if A_tote="tote 2" then set A_induct to 2
2 p  H+ b- W9 u. J3 k: }% F% Q            else set A_induct to 3    1 Z3 M, n1 O( ~6 J( q( K: v
        set A_i to 0
* M) e/ l" _" y        clone 1 load to P_induction
2 C. w! x# J2 U3 d. z        wait for A_time sec6 y) h, K6 B# b/ V3 N
    end" H0 V2 f- o# n8 V9 k
end
# ?8 B; H- }$ Y4 E" b5 g
/ ^3 V0 Y! i: wbegin P_induction arriving
9 S, ?3 A: C: W: u6 d# u5 n4 i    if A_induct=1 then clone 1 load to P_pick11 \- T+ y/ Q' z: D5 h) f2 i) U* W
    else if A_induct=2 then clone 1 load to P_pick26 k0 W* U" o* E0 x( |6 N
        else clone 1 load to P_pick36 R$ J3 X4 [# f; a5 O, [9 J
end9 P) U; l0 C7 {, |6 N* P
, e, r# p5 ?6 o  H7 P) D. y) b
begin P_pick1 arriving
- _$ ~% J  [7 W* w    set A_i to 1
$ x. |5 h* @0 C    move into Q_induct1
9 O! p5 l6 Z$ }& R    move into pickaisle.induct1
! I4 S3 p( X& T+ H! e    while A_i<=30 do begin
) L/ @8 B$ M: r2 f$ ?& ~, F        travel to pickaisle.con(A_i)
4 G$ |+ _9 O' e- p! t$ y3 n4 |4 x        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec5 y1 @" ]% {1 q8 w1 H* A7 L
        else wait for 10 sec
0 j! \& y% x* R2 h* G        if A_i=A_leave then send to die+ v4 n3 [' [3 Y
        else inc A_i by 1
% V+ `* H4 ]- u- C5 E. Q, _    end- h6 {1 V2 j3 H# y& t3 C/ C
end
  h& k# z; T4 `: U
1 j2 C5 n+ d. r3 Cbegin P_pick2 arriving" ^: j; ?& v$ e/ ]# b. l7 Y
    set A_i to 11
+ o4 U2 r' X! o. U9 ~0 d; ?    move into Q_induct2% {% j! T# T0 c
    move into pickaisle.induct2
4 c' P: A6 m: z: v    while A_i<=30 do begin$ g% ]/ j  m4 d
        travel to pickaisle.con(A_i)2 ^# x0 s7 P0 j7 d/ q
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
: ~, C$ l. W- ?: C- _        else wait for 10 sec
9 @' u# x, u% O" E4 o        if A_i=A_leave then send to die4 g: z7 N0 T% M5 s
        else inc A_i by 1; p5 B/ H, ]. w7 W6 H1 C7 k3 |8 e
    end
1 A+ R5 |/ s- W7 nend) v: t8 p' o# c5 r

, G  w7 s3 x2 f2 O3 L* t- qbegin P_pick3 arriving
6 L+ p, p0 t6 R. B    set A_i to 21& N0 {+ }7 ]" X% N/ ?# |4 E5 H
    move into Q_induct3, v0 I2 Z' E$ ^* p
    move into pickaisle.induct3" `. d! I8 P2 }: n
    while A_i<=30 do begin2 q6 ~. S7 k% _, Q3 C. D. ^
        travel to pickaisle.con(A_i)
6 ?; {% G, x: m) r, [        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
- j4 O" L! b- Y$ B        else wait for 10 sec! M3 i/ M) N  T% ^" W! t
        if A_i=A_leave then send to die5 B) \# {+ w, \. G* Q
        else inc A_i by 16 n2 B& T" H, F% }0 v% `* k  K
    end7 h3 C9 r( j/ |2 I# o$ V" b
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是个什么东东?2 a8 `: O- `& E! _* {8 q
move into后面,应该是一个station或control point,或者Queue/Container/Vehicle/Segment之类的东西。看你的报错信息,这个induct是个path么?* d# y! m) E& G4 J. u# W

' {* T# g( y4 y. ~% gAutoMod Editor的语法报错信息,有时候会指在下一行,必要的时候要把上下几行都看一下。, {) H8 ~4 d$ x

3 V  h9 {) k: q# G) a8 Z: w) J另外,你的几个P_pick是完全重复的,建议以如下方式修改,可以减少代码编写量:
- [7 f# B% n' D4 w( `$ p5 d4 S1. 创建一个Process:名称为P_pick,number of Processes为3,其它按你的需要设置;删除那几个P_pick;
5 S+ r5 c( g  H0 U1 t4 c2. 创建一个Queue:名称为Q_induct,number of Queues为3,其他按你的需要设置并放置;删除那几个Q_induct;
* l& l7 E8 o* v3. 以如下方式改写P_induction和几个P_pick的arriving procedure的代码:4 T+ Y8 N7 \; t) d
begin P_induction arriving
; X- Q' G0 p5 K: C( y4 O    clone 1 load to P_pick(A_induct); M. E6 t  Y7 |' S! o6 i
end最大的系
! ^5 \9 z# [0 s% v5 {
$ Q% Y% j9 U+ o) pbegin P_pick arriving
* I0 \8 H* N! P  ]* V    set A_i to procindex * 10 + 1
5 T3 V/ G4 c: t7 l& e# E6 |    move into Q_induct(procindex)! r' ]7 S% u7 S8 r, z/ V9 B8 H0 W, Z: }
    move into pickaisle.induct(procindex); @0 o7 |, y; U. O7 @3 v$ _
    /*check the type of pickaisle.induct(i), for your last problem.*/) ^! R6 \+ E2 V& k0 w- U5 o/ h
; `: U$ Y0 ~8 w8 _0 U
    while A_i<=30 do begin
! e# H! ]3 \5 \6 a1 a        travel to pickaisle.con(A_i)
8 H6 T0 w" h! x8 B        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec# F! v" E' X! B. F& w8 u7 M$ M' o3 y
        else wait for 10 sec
- C( N* i1 o) j+ v7 }; L* S        if A_i=A_leave then send to die  q* R% C/ K  a$ T
        else inc A_i by 1
; A& v) j$ ?4 {! |+ a' M) e9 F& P    end% `2 B( U8 w. K* p" y# ^
end- L/ |1 I9 p8 D6 m- s5 a5 ^

4 m: W! S: x6 I! m( f4 S2 L其中的procindex为整形,代表当前process的序号。8 |3 p0 _+ w$ _4 X8 f+ c
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-13 13:42 , Processed in 0.014646 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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