设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 15035|回复: 2

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

[复制链接]
发表于 2009-4-4 23:58:32 | 显示全部楼层 |阅读模式
5仿真币
想请版上的人帮我看看我这段code中的一个错误,我刚学Automod没多久,实在找不出错在什么地方了,谢谢
& i+ c" c4 l, K6 q+ c" K8 J, d* \9 ^8 X/ l3 B1 b# r) R* T" c0 T. v
我的问题是,在每个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* T+ j* I* z5 d6 s  a8 A
: E7 ]0 d7 u6 n8 w8 I+ R9 J0 H
begin P_read arriving
8 c3 x% D' o! b9 M, v    while 1=1 do begin( H) ~9 m$ M! |+ y' w" R- i
        read A_tote from "data.txt" with delimiter "\n"( R* X. R4 ^; @. O( Z9 s. f
        read A_time from "data.txt" with delimiter "\n"
, O  R3 k- g" W% x& H        read A_leave from "data.txt" with delimiter "\n"" x( Y* Y* F' i; d8 j# E$ ~
        read A_picks from "data.txt" with delimiter "\n"
( M! J( H9 I1 W        set load type to A_tote
, z2 O' i5 C$ d/ c        if A_tote="tote 1" then set A_induct to 1
& z; T6 u9 `! L        else if A_tote="tote 2" then set A_induct to 2
/ K4 i" n; F9 ~$ f+ ^) j            else set A_induct to 3    6 ?5 J7 Y2 V  B3 \" ~9 |
        set A_i to 06 I/ z# S4 A* r$ I
        clone 1 load to P_induction
; w+ N  ?+ _0 Z; u: T( u. S1 C( V2 r        wait for A_time sec
$ L( G: V+ [; R  y8 @  ]6 d1 d    end
7 d' J' o8 a) M: W$ J3 A, H7 eend
. G4 w3 @. y( L  L& W9 Y8 ^* K( P; X9 H* q& n: J/ D
begin P_induction arriving
6 Q1 B7 O' }: M2 F# N3 E    if A_induct=1 then clone 1 load to P_pick1
2 f" o3 Y7 s( h1 {    else if A_induct=2 then clone 1 load to P_pick2* c* e2 m8 ^; i: p; o, @8 n2 V
        else clone 1 load to P_pick3" T, z# J$ Z" i
end: h3 d/ r& {; ?" j: O# h

; W6 P  w5 F! i0 a) P3 u3 O1 fbegin P_pick1 arriving4 x; C5 i) S8 w( q  D
    set A_i to 1* W1 s* |+ e7 H7 ]1 o' S$ W9 b
    move into Q_induct1; Y/ i+ c; V- L, t5 Q1 U
    move into pickaisle.induct13 M/ B. \6 O, C1 H
    while A_i<=30 do begin6 h5 a2 k" j1 [2 v& h! _
        travel to pickaisle.con(A_i)
: K2 S3 E- M) ?# q        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
* y1 j. x# x0 R3 J; U! a        else wait for 10 sec
, L. A$ j5 @2 w" J; ?) T9 N6 [        if A_i=A_leave then send to die1 n% v# N6 q2 Z7 _* v
        else inc A_i by 10 q3 j! y  u, e' u6 _: [/ P% K
    end
1 ^; W+ g& V5 Yend
5 t3 Q, a, C, ]# g2 u
4 X4 i- r  Q$ H5 ~4 t$ Dbegin P_pick2 arriving" h  ?+ G8 k  l, X( M7 G# m6 [: W0 k
    set A_i to 119 f$ g3 i6 U5 ~5 a6 F: v9 ^6 A
    move into Q_induct2  ]9 Y) _9 c2 `$ o
    move into pickaisle.induct2" z( [# j; h" Z
    while A_i<=30 do begin
) _/ B" X# Y$ x" U        travel to pickaisle.con(A_i)' R7 ^2 t6 F: W7 N( P9 }) e9 Z
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
1 ~; }; r+ V* t2 v/ a7 y        else wait for 10 sec* H, u0 O. H( a& g1 A9 a
        if A_i=A_leave then send to die
9 q! H" u8 {- b- i/ \, K7 D0 R: `) ^/ h        else inc A_i by 1
- U" @# j+ {; n5 t$ u) I    end. X. C' @2 W4 `" l
end. X. f5 J9 `$ F  P( }' S

9 X$ Z% j! ?8 e6 H3 @begin P_pick3 arriving3 h* D, f7 c+ D# q% R& @( N* V
    set A_i to 21
8 f6 a$ v( ~0 ^* k, m+ T    move into Q_induct3, W! W( o. C* ^; f5 |) ]& k
    move into pickaisle.induct3# Y7 [- Y! h* }" |& o
    while A_i<=30 do begin, J% x: r% |! `* D# b# u6 |
        travel to pickaisle.con(A_i)
0 j  b% L1 w! v' ~! ~        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
1 }8 r$ H& r9 U, P5 T+ x        else wait for 10 sec8 d, a+ I3 l  |% L  S7 y
        if A_i=A_leave then send to die3 A6 Z$ L3 d3 G7 \; }. G+ R7 z0 \) n
        else inc A_i by 1
1 p5 e( F8 V/ I    end
/ f( J1 ^4 D2 s; Send

最佳答案

查看完整内容

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是个什么东东?  g9 t# P5 t+ B1 w  e
move into后面,应该是一个station或control point,或者Queue/Container/Vehicle/Segment之类的东西。看你的报错信息,这个induct是个path么?& {- D0 v+ t! y2 T

" C+ Z4 C9 T/ CAutoMod Editor的语法报错信息,有时候会指在下一行,必要的时候要把上下几行都看一下。
$ w* j. G" R0 G/ t6 D
1 p$ l/ ~# C! Q- I" {& l8 n3 \另外,你的几个P_pick是完全重复的,建议以如下方式修改,可以减少代码编写量:& Y4 c0 Z: z+ X. h
1. 创建一个Process:名称为P_pick,number of Processes为3,其它按你的需要设置;删除那几个P_pick;
4 c' `  x- H* y0 H8 a( F$ c2. 创建一个Queue:名称为Q_induct,number of Queues为3,其他按你的需要设置并放置;删除那几个Q_induct;
, @: _* A+ o; b3. 以如下方式改写P_induction和几个P_pick的arriving procedure的代码:
6 o- i# W1 `' i: N4 Kbegin P_induction arriving4 x" M6 X8 r1 M$ T# v, B. }
    clone 1 load to P_pick(A_induct)
* m- [& X1 O. `! N# f0 K3 kend最大的系7 J$ q+ g  {6 O1 K4 ~
) M' O! _, @4 r# K' a
begin P_pick arriving
3 a. Z7 W- K/ a/ E    set A_i to procindex * 10 + 1
3 R& h( D0 ^8 F  E    move into Q_induct(procindex)9 n, A% i: Y& o
    move into pickaisle.induct(procindex)
/ s  I) h2 D! `* [    /*check the type of pickaisle.induct(i), for your last problem.*/
9 u' ^9 ?6 U$ j5 _. ]. {, H8 K# r1 O* B; L$ R+ }
    while A_i<=30 do begin
9 Z$ m3 ~8 m2 a! Z        travel to pickaisle.con(A_i)
% z; D' Z; i8 x$ p        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec& d" M% q9 o4 `% B2 `9 w5 n8 a
        else wait for 10 sec2 X5 b! b$ i2 P1 [( U1 n. O( X
        if A_i=A_leave then send to die
2 W( E2 [) Q4 S# x+ z        else inc A_i by 1! K7 b) {7 c! P3 V+ U( h7 X
    end
! \" P$ o, B0 b: v- Y2 L: lend. U6 c: v. s. Y4 C* @

- M2 ^4 a1 K& L) j7 V5 Y* b, N$ R) j& T其中的procindex为整形,代表当前process的序号。
! G3 g, `8 g" D' ^, dstation和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-8-5 13:35 , Processed in 0.015843 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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