设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12531|回复: 2

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

[复制链接]
发表于 2009-4-4 23:58:32 | 显示全部楼层 |阅读模式
5仿真币
想请版上的人帮我看看我这段code中的一个错误,我刚学Automod没多久,实在找不出错在什么地方了,谢谢
$ D+ F3 ?( _+ x4 P, h( ]7 G
: V. h% o* [- {/ f+ I6 D/ o2 }; `- o我的问题是,在每个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中的数值,不知道会不会有什么不妥。: q. s, D9 y9 t" g
4 K- Q9 m! `5 q4 P
begin P_read arriving
" p" J7 M; R; U. j2 i    while 1=1 do begin
* `* [- h9 l1 z% K9 o        read A_tote from "data.txt" with delimiter "\n"
0 R( w) z5 m1 p; U  W        read A_time from "data.txt" with delimiter "\n"; r( V) [! ]: ^- _8 L  m. |8 f) @* J
        read A_leave from "data.txt" with delimiter "\n"+ n  l0 r3 ]0 `6 y
        read A_picks from "data.txt" with delimiter "\n"
( Q6 q6 `0 }" [6 ~        set load type to A_tote
9 e  ~) t4 y8 m; `9 @( f/ m- u        if A_tote="tote 1" then set A_induct to 1  O3 g0 @) @) D) z0 n* m
        else if A_tote="tote 2" then set A_induct to 27 H& X3 G6 h( E5 D; S
            else set A_induct to 3    6 S8 F0 S9 f, |3 o  H
        set A_i to 06 j5 l6 ]2 }, o) Z5 N8 g# e
        clone 1 load to P_induction! K. V5 `% {, V
        wait for A_time sec
9 n! D9 f" |( i* E' n9 U5 W9 s    end! |5 b6 ?  M/ [5 [/ J( Y
end
8 d. F- ^; a9 v
3 q  X0 ]) [' n* s$ ybegin P_induction arriving8 R" \. |  T/ c# D" u* i5 H! P
    if A_induct=1 then clone 1 load to P_pick16 n9 v# a5 ]" T& u+ A) ~& i7 W! Y
    else if A_induct=2 then clone 1 load to P_pick2
/ v, w- L  o& t& s* m        else clone 1 load to P_pick37 ]2 \4 f5 D0 T8 N9 T
end8 M5 L; A& o7 ?: t* Z; ]

/ Z5 T' S) @! C8 ibegin P_pick1 arriving! S( H5 f  H4 w% y
    set A_i to 1
6 w/ L& Z7 T7 d+ [2 v    move into Q_induct1
' G  o  f) f3 z( N; i% A    move into pickaisle.induct15 J- F0 i) X, J! q9 y
    while A_i<=30 do begin; j" z# m/ _+ ^  \5 E
        travel to pickaisle.con(A_i)
1 }0 z  ~  L5 j# H1 o$ ?        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
8 B- w% A% q# q9 F6 k        else wait for 10 sec
) C* L0 i5 j0 g% y1 Q8 c! e, B        if A_i=A_leave then send to die
4 f5 f0 k: F& ^2 y0 b5 w, d* L        else inc A_i by 1
6 X/ y- @& u6 Y% {    end
# b4 L4 G# M9 b3 Y+ I' `" nend
1 x* u  M! u3 G; [1 K% e  Z' ?- L1 L! l+ u
begin P_pick2 arriving) q1 b, V5 P9 z5 [" @" z8 T
    set A_i to 116 _/ c3 p1 J$ z
    move into Q_induct2
3 v7 X" |4 O" L# B1 l8 _    move into pickaisle.induct2
; k& e5 s/ e0 A! R+ p    while A_i<=30 do begin9 _) ~; n1 D& B% L2 e
        travel to pickaisle.con(A_i)5 l% g) T7 r+ Q' o" f& H& a
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec& Z! c: A' b/ C0 O+ d" V
        else wait for 10 sec% d1 Y3 c0 ?  @' `6 Y
        if A_i=A_leave then send to die
