设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14245|回复: 2

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

[复制链接]
发表于 2009-4-4 23:58:32 | 显示全部楼层 |阅读模式
5仿真币
想请版上的人帮我看看我这段code中的一个错误,我刚学Automod没多久,实在找不出错在什么地方了,谢谢
1 ]' G1 S2 d, Y+ s3 \; ^/ e2 W) F4 P7 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中的数值,不知道会不会有什么不妥。
2 U  n6 h8 X- A% c7 ~6 j- [0 W  g  M( K' g# ]0 ~  A/ j" a
begin P_read arriving
/ f# N/ w; |5 D- N    while 1=1 do begin
) C9 U( @6 l' ]1 J        read A_tote from "data.txt" with delimiter "\n"; ~  x+ M5 l- t
        read A_time from "data.txt" with delimiter "\n"
1 ?0 u3 E5 \; Y/ ?/ b        read A_leave from "data.txt" with delimiter "\n"
- L1 y8 _1 r2 }. x        read A_picks from "data.txt" with delimiter "\n": s) f1 [# _+ u: z; J
        set load type to A_tote
$ g" j, F2 F- Z  i" L- R        if A_tote="tote 1" then set A_induct to 1
& ]0 W- F6 P( \9 K- L) a3 s, `2 O3 z        else if A_tote="tote 2" then set A_induct to 2
8 u" n/ b; B3 q: K5 n$ x            else set A_induct to 3   
- F9 o3 j$ n- @$ @5 h- U' ^        set A_i to 0
+ u+ z$ c# e# G( d        clone 1 load to P_induction" Q: n2 B/ ?4 a: j) E. d3 o
        wait for A_time sec
" E% S! p8 X! c* {  \& J    end
# ?; q* J* k9 rend
2 |! m  X# C/ ^3 S
; R' n5 R2 l. `. ~8 S8 ^4 D! cbegin P_induction arriving; c" t: [. ~- W# k" ?  p2 p! C& [; P
    if A_induct=1 then clone 1 load to P_pick13 v! t% v) v8 _
    else if A_induct=2 then clone 1 load to P_pick20 z0 ]( G9 J7 ?
        else clone 1 load to P_pick3
0 a5 o/ r% B3 X0 g; Mend% z& x3 r0 E2 [2 g# _
: M' P0 {& j% U3 }
begin P_pick1 arriving" y/ b5 u5 d$ B9 [5 e4 A6 W
    set A_i to 1
5 Y6 E( \5 E9 x( i" e; r' a    move into Q_induct1
$ F$ X* `1 F3 _1 T$ y! W# K$ n$ q    move into pickaisle.induct1# U; T8 I2 I( ~4 \8 ?# }8 H
    while A_i<=30 do begin
$ A2 t- b5 e7 K/ s$ x/ m        travel to pickaisle.con(A_i)
4 J0 b9 @4 u! R& S5 Y% ?        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec+ f8 Q7 |) }" r  ^- u. |2 n' `
        else wait for 10 sec
) `5 u) ?/ n) q7 Q8 `; h; _        if A_i=A_leave then send to die! j5 o3 v0 V' M! V) ^6 |& n6 J
        else inc A_i by 1
, E# S, G! g+ n  ?. r    end
+ H: ~2 e, K$ K! L" fend9 |* C( ]7 a' \5 s  ~- G: e+ G
! G8 ^7 }- d5 v9 b) u1 ~" k
begin P_pick2 arriving
% e2 G. U2 [$ {, _    set A_i to 11
; }+ t: D* e' L/ [, _5 O# R    move into Q_induct2
2 \5 ?2 \0 p+ |+ W/ H. o    move into pickaisle.induct2
2 G! O  G5 y) R& f/ G& q    while A_i<=30 do begin
% m4 @9 C4 ^. Q9 X2 A1 Z/ @        travel to pickaisle.con(A_i)
  C1 L8 B' g, I6 M: Y$ F        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
2 ?7 E8 D1 K' ?8 ^8 h8 \4 r: D        else wait for 10 sec$ ?; L2 \) `+ X( b2 b" U
        if A_i=A_leave then send to die8 f/ h" q. P+ z/ q  A
        else inc A_i by 1( A+ U, {7 G4 x5 v5 ]# o# s
    end  D' h) o* n$ m8 D- J! Z" Y
end
& z: L7 a3 @7 U* r4 T$ I
) b; T' B) G' Jbegin P_pick3 arriving
/ L6 h2 `- a2 G    set A_i to 21
. \  q3 b& h+ F; b/ D7 Z, P9 _& ]' t% e    move into Q_induct3
; Y. c  I1 g3 ^$ G    move into pickaisle.induct3
& A) P: L/ k8 ~6 z6 `9 @    while A_i<=30 do begin
  ]% C# `: A/ B' Q        travel to pickaisle.con(A_i)
