|
|
发表于 2011-7-12 08:32:36
|
显示全部楼层
回复 1# 钟云驹 ) q0 K; v' F, I3 o: H: c
详解A类宏
4 r4 E6 A3 s7 C9 y6 p) @! {; ^. H/ G分类:默认分类 字号: 大大 中中 小小 用户宏功能是提高数控机床性能的一种特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一样存入存储器,然后用一个总指令代表它们,使用时只需给出这个总指令就能执行其功能。5 j6 y3 v$ \- t/ y3 `, f& o
用户宏功能主体是一系列指令,相当于子程序体。既可以由机床生产厂提供,也可以由机床用户自己编制。: }0 p- I3 y9 W6 p. \; j0 j( M
宏指令是代表一系列指令的总指令,相当于子程序调用指令。1 N b. g% w) J+ E
用户宏功能的最大特点是,可以对变量进行运算,使程序应用更加灵活、方便。; q0 ~% O% V! a+ v7 s; b* ?, P6 I
用户宏功能有A、B两类。这里主要介绍A类宏功能,B类宏功能请参见本课程的B类宏程序介绍。, y' j7 N& ~4 H3 ^9 |$ @# t' }
1、变量
6 R0 l3 u) T2 n! ]4 K" |9 v 在常规的主程序和子程序内,总是将一个具体的数值赋给一个地址。为了使程序更具通用性、更加灵活,在宏程序中设置了变量,即将变量赋给一个地址。$ s6 u* c$ p$ s
(1)变量的表示0 Q5 G3 m2 T1 q" r6 a% K/ G Q
变量可以用“#”号和跟随其后的变量序号来表示:#i(i=1,2,3......)5 w9 B$ _5 c+ a1 i/ k( l# s D
例:#5, #109, #501。6 X, e1 D% w- E& ~9 b2 t
(2)变量的引用
# q2 J! t; ?& j; Q 将跟随在一个地址后的数值用一个变量来代替,即引入了变量。6 C. `5 q/ Y4 A7 D2 M
例:对于F#103,若#103=50时,则为F50; ^: y* P8 s4 \ z/ o
对于Z-#110,若#110=100时,则Z为-100;
; ^) q2 ?& I, I% O& ]) H对于G#130,若#130=3时,则为G03。; l/ @' J, ^6 Q# D
(3)变量的类型
- {! W1 ]- G5 ^7 C3 y 0MC系统的变量分为公共变量和系统变量两类。
8 x$ I% f8 G) y3 }1 ]& f1)公共变量
8 t- q; ~: v: H7 R( o8 Q 公共变量是在主程序和主程序调用的各用户宏程序内公用的变量。也就是说,在一个宏指令中的#i与在另一个宏指令中的#i是相同的。
9 H1 |" ?/ [ P/ V8 m8 b公共变量的序号为:#100~#131;#500~#531。其中#100~#131公共变量在电源断电后即清零,重新开机时被设置为“0”;#500~#531公共变量即使断电后,它们的值也保持不变,因此也称为保持型变量。 2 G# u$ }( J# x$ ~
. s# j2 N; u( f5 N5 G
P* v! {+ I$ ~% e, @7 \# Q+ X
6 J' H- L6 i1 Y3 Z( ~
2)系统变量
2 J: {' E O7 W0 k& m 系统变量定义为:有固定用途的变量,它的值决定系统的状态。系统变量包括刀具偏置变量,接口的输入/输出信号变量,位置信息变量等。
; i. n F5 S [( N+ U 系统变量的序号与系统的某种状态有严格的对应关系。例如,刀具偏置变量序号为#01~#99,这些值可以用变量替换的方法加以改变,在序号1~99中,不用作刀偏量的变量可用作保持型公共变量#500~#531。
8 M$ O: c6 I6 z, P' ~) ? 接口输入信号#1000~#1015,#1032。通过阅读这些系统变量,可以知道各输入口的情况。当变量值为“1”时,说明接点闭合;当变量值为“0”时,表明接点断开。这些变量的数值不能被替换。阅读变量#1032,所有输入信号一次读入。
4 ]4 \9 [! W+ U+ f6 `: T' T5 d# ]2、宏指令G65: X# A1 ?% [9 [* b \7 u
宏指令G65可以实现丰富的宏功能,包括算术运算、逻辑运算等处理功能。& \1 o) e. W K1 ]) N) \3 G2 A
一般形式: G65 Hm P#i Q#j R#k0 \+ {* y# h* y4 s% T
式中:--宏程序功能,数值范围01~99;
4 d1 @3 _1 K4 E) f' I9 F#i--运算结果存放处的变量名;
4 `' G. K# z/ \8 m; _! ]#j--被操作的第一个变量,也可以是一个常数;" N! N2 j* m) g. f9 T2 J$ d
#k--被操作的第二个变量,也可以是一个常数。
) p. }/ [6 _+ H. a. T, L例如,当程序功能为加法运算时:
* X: l5 {$ R$ H程序 P#100 Q#101 R#102...... 含义为#100=#101+#1020 J" R" h5 U# N0 |( ]- P' W
程序 P#100 Q-#101 R#102...... 含义为#100=-#101+#102
8 U* M8 ~- Y) d程序 P#100 Q#101 R15...... 含义为#100=#101+15
) v$ S9 T" ?" f9 o. n, G2 L: U" N1 U' B! P/ ?, D/ y
3、宏功能指令 % t: b- u4 G$ Y% W K# Q' m0 H0 \
5 F/ X0 k$ S6 `0 W
(1)算术运算指令
! o) V/ |# H: U/ v/ G; _0 K4 R4 v. e
e- F+ }- o' e( t1)变量的定义和替换 #i=#j 1 e# a+ x; {+ h7 ~4 n. Y3 u" a
6 _0 ]3 f1 A! [4 Y编程格式 G65 H01 P#i Q#j
( @' @ K$ S& F7 n2 c8 J, P例 G65 H01 P#101 Q1005; (#101=1005) ; k* k: M0 n; G, \* ^) Y
G65 H01 P#101 Q-#112;(#101=-#112)
9 N; C" v& m- R1 p2)加法 #i=#j+#k! A# R& a; T& F3 d( |6 q
编程格式 G65 H02 P#i Q#j R#k R1 L. Z: M- o: {4 M
例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103)
$ h# {$ g+ u, T+ \. c+ n) Z3)减法 #i=#j-#k3 l' m' S; q; {8 H* ], n6 k
编程格式 G65 H03 P#i Q#j R#k
2 v8 f( f" I0 \* a5 z例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103)
" c' q9 j0 y! t7 R4)乘法 #i=#j×#k
5 W" A6 h+ S, ^" a* @6 S5 n编程格式 G65 H04 P#i Q#j R#k2 l# ^+ ^' T. A" N3 s* s9 g
例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103)
0 r3 h0 @2 Q4 n5)除法 #i=#j / #k
; X% C: Y H1 P! \编程格式 G65 H05 P#i Q#j R#k7 q0 D) ^/ o, @7 T
例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103)
' ^7 K- Z6 C( H5 K+ b% U6)平方根 #i=
, B5 q. v' H6 C/ W8 k$ e( G编程格式 G65 H21 P#i Q#j- h' m! L: ~" G& v
例 G65 H21 P#101 Q#102;(#101= )- j8 G$ h1 J _( D
7)绝对值 #i=│#j│
1 d2 z5 N7 c* P8 |. L! H4 t编程格式 G65 H22 P#i Q#j M `5 R- X' L% _! D0 T A2 G( B' F
例 G65 H22 P#101 Q#102;(#101=│#102│)
8 _9 { |, F9 {3 F5 t! P8)复合平方根1 #i= " g. J2 {) W" n! Y$ B6 V
编程格式 G65 H27 P#i Q#j R#k
( }1 U! s, T/ E4 k) |: W; ^例 G65 H27 P#101 Q#102 R#103;( #101= 4 D) ~ x2 d3 e! Q6 w3 }
9)复合平方根2 #i= " p6 O! x6 ]1 T) K
编程格式 G65 H28 P#i Q#j R#k1 D8 L6 F: m6 M% K5 ~) D/ ?7 e
例 G65 H28 P#101 Q#102 R#103
" t' H! r# `% s( T" C
6 `9 o/ M# g5 d) B0 u! j1 Z: }1)逻辑或 #i=#j OR #k
+ W1 a6 i% W" V9 [编程格式 G65 H11 P#i Q#j R#k
4 a; c+ P4 ^" U% f, U+ R$ m8 c6 u例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103)2 S( w1 \ @5 `% q# @* K
& Z8 D" Y' W0 M& O& n- p' d7 |2)逻辑与 #i=#j AND #k5 j2 p4 W! F, |8 P
编程格式 G65 H12 P#i Q#j R#k5 A- G% [ P2 \
例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103 9 N/ Z5 ^" p- w% S5 ]
; J% Z% {4 N2 M, o7 w% r6 x8 G$ ]
$ F# o) `& ?* S: x; v
9 V+ P* y3 Q- H( ^9 R2 }(3)三角函数指令
& O& ^. E) h- i, p/ c6 X
% w% R2 M* }, I: m' s0 W - s) I5 H, q7 l7 N! G8 K
b, W; w. q. l1)正弦函数 #i=#j×SIN(#k)
# A% c) q, o2 R- F/ q2 u
V' C. X; A/ d- V6 x: R编程格式 G65 H31 P#i Q#j R#k (单位:度) .9 U' F8 i2 o+ B- `2 e" Q
) c. W+ u8 D. @, z/ p' P+ q$ l9 u! B; W9 b
例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103))
/ k9 H+ k3 f+ ^# j* Y, J2)余弦函数 #i=#j×COS(#k)1 h6 h0 V0 S) \6 o
编程格式 G65 H32 P#i Q#j R#k (单位:度)/ c, B' y9 R5 w3 m
例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103))
- E3 x1 R. d* @7 `3)正切函数 #i=#j×TAN#k
' D8 d4 R9 M3 E1 B) w编程格式 G65 H33 P#i Q#j R#k (单位:度)
+ q* \3 T9 F. A: _8 }, ?6 `例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103))
. h6 ?$ H x. l- Q2 X0 S4)反正切 #i=ATAN(#j/#k); D6 p' w' @8 i; t6 d. \9 b5 ` G" o, W
编程格式 G65 H34 P#i Q#j R#k (单位:度,0o≤ #j ≤360o)
6 M6 o# C2 {# C9 g, E3 q例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103)
' A$ w6 v* s: ?8 E4 k& ~( @4 d8 W
# N* P8 ^/ f- S6 z8 j/ s+ l
0 O1 {6 l- {$ T( B0 ]- H
9 Q! ~: w7 | P' ^) e9 d) Y8 Z(4)控制类指令* R' @; R h& E$ j* E
+ F5 j% D5 t1 ?% i
. Q0 |5 I# T% ]& r- O: K0 `; d6 o1 {
编程格式 G65 H80 Pn (n为程序段号)
6 T5 m# S4 A# R6 r- k0 }例 G65 H80 P120;(转移到N120), Z6 A& F4 s( M4 z, x+ r
2)条件转移1 #j EQ #k(=)
2 {2 f$ X' P: C! q5 O编程格式 G65 H81 Pn Q#j R#k (n为程序段号)' n3 Q; P6 ~6 u, l! S/ D
例 G65 H81 P1000 Q#101 R#102
- h/ }( v7 W D, C% C! `当#101=#102,转移到N1000程序段;若#101≠ #102,执行下一程序段。7 B# K! `7 K' [% h" k
3)条件转移2 #j NE #k(≠)' W- ~8 V# Z1 E& P# l4 U
编程格式 G65 H82 Pn Q#j R#k (n为程序段号)& l5 t% A0 y, a% j* Y
例 G65 H82 P1000 Q#101 R#102
" g5 z, u# r) h4 O4 o当#101≠ #102,转移到N1000程序段;若#101=#102,执行下一程序段。
# R8 h* }7 D) C* ^( z% Z0 c4)条件转移3 #j GT #k (> )
( B& _. N& Y* |编程格式 G65 H83 Pn Q#j R#k (n为程序段号)
, B* b7 Q5 F4 F7 h1 W1 P例 G65 H83 P1000 Q#101 R#102
1 P4 F, }- `: ]当#101 > #102,转移到N1000程序段;若#101 ≤#102,执行下一程序段。
% S$ f+ l1 }5 x* v5)条件转移4 #j LT #k(<)
5 d( F0 Z! }: r" Z& y# U: J; [4 k, W编程格式 G65 H84 Pn Q#j R#k (n为程序段号)
& p$ W7 S7 J, Q* o/ Y7 M0 e! }% h例 G65 H84 P1000 Q#101 R#102
9 l; P& Q3 }0 {$ A( s/ N4 l7 n当#101 < #102,转移到N1000;若#101 ≥ #102,执行下一程序段。" Z6 r( N$ q8 r, K
6)条件转移5 #j GE #k(≥)- v; M. t( t, N+ K: Y" x. P) D
编程格式 G65 H85 Pn Q#j R#k (n为程序段号)
# z7 {* [6 B8 a8 p/ } P1 z A7 X$ G例 G65 H85 P1000 Q#101 R#102% J# [7 b) g+ e; O+ ^( F2 a
当#101≥ #102,转移到N1000;若#101<#102,执行下一程序段。
( ~ U2 M8 p3 [& n! r6 r0 B6 q- F7)条件转移6 #j LE #k(≤)
/ e0 A3 w( E5 Z+ z: ~编程格式 G65 H86 Pn Q#j Q#k (n为程序段号)5 [- Z% B2 }* s' ?9 Y8 u0 t
例 G65 H86 P1000 Q#101 R#102
/ [1 a4 l% H2 m当#101≤#102,转移到N1000;若#101>#102,执行下一程序段。
: o8 b+ l) i4 m; y8 ?
; }5 O+ |/ A3 C$ e; d& i& z! h4、使用注意5 A! _: e* Q- L, q& C2 l
为保证宏程序的正常运行,在使用用户宏程序的过程中,应注意以下几点; X. E, Z t2 @2 |8 p
(1)由G65规定的H码不影响偏移量的任何选择;
+ m2 ?; b @/ Q: G(2)如果用于各算术运算的Q或R未被指定,则作为0处理;
8 l$ v9 C0 N. B _$ l9 H# y: @(3)在分支转移目标地址中,如果序号为正值,则检索过程是先向大程序号查找,如果序号为负值,则检索过程是先向小程序号查找。
4 M% h: S2 ~! c' U% P, L3 }' w(4)转移目标序号可以是变量。 / @2 Q8 m' r* H" X) q8 l& Y
* r: T% r' L" {. i4 B' l; W( S2 \
5、用户宏程序应用举例 : V+ K( c, i# o3 M3 k
2 Y0 U4 k( U* E" I4 E用宏程序和子程序功能顺序加工圆周等分孔。设圆心在O点,它在机床坐标系中的坐标为(X0,Y0),在半径为r的圆周上均匀地钻几个等分孔,起始角度为α,孔数为n。以零件上表面为Z向零点。 8 ^0 L; ~2 Y3 K" I4 M& G/ T4 W
( j* b( N4 F+ r: ` I
使用以下保持型变量:
6 b! |8 Q9 p6 w' H#502:半径r;
0 d/ X2 ^; t8 f, |#503:起始角度α;
. n/ T! {2 ~8 |#504:孔数n,当n>0时,按逆时针方向加工,当n<0时,按顺时针方向加工;
0 _6 O7 O2 ]& ~3 P) _" w( y#505:孔底Z坐标值;% O. T6 ?! \: m7 W3 ?" g
#506:R平面Z坐标值;
' F# X$ R0 l8 e) W! m8 K9 G#507:F进给量。 / y- B9 m; s1 n4 {
使用以下变量进行操作运算:- v3 L3 S8 I, H- c
#100:表示第i步钻第i孔的记数器;7 t0 |8 ^# j: ~0 [0 I
#101:记数器的最终值(为n 的绝对值);
; w' [1 _7 N; L, Z$ j#102:第i个孔的角度位置θi的值;
1 ~! p; F" X9 e E" r#103:第i个孔的X坐标值;
5 M; w6 D2 D- v# { r8 H# N#104:第i个孔的Y坐标值;
9 B G( H0 H6 ^9 O" T' @0 b用用户宏程序编制的钻孔子程序如下:
' R/ \+ j$ H/ L. eO90100 L3 p% ^3 g# O; H
N110 G65 H01 P#100 Q0 //#100 = 0" }( \2 ?2 ~# z0 c( @
N120 G65 H22 P#101 Q#504 //#101 = │#504│( B# i$ U) ^% w
N130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o
+ s6 N2 u' h& H% f0 {* D6 X9 hN140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #504
, X- B2 H6 k8 X3 W+ ]1 D# SN150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102当前孔角度位置θi =α+ (360o×i) / n$ h1 C/ x% J' d/ h
N160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)当前孔的 X坐标
8 E0 }5 z/ e1 X/ J9 G- R1 jN170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 当前孔的Y坐标2 r4 F! O! R) b
N180 G90 G00 X#103 Y#104 //定位到当前孔(返回开始平面)
4 H; V% V' O0 Q) l. M- K- EN190 G00 Z#506 //快速进到R平面( s( D. _ t* W; d
N200 G01 Z#505 F#507 //加工当前孔2 ?8 u7 I, m$ n0 { N
N210 G00 Z#506 //快速退到R平面/ K2 Y( E! p ^$ p7 L
N220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔计数: m( ^6 E* E6 d- H# t+ H1 W1 h- @
N230 G65 H84 P-130 Q#100 R#101 //当#100 < #101时,向上返回到130程序段; s0 c' J- b+ F2 w+ E5 d, D w* J
N240 M99 //子程序结束 4 g! z+ O) o. X. F) ^4 w
% A* e+ u* Q1 v7 T. k1 \
( \# M _$ H% {8 r7 e/ t! f7 J2 U+ l. s5 J
调用上述子程序的主程序如下:
. W4 E- e( A" E# C( x" IO0010; g; J4 { y5 X k
N10 G54 G90 G00 X0 Y0 Z20 //进入加工坐标系
8 D/ w2 N' o5 qN20 M98 P9010 //调用钻孔子程序,加工圆周等分孔5 s) x' V; a: C) W
N30 Z20 //抬刀
# H" A f) ]# A0 U' q: O/ U, [N40 G00 G90 X0 Y0 //返回加工坐标系零点 " {$ o3 d& |- {; Q$ Q
N50 M30 程序结束
+ K* z9 L0 n5 C6 \. Q! P5 ~% {设置G54:X=-400,Y=-100,Z=-50。
6 S& b5 G2 E) w' b# V: n变量#500~#507可在程序中赋值,也可由MDI方式设定。
* a! ^# q" s# K- x
$ H- }: y5 S7 [3 Q/ `. `% MB类宏G65' k2 ^8 l* E) s9 x
) L1 M7 _/ p+ S( f8 N7 o0 O
简单调用(G65) j; _1 I W8 J# K. I3 H9 L6 u
功能 G65被指定时,地址P所指定的程式被调用,自变量能传递到用户宏程序中。
3 i& x! B) l" ^+ U f% r 格式 G65 Pp Ll <自变量表>;
E1 ^4 K3 j. K8 T {7 _5 N 其中: p 要调用的程序号5 r- M t W. ?
l 重复的次数(缺省值为1,取值范围1~9999)
: v3 P$ y' w0 X Y* U 自变量 传递给被调用程式的数。通过使用自变量表,值被分配给相应 ; ^! ]% }; J0 G9 J* I
的局部变量。- s, t6 t, ?5 E6 C# ]1 E
: r5 v5 o# j6 O
自变量分为两类。第一类可以使用的字母只能使用一次,各自变量与局部变量的对用关系如下:
0 Z p. w$ f7 U$ Q/ `) r+ W0 J- s6 I# f3 E0 O- V- Z) P3 b
地址 变量号 地址 变量号 地址 变量号" I% V% b" p2 X, C/ t$ Q( S
A #1 E #8 T #208 Q' h' j3 B( K
B #2 F #9 U #21' p0 x8 n7 Q. J! o% ~6 @2 Y( r
C #3 H #11 V #22: X; R1 Z1 ^: E& f6 s
I #4 M #13 W #23% A* s7 B8 u; z
J #5 Q #17 X #242 j* V& _) {% t; X$ ?1 e1 H* C0 A
K #6 R #18 Y #25
/ y/ S( h Q1 b+ B( V5 a2 ND #7 S #19 Z #26
- Q f/ g& J- n☆ 地址G、L、N、O、P不能当作自变量使用。
" j: r5 B2 n+ j/ Z2 G: z$ n☆ 不需要的地址可以省略,与省略的地址相应的局部变量被置成空。/ g8 ^; D: H& T7 r/ \2 B. V
3 i" D/ e( g3 s% @% F" F
第二类可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自变量使用的类别根据使% N$ g* s" v; m7 \
用的字母自动确定:8 T8 d* U" F3 y- Z
地址 变量号 地址 变量号 地址 变量号' I) N5 o: s- k% m3 s" X
A #1 K3 #12 J7 #23
# _6 @, B8 K4 g# ~B #2 I4 #13 K7 #24
+ _- O5 [0 i3 K1 Y/ S) cC #3 J4 #14 I8 #25% X8 j; b- N7 B
I1 #4 K4 #15 J8 #26
0 w |; K. A2 M& H8 f! O2 K, }J1 #5 I5 #16 K8 #27
2 a# Q5 I! T8 J( Q+ i3 {K1 #6 J5 #17 I9 #28
. v/ `# B* Q) x6 P6 h0 U6 XI2 #7 K5 #18 J9 #292 y" Y9 b# ]' g$ n: U/ x
J2 #8 I6 #19 K9 #30
' P7 n# s! |+ ~" H7 J, ]K2 #9 J6 #20 I10 #31
3 u7 m8 M f9 a- o% |: m& U/ zI3 #10 K6 #21 J10 #32
1 }/ q- O1 l/ @9 S C& |J3 #11 I7 #22 K10 #33
+ T* h% N+ k7 p! ~3 ^# C$ v☆ 在实际的程序中,I、J、K的下标不用写出来。2 m- G( i4 T* [' _: O# |' J$ t2 ^
注意:
" L7 u( t/ J: V. { r' |- l4 g☆ 在自变量之前一定要指定G65。
$ D$ j+ Y6 `) E( U☆ 如果将两类自变量混合使用,系统自己会辨别属于哪类,最后指定的那一类优先。
" j/ d& K: T- N/ C, y☆ 传递的不带小数点的自变量的单位与每个地址的最小输入增量一致,其值与机床的系统结构非常一致。为了程序的兼容性,建议使用带小数点的自变量。4 v; |; }$ C5 U5 m
☆ 最多可以嵌套含有简单调用(G65)和模态调用(G66)的程序4级。不包括子程序调用(M98)。局部变量可以嵌套0~4级。主程序的级数是0。用G65和G66每调用一次宏,局部变量的级数增加一次。上一级局部变量的值保存在NC 中。宏程序执行到M99时,控制返回到调用的程序。这时局部变量的级数减1,恢复宏调用时存储的局部变量值。
; [6 z2 B4 ~. F+ {0 R+ h G65简单宏调用可方便地向被调用的副程式传递数据,但是用它制作诸如固定循环0 S: G: a3 E+ ]) T% S8 I3 A* E
之类的移动到坐标后才加工的程式就无能为力了。 |
评分
-
查看全部评分
|