设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14802|回复: 2

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

[复制链接]
发表于 2009-4-4 23:58:32 | 显示全部楼层 |阅读模式
5仿真币
想请版上的人帮我看看我这段code中的一个错误,我刚学Automod没多久,实在找不出错在什么地方了,谢谢
% s2 s/ ?! F/ r& g, k1 l; O. r2 l& I9 Q; d/ \# l) R
我的问题是,在每个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中的数值,不知道会不会有什么不妥。
- l/ |0 u/ x: z' q: H6 t1 \- D8 B  |$ f
begin P_read arriving
4 w! ]! ^! B% ^% H/ R    while 1=1 do begin
9 |+ ^- f) P1 W4 P! K        read A_tote from "data.txt" with delimiter "\n"
3 Y. n0 t+ A/ B7 a" Q        read A_time from "data.txt" with delimiter "\n"" Q& I+ P$ b7 l- g5 Y+ p+ x6 j8 f
        read A_leave from "data.txt" with delimiter "\n"+ n( q9 C8 M$ U3 ^7 ~
        read A_picks from "data.txt" with delimiter "\n"
6 E. c2 ~0 `' I6 f        set load type to A_tote  R: l: T$ b  F* E8 j2 e
        if A_tote="tote 1" then set A_induct to 1
7 O+ t, _0 Y' j0 u        else if A_tote="tote 2" then set A_induct to 2/ H- e- u) y* I* Y- C6 `  A2 i
            else set A_induct to 3    + z% M$ D1 D% T9 [
        set A_i to 0* m1 I8 D: Q- E' N9 v4 R: x
        clone 1 load to P_induction: `1 Y5 M' F* ~/ K: q
        wait for A_time sec  j' \; M5 `: L5 [' J( E6 f. u' h* B
    end
$ i* U0 m# `5 Jend  j( h+ Q3 W( \* a$ A4 B

) ^' N1 @% a) {2 F. b# c" D: Ebegin P_induction arriving
9 d% Z. ?# u- ]# ?0 y0 \: \    if A_induct=1 then clone 1 load to P_pick1
% k2 p/ I: \, E) r$ u    else if A_induct=2 then clone 1 load to P_pick29 z5 }" O5 ]6 [$ g4 {. K
        else clone 1 load to P_pick3
