|
发表于 2011-7-12 08:32:36
|
显示全部楼层
回复 1# 钟云驹 7 _) p O4 c2 ?& S
详解A类宏
% a+ b3 v% z7 l; @分类:默认分类 字号: 大大 中中 小小 用户宏功能是提高数控机床性能的一种特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一样存入存储器,然后用一个总指令代表它们,使用时只需给出这个总指令就能执行其功能。1 x" P' F% g2 m/ ?/ V
用户宏功能主体是一系列指令,相当于子程序体。既可以由机床生产厂提供,也可以由机床用户自己编制。0 s7 z7 g0 k3 A2 g1 I
宏指令是代表一系列指令的总指令,相当于子程序调用指令。2 Z1 V" e3 t) j2 ]5 R8 ]7 ^8 U
用户宏功能的最大特点是,可以对变量进行运算,使程序应用更加灵活、方便。7 T8 L: q! H5 Q/ J( X5 N ^5 a
用户宏功能有A、B两类。这里主要介绍A类宏功能,B类宏功能请参见本课程的B类宏程序介绍。
! q, Z, {, x6 A, K1 d' i3 P/ _; `8 I1、变量+ `9 g5 u, d. z- a h2 g
在常规的主程序和子程序内,总是将一个具体的数值赋给一个地址。为了使程序更具通用性、更加灵活,在宏程序中设置了变量,即将变量赋给一个地址。3 }8 |9 f6 [0 k) J: k# {4 H
(1)变量的表示
2 a% u: a2 m) Y) J/ v0 T变量可以用“#”号和跟随其后的变量序号来表示:#i(i=1,2,3......)5 }: \- j) b8 e/ \
例:#5, #109, #501。( u5 h1 h0 T% M
(2)变量的引用- r( e: O6 A6 X
将跟随在一个地址后的数值用一个变量来代替,即引入了变量。; i |& M6 X; q% e
例:对于F#103,若#103=50时,则为F50;( R$ j- y. T2 C
对于Z-#110,若#110=100时,则Z为-100;
, \9 |$ ~, D4 v. d( M/ S对于G#130,若#130=3时,则为G03。
" Z7 W: m6 x7 ?8 p. T) a(3)变量的类型
5 ~& y8 m! O" H. H1 d" r$ K+ C7 v 0MC系统的变量分为公共变量和系统变量两类。# J2 T! V* R3 q6 x
1)公共变量
2 J2 h9 ?/ _0 o+ J9 L5 b 公共变量是在主程序和主程序调用的各用户宏程序内公用的变量。也就是说,在一个宏指令中的#i与在另一个宏指令中的#i是相同的。
3 x P5 ?# M6 @. v% R公共变量的序号为:#100~#131;#500~#531。其中#100~#131公共变量在电源断电后即清零,重新开机时被设置为“0”;#500~#531公共变量即使断电后,它们的值也保持不变,因此也称为保持型变量。 $ ]' B. {0 N, w' Q* w3 E
( i5 ]- x$ u* ]9 \6 e0 _$ o
& Q1 K! ~' w& a
; [: L9 }% {# k0 L/ J3 y
2)系统变量 * |8 P& _. o6 A% [, h7 k* ?
系统变量定义为:有固定用途的变量,它的值决定系统的状态。系统变量包括刀具偏置变量,接口的输入/输出信号变量,位置信息变量等。; q6 u/ b8 W9 A2 ~! K( y0 p
系统变量的序号与系统的某种状态有严格的对应关系。例如,刀具偏置变量序号为#01~#99,这些值可以用变量替换的方法加以改变,在序号1~99中,不用作刀偏量的变量可用作保持型公共变量#500~#531。/ V; K) j; n/ d8 Y" }% n& X4 ~
接口输入信号#1000~#1015,#1032。通过阅读这些系统变量,可以知道各输入口的情况。当变量值为“1”时,说明接点闭合;当变量值为“0”时,表明接点断开。这些变量的数值不能被替换。阅读变量#1032,所有输入信号一次读入。' A1 s5 N. { ]( |) X
2、宏指令G65
7 M, D. ~6 M* ]' g/ T 宏指令G65可以实现丰富的宏功能,包括算术运算、逻辑运算等处理功能。) A' V8 q5 {- T$ Q8 j1 l& u2 u
一般形式: G65 Hm P#i Q#j R#k
: A9 C& Y; ]8 Q式中:--宏程序功能,数值范围01~99;2 z% [9 ?" L6 P3 B
#i--运算结果存放处的变量名;8 u2 T# G W6 G" k+ Z3 p: z
#j--被操作的第一个变量,也可以是一个常数;
6 S: @- }$ Z2 P3 W+ ]5 ^#k--被操作的第二个变量,也可以是一个常数。
$ E4 m6 p' W8 @- B例如,当程序功能为加法运算时:
0 D: n. ^8 K# T4 v" x程序 P#100 Q#101 R#102...... 含义为#100=#101+#1027 E9 z- q& y" y: }
程序 P#100 Q-#101 R#102...... 含义为#100=-#101+#102
@# v8 \! U) W. ~) p程序 P#100 Q#101 R15...... 含义为#100=#101+15
1 t# W) { B) o* O( y
' O7 _* |- q# }% ~2 ` K3、宏功能指令 5 u" J$ _3 V1 e" z
* ]& M! `4 j$ p+ n9 l9 g" }(1)算术运算指令
# U7 X5 X X, Q% e0 J% D" A+ w8 w7 _9 g$ n8 z2 v: `
1)变量的定义和替换 #i=#j
# t/ c. s: q# |/ A6 P1 u( ~+ N d
v y) f- g) e' R7 x* m, J编程格式 G65 H01 P#i Q#j7 W d6 e! e \& s7 E
例 G65 H01 P#101 Q1005; (#101=1005) 5 n$ n/ T: ]0 r7 I1 E4 d9 F. T, V
G65 H01 P#101 Q-#112;(#101=-#112)
' P+ R# x7 q! _* j$ ]5 g+ q, L: k2)加法 #i=#j+#k
* t: Q0 @( ~% x* w# G$ z+ Z# F- m编程格式 G65 H02 P#i Q#j R#k
- Q5 S( c! p! O( d" ]1 j例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103)
' D- U2 P# {2 t) Y' G5 v* o3)减法 #i=#j-#k6 Q. k; h" Y8 j8 w/ e2 `$ ^
编程格式 G65 H03 P#i Q#j R#k. Q6 n" ~, ^: V/ _% K& n' R3 n0 S
例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103)
2 H9 h U7 }1 g: z D) c4)乘法 #i=#j×#k
3 U( [3 s0 K) y( ?. A+ E4 H+ S! u编程格式 G65 H04 P#i Q#j R#k
) W6 V3 W" C9 K& S8 ?+ f: F例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103)
' @5 e7 Q# c, `" c5 m9 Z1 M5)除法 #i=#j / #k
2 }5 i" \! l( X$ H" g编程格式 G65 H05 P#i Q#j R#k2 v/ s% m) }0 M
例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103)# d8 }- z! i4 j0 N/ F+ V7 I
6)平方根 #i=
- O5 A7 W( m$ a" F* t- s9 Z编程格式 G65 H21 P#i Q#j: @* n5 Z7 B7 A$ x8 |& u( u# Y3 {9 V
例 G65 H21 P#101 Q#102;(#101= )
s" D+ ^- \) S7)绝对值 #i=│#j│
( E4 S2 W7 q5 N! L, Z编程格式 G65 H22 P#i Q#j# v' v) W0 a3 {) N. u
例 G65 H22 P#101 Q#102;(#101=│#102│) ( q q3 J8 r, A3 c5 _4 g3 I
8)复合平方根1 #i=
' d5 M5 o# E8 J) L- }3 t, Q+ w, X9 G编程格式 G65 H27 P#i Q#j R#k
/ P" y& K2 C$ ]! ?7 Q& B, F; q例 G65 H27 P#101 Q#102 R#103;( #101= $ U4 U7 K# a5 c! H
9)复合平方根2 #i= ' V( K( W V) ~, L& B
编程格式 G65 H28 P#i Q#j R#k5 _4 O- g, L6 B s3 l! ?) c& p% y5 J
例 G65 H28 P#101 Q#102 R#103
% A0 v' C2 M) e; ]6 Z; d8 u' |: m# I- s1 _$ a ?$ l
1)逻辑或 #i=#j OR #k2 o+ R) }+ n, i- e, i7 W
编程格式 G65 H11 P#i Q#j R#k
4 g( T+ q% h9 D0 Z% J# z% v8 e例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103). {. \( A6 _7 F }
$ ~& n/ f _/ P% z
2)逻辑与 #i=#j AND #k
, j% l" @7 z- {8 h编程格式 G65 H12 P#i Q#j R#k
- P2 z3 e, O$ U" i( W m例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103
6 k$ k7 d! x F7 G7 O8 V" E z& D1 [% [5 [ e' n
' t9 P* l+ q( u
# @7 Z$ N2 x8 ~
7 M) x6 I$ \& \) k3 j
(3)三角函数指令
V+ a: n9 F% [+ l g9 p- A6 n+ c+ m: D% n3 D g4 x
# G7 N$ v+ ^$ ^6 O9 W( [% r9 v L" Y! S- l2 n, z' F
1)正弦函数 #i=#j×SIN(#k) R. j1 b4 P# Z+ L" M
8 |( j/ C/ A0 B3 I7 J. j. ]1 f
编程格式 G65 H31 P#i Q#j R#k (单位:度) .
: d& o; J; K/ V, a$ \' n2 c4 g9 r9 y& i& q* U
例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103))5 c. z; J6 @- s0 e! v8 M; @/ D u& ]
2)余弦函数 #i=#j×COS(#k)! m k- j9 P5 y" w; y2 v
编程格式 G65 H32 P#i Q#j R#k (单位:度)3 R! A& D/ W8 i4 E% S# F+ |
例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103))1 i4 Q# Y7 M# h' h; Y4 U$ P
3)正切函数 #i=#j×TAN#k
% `3 ?; a0 \- L6 H0 A编程格式 G65 H33 P#i Q#j R#k (单位:度)4 _7 _" ]( g7 W: e5 l
例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103))
% V' k, Q3 j+ E) B3 I0 B. w4)反正切 #i=ATAN(#j/#k)
0 |/ ?! O+ y! z5 U编程格式 G65 H34 P#i Q#j R#k (单位:度,0o≤ #j ≤360o)
9 T: O9 y0 |$ g8 {, F例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103)
, q* d3 @$ O4 Z, t; r
9 _+ R6 y- `1 i. f( C0 L ) n( L: ^4 ]1 e
$ `0 a5 O4 b) q8 y1 \2 }(4)控制类指令* t8 ~" {+ G' V* D5 W5 S, u
9 v, g* ~0 q" J7 s5 L6 M
7 u' T4 d2 Y% F4 N
* h3 o! r: N& o2 f+ _7 z, f" {0 j编程格式 G65 H80 Pn (n为程序段号)9 {5 B( d6 N0 X" a) i8 \* l# u: F% t
例 G65 H80 P120;(转移到N120)% r& S* r3 E$ u) B9 b6 O/ ^
2)条件转移1 #j EQ #k(=)
8 }: c$ X/ k! C$ C编程格式 G65 H81 Pn Q#j R#k (n为程序段号)* N% `3 w1 \( E* I. ]- u, X+ ]1 C
例 G65 H81 P1000 Q#101 R#1029 i+ D5 B. ]9 T, V. I
当#101=#102,转移到N1000程序段;若#101≠ #102,执行下一程序段。
; Y& a, |; x7 k0 i' P9 |! Z3)条件转移2 #j NE #k(≠)# b- l- h- Q ~
编程格式 G65 H82 Pn Q#j R#k (n为程序段号)( P4 F# ^, K; m7 j* X9 f6 m: c0 H
例 G65 H82 P1000 Q#101 R#102
2 k# O# K# q3 a- c4 L- ]当#101≠ #102,转移到N1000程序段;若#101=#102,执行下一程序段。
# ?6 e4 o8 o/ n/ E( O; S2 L4)条件转移3 #j GT #k (> )# i# P) Z9 U; d5 d
编程格式 G65 H83 Pn Q#j R#k (n为程序段号)
Q( a3 [2 z# S' q9 z' L例 G65 H83 P1000 Q#101 R#102
0 H. L- q+ n$ [! l6 M当#101 > #102,转移到N1000程序段;若#101 ≤#102,执行下一程序段。7 H+ ~1 N: @6 n0 Z8 e8 A i
5)条件转移4 #j LT #k(<)
. R# U* ]% n0 ]$ p; }编程格式 G65 H84 Pn Q#j R#k (n为程序段号)" f/ J7 f- x. `) O A; l
例 G65 H84 P1000 Q#101 R#102 2 e9 g" S7 x* x d7 a) T8 `
当#101 < #102,转移到N1000;若#101 ≥ #102,执行下一程序段。/ r, z+ X+ z5 Y( o4 L
6)条件转移5 #j GE #k(≥)4 f. c) f- N9 Y+ Q3 p- q
编程格式 G65 H85 Pn Q#j R#k (n为程序段号)" Q; r8 M6 Q& [
例 G65 H85 P1000 Q#101 R#102
- X! c+ p/ A/ v7 c当#101≥ #102,转移到N1000;若#101<#102,执行下一程序段。1 p! `: x' f& l$ ?
7)条件转移6 #j LE #k(≤)# |. e( j# z5 ~. d& X; }
编程格式 G65 H86 Pn Q#j Q#k (n为程序段号)
/ X7 I3 w3 v9 u0 z例 G65 H86 P1000 Q#101 R#1026 y6 b0 z2 }" n! W
当#101≤#102,转移到N1000;若#101>#102,执行下一程序段。* C5 d9 l/ {% y& q5 `- ]
0 m+ @% Y# W- ^# k) U! C8 n: k1 |4、使用注意
\$ @: t: X/ M* w% o2 S 为保证宏程序的正常运行,在使用用户宏程序的过程中,应注意以下几点;6 O8 z/ _9 P7 Z" k' z( _7 t! I
(1)由G65规定的H码不影响偏移量的任何选择;
% U" O9 O6 |( U' L0 V( x(2)如果用于各算术运算的Q或R未被指定,则作为0处理;
, \ s: F/ I( O! [(3)在分支转移目标地址中,如果序号为正值,则检索过程是先向大程序号查找,如果序号为负值,则检索过程是先向小程序号查找。* V" e0 F8 o: I! G, [$ L/ w
(4)转移目标序号可以是变量。 ! K+ q1 ?: X8 \! E$ p
) z% ~ m* }2 S! K5、用户宏程序应用举例 : . I9 t0 J' g3 }+ d6 _3 y( R' g
* p2 ~* ^3 {1 h3 _! M Y
用宏程序和子程序功能顺序加工圆周等分孔。设圆心在O点,它在机床坐标系中的坐标为(X0,Y0),在半径为r的圆周上均匀地钻几个等分孔,起始角度为α,孔数为n。以零件上表面为Z向零点。
4 r/ [' T" U4 f3 N9 u8 R" W
( b; ~ Q2 f% `9 {使用以下保持型变量:# R$ b, Y- Q8 n+ n1 a& n
#502:半径r;& k, [5 C$ X9 f' m. Z
#503:起始角度α;$ h- B. P7 c2 O# _2 j/ @
#504:孔数n,当n>0时,按逆时针方向加工,当n<0时,按顺时针方向加工;5 g2 b* m- x/ V) I- m' D& W: ?
#505:孔底Z坐标值;
7 u% M0 \0 l: K$ T$ {( _9 O#506:R平面Z坐标值;
5 L/ y1 F' { j1 n8 L; A#507:F进给量。 ! J7 R$ E1 P, G# C2 l+ |/ k8 T9 R
使用以下变量进行操作运算:
' }0 V, M1 X3 ?, j9 w3 j6 |7 E#100:表示第i步钻第i孔的记数器;
& C2 h% j" a& ?" ^, e8 M# w2 _4 Z#101:记数器的最终值(为n 的绝对值);) L9 t' c( w4 U$ H0 D: n
#102:第i个孔的角度位置θi的值; , ^* ]# r/ o& H& ?+ w6 U+ P6 M
#103:第i个孔的X坐标值;' ^& _! g! R1 P0 z
#104:第i个孔的Y坐标值;! g: G% Y1 r$ i+ J
用用户宏程序编制的钻孔子程序如下:
" C8 R, M9 ^* E, G: a# z3 UO9010
$ _: P0 s8 ?3 z, P8 G* s1 bN110 G65 H01 P#100 Q0 //#100 = 0
9 e G4 o2 C4 o7 H4 {/ s* L* xN120 G65 H22 P#101 Q#504 //#101 = │#504│0 X/ r: ^" r# ~0 M
N130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o
3 C* W2 h h9 FN140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #504
& y" ]; E' N h" ?: hN150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102当前孔角度位置θi =α+ (360o×i) / n
$ M% Q! Y5 `' C0 i' }N160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)当前孔的 X坐标
0 ^( W+ u3 g0 U5 M5 ~+ \% {( FN170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 当前孔的Y坐标
7 e8 Q; u- V8 h. @N180 G90 G00 X#103 Y#104 //定位到当前孔(返回开始平面)
, n+ z, X k4 u2 E* M3 r, XN190 G00 Z#506 //快速进到R平面
4 H5 k9 ~- i( a( A( E0 u! XN200 G01 Z#505 F#507 //加工当前孔
* d+ U8 p+ s% ]( @8 {+ r1 L, C3 g d; ~N210 G00 Z#506 //快速退到R平面
- K( H, ^( ^# W, Y NN220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔计数) o4 I: A, B R7 [) E; z
N230 G65 H84 P-130 Q#100 R#101 //当#100 < #101时,向上返回到130程序段
) p" b& t& |1 v' d# R9 j0 K4 ?: s K) `$ L5 eN240 M99 //子程序结束 ) ~% K7 E2 c& x9 {
! {8 ^! @! o$ T- G
' h) i- o5 }. m& m
! ?1 b/ y- J o5 q. `' b
调用上述子程序的主程序如下: 1 p" E' }" b+ q3 I$ B
O00105 Q! P0 V; Q5 d3 }! K; g
N10 G54 G90 G00 X0 Y0 Z20 //进入加工坐标系
( O: c8 |0 V7 fN20 M98 P9010 //调用钻孔子程序,加工圆周等分孔+ `& o4 r- q6 r4 q u
N30 Z20 //抬刀
. R b( h2 L0 c" v# G) ]- _+ ON40 G00 G90 X0 Y0 //返回加工坐标系零点 % b) S$ x4 l- I; V4 B z
N50 M30 程序结束
) j9 v. A' `, x0 x( {设置G54:X=-400,Y=-100,Z=-50。' W9 z8 C7 I N I3 U0 s$ B1 o0 H
变量#500~#507可在程序中赋值,也可由MDI方式设定。
- G) }8 C* ?$ Q0 F8 M* ]1 r7 ~+ }) \% q! L Q; k9 R& ^
B类宏G65& ~( Q+ v6 W% V6 E4 U
4 u8 K9 j8 f: J8 p/ x& R0 h% N
简单调用(G65)/ F M4 }: n2 |5 W; T
功能 G65被指定时,地址P所指定的程式被调用,自变量能传递到用户宏程序中。
8 I. B( H# x, O# Z7 } 格式 G65 Pp Ll <自变量表>;; L3 v1 p Z: H9 X4 o
其中: p 要调用的程序号
% j. A9 C0 {& q6 \( Y! E2 d6 v7 B l 重复的次数(缺省值为1,取值范围1~9999)% @" D1 f8 N3 X9 V
自变量 传递给被调用程式的数。通过使用自变量表,值被分配给相应 " g+ D% R% X, _ x* v, Y8 N
的局部变量。
/ |* _6 y7 n4 }; I* q' e" `0 f! V5 z' W! q' g ?' s M
自变量分为两类。第一类可以使用的字母只能使用一次,各自变量与局部变量的对用关系如下:0 n+ o2 I5 Z7 G0 p7 b! A
( \$ p- s. S/ `. L7 V8 r$ C9 m1 G/ ]地址 变量号 地址 变量号 地址 变量号0 U- e; E1 J3 t, D
A #1 E #8 T #206 E0 i" V' h( j+ {' C; V e. J
B #2 F #9 U #212 e1 ? e ^- S# q* g5 k0 \
C #3 H #11 V #22
M! P- F8 i T+ o i' ], |I #4 M #13 W #23
& `. b) r$ b( {9 mJ #5 Q #17 X #244 W0 [. h; b. _" g$ E
K #6 R #18 Y #259 [+ d+ S$ ^- x7 K
D #7 S #19 Z #26
. y' u4 T, k" G9 ^. d☆ 地址G、L、N、O、P不能当作自变量使用。/ V; O* U. v( f+ F% X
☆ 不需要的地址可以省略,与省略的地址相应的局部变量被置成空。
9 _6 g, v5 C$ U
# R8 x4 p1 \4 b) X2 a/ L 第二类可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自变量使用的类别根据使
. y: f( V0 n8 {, r用的字母自动确定:& c+ ^4 ~0 G1 W
地址 变量号 地址 变量号 地址 变量号4 ` C+ k* i: X/ F
A #1 K3 #12 J7 #235 s7 U4 I T* F3 K
B #2 I4 #13 K7 #24. d f9 U5 r& m, |* |) L4 w
C #3 J4 #14 I8 #25' _# T& ^" e& j; |) y8 b0 A4 O1 W8 ?
I1 #4 K4 #15 J8 #267 P2 _( F+ {, O1 ]& I2 v+ J
J1 #5 I5 #16 K8 #27
, h W, T# d; l, | F& nK1 #6 J5 #17 I9 #28
c2 [( U9 F& c+ o4 wI2 #7 K5 #18 J9 #29% f9 \, j5 I. h* O+ c) L1 a+ j# X+ v
J2 #8 I6 #19 K9 #30# D! n9 O; S+ P& f( Q. x8 {
K2 #9 J6 #20 I10 #314 n& z2 l3 q2 x" `
I3 #10 K6 #21 J10 #32
( ^7 F# W' x8 f% ~5 \J3 #11 I7 #22 K10 #33
- c" i9 X: M+ k2 f! i☆ 在实际的程序中,I、J、K的下标不用写出来。
( s1 _% S7 u9 f4 o5 l3 |, u7 W4 g注意:
0 L z" G9 A! R0 I) W4 W☆ 在自变量之前一定要指定G65。' n+ G7 C0 o% U% K5 O
☆ 如果将两类自变量混合使用,系统自己会辨别属于哪类,最后指定的那一类优先。! \2 D6 c# i/ ~ @# R& m) o
☆ 传递的不带小数点的自变量的单位与每个地址的最小输入增量一致,其值与机床的系统结构非常一致。为了程序的兼容性,建议使用带小数点的自变量。1 `, t0 ^. t; {% u" H. ~
☆ 最多可以嵌套含有简单调用(G65)和模态调用(G66)的程序4级。不包括子程序调用(M98)。局部变量可以嵌套0~4级。主程序的级数是0。用G65和G66每调用一次宏,局部变量的级数增加一次。上一级局部变量的值保存在NC 中。宏程序执行到M99时,控制返回到调用的程序。这时局部变量的级数减1,恢复宏调用时存储的局部变量值。
$ H( h4 f9 O2 R# X6 C+ h; k" D G65简单宏调用可方便地向被调用的副程式传递数据,但是用它制作诸如固定循环
. T! q# C2 z1 C' Y" k0 H之类的移动到坐标后才加工的程式就无能为力了。 |
评分
-
查看全部评分
|