设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13612|回复: 2

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

[复制链接]
发表于 2009-4-4 23:58:32 | 显示全部楼层 |阅读模式
5仿真币
想请版上的人帮我看看我这段code中的一个错误,我刚学Automod没多久,实在找不出错在什么地方了,谢谢) A) I! y$ N8 [% |$ v2 m
7 s* A: [2 O' ]! b7 Q  l" l4 ]6 v
我的问题是,在每个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中的数值,不知道会不会有什么不妥。( X' a- f% _+ q! y4 l! W

* m  i1 J8 j5 W4 M  w$ {6 w- [- ybegin P_read arriving
/ F$ L% c: d, T/ t1 V( V+ Z, O  Q) h    while 1=1 do begin
; H0 K7 s& {- g5 h3 O3 ?1 p        read A_tote from "data.txt" with delimiter "\n"
) T. m, v9 _4 ?, e  F6 J        read A_time from "data.txt" with delimiter "\n"4 O4 b9 u) l) ^( g  h1 o
        read A_leave from "data.txt" with delimiter "\n"- H: x' Y3 T* f! g& T  F
        read A_picks from "data.txt" with delimiter "\n"
; O! E2 i3 P' h  Z/ Y# Q        set load type to A_tote% R0 \4 d: e* c% g9 q/ f
        if A_tote="tote 1" then set A_induct to 1
# m- H2 G/ W& Z" ^6 {        else if A_tote="tote 2" then set A_induct to 29 u0 y8 a: P8 G1 ?; v
            else set A_induct to 3    7 G" _2 ^3 J1 O% |6 s4 X" A
        set A_i to 0
% E: a5 t. j$ d& p* c- f        clone 1 load to P_induction: N! `1 M5 Y, m; V$ @1 r
        wait for A_time sec9 i) i1 D. u- L- h
    end3 E2 J9 R8 A1 I9 I8 ^; I/ q/ ?
end1 o! u' k- s" ^# ]/ `% j/ ~+ G

! ~0 O% w, \5 J) s0 Bbegin P_induction arriving
/ f2 W' ^; b7 t  e9 |% Q    if A_induct=1 then clone 1 load to P_pick1! T: @! ?. \9 M2 A; ^& C
    else if A_induct=2 then clone 1 load to P_pick2
' U& X3 W# _% x' R5 O        else clone 1 load to P_pick3
* N- z! {; T) W1 u, Y5 hend
  ]6 L  n2 r/ A# ?6 `* K  a' N) d$ T) H
begin P_pick1 arriving. q, A$ a- g9 W
    set A_i to 1( L4 X5 b% Y7 I5 M+ [# i
    move into Q_induct1
7 l' C2 I& O- u/ B6 r' N# z9 G    move into pickaisle.induct1- X5 }4 [' @+ ?, a  Z2 p: G: I. F
    while A_i<=30 do begin% q- l+ g) G5 t- v
        travel to pickaisle.con(A_i)* {  M5 R9 c$ O* t8 |
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec) e1 l+ v% I; l$ e) E0 |/ |
        else wait for 10 sec! w: j  j3 e5 N/ h
        if A_i=A_leave then send to die
2 v1 k, e' w8 x+ b. z) S4 E        else inc A_i by 1) X% d; u5 c2 e7 ^. `
    end
8 S: x$ i; N/ i" A% s1 i! p) aend, N( T7 E3 w1 t# X

5 D5 T5 o' ^  v4 b' Obegin P_pick2 arriving0 m+ y% ]2 G% g9 q3 v" j
    set A_i to 11" {7 g; g6 n3 l2 U6 v8 ^& K* u
    move into Q_induct2
/ R! r; Y1 g3 g) Y# W3 V2 T: y) V    move into pickaisle.induct2
0 ~+ j1 F: g& i5 q    while A_i<=30 do begin  ~' L  ]0 v* H/ D5 D1 i$ C, y
        travel to pickaisle.con(A_i)
# B4 Q/ V3 c8 m) Y8 l        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec1 P, b. z! U1 {* l& u
        else wait for 10 sec
