设为首页收藏本站

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

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13425|回复: 2

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

[复制链接]
发表于 2009-4-4 23:58:32 | 显示全部楼层 |阅读模式
5仿真币
想请版上的人帮我看看我这段code中的一个错误,我刚学Automod没多久,实在找不出错在什么地方了,谢谢4 _+ H  l& N6 }( |
" ?2 S" q1 R5 q8 ]# h. 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中的数值,不知道会不会有什么不妥。
1 D4 p- b& |3 n; |2 u
. o/ e, _' H4 M1 F' Abegin P_read arriving1 L1 c% z' D! b1 k
    while 1=1 do begin, [  o7 z' o  B* N
        read A_tote from "data.txt" with delimiter "\n"5 T5 ]% H5 u3 x3 s  g( H& z. g% O
        read A_time from "data.txt" with delimiter "\n"( {& p7 ^# S2 w- R
        read A_leave from "data.txt" with delimiter "\n"
+ {  z# H0 R0 L7 _        read A_picks from "data.txt" with delimiter "\n"% I' k$ Y& ^5 ~9 s' _
        set load type to A_tote; U2 L- J7 Z: {% m. W" x- x
        if A_tote="tote 1" then set A_induct to 1
* @6 o2 _& J  E. F# N# O4 B        else if A_tote="tote 2" then set A_induct to 2
# r$ P' ?2 H5 U) a            else set A_induct to 3    7 o4 h0 f3 ~( j* j. V& B. Z
        set A_i to 0
2 a. B9 Z8 j) I' I' ]7 q6 L        clone 1 load to P_induction
* p' u, W% x( E' {9 u9 j8 r3 T        wait for A_time sec
8 `0 b. Q* `, z8 _; k* g; J    end- }6 U, b! p- c- ^- X  H
end
" @# A8 U  u( b. i! j  F" `$ C( o8 w
begin P_induction arriving, g) n& t# h9 w
    if A_induct=1 then clone 1 load to P_pick1
5 t* |% D% K) t1 E! f8 T    else if A_induct=2 then clone 1 load to P_pick2
* S, T' Y7 R# t3 v# ?' ?/ Z% d        else clone 1 load to P_pick3! Z8 d$ r8 {# g1 [. s
end
7 F) s) z: W# U; T8 ?  M- Q3 a% m$ G6 e0 a9 e
begin P_pick1 arriving- k! d2 Z' i+ H) T
    set A_i to 1
! O9 K3 P1 P6 @8 I    move into Q_induct1
$ \& h! u; h4 q: ~; ^' N    move into pickaisle.induct1; @' u3 A" [7 J0 v
    while A_i<=30 do begin; [. t0 V6 P$ b3 ^, j
        travel to pickaisle.con(A_i)9 [% e& v; v, _. }1 H, C2 j
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
  b: Y; p% F8 P; m! z        else wait for 10 sec
# t4 v- @1 Q/ D; S6 z; ~( v3 {        if A_i=A_leave then send to die
0 p9 ^' U% h* J+ K: B        else inc A_i by 1
- e1 ^9 W# {  B' M" o    end
2 [4 g6 J% D$ E$ L( ^2 s3 fend* b$ j& x7 s! n* `8 U! G

4 r. d5 E4 o8 kbegin P_pick2 arriving
5 T. y% X- O$ k) ]    set A_i to 11
. @5 j- p. E* w" u) D% y) \' Q    move into Q_induct2
; }  E2 Q: G% E    move into pickaisle.induct2
1 |. G' _& e2 q2 A1 {    while A_i<=30 do begin
0 e0 R; q9 V8 ^. a, M+ ?        travel to pickaisle.con(A_i)9 l3 D2 J9 g2 @' E3 Q  A% t
        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
