设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12933|回复: 2

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

[复制链接]
发表于 2009-4-4 23:58:32 | 显示全部楼层 |阅读模式
5仿真币
想请版上的人帮我看看我这段code中的一个错误,我刚学Automod没多久,实在找不出错在什么地方了,谢谢" W+ p; J; Q3 r, |
! a: }! S# ^& `
我的问题是,在每个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中的数值,不知道会不会有什么不妥。7 j+ u5 }1 c0 H! k

8 Y" y6 D1 g0 D. c/ Z- Nbegin P_read arriving9 _# L+ X6 o: u* J
    while 1=1 do begin
/ h* J  b& @0 D/ @, n        read A_tote from "data.txt" with delimiter "\n"
0 d4 T/ ~% U9 Y        read A_time from "data.txt" with delimiter "\n"
" ^: x* Z! D( i: k2 A: x        read A_leave from "data.txt" with delimiter "\n"
6 Y" e1 H. C- I! ~$ @0 v        read A_picks from "data.txt" with delimiter "\n"
" D2 O8 n  h% R1 s! ~" T; f' ^, L/ W        set load type to A_tote, o1 v% Y* M: `0 J* ~, r
        if A_tote="tote 1" then set A_induct to 13 W" m: I$ y: m3 v/ E& R
        else if A_tote="tote 2" then set A_induct to 2
; @: q; h- ~; s. E+ r            else set A_induct to 3   
: N" c( r1 I# S# W        set A_i to 00 V/ g) l" P8 n  g9 U: A
        clone 1 load to P_induction5 ^# s) z% g1 w' S5 p9 N* N# Z
        wait for A_time sec2 `, \" W* \9 f! q+ G
    end
; C! p( \; X1 |( yend" t, J7 d) S- d2 u( p9 y- u& K
7 ^( k! p! [2 `/ B+ x
begin P_induction arriving3 k* b6 F+ W( [! e, T3 U
    if A_induct=1 then clone 1 load to P_pick1) M7 w$ Z0 ]. |: {% n
    else if A_induct=2 then clone 1 load to P_pick2
6 ~$ O' J' o+ j' g2 p4 ~        else clone 1 load to P_pick37 A8 n4 |! d! h8 h9 F
end/ E+ J1 k1 k( y" f- f# |, T
8 I+ B6 C/ C7 t0 P6 e
begin P_pick1 arriving
% b' r5 L( ^4 Q7 M3 ]) T7 J    set A_i to 1+ f/ t  H1 Y& E! a4 B
    move into Q_induct1
+ `: X" [8 w  P, m5 q' [( D$ ?    move into pickaisle.induct1
& C0 h4 q) R- s% p    while A_i<=30 do begin
4 j9 ?/ u, ?% ^4 s$ \% t3 g/ q        travel to pickaisle.con(A_i)4 y: f5 Y0 |# W7 I- m
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
& `) ~# E8 j2 e; ]2 a        else wait for 10 sec
# c* B# e% n' y; D) W# _% d; ?3 `        if A_i=A_leave then send to die
% ?: L) F# H6 U3 m% z) I, M        else inc A_i by 1! K  ]+ n% s  I' S% f) H( ?
    end
* Q, m4 y. R5 H+ Jend
1 T4 u9 @2 Y( H# {: a
7 c- |+ V9 ]: p3 F  Abegin P_pick2 arriving
1 w( p! C" f: ^. `; |  V0 m$ b    set A_i to 11$ x# k" b  @0 a' m2 a" P3 Y
    move into Q_induct2) y0 V# X7 }, g3 P$ H. ?/ `
    move into pickaisle.induct2
" ^4 V  X- z$ j: q& I    while A_i<=30 do begin& j0 y* ^1 v% O% g. W: Y
        travel to pickaisle.con(A_i)
