设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13658|回复: 2

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

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

! y& ]; [' h4 r/ v# ~8 {$ ?我的问题是,在每个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中的数值,不知道会不会有什么不妥。
8 r( C: u7 R7 e; S1 q. {& b1 J. P# N
begin P_read arriving
) W% |6 ^/ a- r% V6 q! D    while 1=1 do begin) E9 m2 r! O- }8 P
        read A_tote from "data.txt" with delimiter "\n": j, U' I  F" l
        read A_time from "data.txt" with delimiter "\n"
( H: I0 x6 N' J. ?3 {9 d4 k        read A_leave from "data.txt" with delimiter "\n"5 k- S7 j5 B' r; x6 b/ M3 I. `
        read A_picks from "data.txt" with delimiter "\n"; ^; K- L1 [5 F% A7 [7 `" o4 x
        set load type to A_tote# J9 C' F' n4 I" L" w
        if A_tote="tote 1" then set A_induct to 1& y; V# A0 Y' l
        else if A_tote="tote 2" then set A_induct to 2
) c4 f% `5 W5 W% \- E( p            else set A_induct to 3   
+ R" g7 h& Y5 @6 R9 v        set A_i to 0! Y; y$ U7 A* Z! R
        clone 1 load to P_induction; N  `/ Q7 i5 q# J3 }2 W( Q& q
        wait for A_time sec( r7 f! L/ z! e+ }$ `0 ~2 n0 @3 i
    end
* B6 S1 [* o8 [% d4 }5 aend
  u5 ]" f! L) k( Z( P# I- w( n0 M" K* P$ @4 S( }
begin P_induction arriving
, m% s/ J2 T) i    if A_induct=1 then clone 1 load to P_pick1
* N7 F& B7 ^$ [; I9 m! D3 d  T    else if A_induct=2 then clone 1 load to P_pick2
, ], P6 {' I8 y" k( ]        else clone 1 load to P_pick3& h+ R0 {& H/ F7 G* q3 n+ }
end5 a: `$ q, R9 j( e. e9 p/ G
9 S; {! O7 u0 F5 `7 a4 g- k( Z: a
begin P_pick1 arriving
& c7 G) A1 w! f3 u    set A_i to 1/ b4 a( T( L. J2 X) e
    move into Q_induct1
. @5 }' ~9 p6 Y+ U! v1 K    move into pickaisle.induct18 Y: \* A4 U4 F
    while A_i<=30 do begin
: y8 D! _/ Y- {2 s) ?. i; c        travel to pickaisle.con(A_i)- }+ s+ `  Q8 f2 w
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
" p0 V( J2 w/ Y" Y2 B        else wait for 10 sec! x) k1 F; ?: ^
        if A_i=A_leave then send to die3 O2 Z" A4 B4 M1 }8 L6 u/ t1 ]5 ^0 ]
        else inc A_i by 1& r% {7 _& p8 }' Z8 n% a- F! C$ y
    end
; Q) b7 \( o8 M# a+ N9 E# r2 H4 zend
" I( f5 a$ J- h+ [
$ u) L3 t/ O$ O4 n0 o; jbegin P_pick2 arriving) L' y; {7 t  s- b- _- ]
    set A_i to 11! j/ ^% k" `, `" [4 p  W+ }4 v; `  C
    move into Q_induct2
% q$ p- p0 Q; s. M    move into pickaisle.induct2
# r  O1 n( a% o. \5 K    while A_i<=30 do begin
6 s. F* }7 O4 Y6 D# P# T/ q        travel to pickaisle.con(A_i)
9 Y4 `; c  k  Y6 i( S7 ~% n        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec! @! C& q# Q8 O& C
        else wait for 10 sec' q! o$ q4 x/ i: e% j2 Y4 q
        if A_i=A_leave then send to die
" \/ q% R( I1 R1 u8 l3 z4 K" A6 y        else inc A_i by 1
" d- l* j$ q- g! i1 B& Z' N! n+ p    end
+ G: v9 D1 E8 M$ U* ~" Aend( S4 z% J; a3 J8 A
: K8 j: V" }1 v
begin P_pick3 arriving
3 |" x( b; ~% p- p    set A_i to 21
/ i# V" `: O; B: @( ?& p" v    move into Q_induct32 D  x8 [$ s9 W9 {4 o
    move into pickaisle.induct3
5 E) j) O) g8 ?( {2 K    while A_i<=30 do begin0 S+ F: s: n6 v/ F
        travel to pickaisle.con(A_i)
/ s, H6 O1 ~( B* t        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec; ^# h8 z& |1 j6 {6 p5 [
        else wait for 10 sec
3 q- s4 n' X5 R" W$ E        if A_i=A_leave then send to die
  [6 ]+ [8 Y. F2 W% _3 d        else inc A_i by 1
" X1 r) w7 f3 O5 y8 @1 F: `    end+ D# E# F! Z1 H2 G
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是个什么东东?+ G2 i. x' G. @' N& o
move into后面,应该是一个station或control point,或者Queue/Container/Vehicle/Segment之类的东西。看你的报错信息,这个induct是个path么?8 K3 o9 W3 [* s! q$ z  ?2 C

- C! Y5 g- _! I$ R6 c/ d2 Z7 p$ [7 gAutoMod Editor的语法报错信息,有时候会指在下一行,必要的时候要把上下几行都看一下。
5 S  d6 ?( d  e: B+ f1 G9 h! s; H3 |, ?
另外,你的几个P_pick是完全重复的,建议以如下方式修改,可以减少代码编写量:0 d6 K- Q, p/ c
1. 创建一个Process:名称为P_pick,number of Processes为3,其它按你的需要设置;删除那几个P_pick;( F1 M' U3 w3 q. ^) x  p
2. 创建一个Queue:名称为Q_induct,number of Queues为3,其他按你的需要设置并放置;删除那几个Q_induct;4 }. c+ R' Y/ A/ b( O$ {6 J* M
3. 以如下方式改写P_induction和几个P_pick的arriving procedure的代码:! S8 _6 R. \+ {1 [5 _
begin P_induction arriving9 \; m9 q/ t" y' w) \
    clone 1 load to P_pick(A_induct)& z/ d! ~( c5 {% Y+ X
end最大的系
  q- ^9 f# j) T
  L* E3 _+ c3 l% W9 ebegin P_pick arriving3 J+ D1 b  a7 z3 X
    set A_i to procindex * 10 + 1# \( P) h3 b6 C5 y" k% f/ @
    move into Q_induct(procindex)
8 V+ @8 n+ T8 Z% y% O4 z    move into pickaisle.induct(procindex)) M7 i) _* C/ V5 X! z5 ~
    /*check the type of pickaisle.induct(i), for your last problem.*/
) T& p1 @0 N! Z; d$ E( a% X9 ~/ A
% g/ o, {$ A* r    while A_i<=30 do begin$ m( L6 v  _- N; I- L5 I
        travel to pickaisle.con(A_i)
, x& U" G  u# [9 P        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
7 I  T0 f  |3 J$ d7 T1 T" l% I        else wait for 10 sec
  q- u4 _( E2 @6 z        if A_i=A_leave then send to die
/ @3 `' e# e9 c8 C9 J        else inc A_i by 1
, ?) _4 I' `$ g( }' w' b9 `    end
! M) k" e* {. [5 z: Pend
% y9 D3 |1 ~; e' ^8 M* r
2 D1 f9 G/ {+ N  h( s其中的procindex为整形,代表当前process的序号。) r  x$ m  Y0 A: i) |  Y0 A5 M
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-26 23:18 , Processed in 0.014422 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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