设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13879|回复: 2

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

[复制链接]
发表于 2009-4-4 23:58:32 | 显示全部楼层 |阅读模式
5仿真币
想请版上的人帮我看看我这段code中的一个错误,我刚学Automod没多久,实在找不出错在什么地方了,谢谢
3 I% `3 d3 r2 N5 B; W$ |4 z+ B8 T- j8 \( Y2 ?
我的问题是,在每个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中的数值,不知道会不会有什么不妥。
# [/ T& X" |6 Z3 n
, p3 l2 u% A/ C  N5 O/ Obegin P_read arriving- v8 O6 G# |/ `) G
    while 1=1 do begin
. b1 v" k& l* I4 @+ j        read A_tote from "data.txt" with delimiter "\n"
! R3 V* {' n0 z$ h, ]        read A_time from "data.txt" with delimiter "\n"# u7 z9 Y  f7 E& F# P  ]6 r
        read A_leave from "data.txt" with delimiter "\n"# l5 I  U1 L1 ]3 Z
        read A_picks from "data.txt" with delimiter "\n". P8 s" [6 g  L4 B# X# @. ^
        set load type to A_tote
) I; A% `# e9 Z. i        if A_tote="tote 1" then set A_induct to 12 U) f# Z2 ^8 Z9 Y7 q  k3 A$ X
        else if A_tote="tote 2" then set A_induct to 28 d, V, }2 \; A) v
            else set A_induct to 3   
! `3 ^) |; d& e. L, d; u! E$ e7 S* Z; |        set A_i to 0
# A6 W2 s: `3 m$ |! q% g        clone 1 load to P_induction
% E1 {. B5 w( S: q0 M! N        wait for A_time sec* \1 W% C' C9 t# |  x: Z) l( V8 O
    end( |; {$ l3 o- i8 Z
end  C2 M: O6 A6 T/ N1 ^

' a$ y# ~4 _3 c: \# \' p' Q- B9 sbegin P_induction arriving
7 l" ?# J# h1 N    if A_induct=1 then clone 1 load to P_pick1
# [8 X- m: d. Z9 l' j    else if A_induct=2 then clone 1 load to P_pick2; d3 c+ E* H6 G" E
        else clone 1 load to P_pick35 U* b# U  F3 f# E7 O6 _+ {
end
5 ~7 \0 {$ _  s" Z$ w; l! N) }% y7 z9 g  U! ?! q
begin P_pick1 arriving
  ]& F( m) ?. h0 M) O0 \6 y5 G    set A_i to 1
- z) i3 |# U' \* E7 X. h8 b    move into Q_induct1
. B6 i5 H( W/ \/ }8 ]$ E    move into pickaisle.induct1! o5 l3 u' r$ I" h
    while A_i<=30 do begin7 |1 @7 |: x: C. c2 ~; x( z$ t' \
        travel to pickaisle.con(A_i)* q# v9 d2 h; p9 E* [
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec: R/ h; l) `$ J0 C, P6 a
        else wait for 10 sec
: I( ?/ O  D6 Z3 d' F        if A_i=A_leave then send to die
$ l: F; p/ r3 k$ ]        else inc A_i by 17 z6 u) V. r; n& {' S
    end
, @" v/ p; }/ D/ c9 y* kend
  ^+ H* ~* b+ E4 P  W/ m
1 _: i# f: l/ @- @begin P_pick2 arriving$ z+ j1 Y1 b! v, ?2 t
    set A_i to 11
: s* e' n2 b( b0 ~    move into Q_induct2% h8 k" C7 N$ Q7 G! z# a- D; i
    move into pickaisle.induct2
! A3 A7 N$ M4 J0 _# ]    while A_i<=30 do begin
- ~. J7 a! [- F) g        travel to pickaisle.con(A_i)
! C$ j- W" k! G( V7 G/ H- S  w  X# Q        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec' _, a& n5 K: m$ A' d
        else wait for 10 sec
) j$ w2 ?+ a& y  B( X# M        if A_i=A_leave then send to die' D' I3 e( S# g) S+ @
        else inc A_i by 1
# ?5 Z, _  T; t2 |7 Z1 H    end+ w2 a. U# F: P# |& E
end
. S2 l' ^# d" F4 c
: ?: `! v9 P- q3 Nbegin P_pick3 arriving4 ^1 f8 h! y7 L1 \" m$ H
    set A_i to 21% K  t! l; c& p  s1 v2 }' C
    move into Q_induct3