4 n3 q& x" h2 k) i& M        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
* }# Q* R5 W5 K' D+ B        else wait for 10 sec
6 H8 j! D" ^0 Z( m+ i8 c2 _        if A_i=A_leave then send to die
) C) W6 [5 s9 m3 g7 M        else inc A_i by 1
$ r/ q8 L& h5 Q  Q0 A) e    end
: q$ y; A  M$ H, Y2 {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是个什么东东?
, l7 L* e6 ~( ]3 G: |move into后面,应该是一个station或control point,或者Queue/Container/Vehicle/Segment之类的东西。看你的报错信息,这个induct是个path么?
1 l% n0 u, X9 {6 _4 i
. P% q- N& s; ~AutoMod Editor的语法报错信息,有时候会指在下一行,必要的时候要把上下几行都看一下。
" z7 R7 ]$ l+ l6 V3 E
" ^3 X' q4 Z; G2 Q/ s4 X另外,你的几个P_pick是完全重复的,建议以如下方式修改,可以减少代码编写量:7 L% x: H5 X. C) L' u/ A) R, [
1. 创建一个Process:名称为P_pick,number of Processes为3,其它按你的需要设置;删除那几个P_pick;
' f: j( c0 n, p2. 创建一个Queue:名称为Q_induct,number of Queues为3,其他按你的需要设置并放置;删除那几个Q_induct;
% X( J) Q6 D7 `0 O5 E3. 以如下方式改写P_induction和几个P_pick的arriving procedure的代码:
* e# I# x* A. ~; Q2 E! {begin P_induction arriving  B: e$ u9 D) q$ }
    clone 1 load to P_pick(A_induct)  G1 _/ r; G, V# }
end最大的系
  I8 e& V5 _& C- U
8 A7 n) k3 X/ C- U% g6 W" s3 [* W, g+ Ibegin P_pick arriving
8 [# `# {6 j6 h" X    set A_i to procindex * 10 + 1! p+ ?* e1 g2 Z$ z
    move into Q_induct(procindex)3 k& H. Z9 V9 t
    move into pickaisle.induct(procindex)
% f- m& ?# M$ J& X1 T3 `    /*check the type of pickaisle.induct(i), for your last problem.*/
" A* c4 @% x2 z, }. x! r2 s; T5 B* y: Y7 a& M" A/ @$ a
    while A_i<=30 do begin8 m/ t. \6 S7 B* S; Q3 a) ^1 X
        travel to pickaisle.con(A_i)% E3 b# y, N1 p2 A
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
5 M& \6 A2 m: _+ n        else wait for 10 sec
" d8 s7 [$ u- J# ?        if A_i=A_leave then send to die+ @, {2 t. k2 C
        else inc A_i by 1
* u3 _4 [8 M! T" C    end3 W4 N$ F+ b8 f' i  I, I' ~" {  r
end2 i; A( b! D8 I! y! @# R

5 v6 W, V! f$ v' n8 @4 g其中的procindex为整形,代表当前process的序号。
/ H- n! S* |2 C7 s# z/ u. N1 @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-6-24 07:21 , Processed in 0.021627 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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