设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14372|回复: 2

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

[复制链接]
发表于 2009-4-4 23:58:32 | 显示全部楼层 |阅读模式
5仿真币
想请版上的人帮我看看我这段code中的一个错误,我刚学Automod没多久,实在找不出错在什么地方了,谢谢% q8 E2 g% Q$ H, o& m) C

9 t! T7 m) n7 t8 D3 P我的问题是,在每个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中的数值,不知道会不会有什么不妥。- ?# Z  p- w1 f3 d+ _' N
9 G' f1 _  P3 X) q6 `2 P
begin P_read arriving; M% G# f  J' V( w9 y* b
    while 1=1 do begin5 s' i8 Q' b* Q* b$ d7 x8 _
        read A_tote from "data.txt" with delimiter "\n"
9 t0 D* _# D4 S  \' u0 [7 U& C* ]) x        read A_time from "data.txt" with delimiter "\n", n& y2 i! M6 D$ r) B3 N: I
        read A_leave from "data.txt" with delimiter "\n", c$ c- ]- i9 [
        read A_picks from "data.txt" with delimiter "\n"
  h0 W0 ^7 D( t        set load type to A_tote' f, H2 s- d1 _8 [! C3 H$ m! z
        if A_tote="tote 1" then set A_induct to 14 b, @4 z0 _7 k& h8 k' ]
        else if A_tote="tote 2" then set A_induct to 2; W4 a2 g. L2 G" ~9 K6 G# d6 t
            else set A_induct to 3   
; ?3 D  Y0 C) M2 U7 Y* x5 v        set A_i to 0
( b! ~/ n: ]& p  u5 q        clone 1 load to P_induction
4 q. L! G8 k/ |9 z  N& ^' E/ G, e        wait for A_time sec
% M! ~( q+ N& |$ V    end! U  O" B0 d+ M, j2 p  _
end
2 Z0 F2 u/ Z' D/ b" O5 X5 l& P" z0 ]& e
begin P_induction arriving8 j+ E  p; K+ e- t4 d. @- Q: r/ O
    if A_induct=1 then clone 1 load to P_pick1, Y+ o) j) A  q% b$ o. u: l
    else if A_induct=2 then clone 1 load to P_pick2  n8 L" B: t7 J1 I: C! A* k: Q& y; b
        else clone 1 load to P_pick3
" T! J0 b3 U* l2 E" q  [8 send' _+ s4 p8 S3 I5 P. Y& i

, U) `* Y3 |" J: P0 k, nbegin P_pick1 arriving
5 ], S( |% u! o' Q0 Q' x5 X( n5 T# i    set A_i to 1. Z, H/ ]( k. r, i
    move into Q_induct1
$ V# V) O5 \" ^: n/ C$ Q/ O' }8 D    move into pickaisle.induct1- C1 N- C$ G: F
    while A_i<=30 do begin
2 ~/ W% f/ N6 }        travel to pickaisle.con(A_i)
, h0 g0 U: }# f; d9 f        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec+ l9 h  \7 g) S9 a" }
        else wait for 10 sec! u) d( n! Z- b( _9 i( p+ N
        if A_i=A_leave then send to die! F; `' U+ }) c2 `7 Q" j
        else inc A_i by 1& a$ j# a5 e; m' M( }4 V
    end/ D1 i2 ~% l0 y8 O2 z9 Y, ^3 r
end* U9 r$ o+ {7 }" e, q4 N! o

