设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14675|回复: 2

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

[复制链接]
发表于 2009-4-4 23:58:32 | 显示全部楼层 |阅读模式
5仿真币
想请版上的人帮我看看我这段code中的一个错误,我刚学Automod没多久,实在找不出错在什么地方了,谢谢9 ^5 n) {: u" U# i
* b  {4 g" V  |( \" I
我的问题是,在每个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中的数值,不知道会不会有什么不妥。
# |+ a% w. l. n5 A, v% n7 ?" X( b; n+ K2 \! L7 X9 z
begin P_read arriving
: @* y& w( T3 x) _& F; c( W& h    while 1=1 do begin
7 \# T. j& n0 w5 A9 S: G' k- T, D  l        read A_tote from "data.txt" with delimiter "\n"$ x& d% a3 k, N/ G/ {$ J& L5 e2 L
        read A_time from "data.txt" with delimiter "\n"2 C5 d/ X* a8 K' F( B
        read A_leave from "data.txt" with delimiter "\n"
, L7 o% {" u: F& j8 U5 h- E- u        read A_picks from "data.txt" with delimiter "\n"# u3 ?/ U7 S# e1 g7 M6 p3 c
        set load type to A_tote
4 C% P! ~7 r3 p# i' Q        if A_tote="tote 1" then set A_induct to 1
% O8 `; ~: \9 C5 S- X        else if A_tote="tote 2" then set A_induct to 2; p7 X) G  d1 \7 M
            else set A_induct to 3    ) ^- s& O5 }* c* P* b5 G, S8 v8 X
        set A_i to 0
' ^+ X; }+ g1 z3 ?        clone 1 load to P_induction
5 Y+ o8 \, o  y8 P* ?" c3 N        wait for A_time sec; j: b4 @+ O2 R* H& k& q
    end. A4 j0 t& P  ~' E9 A  F
end2 r7 p7 s. m1 R0 J
( ^2 G; y2 h9 ]3 ~
begin P_induction arriving2 Y. N! R6 c9 g' U: v
    if A_induct=1 then clone 1 load to P_pick1
# y* ?+ P! J; m& w' }0 \    else if A_induct=2 then clone 1 load to P_pick2
2 j/ n2 t  m. \. t! m% ?8 J. |        else clone 1 load to P_pick36 \  L8 N4 _# g/ U2 E( S0 |0 j8 Z
end1 v& q1 T. C$ Y1 X

4 t9 i; M. L, _2 Q# V* Zbegin P_pick1 arriving
/ N* G( p' |$ Q! f$ U; j3 f    set A_i to 11 o/ [3 j6 y6 L
    move into Q_induct12 E0 Q' J  h" V" Y
    move into pickaisle.induct1& m/ [4 _5 y( ?. @% H8 u
    while A_i<=30 do begin
5 }/ R2 `+ ~, [# l( Y) {        travel to pickaisle.con(A_i)1 I' F& `' U: K9 ?, ]3 H
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
' I2 j5 c$ e/ j1 `4 j8 t8 e        else wait for 10 sec- T: [" L! y/ N% l
        if A_i=A_leave then send to die, w( ^  ?+ m( S7 f! n
        else inc A_i by 1& U3 A) i2 s* Y/ G3 m, D& M
    end
  W+ T% M( h% rend& @& G2 V1 l; B% Z+ C+ a2 H7 y- n6 n

5 g% T7 d) c/ \! K, l, x0 n% r  E( }begin P_pick2 arriving7 v- y, i2 ^) t1 k( i$ X" \3 R
    set A_i to 11
6 c( C' H) [/ O1 h7 s! ?2 A    move into Q_induct20 V$ |6 C) y2 x* z; y
    move into pickaisle.induct2
! d2 R7 W9 M) s" n  R$ i    while A_i<=30 do begin
2 Z6 }; H3 B1 k! W6 e& q* K        travel to pickaisle.con(A_i)
1 T7 {4 d+ S0 E$ K1 T        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec) ]; q4 o" k4 A
        else wait for 10 sec
7 h& W' ^7 a/ r- P5 w2 a  i1 O        if A_i=A_leave then send to die
* B$ u* s/ w8 {        else inc A_i by 1! G5 K* W+ d8 y3 T1 N3 P: ^* t. k
    end
# S+ @* n. `* g4 B& A. Y: [8 rend5 }& e; ?: i  n! v0 H
+ W: M( ^1 f; v5 b
begin P_pick3 arriving
# G/ K- E  }( }    set A_i to 21" @/ @" T6 L( {* \1 K4 N$ e1 T( G. {# ~
    move into Q_induct33 C/ `- J8 e' G6 p( `
    move into pickaisle.induct3
+ e' _/ s, c& s: h; [$ T0 |- O    while A_i<=30 do begin9 e/ C1 [5 h$ v. r7 L0 w$ z
        travel to pickaisle.con(A_i)
  s( e! |9 j: t+ B4 p        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec6 S6 e% ~$ S$ E2 ]7 X8 O
        else wait for 10 sec
& E7 V# W* `8 `6 P' Q7 t' {/ P        if A_i=A_leave then send to die
  [6 f: h5 D8 Y6 I" O! x% d3 V4 `        else inc A_i by 1
( F# Y# @1 W1 K    end5 e& W/ v5 O4 k9 ?9 q& ?
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是个什么东东?
, G2 l1 @1 m+ N$ V7 Nmove into后面,应该是一个station或control point,或者Queue/Container/Vehicle/Segment之类的东西。看你的报错信息,这个induct是个path么?& @% F2 [: K' N7 R$ m. g& j& s5 f

$ G7 M( q7 K$ \+ N3 F# [AutoMod Editor的语法报错信息,有时候会指在下一行,必要的时候要把上下几行都看一下。" r8 m$ s" p7 b3 q
* j# m6 P; E4 h7 O) V6 S3 T9 z
另外,你的几个P_pick是完全重复的,建议以如下方式修改,可以减少代码编写量:
/ v7 c1 |# o; d+ K- E. b& y+ \1. 创建一个Process:名称为P_pick,number of Processes为3,其它按你的需要设置;删除那几个P_pick;
6 K: q2 E/ u8 i2 b; o) U9 N2. 创建一个Queue:名称为Q_induct,number of Queues为3,其他按你的需要设置并放置;删除那几个Q_induct;
8 @4 y& K" h" k# H3. 以如下方式改写P_induction和几个P_pick的arriving procedure的代码:
6 S. E1 N, {+ ^. vbegin P_induction arriving0 A5 Q  X! f" ]& z. A  D
    clone 1 load to P_pick(A_induct)% [" {+ N! P% {8 C$ F
end最大的系
+ o+ T  {# `% |" H, {/ d" K: H0 }0 Q2 R6 j! k4 u: T, {# n7 Y/ D
begin P_pick arriving
9 ~; S! w) P5 E5 _6 C    set A_i to procindex * 10 + 1: H% L* h) h! f: P
    move into Q_induct(procindex)
7 o) x$ n) o+ R. f$ ^' ?/ I    move into pickaisle.induct(procindex)
7 t% i) S5 o* a% K) C- Q- a    /*check the type of pickaisle.induct(i), for your last problem.*/# @$ E) K# B7 r
. Q$ o2 p2 U3 x1 E
    while A_i<=30 do begin
8 [0 ?$ \' A# b4 S, F( _        travel to pickaisle.con(A_i), H, S. ~* e& @
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec4 e- \; O$ e/ X8 w# e' M7 R- o$ r7 n
        else wait for 10 sec
( ?9 f# b; A; f/ Q1 E# T        if A_i=A_leave then send to die1 P8 Y. c' Y- Q* X. j8 j
        else inc A_i by 1' ?4 `5 t5 S$ f0 v& A5 s1 H
    end: B. [4 y- @: G) U, `9 [
end# ?$ B- ]$ ]4 b" w# L) y
8 \8 `; [$ ]( {) V8 Q
其中的procindex为整形,代表当前process的序号。
7 ^1 B9 d) {% \. c9 @+ A3 N3 ostation和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-20 16:09 , Processed in 0.014590 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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