设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13382|回复: 2

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

[复制链接]
发表于 2009-4-4 23:58:32 | 显示全部楼层 |阅读模式
5仿真币
想请版上的人帮我看看我这段code中的一个错误,我刚学Automod没多久,实在找不出错在什么地方了,谢谢, |0 I9 f! f( y" g, J+ D

# G7 {  _  m2 e* @" d1 a* G我的问题是,在每个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中的数值,不知道会不会有什么不妥。
* v# Q* z: [) b0 o. E2 N3 O$ |' i2 g* b( R/ R
begin P_read arriving2 Y0 B' V  ]& U) H+ m
    while 1=1 do begin2 d% @- t+ h$ z; V) d
        read A_tote from "data.txt" with delimiter "\n"* [. @4 j: d# H8 p7 P' o8 e
        read A_time from "data.txt" with delimiter "\n"
1 q) k  V3 M/ B  m  @* U        read A_leave from "data.txt" with delimiter "\n"+ d. o. z: E$ _. Q
        read A_picks from "data.txt" with delimiter "\n"6 y" @/ @! O3 b$ S8 Q
        set load type to A_tote
6 ^! N  `! d6 y  l$ O        if A_tote="tote 1" then set A_induct to 1
9 o8 r( }+ G$ o5 a        else if A_tote="tote 2" then set A_induct to 2
1 r) [, g% E5 F! K0 ]' m4 O            else set A_induct to 3   
$ [( P" Z' N- p9 I! B        set A_i to 09 W# X: N8 ~- c0 {
        clone 1 load to P_induction
8 g3 w" a7 }; R3 a        wait for A_time sec
9 p7 G9 i9 q5 v( Y1 P7 u    end2 ^7 V4 h: R" t" y
end
. ?) s; V" E& r. c0 }
& @* S$ t# N8 g  D# _. obegin P_induction arriving! x# L7 L$ d% v9 y% c# L
    if A_induct=1 then clone 1 load to P_pick1/ A0 |8 ]& Z5 N, R
    else if A_induct=2 then clone 1 load to P_pick2
9 I8 a* @; O1 P$ q+ e1 d5 v# m        else clone 1 load to P_pick3
' P% u7 O9 L. O. tend
# {# ]0 j9 X3 ]4 H/ y
2 Q) M# v7 e1 }- `- ybegin P_pick1 arriving. B% f" t' K4 ^) \* B
    set A_i to 1: m/ F& J$ a. H9 T
    move into Q_induct12 y# b, p  @  F4 R+ m2 n
    move into pickaisle.induct1
& _5 c6 @! j8 K: U2 R, m4 m: T    while A_i<=30 do begin
& |' l3 A) [5 n' c* m' I        travel to pickaisle.con(A_i)) V% g4 K! F; {3 E
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
4 A+ H' A; P- c& k! J- _+ R: q2 G        else wait for 10 sec
7 d* C! o1 m. {7 Z        if A_i=A_leave then send to die
0 g" b' M, J* j8 z: S        else inc A_i by 13 O1 [: Q; p5 `
    end
7 K8 }& V8 n' `end
( a0 j3 _+ P/ l6 q
$ ]2 c, M5 V; z# n0 [) e4 F7 Tbegin P_pick2 arriving
* I$ s! `; Z$ b' w, ?3 t    set A_i to 11! O: i( g6 M1 T9 s& f+ z. ~
    move into Q_induct23 v7 t3 S9 J# e$ T: W) T: U9 r" N  b
    move into pickaisle.induct2: [$ a' s, [( O/ F+ U2 L) `( W/ f( G
    while A_i<=30 do begin& V0 Q8 Z$ {" s* i0 z! z( `
        travel to pickaisle.con(A_i)8 i: T: l% W& J. j# ~7 H
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec) z6 ]1 e# L6 n3 {$ ?
        else wait for 10 sec* O2 K9 b  p1 l/ e9 X* o5 ~" _  Q2 H
        if A_i=A_leave then send to die! i( v4 L! h: j4 `+ F8 f
        else inc A_i by 17 D* a+ ?. y# c* p( l
    end2 p2 A: p6 v) O; ]
end
  e- K6 J* x4 K' m) o% y# n% ^; M$ l' X' C; S1 y
begin P_pick3 arriving
+ c3 N1 H# ^5 _0 X+ B0 i; S    set A_i to 21& O5 M. W$ v. Q# E# u4 u: H
    move into Q_induct3
: {$ u* j- v1 F7 T# }    move into pickaisle.induct34 C, o/ x8 e) T
    while A_i<=30 do begin
4 r; Z+ x% w6 h7 z) j4 w        travel to pickaisle.con(A_i)% p7 }, D1 j0 k3 y" F( h
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec, h$ v7 k6 r8 `* v" |; ^
        else wait for 10 sec
) I+ P- ]$ w3 \$ A& ?+ E5 |        if A_i=A_leave then send to die' B5 F/ e* {5 ~2 a# [
        else inc A_i by 1