# X6 p: J0 y" l" k5 X        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
9 B9 [5 z  z8 t& F4 C0 A3 y        else wait for 10 sec
  N  T4 r* X; N        if A_i=A_leave then send to die" P* {/ X: x0 r$ \  ^" L% y  k: Z
        else inc A_i by 1- K7 P, S, `8 g% W2 i
    end
! }9 |- d6 B7 {  I1 |end6 ?+ S, a4 Z. b% e2 d$ D

. n  d# f" P" Qbegin P_pick3 arriving
" S/ |6 P+ e3 ~( n3 A    set A_i to 21- M6 |' ~3 q' e9 @
    move into Q_induct3
2 e' j) p' ]6 N, P8 r& U3 j    move into pickaisle.induct3
# }2 f5 J% d7 V: g    while A_i<=30 do begin2 A  b/ B' z+ Q1 ?3 Y( E
        travel to pickaisle.con(A_i)
9 I) E( f+ E" `( d! n4 e        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec% W' ~9 }) W2 B7 `: a3 H1 q
        else wait for 10 sec3 r" t9 U4 K3 ?0 P* p
        if A_i=A_leave then send to die; S( G- m+ e9 N, ~8 v4 z
        else inc A_i by 1
6 J9 f( V: O+ n; v0 y! R) p    end
* e1 {# v% R( `' A* R5 R. l# kend

最佳答案

查看完整内容

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是个什么东东?
/ L5 |  ^; b1 Q! Z% e& v3 Cmove into后面,应该是一个station或control point,或者Queue/Container/Vehicle/Segment之类的东西。看你的报错信息,这个induct是个path么?; Z  p: }- Z' x4 J

" N4 n' l: F6 w7 AAutoMod Editor的语法报错信息,有时候会指在下一行,必要的时候要把上下几行都看一下。
1 i) S) y4 P( Y  ?  h0 I; F' g0 b' z$ ^% S% }/ ~4 ^: P2 v) D4 _
另外,你的几个P_pick是完全重复的,建议以如下方式修改,可以减少代码编写量:6 C+ m4 w- z2 k$ b  d: Q
1. 创建一个Process:名称为P_pick,number of Processes为3,其它按你的需要设置;删除那几个P_pick;6 c% p9 }& M, a/ `, {4 v5 O* |- V
2. 创建一个Queue:名称为Q_induct,number of Queues为3,其他按你的需要设置并放置;删除那几个Q_induct;5 ^( Z3 V* X; V, Q! Y+ Z& v
3. 以如下方式改写P_induction和几个P_pick的arriving procedure的代码:
. u, n2 k; K( Ybegin P_induction arriving0 C# y7 p2 ]# P9 r+ V
    clone 1 load to P_pick(A_induct)
% C! O9 D8 e% Dend最大的系
. U  b! N- V8 D: q1 |' P$ w9 D3 q; ]7 K. B3 H4 q
begin P_pick arriving, D+ H- B$ y3 S5 J5 V
    set A_i to procindex * 10 + 1- S+ B% S: v' g$ i
    move into Q_induct(procindex)2 s" z8 q* q( m) K# {% u
    move into pickaisle.induct(procindex)
" I7 u) k3 U  R( \7 z    /*check the type of pickaisle.induct(i), for your last problem.*/
( U/ ^) N  }2 c  ]7 a( T" {. y7 Y, k& @" R2 ?. j+ m) [# X6 ]) f
    while A_i<=30 do begin! j6 r- B& T& m* l$ f
        travel to pickaisle.con(A_i)
/ z/ B* Q* `. |# y$ _  P( u        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
9 s6 T5 N5 S+ S" H        else wait for 10 sec% r. H% W3 b) d4 ^
        if A_i=A_leave then send to die  }3 H& x$ B( b+ G) v3 `  G
        else inc A_i by 16 a) |% u  q+ c/ e
    end
3 A$ l/ O* V- j4 dend
1 ?2 j* x( P& r6 C5 M% ?7 v/ A$ u" h4 N
其中的procindex为整形,代表当前process的序号。5 ]% T* a2 d  e4 C: C9 R1 Z
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-3-3 22:51 , Processed in 0.015071 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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