* r, o7 J8 d2 J5 fbegin P_pick2 arriving  ]4 m; ]8 _  C6 u& A; O3 v
    set A_i to 11: g: E! Z( q+ Z( u
    move into Q_induct2/ P9 Q% a/ K) a7 l+ D4 Q# Z
    move into pickaisle.induct2
9 R# `5 [% \; ~- A0 i    while A_i<=30 do begin& `. Y  D1 {* n. l' Y
        travel to pickaisle.con(A_i)
( i4 t; L) G* T% A" Y. L9 {        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
* Z) H; M, `. t+ N9 p- _        else wait for 10 sec
( B6 {0 G0 C7 z1 x1 W9 H        if A_i=A_leave then send to die
$ g" z/ k  [% ?, ?        else inc A_i by 14 W- z( O5 j2 E$ k) R
    end5 |9 {+ ^+ ~# h
end4 w* D$ X/ k5 j# t

  S3 j5 x6 ]+ Mbegin P_pick3 arriving
; @8 A0 f' x4 W5 Z8 v: S8 F/ N    set A_i to 21
  U( |- m; E1 i    move into Q_induct3
1 A3 D0 M; W2 r+ @0 Z4 U    move into pickaisle.induct31 B# N, o4 x/ C# t
    while A_i<=30 do begin
+ K. ~- ]1 X; X        travel to pickaisle.con(A_i)
0 _! m# F. q) T: }1 a        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
2 D9 r, B5 J; K! v# ~: b        else wait for 10 sec
$ t4 M& s% F: F% _4 w6 t: `        if A_i=A_leave then send to die
) c; k9 g$ l5 u+ u$ k! i7 V        else inc A_i by 1* y7 E) E0 W" I7 N; T0 O* v6 i# ]
    end
7 ?+ x) A5 o' L8 e% \$ T3 f: J. uend

最佳答案

查看完整内容

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是个什么东东?4 A$ N/ ?8 a: G0 t) B7 Y
move into后面,应该是一个station或control point,或者Queue/Container/Vehicle/Segment之类的东西。看你的报错信息,这个induct是个path么?
/ e: R2 I( K  B* o2 g- \  e2 n5 b7 j; h: Y" B2 w
AutoMod Editor的语法报错信息,有时候会指在下一行,必要的时候要把上下几行都看一下。; x5 P- _$ U+ c" F9 y
/ b' T2 h' B" N% b. q) V
另外,你的几个P_pick是完全重复的,建议以如下方式修改,可以减少代码编写量:- q0 l0 N3 q# H2 Y( q3 V9 D
1. 创建一个Process:名称为P_pick,number of Processes为3,其它按你的需要设置;删除那几个P_pick;
( m9 L4 {# i' C8 d2. 创建一个Queue:名称为Q_induct,number of Queues为3,其他按你的需要设置并放置;删除那几个Q_induct;
1 r3 z; v# ^  X3 O" @$ I3 z. r3. 以如下方式改写P_induction和几个P_pick的arriving procedure的代码:% z$ `, \- u7 E- Y
begin P_induction arriving
( n  N6 m- l  D    clone 1 load to P_pick(A_induct)5 t5 F3 x0 D7 D3 l$ F7 X
end最大的系
' a3 i2 D0 G2 K8 K
) f! H  B& {  ybegin P_pick arriving
( l# j, @3 l4 J5 v% n; i$ T# U    set A_i to procindex * 10 + 1/ x  o* Z& [( }6 p7 ^$ ~
    move into Q_induct(procindex)5 p* D2 N+ q, y( h! s5 R  h
    move into pickaisle.induct(procindex)
0 a1 M: g* ^) G, M    /*check the type of pickaisle.induct(i), for your last problem.*/' I& S  R+ _* j$ Z* o% x$ ^
& B+ |% `$ A( N! b- s# v5 \/ K
    while A_i<=30 do begin
; M. ]; P4 Y+ K4 R7 [3 J        travel to pickaisle.con(A_i)
% L) A9 j7 l/ a        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec- U' C& a3 U( {) N8 c3 q
        else wait for 10 sec% V) ]! o3 _, |( C9 M; c5 N
        if A_i=A_leave then send to die1 T  R3 |4 |2 y$ U
        else inc A_i by 14 Y& O7 n6 A% |6 n( P# c! L. a2 Q
    end% }: I+ U9 X. c! _  N% d' d; a5 W: m
end
( U. p+ e' h9 K6 f  G  Z  }% a# X$ R; R8 t) k
其中的procindex为整形,代表当前process的序号。8 S: i/ t1 x: R( S
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-7-8 02:21 , Processed in 0.014591 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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