设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 15099|回复: 2

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

[复制链接]
发表于 2009-4-4 23:58:32 | 显示全部楼层 |阅读模式
5仿真币
想请版上的人帮我看看我这段code中的一个错误,我刚学Automod没多久,实在找不出错在什么地方了,谢谢
& I+ @( w- ~2 b/ ?  O7 X
; U: P4 S2 \9 D8 K/ ?我的问题是,在每个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中的数值,不知道会不会有什么不妥。5 V% c: f$ p& Z' l) {/ o$ \
% M- X' Z" M$ p; e% F* ~- }
begin P_read arriving
9 o8 O; Y0 R7 Q$ e/ O: ~, ]    while 1=1 do begin  n2 y9 v. }! T4 N7 W1 f/ b3 f/ Q
        read A_tote from "data.txt" with delimiter "\n"
2 `4 Z5 p1 ~! @( H" b. a; b7 R        read A_time from "data.txt" with delimiter "\n"( g9 p4 c) `- I  ~
        read A_leave from "data.txt" with delimiter "\n"- ~8 O" x: k" o6 G4 \0 O
        read A_picks from "data.txt" with delimiter "\n", f. v) q$ X2 ]
        set load type to A_tote. W* u8 }% V1 j
        if A_tote="tote 1" then set A_induct to 1
9 M2 m. B' s( d, y' {$ Y; \/ ?        else if A_tote="tote 2" then set A_induct to 2: G6 Q) m1 @, i1 ~1 y
            else set A_induct to 3      ^1 v; Z7 z3 q& p
        set A_i to 0
) V' u9 u+ E) v* h1 ~, ?        clone 1 load to P_induction
" D1 ]- M. E6 g: F0 W        wait for A_time sec
# Q: q* k2 y3 E7 g3 A  F1 Q    end
( b1 Y) {: n- {end
8 Y6 Q6 ]' s+ Y  y# V" v
7 Z% @/ r% ?$ b' pbegin P_induction arriving! T8 T; c. U9 B1 D1 A2 J2 p& O) C
    if A_induct=1 then clone 1 load to P_pick12 Z: T3 s  P5 c
    else if A_induct=2 then clone 1 load to P_pick2( Q1 @+ r8 ^8 X
        else clone 1 load to P_pick3* d/ N/ N6 w; R" L* y
end9 ]) m  \5 r2 P; t7 R) l
$ @9 J( r# l# E4 L) b( g* q
begin P_pick1 arriving
0 k1 O* a9 i$ v5 s: a! V  ^0 B    set A_i to 1; d1 n8 w5 E/ W5 I, S- H" Z
    move into Q_induct1
: m) y) D. S) g, d' A: \# E    move into pickaisle.induct1/ F' F9 y$ f3 u# f$ p( H. ~
    while A_i<=30 do begin
+ z8 S% u' B5 w, ]        travel to pickaisle.con(A_i)5 _1 v7 ?& d# `+ j- W- T" y
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec0 z( q4 _6 f* u# k" Y; G
        else wait for 10 sec
; c) ^! M* [" Q# Q        if A_i=A_leave then send to die
! Z0 _8 F; R* m7 t        else inc A_i by 1
7 a1 K! u' y$ M    end
4 @/ F. I8 ]7 L" yend7 z; ]4 f$ k# z* i9 S8 B/ d

  Q: G9 R6 C7 f; b" obegin P_pick2 arriving
5 w1 X% z8 D4 t3 v    set A_i to 11
# ]' Q: e3 G9 W! f    move into Q_induct21 I# O; j/ Z7 U' O
    move into pickaisle.induct2
1 J# O" c$ L" y2 @$ @% k    while A_i<=30 do begin6 \( |% D; ]8 z2 u, [7 U' E" U5 V
        travel to pickaisle.con(A_i)
% C2 K  d) ]- m. t/ `0 R        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec1 k& E7 v" B' `/ k7 U
        else wait for 10 sec
