设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13275|回复: 2

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

[复制链接]
发表于 2009-4-4 23:58:32 | 显示全部楼层 |阅读模式
5仿真币
想请版上的人帮我看看我这段code中的一个错误,我刚学Automod没多久,实在找不出错在什么地方了,谢谢: z7 d! ~2 j/ Q# y
( I0 b) |" I6 W1 k' y' ?; 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中的数值,不知道会不会有什么不妥。
4 a( }2 T( a+ k' O$ O* u0 ]* p. H+ l0 J  W" t; b+ `
begin P_read arriving
+ w# C# K1 U; I0 ]' ^# E8 s3 B, T    while 1=1 do begin/ |  C1 o3 K; l: t9 Z. `# p) A
        read A_tote from "data.txt" with delimiter "\n"" B7 Y% w: y9 s. n/ g$ A7 g$ ?+ j2 t
        read A_time from "data.txt" with delimiter "\n"
$ w% I# m2 B. \  I        read A_leave from "data.txt" with delimiter "\n"7 Y2 z1 q2 v& B8 O+ K  w0 c
        read A_picks from "data.txt" with delimiter "\n"" q1 `- X& P  d2 i* P
        set load type to A_tote
( ^* k, w5 f& ]6 z- ^6 w; g        if A_tote="tote 1" then set A_induct to 19 D: C4 ~% s- X& e5 k5 H4 f$ s- e
        else if A_tote="tote 2" then set A_induct to 28 ~, ~, q3 \1 G( O# z
            else set A_induct to 3    " V  p! m8 t) A6 J+ r& Y) i
        set A_i to 0' z& f1 {1 h' r- {' c
        clone 1 load to P_induction
( @6 K0 X0 ^  M* t. @        wait for A_time sec
% `( U. n9 D6 O6 I3 K    end6 X  ^1 h3 |* x8 e
end
7 R7 s9 _4 x7 g' e' n$ C
: }4 @: O  V: T: m( c) a/ mbegin P_induction arriving
) B8 h, a5 P4 z$ n) Y& k5 {9 K    if A_induct=1 then clone 1 load to P_pick1
5 N4 E! I, \. p. M: e3 J* a    else if A_induct=2 then clone 1 load to P_pick2
; g* q( C( R. Z" X% p# ^1 z8 ?        else clone 1 load to P_pick3
# r0 V- C0 N) H9 l% W8 J7 Qend. @0 T7 I# Y: G" F, s/ L1 `5 T/ s

, m6 a7 l2 v/ _2 r+ Abegin P_pick1 arriving
( }) q. N. T6 i    set A_i to 1
6 c, d: P3 u. e6 S. X+ V    move into Q_induct12 ]+ O( O# G4 G  @9 V
    move into pickaisle.induct13 O2 S: u) p/ J: ~, I! x2 ]' e
    while A_i<=30 do begin
# }% f6 w# b: e# R9 u1 I3 U        travel to pickaisle.con(A_i); A) Z7 U( M& N5 O3 R9 W
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
; `+ q. z( \3 B- X. O6 l        else wait for 10 sec3 i; r( x5 O: K! g: b$ A
        if A_i=A_leave then send to die
: v/ h. H# A' w. P; J! U& ]        else inc A_i by 1' [$ ?8 l2 B- w$ p# c
    end) V( A' T" z% V/ L$ B, {. a
end3 Z% _& k3 T3 M5 F

% X8 \5 V5 |$ z, Hbegin P_pick2 arriving% @% Q2 U% I" X  j
    set A_i to 11
! O# V* q. e8 ~0 v7 B! f8 v    move into Q_induct2
5 A& c. N. @& a    move into pickaisle.induct25 M- y$ V6 S: O  C# e! I
    while A_i<=30 do begin  ]  m$ Z; m. A1 \; s1 @, G% I
        travel to pickaisle.con(A_i)
7 Q' K! v% c0 [% _        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
5 A) w/ F* H2 E& U        else wait for 10 sec" N# A  E- s( V& `
        if A_i=A_leave then send to die, P$ w9 k1 ?; H1 J& u- i
        else inc A_i by 1& d, d* n* I, d% J
    end
) Q" K& @: Z* K# D; b; Pend$ e6 b9 A+ C/ `% E/ ^
" k6 n8 i; C: T7 R# _" {4 }3 Y
begin P_pick3 arriving& g/ `, H& m& ]7 q9 S
    set A_i to 21
9 Y5 z: Y. r' `) f    move into Q_induct36 d" y, v9 L: }( g: F, O1 i
    move into pickaisle.induct3