- e  ]" Y$ t' I! o% Y6 N# i- C    end% Q/ ?$ G) h+ n4 L0 q6 v, {+ T
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是个什么东东?
/ Y+ K0 X; K: e( tmove into后面,应该是一个station或control point,或者Queue/Container/Vehicle/Segment之类的东西。看你的报错信息,这个induct是个path么?
$ S. c  B( u2 ^1 V5 X+ r6 p( ]% o- j$ N. a5 u1 m- r
AutoMod Editor的语法报错信息,有时候会指在下一行,必要的时候要把上下几行都看一下。2 |& r4 I" k( w9 t) e  P: {  ]* Z

3 s- ?. c, d2 W0 x% W! S) {另外,你的几个P_pick是完全重复的,建议以如下方式修改,可以减少代码编写量:7 q7 Q: @4 U9 ]$ M( y4 \
1. 创建一个Process:名称为P_pick,number of Processes为3,其它按你的需要设置;删除那几个P_pick;  ]7 _3 W, r9 o. l7 [) D
2. 创建一个Queue:名称为Q_induct,number of Queues为3,其他按你的需要设置并放置;删除那几个Q_induct;
7 |7 a" a& _6 G; J+ a( Y  W2 \3. 以如下方式改写P_induction和几个P_pick的arriving procedure的代码:
$ I* |, s/ t/ \8 H7 @/ B, A+ |; fbegin P_induction arriving
  h! D+ M2 A6 U& [    clone 1 load to P_pick(A_induct)
$ O7 K$ b9 J+ O: w' g2 g9 X! G" {end最大的系8 o3 P# R) S4 k2 n
4 v& z( V& G& l4 |0 ^4 n. T
begin P_pick arriving
9 W5 x2 u7 W0 A& K( M    set A_i to procindex * 10 + 11 _6 b% z9 [3 e
    move into Q_induct(procindex)! ]6 y' z4 b  L- A  y! s2 z
    move into pickaisle.induct(procindex)- I- E  |& i' B8 O) B" E" s
    /*check the type of pickaisle.induct(i), for your last problem.*/
! F9 p  R1 k- [3 x
' G# }! j2 Z8 w  c/ c4 O( J9 t; z8 [    while A_i<=30 do begin
. |) O3 k( y, B6 X, M! _- S" r        travel to pickaisle.con(A_i)  e0 k9 ~6 e! |3 K
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
$ n) E& T! R5 s2 l" [2 V$ }6 p9 z' C        else wait for 10 sec
( _6 g; `) S0 b8 t4 g        if A_i=A_leave then send to die7 r- X. M! o% M
        else inc A_i by 1' T- O+ F- `6 j. U: u6 ~' n4 z0 Q
    end
' _/ W) H* E4 t3 V- b2 Mend
+ }* q9 J% [2 V0 b& V% I) v' X" q3 _- O) {# ~/ H1 @; B0 l& }
其中的procindex为整形,代表当前process的序号。7 b" g& _  Q* h: a/ y' n
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-4-9 01:53 , Processed in 0.018983 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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