|
发表于 2011-7-12 08:32:36
|
显示全部楼层
回复 1# 钟云驹
) Y5 Q- _; G' B ]/ |详解A类宏
# }1 K( |3 { J d$ a B3 @分类:默认分类 字号: 大大 中中 小小 用户宏功能是提高数控机床性能的一种特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一样存入存储器,然后用一个总指令代表它们,使用时只需给出这个总指令就能执行其功能。% V" G0 G% U. A6 t V O7 W- _
用户宏功能主体是一系列指令,相当于子程序体。既可以由机床生产厂提供,也可以由机床用户自己编制。
2 [4 m, f' p# x/ H/ R) p! ] 宏指令是代表一系列指令的总指令,相当于子程序调用指令。
' |' s, q" ]* D3 D 用户宏功能的最大特点是,可以对变量进行运算,使程序应用更加灵活、方便。
7 k' A/ _( x' c- C3 m 用户宏功能有A、B两类。这里主要介绍A类宏功能,B类宏功能请参见本课程的B类宏程序介绍。- V( O! |1 r2 q3 Y$ j
1、变量
+ w, j, D4 e! J. }* Q: |3 r 在常规的主程序和子程序内,总是将一个具体的数值赋给一个地址。为了使程序更具通用性、更加灵活,在宏程序中设置了变量,即将变量赋给一个地址。
% g! j1 i. X: W3 T5 q$ ^5 x2 Z% I(1)变量的表示
7 X9 C* |% u: I) r4 s变量可以用“#”号和跟随其后的变量序号来表示:#i(i=1,2,3......)
8 O: h# Y1 N7 t& t% u/ I3 h/ j例:#5, #109, #501。3 z. Y' \6 R2 |+ b2 ?3 H
(2)变量的引用: |$ _& G8 o+ Z X! K/ X, u
将跟随在一个地址后的数值用一个变量来代替,即引入了变量。7 Q, \" `( K0 R
例:对于F#103,若#103=50时,则为F50;
; Z# g. ?6 w2 R( h1 X) }2 f对于Z-#110,若#110=100时,则Z为-100;( Y; v: M7 [/ [1 f. A6 T% C
对于G#130,若#130=3时,则为G03。. c& B% V5 m5 T4 A$ P1 S1 a% ]
(3)变量的类型
; i) n! M$ p, |& R# N. J/ c 0MC系统的变量分为公共变量和系统变量两类。9 T+ w2 k8 f2 V# `9 x' K
1)公共变量 $ {3 o8 y" R) o; M+ X: j# ^; H, B
公共变量是在主程序和主程序调用的各用户宏程序内公用的变量。也就是说,在一个宏指令中的#i与在另一个宏指令中的#i是相同的。
9 o t P9 m9 P* b1 j4 v; S公共变量的序号为:#100~#131;#500~#531。其中#100~#131公共变量在电源断电后即清零,重新开机时被设置为“0”;#500~#531公共变量即使断电后,它们的值也保持不变,因此也称为保持型变量。 1 a" k2 {; s2 `7 F/ n
# v; F0 ~$ [, o' ^; ^+ m2 C
- Q# o- L( W4 O j1 \2 M) d) j$ ~# B
2)系统变量 B0 v8 T' j$ e3 m5 F! g, z
系统变量定义为:有固定用途的变量,它的值决定系统的状态。系统变量包括刀具偏置变量,接口的输入/输出信号变量,位置信息变量等。
: v/ y$ h! O4 ]( ~# r8 e* _ 系统变量的序号与系统的某种状态有严格的对应关系。例如,刀具偏置变量序号为#01~#99,这些值可以用变量替换的方法加以改变,在序号1~99中,不用作刀偏量的变量可用作保持型公共变量#500~#531。
{$ X0 Q# [+ X7 `$ c 接口输入信号#1000~#1015,#1032。通过阅读这些系统变量,可以知道各输入口的情况。当变量值为“1”时,说明接点闭合;当变量值为“0”时,表明接点断开。这些变量的数值不能被替换。阅读变量#1032,所有输入信号一次读入。
$ x" R5 b3 M& e, D1 _* B2、宏指令G65( C) F- Z3 r9 {
宏指令G65可以实现丰富的宏功能,包括算术运算、逻辑运算等处理功能。
. P& l( }# d5 `6 u9 R7 d 一般形式: G65 Hm P#i Q#j R#k
: ^3 K& u% y" H式中:--宏程序功能,数值范围01~99;7 K. v( ^* ~$ T3 a5 b3 ]3 |# y8 S
#i--运算结果存放处的变量名;" Y6 ^: l3 D G2 M( C/ b+ [
#j--被操作的第一个变量,也可以是一个常数;
4 }# E; N: h) [& ^( \#k--被操作的第二个变量,也可以是一个常数。
; d1 Y; {8 } A5 `例如,当程序功能为加法运算时:
n' A, `, L9 C0 Y& e/ ^* K程序 P#100 Q#101 R#102...... 含义为#100=#101+#102' ?" N5 y0 w4 Z, z" T* G
程序 P#100 Q-#101 R#102...... 含义为#100=-#101+#102
1 d' E$ o0 K u, A4 \' B+ A程序 P#100 Q#101 R15...... 含义为#100=#101+15 ' O5 P% l- A6 q' j
- U7 j! |3 g1 @ W5 L% x* K5 \8 @9 M3、宏功能指令 # k. q3 b7 I# t, f- S6 a
8 d8 D8 f( k0 P- `" c! ~(1)算术运算指令 * p9 i# f" c) G6 \6 E* u
# N6 ?6 n9 o/ Q; J. D& D1)变量的定义和替换 #i=#j ?: q; W, Y2 B4 ~
; X9 ?5 ?% ]8 h/ j9 k
编程格式 G65 H01 P#i Q#j# S% a6 D& ?! V2 J' |
例 G65 H01 P#101 Q1005; (#101=1005)
9 y7 H6 [/ L' BG65 H01 P#101 Q-#112;(#101=-#112) 0 i+ D6 M( A- x" J$ g: p
2)加法 #i=#j+#k
) p) D3 O; l e2 @5 m' Y8 I编程格式 G65 H02 P#i Q#j R#k ; u' y! o8 h; H* g
例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103)# C" M0 Z/ i9 V+ _" ?3 }2 E
3)减法 #i=#j-#k
9 S( g3 X: V- M4 i4 ]$ {( s* r4 ]+ ?7 @编程格式 G65 H03 P#i Q#j R#k
1 I- _6 |9 O9 c+ ?9 i) F: L例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103)
- O3 y* c6 N& o5 N4)乘法 #i=#j×#k
! ?8 | g1 l) r, t' j编程格式 G65 H04 P#i Q#j R#k, B4 A# K& H4 G! [ r
例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103)2 b* z: E$ N I6 X3 e" S
5)除法 #i=#j / #k Y. s% P/ B; I+ l x
编程格式 G65 H05 P#i Q#j R#k
1 w: P# G/ E1 T6 A: l例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103)# \+ K7 W) {- K2 I" q, g- f: B, F
6)平方根 #i=
+ X* |/ j& X$ x }编程格式 G65 H21 P#i Q#j
9 M: `1 F$ V, ]; I3 A; c例 G65 H21 P#101 Q#102;(#101= )3 K% R6 v: R! `0 c9 ^
7)绝对值 #i=│#j│
$ G% J# j$ \1 p0 M8 R编程格式 G65 H22 P#i Q#j
, s; ]* P; }6 i4 m( w8 ? _1 N例 G65 H22 P#101 Q#102;(#101=│#102│) 3 r( o5 Y7 k; |7 e6 H5 f4 L
8)复合平方根1 #i=
9 O( M* J% }/ l* J3 g编程格式 G65 H27 P#i Q#j R#k
# ~9 {6 t3 b: x) ^5 `例 G65 H27 P#101 Q#102 R#103;( #101=
" l: k; U2 O: r2 I9)复合平方根2 #i= 1 z7 V3 Q! r- f+ N4 R; q
编程格式 G65 H28 P#i Q#j R#k- I9 J3 Z. V ~
例 G65 H28 P#101 Q#102 R#103
& T* }. O& L( y( T& e$ }
% a& ?6 G9 q+ D6 V& b7 v& K1)逻辑或 #i=#j OR #k9 \) \1 ?8 h0 L/ h
编程格式 G65 H11 P#i Q#j R#k* y5 X+ |# D6 j, P
例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103)3 v W k* x _$ c- C% r* t3 i
& p6 F0 P! ^' ]8 \
2)逻辑与 #i=#j AND #k
, J6 b3 a1 ^2 u1 C9 {: Z编程格式 G65 H12 P#i Q#j R#k
' q$ q5 [: V8 x$ d% k: W3 A+ t例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103 / W& U7 X7 x" |& ?& {8 E
+ b" V- x9 Z. f& E
8 }% `, S6 R7 p 4 I, W# P1 c6 g4 z3 B* z- f. ~
. d" j2 t. X! g' G' {0 B
(3)三角函数指令 5 k9 a* e: p' h* e& _# V9 I: @
( Z# K. D- k9 I
. P+ Q; _' G5 i6 K* d: e: b5 e* e( b
1)正弦函数 #i=#j×SIN(#k)
1 Y! j9 O& a& c" o+ J5 P$ D+ Q) d" y. ^7 O" J& B- E! l
编程格式 G65 H31 P#i Q#j R#k (单位:度) .' ^ A2 g; X/ G+ S
+ S2 n% f: V& h- K+ u6 i例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103))
( W8 c5 h: K8 n5 c" n/ ~% o2)余弦函数 #i=#j×COS(#k)
, o% q7 B3 x# r编程格式 G65 H32 P#i Q#j R#k (单位:度)6 l; m9 o5 w1 k# @! h
例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103))
b+ ]# D1 o6 t R2 T; X* ]3)正切函数 #i=#j×TAN#k
0 u ]. m4 @& `7 b编程格式 G65 H33 P#i Q#j R#k (单位:度)
: b! P& R: e* I$ T6 X例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103))3 j' L. [- I' n1 G; X, n
4)反正切 #i=ATAN(#j/#k)* S3 M5 c% N/ H+ q E/ C) W
编程格式 G65 H34 P#i Q#j R#k (单位:度,0o≤ #j ≤360o)9 f/ h2 p3 S2 f, Y' y7 ^5 \
例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103)
, i/ D" u% Z0 s3 {5 Z+ @+ |/ P. S' d0 s
" c; Y5 t$ G' u4 p# w4 q! D. D! o; r0 T" d/ C( C; `! p
(4)控制类指令0 o* B/ A2 U) @+ ^
: i% e8 O! ]2 J+ R5 u1 E8 z8 `- I' C2 Q
4 U' b+ e- U+ x2 W# o# _8 H$ u9 l. ~# _8 L* `
编程格式 G65 H80 Pn (n为程序段号)
9 k* M& m5 {: Z; o# |例 G65 H80 P120;(转移到N120)6 ?2 D9 Y6 B7 e, v" N& B0 x$ o) [
2)条件转移1 #j EQ #k(=)
1 } t2 q+ j2 P8 E# v; |$ [( L编程格式 G65 H81 Pn Q#j R#k (n为程序段号)
4 K& h% B: M/ s; _例 G65 H81 P1000 Q#101 R#102
9 a$ p# I- a. p) X& ~+ J当#101=#102,转移到N1000程序段;若#101≠ #102,执行下一程序段。
8 Q( v" B" i: h* P7 c* ~3)条件转移2 #j NE #k(≠)
' T7 H3 l# w& k! O% f2 [ Z编程格式 G65 H82 Pn Q#j R#k (n为程序段号)
* S1 S0 o6 }: S例 G65 H82 P1000 Q#101 R#102
+ c0 |* I* c/ o当#101≠ #102,转移到N1000程序段;若#101=#102,执行下一程序段。
& _' a( s! R. L5 V( P& T. O4)条件转移3 #j GT #k (> )
+ z1 l& |( x, V" y# Y6 ]6 e编程格式 G65 H83 Pn Q#j R#k (n为程序段号)& r& s& w. @8 Z" O/ L
例 G65 H83 P1000 Q#101 R#102
' F* O/ t+ n( j7 b9 b9 |2 [当#101 > #102,转移到N1000程序段;若#101 ≤#102,执行下一程序段。$ L, ^8 t/ _$ W' S& f# ~
5)条件转移4 #j LT #k(<)
/ E! P1 s0 J N1 `编程格式 G65 H84 Pn Q#j R#k (n为程序段号)& S: v, A. ]7 V6 C/ \5 x
例 G65 H84 P1000 Q#101 R#102 + @$ n& r0 T# ~3 Z3 ?7 p
当#101 < #102,转移到N1000;若#101 ≥ #102,执行下一程序段。* ]7 F2 C) ?/ z* b8 O4 o; z- ^
6)条件转移5 #j GE #k(≥)
* e. C, c, K! \# b/ [编程格式 G65 H85 Pn Q#j R#k (n为程序段号)
! a/ k$ m% z) \- o5 L' I' H例 G65 H85 P1000 Q#101 R#1024 `" r) J; o$ @3 ^
当#101≥ #102,转移到N1000;若#101<#102,执行下一程序段。- r" ~$ o$ x' ]+ _: K P0 P5 ~; J3 k9 i
7)条件转移6 #j LE #k(≤)$ m3 C! c; k) e! V
编程格式 G65 H86 Pn Q#j Q#k (n为程序段号)
( q5 [ o7 p1 q2 D. b例 G65 H86 P1000 Q#101 R#102) R; }0 o+ `, @) f9 f4 |
当#101≤#102,转移到N1000;若#101>#102,执行下一程序段。0 C7 ~) ^7 H( W/ t
, c+ p) H* V1 R. e7 p$ k* k4、使用注意/ W- V7 Q9 r) Z$ ?: \9 o
为保证宏程序的正常运行,在使用用户宏程序的过程中,应注意以下几点;$ u- T: N0 Z' A8 L: ~* y
(1)由G65规定的H码不影响偏移量的任何选择;$ v. t5 S" Q& j4 y* m
(2)如果用于各算术运算的Q或R未被指定,则作为0处理;5 B$ Q X; t0 S2 }2 @/ u3 a
(3)在分支转移目标地址中,如果序号为正值,则检索过程是先向大程序号查找,如果序号为负值,则检索过程是先向小程序号查找。
5 t: {8 `% \/ b(4)转移目标序号可以是变量。 , b: q7 ]8 ] E% I: ]
8 K3 B' u" w9 O9 X9 J5、用户宏程序应用举例 :
( e9 T0 V9 B, o' X4 k2 q- W5 S' E* l8 V% n
用宏程序和子程序功能顺序加工圆周等分孔。设圆心在O点,它在机床坐标系中的坐标为(X0,Y0),在半径为r的圆周上均匀地钻几个等分孔,起始角度为α,孔数为n。以零件上表面为Z向零点。 % ?/ H" c7 a" [
' x2 y3 V4 C* J, I @6 C. R0 v
使用以下保持型变量:
w: K' S, n6 J: V2 j7 \#502:半径r;5 D8 j+ p7 O: H) V( g- a+ l7 W
#503:起始角度α;8 \1 m) v) H7 R% L, u y+ W- W9 J( {5 Z8 X
#504:孔数n,当n>0时,按逆时针方向加工,当n<0时,按顺时针方向加工;
4 F! D1 B1 e8 N" Z7 ]#505:孔底Z坐标值;% g6 m) |/ w& |1 L/ K% ?
#506:R平面Z坐标值;# c% x4 s' u: j8 d, ~9 D: m
#507:F进给量。 8 m, x) L" n* c6 I; v7 V4 e# {
使用以下变量进行操作运算:
# @+ p* Q5 F' `% @# e+ W$ c#100:表示第i步钻第i孔的记数器;7 ^7 s. H# S5 l' q t
#101:记数器的最终值(为n 的绝对值);
1 M E$ N/ Y7 z#102:第i个孔的角度位置θi的值; - k2 Q2 U, ]2 }" r8 ~! o3 c: g
#103:第i个孔的X坐标值;
! f0 Q' ]# u) F' I. i1 l1 z2 t#104:第i个孔的Y坐标值;
' P0 n/ D" y8 A% V用用户宏程序编制的钻孔子程序如下:
" d5 K' K& c8 K) q4 aO9010
. P4 w( E9 P; I1 @N110 G65 H01 P#100 Q0 //#100 = 0
+ x: F F5 Y8 |/ SN120 G65 H22 P#101 Q#504 //#101 = │#504│0 L; z/ t/ \, E$ e0 {7 V8 ~
N130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o5 W2 ^0 W3 R. B% n% ]2 W7 I0 T1 Q$ X
N140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #504: V# `$ c! Y' l; l$ a
N150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102当前孔角度位置θi =α+ (360o×i) / n8 C6 ^" G; T3 g7 b
N160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)当前孔的 X坐标
+ b9 a$ p1 F8 b; l" u+ Z$ L) |N170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 当前孔的Y坐标" ]! |: g. O1 X5 l" q
N180 G90 G00 X#103 Y#104 //定位到当前孔(返回开始平面)6 L6 s3 @( f2 v: ^. L
N190 G00 Z#506 //快速进到R平面
: F b$ t: |7 kN200 G01 Z#505 F#507 //加工当前孔
/ ]- i4 R$ t# `3 n/ g& k. N. R# x$ xN210 G00 Z#506 //快速退到R平面
. `$ N1 P% g6 Q. t: Q# IN220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔计数
( ?% h! \, [- r3 \/ J6 iN230 G65 H84 P-130 Q#100 R#101 //当#100 < #101时,向上返回到130程序段 ^% [) B- z7 \& z3 v7 B9 m! |* R
N240 M99 //子程序结束 9 J% f- Y' C8 e
% U& s: q- q& Z: W7 z. [, J* p 3 x% F6 o+ U7 g* S2 p9 [2 l
: V- ~ q0 g% z$ Z
调用上述子程序的主程序如下:
' V, s& m# d+ P3 nO00109 t8 z# Z( S" @7 c% E
N10 G54 G90 G00 X0 Y0 Z20 //进入加工坐标系
0 j' j- ?7 L, L; r0 w, DN20 M98 P9010 //调用钻孔子程序,加工圆周等分孔2 P4 V9 y5 {: O# p' Q- i# N+ \7 u
N30 Z20 //抬刀' |9 [/ A$ x* `( N) |
N40 G00 G90 X0 Y0 //返回加工坐标系零点 - W0 ~" |. h& H0 H
N50 M30 程序结束* Z4 h, |2 ? H( |4 W8 s; [ K
设置G54:X=-400,Y=-100,Z=-50。
# x5 N9 X. s+ N }- C2 C; z变量#500~#507可在程序中赋值,也可由MDI方式设定。
3 G8 `& P, m3 }( V
; @, e8 d8 y& t* ^/ fB类宏G65$ y3 [/ S0 i0 A+ b
6 l0 ]9 Z2 Y8 W8 p
简单调用(G65)* l0 T# L! C8 i4 p
功能 G65被指定时,地址P所指定的程式被调用,自变量能传递到用户宏程序中。: h" K1 }0 g) G9 l* G# E
格式 G65 Pp Ll <自变量表>;9 n- j4 P( }( `% @1 e- u+ W1 }# D0 ]; ~( [
其中: p 要调用的程序号
6 S2 B+ j$ q }; M% ? l 重复的次数(缺省值为1,取值范围1~9999)
3 w$ P# G+ R( p- f Q 自变量 传递给被调用程式的数。通过使用自变量表,值被分配给相应 + c9 i* e* D; l8 ~
的局部变量。7 o* f; C( S; @; _
" ?+ a6 @6 T* V% Q
自变量分为两类。第一类可以使用的字母只能使用一次,各自变量与局部变量的对用关系如下:! y8 j% ?! g/ j
- G, ?- z: u/ \( P地址 变量号 地址 变量号 地址 变量号
% U4 _. S8 {/ qA #1 E #8 T #20& C* q* m4 t1 p2 _$ f
B #2 F #9 U #21& d( }( P+ P J" ^8 S# z* W- H t
C #3 H #11 V #22
( q* S7 \4 u; _( B9 }4 _3 [I #4 M #13 W #23) t; m$ k' G% x& x# f% M- q
J #5 Q #17 X #24
; F( {" g8 |+ b7 Q- d4 EK #6 R #18 Y #25% Q3 j2 l; `6 H
D #7 S #19 Z #264 h6 @7 Z- m! f% Z6 W, x z
☆ 地址G、L、N、O、P不能当作自变量使用。
, B# a/ Q* [1 }+ v9 r- j, `☆ 不需要的地址可以省略,与省略的地址相应的局部变量被置成空。
' {; T" B" ?0 w; N$ b, q6 H( Q: b . D. S* c% m+ Q; f
第二类可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自变量使用的类别根据使
- u& c2 q4 X: F' b, I$ _用的字母自动确定:6 L2 ~2 |1 x2 s0 A5 E. _
地址 变量号 地址 变量号 地址 变量号
1 q: K/ i! G3 i0 E+ e8 W# fA #1 K3 #12 J7 #23 k9 t3 H" r. W) L3 N
B #2 I4 #13 K7 #24
$ Y B/ a, e, l! u! A( v) mC #3 J4 #14 I8 #254 T4 H( q( A1 ^8 J( ^
I1 #4 K4 #15 J8 #26
& y' N% V" U4 I! P& vJ1 #5 I5 #16 K8 #27
& \5 E8 L2 Y8 g, JK1 #6 J5 #17 I9 #28
& R4 G) z3 e0 F# h9 p9 U' E. D1 tI2 #7 K5 #18 J9 #29/ d# w0 u9 E" U! [$ f2 u
J2 #8 I6 #19 K9 #30
4 `3 S% z# \. n7 E* f# XK2 #9 J6 #20 I10 #31* E- `/ A7 R) L, f! ?* [3 l, @
I3 #10 K6 #21 J10 #32
; J8 r1 I, J7 N @" EJ3 #11 I7 #22 K10 #33; z# f' j) e/ a, O: g' l3 m
☆ 在实际的程序中,I、J、K的下标不用写出来。! P6 x( J5 ]6 M+ \% X
注意:4 I/ }6 f; ~7 R4 p
☆ 在自变量之前一定要指定G65。
- V' D; j1 q8 P1 o, X' k☆ 如果将两类自变量混合使用,系统自己会辨别属于哪类,最后指定的那一类优先。
' ?! c: H# v0 F2 t/ b2 q7 d+ J☆ 传递的不带小数点的自变量的单位与每个地址的最小输入增量一致,其值与机床的系统结构非常一致。为了程序的兼容性,建议使用带小数点的自变量。1 W4 ~, f+ S+ \. C8 G+ k: r, g$ P1 s0 J* V
☆ 最多可以嵌套含有简单调用(G65)和模态调用(G66)的程序4级。不包括子程序调用(M98)。局部变量可以嵌套0~4级。主程序的级数是0。用G65和G66每调用一次宏,局部变量的级数增加一次。上一级局部变量的值保存在NC 中。宏程序执行到M99时,控制返回到调用的程序。这时局部变量的级数减1,恢复宏调用时存储的局部变量值。
% v; ]4 j3 R% A; @+ a G65简单宏调用可方便地向被调用的副程式传递数据,但是用它制作诸如固定循环3 p* P% y* ^# |& S0 B+ R! S
之类的移动到坐标后才加工的程式就无能为力了。 |
评分
-
查看全部评分
|