" k- N( v! f+ v2 a. `    while A_i<=30 do begin
* H! J2 R7 }, j+ {8 y& R2 ]        travel to pickaisle.con(A_i)
& a7 d6 k1 o% k8 D! ?8 B        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec7 R3 y7 i/ J/ h
        else wait for 10 sec
$ ^5 B' {1 t4 g9 A+ W6 V4 F        if A_i=A_leave then send to die
" v1 E% s- P) u4 i        else inc A_i by 1
- s+ J# m7 D2 ^9 C; z    end! K/ l( w+ C- e
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是个什么东东?
; H( R0 V8 c& P$ Xmove into后面,应该是一个station或control point,或者Queue/Container/Vehicle/Segment之类的东西。看你的报错信息,这个induct是个path么?/ B3 k" s' w6 V$ T0 N/ H

/ c0 U- T" u/ y. S/ PAutoMod Editor的语法报错信息,有时候会指在下一行,必要的时候要把上下几行都看一下。+ l: \( m! A/ \0 S; p/ }) j
$ P4 L8 S2 H+ a% U
另外,你的几个P_pick是完全重复的,建议以如下方式修改,可以减少代码编写量:' F( b4 ~! m' X8 g
1. 创建一个Process:名称为P_pick,number of Processes为3,其它按你的需要设置;删除那几个P_pick;/ x/ |( _, Z5 `1 z/ U, l/ a6 g
2. 创建一个Queue:名称为Q_induct,number of Queues为3,其他按你的需要设置并放置;删除那几个Q_induct;7 G  d; d) l4 i3 C" o, w! c$ p
3. 以如下方式改写P_induction和几个P_pick的arriving procedure的代码:( F( w8 S4 g9 {( A  @% w
begin P_induction arriving
) j  S2 L; n6 ?2 O  x4 ?$ m7 X    clone 1 load to P_pick(A_induct); R6 m$ {+ m/ |6 x: E
end最大的系
2 ~5 M, z8 `7 h% u( N/ w. `* F
9 j* P( H7 b) ?3 w# v. W4 Rbegin P_pick arriving
+ m) X/ O; U) @& L6 b2 \( m. B    set A_i to procindex * 10 + 1
9 n: e$ V3 |( d4 {    move into Q_induct(procindex)
  _1 h7 S6 k/ q- _: j    move into pickaisle.induct(procindex)
4 P* L: O* U1 e% V1 U3 ]* g    /*check the type of pickaisle.induct(i), for your last problem.*/( ^; v3 j3 ]% P$ N7 h* N
8 `9 I& M* P4 z( c% \1 o+ F! u
    while A_i<=30 do begin5 Z$ \7 M+ s8 }
        travel to pickaisle.con(A_i)- D. O; I; b. R% a! Q7 k6 e! u% O& J# z: ]
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
) q+ u$ _4 z, p+ m( H8 t        else wait for 10 sec& o( r! \/ ~/ {
        if A_i=A_leave then send to die0 O% ^# e9 n3 a& ^6 o
        else inc A_i by 1
% \9 l$ N: s) p; b& c    end
% k6 E7 C  |! c+ rend
0 t- P! X) p5 |" Y9 ^/ [0 Q; @% ~% R0 M4 F% X+ |% T  k
其中的procindex为整形,代表当前process的序号。
% F0 n- @' e* [4 f8 }( Ystation和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-3-31 21:00 , Processed in 0.019143 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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