5 W9 d$ f* i8 O9 D" U        if A_i=A_leave then send to die- h% n! w  W1 k& z
        else inc A_i by 1
* T: S0 I/ P8 z: \6 L% V4 W0 E    end
8 q2 v. Z1 m6 I! v) D9 iend- u. E) @6 J6 S$ A

: ]* Y. p* }+ O+ J& {begin P_pick3 arriving+ H' T3 @7 h9 c, l) ]0 K& b, Z
    set A_i to 21
" z7 @5 w, V& m; C1 N7 _    move into Q_induct38 q# R, m7 j3 P* i
    move into pickaisle.induct3
" X6 D7 }4 y6 C1 ]& Y: f! v    while A_i<=30 do begin
2 p* p+ \5 @2 p9 ^        travel to pickaisle.con(A_i)
5 a; Q0 T1 h( h9 G( Q; a* |* d) }        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
: ?1 o4 v" B7 Q% {; B1 Z        else wait for 10 sec. F: [9 a, K" ?+ e- f5 ^: B; O- x
        if A_i=A_leave then send to die' G$ r$ C, I. \) b3 ^" `
        else inc A_i by 11 p! d& |' Y8 u8 _$ Y/ q# m
    end5 e- S$ J* w3 g* k9 H+ _
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是个什么东东?" s) H- ~( b; o3 q2 b3 e
move into后面,应该是一个station或control point,或者Queue/Container/Vehicle/Segment之类的东西。看你的报错信息,这个induct是个path么?
  M* C6 o0 b( c9 P! Y4 {, B
$ S! u5 N) |- E1 L, UAutoMod Editor的语法报错信息,有时候会指在下一行,必要的时候要把上下几行都看一下。
: z) |1 k5 z  z. {
3 U( e+ U2 W9 K6 b1 V# ?, `/ `另外,你的几个P_pick是完全重复的,建议以如下方式修改,可以减少代码编写量:
7 z' `( T" j- P  x1. 创建一个Process:名称为P_pick,number of Processes为3,其它按你的需要设置;删除那几个P_pick;
( m4 p/ P! K8 g, K* N2. 创建一个Queue:名称为Q_induct,number of Queues为3,其他按你的需要设置并放置;删除那几个Q_induct;; V, H# J1 }2 V5 ~- J
3. 以如下方式改写P_induction和几个P_pick的arriving procedure的代码:
! H  J& c) v7 p( tbegin P_induction arriving. T; N% O  E$ }3 {2 F* E
    clone 1 load to P_pick(A_induct)
" {5 S6 _4 y; s/ b/ `3 Nend最大的系( w+ }1 @9 g* x0 c9 w8 ]
3 {& z9 q& f% v
begin P_pick arriving
) k" G2 g/ m# x' K# @( `& A    set A_i to procindex * 10 + 1' A3 z+ ?" o& q  v& N
    move into Q_induct(procindex)3 m! E$ T; z! O( z7 b
    move into pickaisle.induct(procindex)# R! @2 K0 j6 e8 i
    /*check the type of pickaisle.induct(i), for your last problem.*/6 X8 \- {/ O# G/ ?' Y9 I4 W9 L/ q
, G+ J/ ^, \+ c4 Y
    while A_i<=30 do begin& k3 |2 [4 }. q7 Z
        travel to pickaisle.con(A_i)# u) ^4 m% y. F' k$ ^. r. Y0 t
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec; d) ~7 q: I3 B3 P7 t
        else wait for 10 sec: R/ S) T/ @3 `2 @: _9 A% y$ V
        if A_i=A_leave then send to die
1 k$ I/ h. x* D, e        else inc A_i by 1
& h6 U  c( C, F- R% T$ I    end5 r/ l3 \) z% r4 T8 m! V& y
end
( V9 n+ {3 U5 {! B+ O
  c5 v9 S8 w5 q. }. r: g2 j2 [$ \其中的procindex为整形,代表当前process的序号。
, Y- f$ Y9 z/ Z5 s7 n; qstation和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-10 16:15 , Processed in 0.017099 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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