设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13735|回复: 2

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

[复制链接]
发表于 2009-4-4 23:58:32 | 显示全部楼层 |阅读模式
5仿真币
想请版上的人帮我看看我这段code中的一个错误,我刚学Automod没多久,实在找不出错在什么地方了,谢谢
! L/ Z. ^1 ^: Y# d8 O
# K, L' J5 P$ S2 C9 c) Z我的问题是,在每个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中的数值,不知道会不会有什么不妥。# G0 Y! i+ K) r9 `( b0 y# ]

& ]! M. W; A! X# d1 {6 Vbegin P_read arriving# A/ t3 }- ^' J7 o- `
    while 1=1 do begin
$ K* B- p( K& Z7 `( q        read A_tote from "data.txt" with delimiter "\n"
  q7 Y2 p* L- j* i! r& b+ B        read A_time from "data.txt" with delimiter "\n"& H5 V* h! q: [; C
        read A_leave from "data.txt" with delimiter "\n"0 P' A0 e9 j1 Q% ^$ Y, |% |  ]
        read A_picks from "data.txt" with delimiter "\n"
' B; L7 [. ~! S/ l3 q7 _9 h0 k9 d        set load type to A_tote3 Y, q. l$ E9 a
        if A_tote="tote 1" then set A_induct to 1! X1 v3 \( {( U( a& j( `
        else if A_tote="tote 2" then set A_induct to 2
/ y/ `. C0 ?2 y+ T, U% o4 l; G4 c% F            else set A_induct to 3    6 s3 u+ T# S/ s/ M
        set A_i to 0) W- P1 a; \( b5 j  h$ ^: D# ]
        clone 1 load to P_induction- Z" U0 v, ]. N9 _7 `9 H& ]
        wait for A_time sec! ^& F1 s5 I* ]+ u
    end
' V  E* f$ r2 A. Fend
0 O: ~$ w" |  x  Q1 ?8 |/ U/ q, v$ m$ q/ D$ q
begin P_induction arriving
- v8 u% }2 O4 ^% ~1 u1 R4 t    if A_induct=1 then clone 1 load to P_pick1
0 c& ]( T3 h7 G2 j    else if A_induct=2 then clone 1 load to P_pick2) t5 w9 ^( X' J6 k" c5 i9 ?* q; M
        else clone 1 load to P_pick3$ u2 E9 H0 s3 W% [' y' U# S) L4 C
end
- V; ?) ?+ H5 w3 Z' T" ]8 k
7 \& V- \1 J% v! t9 P+ o2 Y" @! F8 F9 ^begin P_pick1 arriving* Q. Z+ R6 n0 x/ @1 z' y
    set A_i to 1% v! c+ _: X+ w6 A' g
    move into Q_induct1. ]# Y" d8 `; x
    move into pickaisle.induct1
1 N" c5 G, E7 t    while A_i<=30 do begin
3 I! R/ J4 F8 @! O% t3 h+ z8 X9 i* v4 Y        travel to pickaisle.con(A_i)
( [% Q1 p2 Q' p; `8 j; J1 w+ p7 s2 ^        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
/ J0 g1 O. X! K/ }1 J        else wait for 10 sec
3 m+ ]( G; v8 y5 l) L% W2 K- X        if A_i=A_leave then send to die7 w3 O% q( v- ]* n' h) M! ^
        else inc A_i by 11 V9 J" B% \: d
    end
4 A7 q, z9 i+ L) w6 ^3 f$ W- O( Qend
$ u9 I: }, V/ t9 l% e
- e, v) U) U$ j9 t; R8 Ibegin P_pick2 arriving- ^: b. r/ r! |7 I  g5 N. r5 m0 O
    set A_i to 11
5 n" |: C  m4 ]$ ]6 M: j, F4 c    move into Q_induct23 W& R/ B# b3 q! Q4 `7 ]- Z* L
    move into pickaisle.induct2- Y, u8 ~% j1 \8 g  N
    while A_i<=30 do begin8 X2 O1 W$ ~* o* S' Y
        travel to pickaisle.con(A_i)" }) ?$ X( B  w/ r& i' z7 J
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
8 y/ N9 P7 n6 u4 B4 a        else wait for 10 sec
7 V' d' [* w. a! E        if A_i=A_leave then send to die) x# R% y% i) |6 V
        else inc A_i by 1