# U6 M9 }7 d& a& c        else inc A_i by 1
$ t  y/ o( B! m2 C    end
6 v7 G$ O) r) eend
/ B  f3 ]0 Q* @: [! ~+ H8 H' k# h0 F
8 C9 I; j% V' Gbegin P_pick3 arriving" B2 j7 M. b$ S) A, ?" [
    set A_i to 21
9 N( p2 x- G. `$ u9 x8 Q$ V    move into Q_induct3
& |  j! _  F5 R1 u4 N5 _7 N( o6 n    move into pickaisle.induct3
7 l3 [5 C. i# g6 B7 K    while A_i<=30 do begin
/ C2 m9 J7 w  t8 u$ A        travel to pickaisle.con(A_i)
4 J" Q% u( Y+ @        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
  R5 @3 N* ]' l& v        else wait for 10 sec
6 _9 x5 F. G/ K0 O( y8 F        if A_i=A_leave then send to die0 r. i. a$ D. Q6 C4 ^
        else inc A_i by 1
% V( A9 Y& W$ [; {    end, I$ T. I8 ?& T. y
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 }" ?# G' y! q. I3 n; f* B+ K
move into后面,应该是一个station或control point,或者Queue/Container/Vehicle/Segment之类的东西。看你的报错信息,这个induct是个path么?4 _! C$ z4 ?+ A* e

& I) n' ^  K! L8 Q; u5 w! ~3 vAutoMod Editor的语法报错信息,有时候会指在下一行,必要的时候要把上下几行都看一下。
4 T5 n# w7 D2 O+ c/ R% H9 p/ E9 A7 d( I. S. \5 L  ]
另外,你的几个P_pick是完全重复的,建议以如下方式修改,可以减少代码编写量:
0 E! o1 U9 t# h- S" W( `1 R1 w1. 创建一个Process:名称为P_pick,number of Processes为3,其它按你的需要设置;删除那几个P_pick;
- W0 e9 Z3 i3 g, M5 k* U! r& v2. 创建一个Queue:名称为Q_induct,number of Queues为3,其他按你的需要设置并放置;删除那几个Q_induct;1 Y* [7 e6 }3 w" e
3. 以如下方式改写P_induction和几个P_pick的arriving procedure的代码:
4 i2 Q9 ~- \+ q  ?. tbegin P_induction arriving
) j7 C: W2 N$ @# V  [: Y! ]* P    clone 1 load to P_pick(A_induct)
9 `( s) h& v0 P& I) t$ F8 Z; jend最大的系
( S: p4 F2 S: M: I5 x2 }# v
, B8 @& C( k4 x8 r* g& Ybegin P_pick arriving8 Y2 s5 b7 t3 b! c" |, l
    set A_i to procindex * 10 + 1+ v' y9 h* H" F* y) v* s
    move into Q_induct(procindex)
. E( d* B6 z3 u/ d    move into pickaisle.induct(procindex)% m- \0 r8 t) E3 Q$ a9 i5 ^
    /*check the type of pickaisle.induct(i), for your last problem.*/1 q3 d2 ^1 X) k7 i6 [& a5 m

6 V! A( A8 \; C) B8 Y    while A_i<=30 do begin% I0 N$ f0 O' K/ Q, {, i
        travel to pickaisle.con(A_i)
- l3 j  I$ q' q6 Q5 t        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec. C. a5 V5 j* q1 h
        else wait for 10 sec
6 T, k3 b2 c) h( v        if A_i=A_leave then send to die- Q6 ]7 G+ h5 v3 P
        else inc A_i by 1# n# u4 [# s- I) S0 j
    end* C, t; J8 z" W
end0 Z6 i8 n1 u! T6 Z) v" N9 u* l
3 `; Y' |/ I/ c: |
其中的procindex为整形,代表当前process的序号。* Z3 h. Y0 G* ?) {4 x0 p9 I- e
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-1-30 09:32 , Processed in 0.017435 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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