3 \& _0 q2 u0 L' k8 Z/ d( c        if A_i=A_leave then send to die
1 @) Q4 `7 z4 a: S        else inc A_i by 1' ~7 w9 A+ o7 q2 n) K% f7 g- C
    end
1 C6 T# \0 v% v% uend' X4 `! K) e5 p" Y* u; e/ u6 V  u

4 B- Q, P8 Z) s4 d- O4 c! j2 ~* Ebegin P_pick3 arriving0 i; A3 @3 u$ \+ T8 ?
    set A_i to 21
8 L% w9 g# x9 x6 y    move into Q_induct3
( G7 P- X* J* x  L9 P" e9 Q1 b    move into pickaisle.induct3
" i0 M1 W9 c* E" E) e; \  K; c7 l    while A_i<=30 do begin7 k/ L/ ^; r5 \  _" y2 S
        travel to pickaisle.con(A_i)' i$ K1 A1 D6 a
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec) Z. a& X+ r! E4 I; M
        else wait for 10 sec8 j) d; Z5 d" q* P/ k3 T
        if A_i=A_leave then send to die% F! E; x; z$ l9 z# ^
        else inc A_i by 1/ b6 v( z! ?0 B6 L
    end7 d3 m9 \  }$ O
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是个什么东东?, v" D) H) m' |, X+ i; O
move into后面,应该是一个station或control point,或者Queue/Container/Vehicle/Segment之类的东西。看你的报错信息,这个induct是个path么?! A; ?; B; H. S) o, z/ N

5 D* i. ^; ], j; I: zAutoMod Editor的语法报错信息,有时候会指在下一行,必要的时候要把上下几行都看一下。
& I2 e0 E/ W' `) U! u& W- @, T- |
另外,你的几个P_pick是完全重复的,建议以如下方式修改,可以减少代码编写量:
' l: A+ C, W: k% c; f2 G1. 创建一个Process:名称为P_pick,number of Processes为3,其它按你的需要设置;删除那几个P_pick;; e) _" l, C( u
2. 创建一个Queue:名称为Q_induct,number of Queues为3,其他按你的需要设置并放置;删除那几个Q_induct;  ~' Y/ E* q, Q5 I6 }- r4 D) L' g
3. 以如下方式改写P_induction和几个P_pick的arriving procedure的代码:, T2 c" W' [1 }3 m) C5 P
begin P_induction arriving3 y2 L- v5 p) \  N1 X) x! |
    clone 1 load to P_pick(A_induct)$ G0 [- d2 H5 \2 r) w4 @6 Y
end最大的系: P8 n8 Y0 r2 a  g& b

0 D$ J  R( q% d( b: ?! J# {5 ]' u: zbegin P_pick arriving
8 h4 R+ E+ X# M+ ^) u* Z    set A_i to procindex * 10 + 17 E  m' w* ?* E! c5 {2 s
    move into Q_induct(procindex)% {* _! I# u0 v: V, f
    move into pickaisle.induct(procindex)
* ]; G: X3 h8 @( t7 l) w: n    /*check the type of pickaisle.induct(i), for your last problem.*/
7 ~& A" ?/ I" l; Q* o! i. N* Q, Z; r
( h+ Z* y% w9 v    while A_i<=30 do begin
% D  ~, a( m9 r- E/ O        travel to pickaisle.con(A_i)* L( Q# V5 Z6 a; S4 M3 U
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
- K/ Z% k/ \+ n7 E5 w        else wait for 10 sec* {3 w7 ~, n/ F7 q* K$ r" R
        if A_i=A_leave then send to die- S9 S/ y2 B) ]9 b# k! I1 K
        else inc A_i by 1+ f1 }6 W5 x1 L, u
    end- x; `, A4 `/ }3 R) m
end
2 Z/ n& ^4 ?9 a9 B" E& m( c' K. E' o) N. T2 A# S* r# A, |  a
其中的procindex为整形,代表当前process的序号。+ `$ n' E8 |7 i1 v
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-24 10:52 , Processed in 0.016951 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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