/ O; E, N# l) d: o- Y2 W4 Q    end
' K' w% U* X1 U8 ]9 ]% y% O! Z& |end/ e; o. e$ ?! }4 _3 J7 V

( p8 e/ r0 \$ T' P; N3 S& Ibegin P_pick3 arriving
% @8 ]# P+ R( I" I$ ?    set A_i to 21
  d( K% T! Y5 n    move into Q_induct3$ M7 e/ N1 c: f! V9 J  A; \
    move into pickaisle.induct3/ O5 r  B6 l1 J
    while A_i<=30 do begin
# |+ d% d! B  m" J% c9 ^        travel to pickaisle.con(A_i)2 Z& O- i1 w* P9 L% T/ P
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
- }" I& a5 l& s8 O        else wait for 10 sec# L* u( H& b4 N: y8 F" K
        if A_i=A_leave then send to die) i; c; G' L) p, n$ r
        else inc A_i by 19 M5 t2 a- [- j* y8 q( \1 M9 p
    end1 X* N: v$ ]1 c0 l$ }, b8 d
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是个什么东东?
! u: ~# f4 f5 G9 Gmove into后面,应该是一个station或control point,或者Queue/Container/Vehicle/Segment之类的东西。看你的报错信息,这个induct是个path么?
0 p( n, h5 \" q0 q3 n4 u
2 m5 A! S5 |$ m& U7 y  B4 XAutoMod Editor的语法报错信息,有时候会指在下一行,必要的时候要把上下几行都看一下。
6 A1 O4 J0 k- k- X# {; {1 H6 j' o* ?3 l# Z1 d& t7 ^0 v4 `
另外,你的几个P_pick是完全重复的,建议以如下方式修改,可以减少代码编写量:
( _7 p& ~/ H& e/ n* j1. 创建一个Process:名称为P_pick,number of Processes为3,其它按你的需要设置;删除那几个P_pick;& M: t2 M8 r* `% M" k  d. f  a
2. 创建一个Queue:名称为Q_induct,number of Queues为3,其他按你的需要设置并放置;删除那几个Q_induct;
4 i* ?2 H6 ]" Q% }0 W' y& x3 \3. 以如下方式改写P_induction和几个P_pick的arriving procedure的代码:0 B, ~) `7 `/ Y+ k% k' D
begin P_induction arriving/ a1 T3 M( P9 }1 i; Y0 Q
    clone 1 load to P_pick(A_induct)6 K* x6 q/ z, Z2 D) x4 N
end最大的系  G5 s% y1 e- r, v+ k
' q+ s' ~& p& v) I
begin P_pick arriving
2 u$ i: V8 _/ C6 x0 b5 C& ^" G    set A_i to procindex * 10 + 1+ w" u7 Q9 R1 U" Z
    move into Q_induct(procindex), {! y. W2 F, s# v+ x$ v
    move into pickaisle.induct(procindex)$ M7 `! H5 s* U# k# t
    /*check the type of pickaisle.induct(i), for your last problem.*/
+ X" O4 y* r' B  C, d$ Z: B6 W# `7 y7 [4 X. L
    while A_i<=30 do begin( @( H0 Z' q# K3 Y1 A+ g. ?
        travel to pickaisle.con(A_i)
( _. a& v( h) ~7 s1 R        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
- i0 s8 a0 n, h3 `/ v8 }* [  Y        else wait for 10 sec1 t1 G6 }1 l8 n  V. f$ |* l1 h
        if A_i=A_leave then send to die
. b! s! x4 y. i: n, e# N        else inc A_i by 1( ?5 |* F6 h; P' U8 a  e
    end( {% N4 E/ w' @1 x0 s
end. x* m, ~/ }) n

* b. ?$ e4 C' z% e其中的procindex为整形,代表当前process的序号。
: _1 x( e. |: X2 e: c( fstation和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-1 20:45 , Processed in 0.028552 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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