设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13829|回复: 2

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

[复制链接]
发表于 2009-4-4 23:58:32 | 显示全部楼层 |阅读模式
5仿真币
想请版上的人帮我看看我这段code中的一个错误,我刚学Automod没多久,实在找不出错在什么地方了,谢谢
4 n+ @1 O8 {& R$ b1 C& c. d
5 ^! w* M! w: C我的问题是,在每个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中的数值,不知道会不会有什么不妥。& M7 g1 W* C9 g
" D0 k8 H2 C% |4 @9 C5 k
begin P_read arriving* f+ D  R2 _( \+ W
    while 1=1 do begin
0 D1 @+ D& R, W# O. t- A$ ?+ p4 h# `        read A_tote from "data.txt" with delimiter "\n"* z. G0 I0 a! l% I4 J7 _% ~9 W1 p
        read A_time from "data.txt" with delimiter "\n"
( _) e1 T5 Q" |; J3 q- z/ p) ~        read A_leave from "data.txt" with delimiter "\n"
& E! h* E2 R/ Z3 U# `        read A_picks from "data.txt" with delimiter "\n"
( `$ K/ p0 H+ q2 X; j% M        set load type to A_tote
* S2 V! A0 C4 `! m( T  `; {        if A_tote="tote 1" then set A_induct to 1
2 K& z4 W1 d4 B8 U        else if A_tote="tote 2" then set A_induct to 24 Y8 X; {2 P+ J# k
            else set A_induct to 3    / e( k% z$ G+ r( j, Y5 Z$ P# [
        set A_i to 0, @# h4 u* C# k" _& s' u4 Q0 u0 D
        clone 1 load to P_induction: m5 O  j: E' S, |. S
        wait for A_time sec
- T0 R' O! D8 P" R$ z  n    end
( L) p7 e# C5 E4 g8 E5 uend
7 Y2 ^' V5 R$ ]' m& m2 Z
& B  _& a, F3 mbegin P_induction arriving) A5 q3 O8 A6 P2 j, W' a
    if A_induct=1 then clone 1 load to P_pick18 Z9 s3 _8 d/ b( t+ R
    else if A_induct=2 then clone 1 load to P_pick2. Q* q5 d! m2 [0 [1 O
        else clone 1 load to P_pick3
# l3 _7 }3 S; s' I. Gend
. y& l8 k" j  k. w! f2 Z" y0 H$ E  k
begin P_pick1 arriving
# X+ w0 C( h' F2 ~* b" D4 z    set A_i to 1
& {8 l2 _' g( M/ N* q9 z7 p! l    move into Q_induct1
0 @! x! e* X- K4 g7 f/ M+ b  H    move into pickaisle.induct15 z( L! o" Y: G
    while A_i<=30 do begin5 J, e; S# D6 E& B" B7 Y
        travel to pickaisle.con(A_i)
& a* \% A; |" l" Z        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec$ o$ H: T' t7 v! @% q+ }. `/ V
        else wait for 10 sec
+ _/ K. ]8 j" T        if A_i=A_leave then send to die+ r  \' ]* }4 t
        else inc A_i by 1
0 ]$ S+ C4 N1 x, g) N( i- h    end
6 p- q$ m& Z/ ?% h+ gend4 W% @3 i  h- W
; K$ z. C, K$ s2 q; ]7 c2 @6 U
begin P_pick2 arriving3 [1 b9 p; r; C* I0 Z" E' N$ @
    set A_i to 11
5 `! n/ G% x& {2 d    move into Q_induct2
6 v7 K' w* {8 X% y    move into pickaisle.induct2
* p7 i' p+ y8 X: n- e7 O) J    while A_i<=30 do begin
1 g7 S' Y, N$ h        travel to pickaisle.con(A_i)
( b) X& B2 E( p- y/ T8 V2 B) L        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
4 Y' H7 w  _* ^$ d3 X7 K        else wait for 10 sec' P) Y$ j, E1 A% T0 ]- m0 U
        if A_i=A_leave then send to die; v1 T& j! @6 F6 [6 ]* A# ?- }
        else inc A_i by 1" W9 ?) x+ _- M8 w
    end
2 H; a3 V' s$ y  v' Cend  i% `; w& \! k0 ?4 o8 ]* X  e
/ I! O/ |. W/ n- O3 U' s! F
begin P_pick3 arriving
, P0 p) }7 `9 x1 o( c- V    set A_i to 21! T2 ^1 }! U2 k/ p" }) g
    move into Q_induct3
& n$ {7 d2 Y0 o    move into pickaisle.induct3/ L' G+ d# M- N# A
    while A_i<=30 do begin3 Z8 a0 m$ c9 F$ D
        travel to pickaisle.con(A_i)
# b5 S8 W. G1 U0 O2 i        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
" z8 T; R0 `# m$ U) f) R" f        else wait for 10 sec
$ K9 B! e4 @( o% v# x- ~        if A_i=A_leave then send to die
; W$ t6 _. h7 {        else inc A_i by 1
3 q3 J' ]  l% ?, d    end' ?/ J4 N( A. K( Z+ ?3 \3 v
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是个什么东东?
3 p9 @# W* E) U8 _- @' P0 Z  A$ amove into后面,应该是一个station或control point,或者Queue/Container/Vehicle/Segment之类的东西。看你的报错信息,这个induct是个path么?2 k* z& x7 R8 v3 @) A" P) f
$ L: K/ Z! t6 c2 k9 J. X0 S6 Q
AutoMod Editor的语法报错信息,有时候会指在下一行,必要的时候要把上下几行都看一下。  Z( J5 O2 d8 \5 H4 Y8 @+ A

8 m- z  S1 t( u另外,你的几个P_pick是完全重复的,建议以如下方式修改,可以减少代码编写量:' g% o  P+ O* Q1 V8 g$ I4 G) \
1. 创建一个Process:名称为P_pick,number of Processes为3,其它按你的需要设置;删除那几个P_pick;, g- ?& K. F0 ~2 K
2. 创建一个Queue:名称为Q_induct,number of Queues为3,其他按你的需要设置并放置;删除那几个Q_induct;
/ l9 j6 z1 \1 y: ?3. 以如下方式改写P_induction和几个P_pick的arriving procedure的代码:
2 }% O/ ^8 D; [  E9 o8 ?" Lbegin P_induction arriving$ k: ~9 d: v- a6 _" N
    clone 1 load to P_pick(A_induct)
( G' |7 {/ S# o7 z& L9 Q! s( Qend最大的系1 u4 Y( p, {& u5 p

% ]! w' q& ^- o& |6 Ubegin P_pick arriving
" N! v3 C0 ]; I1 F    set A_i to procindex * 10 + 1
9 n9 b; D. Y1 h* L    move into Q_induct(procindex)
  u  G8 Y9 S& h( E: i4 ]    move into pickaisle.induct(procindex)
2 w  W$ D% o4 J$ [' o" g- _    /*check the type of pickaisle.induct(i), for your last problem.*/4 P, [1 N, e% |+ P6 y9 E  ]6 ]4 [

( ?# m( @  S. u    while A_i<=30 do begin* ]9 w& u* @) ?
        travel to pickaisle.con(A_i)
0 [/ D( O5 X+ ^        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec4 f$ z, r6 a; v6 q8 N
        else wait for 10 sec
3 N" Y" _+ d8 v$ o! \. r( r- |! y* q        if A_i=A_leave then send to die
# D* }( Z3 I6 ^; ~% c; }9 f! Y        else inc A_i by 1
, N/ ~# ^# T- J/ \2 Y" v/ E7 A+ i    end
  o- g$ y0 _, Xend! d3 W; B+ Q2 K1 f6 v: r% _
& g4 h/ v# P* r
其中的procindex为整形,代表当前process的序号。
. m+ l1 [0 K% T- K: |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, 2026-5-9 03:58 , Processed in 0.016590 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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