设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 11417|回复: 2

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

[复制链接]
发表于 2009-4-4 23:58:32 | 显示全部楼层 |阅读模式
5仿真币
想请版上的人帮我看看我这段code中的一个错误,我刚学Automod没多久,实在找不出错在什么地方了,谢谢* D* {' n0 C9 K& ~" K  x
1 q" c$ e, Z& s& z: Z2 H- V! ^2 t
我的问题是,在每个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中的数值,不知道会不会有什么不妥。" [8 y; E1 ^% }' Y  ^# x8 A3 U

# T% @  ]  E$ X+ Xbegin P_read arriving
3 W) ~7 F8 {& f6 R/ u    while 1=1 do begin$ M# o# {% k7 J* s# ?
        read A_tote from "data.txt" with delimiter "\n"
+ ?7 m! R5 D7 g" x& t        read A_time from "data.txt" with delimiter "\n"
7 m4 J# C4 ], Z        read A_leave from "data.txt" with delimiter "\n"% D3 w2 N: d5 h8 q4 g& Y& d
        read A_picks from "data.txt" with delimiter "\n"
/ N5 w; N0 V; E        set load type to A_tote/ w5 x! X  B  S  c, q: b$ D/ {
        if A_tote="tote 1" then set A_induct to 1) r/ Q* J* s( q
        else if A_tote="tote 2" then set A_induct to 24 H. {! Q# ^$ L
            else set A_induct to 3    , Y$ h' T7 g7 @, y) f
        set A_i to 0
% D2 {# n8 e4 ^        clone 1 load to P_induction: w; T3 |# P/ T' W' P
        wait for A_time sec# _/ \: g# W: M
    end' ^& U* E) L  D' ~& r
end4 k" }; @4 l, B( a9 ]$ V! r& u+ |+ @
& P  U& |: Y# \* a6 S
begin P_induction arriving
6 l/ h7 z, r2 h$ N3 ~% i    if A_induct=1 then clone 1 load to P_pick1
8 k8 U1 g( B& B! Q# @7 p( I    else if A_induct=2 then clone 1 load to P_pick2
. k* j2 E1 k7 m3 \0 R        else clone 1 load to P_pick3
! ^/ ^+ Y, i$ p) @end
% T: n0 ]' Q. i9 e  `8 m/ X8 h! p
2 L9 R+ t6 G* B- @begin P_pick1 arriving
, O8 R! e8 c6 }    set A_i to 1; v" U$ r8 }+ R+ D/ X9 ]+ ?
    move into Q_induct14 C" K( p0 n, i+ |! H0 q2 U7 r
    move into pickaisle.induct1/ a, V, K  [; R' Z3 I( j6 l5 f% p4 |
    while A_i<=30 do begin1 O  E  ?1 E& L9 q2 L  A
        travel to pickaisle.con(A_i)
+ E) K0 R: S* \1 j9 A        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
" u8 k1 d; t1 c5 Y  R$ r        else wait for 10 sec
0 f6 T3 L) Q. \+ h+ o& p0 r8 p: i3 {        if A_i=A_leave then send to die
, {0 y" r: h' q$ _  j        else inc A_i by 1
" f2 g! m. o! S7 D7 ^; ?2 u    end/ n+ G" t% h9 Q: b( A
end
( k% f1 |0 G% k* r: B
5 E0 j4 K7 k+ ~% _7 p8 c. Dbegin P_pick2 arriving( n+ W/ g% T! ^: z$ {' I
    set A_i to 11. K; n# s4 F) N8 r) b+ h7 B5 `
    move into Q_induct2
" S, Q/ Q7 K9 N! q7 |    move into pickaisle.induct22 Y! Z" X8 `* Y  v& R$ b1 @5 d
    while A_i<=30 do begin$ U; ]+ [4 c) }# F* m
        travel to pickaisle.con(A_i)0 e: I! S  _( j* b4 o
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
, ?6 T3 q# T2 p( p        else wait for 10 sec
2 t0 J" z# k$ K5 n  |        if A_i=A_leave then send to die
' Q1 E' u' \% a% v        else inc A_i by 1
* @; I3 T8 n) [7 Y1 j& k& |. t+ i    end! V7 Z4 H2 D: Q6 T! t$ Z/ p) E
end
& X/ S# Z' j3 _3 u# G5 e9 I# \5 q
% Y0 x1 Z1 d' d$ i  P9 Kbegin P_pick3 arriving
! g% J" F2 [8 c4 Z) Y( M  G    set A_i to 21( P7 \1 A8 d9 x
    move into Q_induct3
8 n( G1 c3 T3 e    move into pickaisle.induct3
3 g1 I5 `9 r7 k    while A_i<=30 do begin
, Y7 E$ t2 h- u- r8 _        travel to pickaisle.con(A_i)
7 v" n: p" c0 r; d  I" I, K# r        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec( E3 g- o% z! u! e7 t
        else wait for 10 sec8 {' O8 u0 y' _3 k3 q/ K, j
        if A_i=A_leave then send to die
) V1 M3 Z, Y# A% v$ F: c$ _' z6 k6 G        else inc A_i by 1
  b' B! a; [- Z* Z    end
3 ^; D8 ]: M5 U7 o2 f8 nend

最佳答案

查看完整内容

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 L' F; Z- K- Q/ N' }move into后面,应该是一个station或control point,或者Queue/Container/Vehicle/Segment之类的东西。看你的报错信息,这个induct是个path么?
) k8 l" A" t5 q  f# z; U; h8 q. u" }, H# Y( X, n
AutoMod Editor的语法报错信息,有时候会指在下一行,必要的时候要把上下几行都看一下。
9 \0 p0 f& m8 e: A- X5 t& ~& W1 [# ~* q- a6 E
另外,你的几个P_pick是完全重复的,建议以如下方式修改,可以减少代码编写量:* ~0 x3 B4 M/ p' s
1. 创建一个Process:名称为P_pick,number of Processes为3,其它按你的需要设置;删除那几个P_pick;# U! z" d6 p, ^8 O7 K) q" u
2. 创建一个Queue:名称为Q_induct,number of Queues为3,其他按你的需要设置并放置;删除那几个Q_induct;; ~. c7 y8 c/ O7 a
3. 以如下方式改写P_induction和几个P_pick的arriving procedure的代码:
% A) ]9 B" D7 E5 D* e! m! I$ A, [begin P_induction arriving
/ ~: v9 S) a( j( P    clone 1 load to P_pick(A_induct)! B" P- S, o% X/ O
end最大的系2 n2 Q: ?8 T( U9 k' u0 B

, a  d  Z# |* U5 Hbegin P_pick arriving* m- o% y$ E- v( w, \, e8 z8 e
    set A_i to procindex * 10 + 1
+ {7 z) V- Y+ b0 v6 P5 [$ _# W! T" Y    move into Q_induct(procindex)
7 r; V" U$ T6 v- q1 `6 D    move into pickaisle.induct(procindex)- D5 P# Q  n; e) i; O
    /*check the type of pickaisle.induct(i), for your last problem.*/
# E, {2 X( o! G1 T, q: f: H' R
    while A_i<=30 do begin
" m) @) |% j1 [: P        travel to pickaisle.con(A_i)
: e3 |) V" ?' S7 p4 m* h        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
" p$ f2 [6 Z7 J. f7 T6 v7 o& k        else wait for 10 sec. m  r) E$ g) R' h6 l
        if A_i=A_leave then send to die
- }% G3 n+ _6 l% S" n5 h+ ~1 E0 G        else inc A_i by 19 }% d' o- j% j, d4 O* `+ [" O
    end& F4 |9 F, Q" k" N: H  U
end# R( ^% b* M" O/ a2 M, H& \
6 A+ b; w. i" K6 b. t
其中的procindex为整形,代表当前process的序号。/ D3 F+ R" {/ d4 r; v  i
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, 2025-11-11 21:21 , Processed in 0.013425 second(s), 15 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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