0 n( _6 E' V* Mend4 |3 P* T0 I: t4 E. \) e: j
( I& Q5 {4 h( s
begin P_pick1 arriving
2 t9 f0 D+ ?+ R$ {% T" L# g    set A_i to 1
2 \: g* l$ i( `6 [9 W    move into Q_induct16 v6 i' }  s' V2 D8 ~
    move into pickaisle.induct1
9 `9 |* r. {- P& H1 U* q# H    while A_i<=30 do begin
& Z( I" [! l3 Q; d/ T( k( l$ \- K        travel to pickaisle.con(A_i)
( `* H/ b$ N8 [9 ~        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
! _7 Y2 Y& {5 R" t        else wait for 10 sec
5 i  }: F1 a, Y. r) S) r$ a  Z' Y& r/ C        if A_i=A_leave then send to die
8 c/ V- h# d, Y( Y4 {" M$ L        else inc A_i by 13 W4 w3 k. ]* m0 W$ y/ ^* S, V* {; `
    end1 ~2 y- s4 K- f. X% S' m' u+ R* T
end
0 A8 s, W( r- k5 d% a5 r) K
3 E3 R% w3 A# h) j/ ^) K; K/ gbegin P_pick2 arriving. }0 ]1 b2 A0 L5 p
    set A_i to 11& \3 k6 D" b+ Q' N
    move into Q_induct2
9 p5 ~. d4 ~  s- Z# j    move into pickaisle.induct2
3 m; y) i5 ?' N    while A_i<=30 do begin
1 ^( g% n4 ]& V        travel to pickaisle.con(A_i)
9 B! U! O' m% w, D        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
* a* v% g: u) b9 i0 u) k4 H        else wait for 10 sec% M5 W# Y1 [0 r9 M3 g  N7 L; ^; c
        if A_i=A_leave then send to die* o; W6 T8 A: v. U0 ?
        else inc A_i by 10 l4 a5 `  I! u8 K# T! `: K
    end) S. B6 L- `) `* v, _% _
end
# k: x# v3 Q2 N( j/ ~! ]1 |3 X; q- h3 v; c
begin P_pick3 arriving
. K+ R0 I. D1 R0 k3 n& c4 M! w* ]    set A_i to 213 c* ^6 C/ I* m: n9 k' A9 z# e5 {
    move into Q_induct3
, [8 k0 k! N: ]; E. Q* T( ]    move into pickaisle.induct32 e" v6 Z$ P7 p( s2 A6 w# I
    while A_i<=30 do begin
+ \( Q4 Z; \7 O+ n  w" M        travel to pickaisle.con(A_i)
. W% j% Q, [# \0 U  u        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
: G& u; l; \6 e1 s1 Y! Q+ [5 W        else wait for 10 sec
9 k" F: o+ t% K, E, {# N8 O        if A_i=A_leave then send to die# @3 `; x4 }3 B: r3 Q
        else inc A_i by 16 f+ D0 q! V" E
    end* _/ `4 A6 R' Z1 U3 `+ 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 C/ I/ p( J' f5 S) w. l7 l& zmove into后面,应该是一个station或control point,或者Queue/Container/Vehicle/Segment之类的东西。看你的报错信息,这个induct是个path么?/ }- i& R7 g" j/ H' U  z
; m: ~2 K0 P1 {% b& ?* n8 r
AutoMod Editor的语法报错信息,有时候会指在下一行,必要的时候要把上下几行都看一下。
% t4 b7 r2 C" M" T0 s7 H' |4 o* I0 [
另外,你的几个P_pick是完全重复的,建议以如下方式修改,可以减少代码编写量:
0 V8 [3 N1 ]5 x1. 创建一个Process:名称为P_pick,number of Processes为3,其它按你的需要设置;删除那几个P_pick;
$ `. Y# w3 @, v, p: T. O% i2. 创建一个Queue:名称为Q_induct,number of Queues为3,其他按你的需要设置并放置;删除那几个Q_induct;
& g* m7 @5 X) j) k: x0 F3. 以如下方式改写P_induction和几个P_pick的arriving procedure的代码:
: u$ r/ o# J# J+ g" s2 R; wbegin P_induction arriving
4 e" M- F: s$ b$ V    clone 1 load to P_pick(A_induct); H# c) v% ?( `9 O" g
end最大的系
% M3 J$ V6 `0 ?* `! \' N  {
7 Z* E; R9 M# b7 Gbegin P_pick arriving
; _% w; B  N3 L* X1 Z( t    set A_i to procindex * 10 + 1
+ x* k' y1 C* p0 U' j    move into Q_induct(procindex)( ?& B1 r9 O; |$ o
    move into pickaisle.induct(procindex), R) T$ U+ M. q' c& h) L
    /*check the type of pickaisle.induct(i), for your last problem.*/- \: E' O3 Y8 z+ e  f' v/ U
2 q9 ~$ |7 G6 o9 l1 Y/ @
    while A_i<=30 do begin
- L% V: J* ]; d3 |        travel to pickaisle.con(A_i)
7 n6 a$ [" O+ U' ~+ D        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec' ?, J- d+ N, R- q1 z# F
        else wait for 10 sec3 `# ~& G  F& s* {9 K2 s# L- ^; T
        if A_i=A_leave then send to die/ `% s. ?: ]( N* z$ s  Z
        else inc A_i by 1" D% I9 U) R; V0 h
    end
# B* Q2 S' {) Z3 s. Mend
9 E' l, b& k4 _  h: \$ {/ a1 g9 D% M  D' u. h0 ~
其中的procindex为整形,代表当前process的序号。9 ]# W  H5 a! V& p/ O  u% r# m
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-27 06:12 , Processed in 0.014334 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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