3 n8 e( X/ v2 J! u1 s" k    move into pickaisle.induct3
. J/ l4 K& }" f" \3 M" ]9 L    while A_i<=30 do begin- F' m- u, O) ?2 c# }# I
        travel to pickaisle.con(A_i)( @  w( c& t3 E
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec( g  b$ I4 m+ D. M: i8 T8 N, G
        else wait for 10 sec
' ?$ z1 N8 D' W6 @        if A_i=A_leave then send to die, S5 ]2 v2 P8 H0 r
        else inc A_i by 1
+ p' M" u1 H' e* C4 }* U! c. R! g6 [    end
$ F: P% J1 c' B- Z, @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 y* u8 k" L% H, I/ s: a& i
move into后面,应该是一个station或control point,或者Queue/Container/Vehicle/Segment之类的东西。看你的报错信息,这个induct是个path么?/ ]9 `2 D& q% O* B% M( @$ Q

7 I* V( \( b8 E( I. fAutoMod Editor的语法报错信息,有时候会指在下一行,必要的时候要把上下几行都看一下。
  s; f9 g3 V& i: z& u
; c0 Y' b3 @6 u/ m另外,你的几个P_pick是完全重复的,建议以如下方式修改,可以减少代码编写量:
8 Q& M0 w$ x2 s; `9 \1. 创建一个Process:名称为P_pick,number of Processes为3,其它按你的需要设置;删除那几个P_pick;
/ S5 Z: `9 i2 e  v9 o( c2. 创建一个Queue:名称为Q_induct,number of Queues为3,其他按你的需要设置并放置;删除那几个Q_induct;( D6 G) f# a6 P" X& v" B
3. 以如下方式改写P_induction和几个P_pick的arriving procedure的代码:
# x9 B0 N+ f' g0 t4 w: ebegin P_induction arriving
8 c( l  G, r6 Y2 A0 P' X8 J- o    clone 1 load to P_pick(A_induct)9 [8 a, r% w  f+ B# x" N
end最大的系
( f) O7 x4 l4 y4 Z: h  r6 J6 q: |
begin P_pick arriving
6 U5 j+ |! F! [8 a    set A_i to procindex * 10 + 1
- t! j* v( u. u" Y. u' g    move into Q_induct(procindex)
4 L! A( \  f0 Y) [+ z! z) s; D    move into pickaisle.induct(procindex)( @: q' S3 h' G4 o0 G* P
    /*check the type of pickaisle.induct(i), for your last problem.*/1 R0 F) Z) ^3 j$ D
$ I# P/ Q, |& \6 d
    while A_i<=30 do begin; Z& k  j( I' d1 p1 X% j
        travel to pickaisle.con(A_i)0 c0 I" _' R! `8 E
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
# `! r9 M. {, s1 _% u        else wait for 10 sec4 b9 ~7 U" G2 T
        if A_i=A_leave then send to die
- [4 _1 I. m( G6 N7 _        else inc A_i by 1, W; q$ {0 d1 n
    end
& J# C' v/ y# b8 `! gend+ r3 p; z2 z& @

" N5 v( f+ m* A$ o  h0 i7 Q其中的procindex为整形,代表当前process的序号。
0 b( F* k& q# K2 u6 p1 {3 ^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-5-14 02:00 , Processed in 0.022428 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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