8 j6 O- r* S. m% P1 j3 Y+ \- g        else wait for 10 sec  M3 B$ k. e, c7 h8 [
        if A_i=A_leave then send to die$ N( e& K* a3 S/ c  e3 h1 s% @4 ^9 w0 G/ h
        else inc A_i by 12 o; Q# T1 m. N! y! |  X
    end. M- f* ~3 X0 `2 i5 h
end
& \9 r' x( T: n( @# R2 Q: u
$ U1 b8 B. z5 l8 Q: ?begin P_pick3 arriving! V1 N" m! `, b  o: l
    set A_i to 212 O: m, v- s- n& V
    move into Q_induct3
% z' r' h% p; \; n1 j5 v7 a    move into pickaisle.induct3; E8 |7 l; y$ J5 X6 d
    while A_i<=30 do begin
( L* H; b5 Y' g! A$ P7 E* o5 j$ A5 l        travel to pickaisle.con(A_i)
# K" D% G- @. u$ m% {, C6 F# I6 b        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
6 [* r8 W  b; U) n: T        else wait for 10 sec
9 z/ h) ]- m! K        if A_i=A_leave then send to die& Y$ P* B1 A, n+ V) b& e" E
        else inc A_i by 1
; r/ p/ W9 W) i: f( m7 `$ n0 I: Q    end
( D+ y5 k/ [- ]* M& j, F# Jend

最佳答案

查看完整内容

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是个什么东东?8 |5 S4 V4 |- P. F2 J
move into后面,应该是一个station或control point,或者Queue/Container/Vehicle/Segment之类的东西。看你的报错信息,这个induct是个path么?
6 U) Y8 o3 ^+ c3 u4 z8 u* W1 ~' @+ |% b: o, d- _4 I: Z
AutoMod Editor的语法报错信息,有时候会指在下一行,必要的时候要把上下几行都看一下。
+ a. O# B8 X9 Z% K" F: w3 b
. F; Y( T, [% x5 k" [; |5 e1 ~6 o另外,你的几个P_pick是完全重复的,建议以如下方式修改,可以减少代码编写量:
$ a5 H* ~9 T. D, M5 K1. 创建一个Process:名称为P_pick,number of Processes为3,其它按你的需要设置;删除那几个P_pick;4 u# R/ M0 D8 @5 s
2. 创建一个Queue:名称为Q_induct,number of Queues为3,其他按你的需要设置并放置;删除那几个Q_induct;
- p7 w1 K& [% z, t* u3. 以如下方式改写P_induction和几个P_pick的arriving procedure的代码:
4 d- t. K4 {# |2 R$ T. a$ v/ ]begin P_induction arriving
4 y+ r2 k6 [% ~% ?    clone 1 load to P_pick(A_induct)
* G# W1 D5 T, ]4 Z' _; b8 [end最大的系
! Y  {1 K, |! \" J6 B$ c# r! P  i$ z9 Y8 ~3 {* N# r6 e# m
begin P_pick arriving
2 i" g* o& e3 b  R    set A_i to procindex * 10 + 1
+ V/ H! b! u  A+ V, l    move into Q_induct(procindex)" m9 c( V+ h  ?( ^0 o6 W; G9 V
    move into pickaisle.induct(procindex)
  H2 t1 u. f, J7 @    /*check the type of pickaisle.induct(i), for your last problem.*/# ]# j! V$ x5 T  V/ Z

6 G: I2 E: E9 R5 F    while A_i<=30 do begin
" K' e0 _) y6 Q9 B* e: `% y        travel to pickaisle.con(A_i)
& H5 Z- j& k" u3 J1 l/ k3 r        if A_picks(A_i)<5 then wait for 5*A_picks(A_i) sec
7 E% v# X8 g( l8 \2 T        else wait for 10 sec
! P+ C+ G5 O/ p( K* E) o" K, t        if A_i=A_leave then send to die9 |  O, _$ i) S8 c! c
        else inc A_i by 1) ^! r, q% T% c5 u
    end
/ q( L7 P$ v' o% N" Jend
* G" \5 o9 j$ t% e# V; F$ |! o
" X+ ?% W9 _0 y9 E2 G' z其中的procindex为整形,代表当前process的序号。
) @# F6 `/ ]3 b% w7 C7 y2 }' Q1 H: Zstation和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-12 23:08 , Processed in 0.022287 second(s), 14 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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