|
|
发表于 2011-7-12 08:32:36
|
显示全部楼层
回复 1# 钟云驹 * N8 p' @* `: k. z Q
详解A类宏
. d' D3 W+ \9 S7 H( d分类:默认分类 字号: 大大 中中 小小 用户宏功能是提高数控机床性能的一种特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一样存入存储器,然后用一个总指令代表它们,使用时只需给出这个总指令就能执行其功能。
3 ]! V6 U3 L- c& w! V 用户宏功能主体是一系列指令,相当于子程序体。既可以由机床生产厂提供,也可以由机床用户自己编制。. Z' t6 R! D' h, {/ L' o& m
宏指令是代表一系列指令的总指令,相当于子程序调用指令。
Q* ~2 [# D1 O: |. H5 ` u 用户宏功能的最大特点是,可以对变量进行运算,使程序应用更加灵活、方便。
9 f2 y. t2 j5 \8 g 用户宏功能有A、B两类。这里主要介绍A类宏功能,B类宏功能请参见本课程的B类宏程序介绍。
$ g0 C* `+ b+ f% Z8 B1、变量
& _8 ]! C( f' z5 }/ O# s 在常规的主程序和子程序内,总是将一个具体的数值赋给一个地址。为了使程序更具通用性、更加灵活,在宏程序中设置了变量,即将变量赋给一个地址。
- `! X, S2 B# E% n. O(1)变量的表示( [9 @; u: n* t7 h
变量可以用“#”号和跟随其后的变量序号来表示:#i(i=1,2,3......)# j; b5 K; s' n: F
例:#5, #109, #501。
! ]8 U; f9 w8 [ E; _" k* s(2)变量的引用( ]7 Z% z- t* h3 Q2 g
将跟随在一个地址后的数值用一个变量来代替,即引入了变量。# P. z2 ~- ?; E3 O# v. G9 r1 j
例:对于F#103,若#103=50时,则为F50;6 h2 {3 j# @. A% l/ n8 q2 ?
对于Z-#110,若#110=100时,则Z为-100;
6 {& S1 g0 i8 v# f# m对于G#130,若#130=3时,则为G03。
1 a9 P8 M* B5 P& u) _. ?9 P(3)变量的类型
5 T, [5 _& t/ t3 r: z' @) ? z 0MC系统的变量分为公共变量和系统变量两类。
1 g0 c4 V0 s$ d; e1)公共变量 7 |, j6 \2 t1 {% X: _# c. x
公共变量是在主程序和主程序调用的各用户宏程序内公用的变量。也就是说,在一个宏指令中的#i与在另一个宏指令中的#i是相同的。! ^: w6 {0 X6 s2 h6 E
公共变量的序号为:#100~#131;#500~#531。其中#100~#131公共变量在电源断电后即清零,重新开机时被设置为“0”;#500~#531公共变量即使断电后,它们的值也保持不变,因此也称为保持型变量。 $ I) d3 q+ @# z" u* \# j: Z/ M
; R; d7 }+ ~& H- T k1 F, e" N/ L+ j, [
. y% K! O% b5 L8 f+ n. F
) ]' q" v: H. n% k; D) K$ B6 O
2)系统变量 0 J5 ]7 \) d% c2 B6 d6 x+ Z, P2 z
系统变量定义为:有固定用途的变量,它的值决定系统的状态。系统变量包括刀具偏置变量,接口的输入/输出信号变量,位置信息变量等。 Z1 R. r- W' z2 c9 N- J
系统变量的序号与系统的某种状态有严格的对应关系。例如,刀具偏置变量序号为#01~#99,这些值可以用变量替换的方法加以改变,在序号1~99中,不用作刀偏量的变量可用作保持型公共变量#500~#531。8 X( M4 z/ E2 e6 T" F% N" Z
接口输入信号#1000~#1015,#1032。通过阅读这些系统变量,可以知道各输入口的情况。当变量值为“1”时,说明接点闭合;当变量值为“0”时,表明接点断开。这些变量的数值不能被替换。阅读变量#1032,所有输入信号一次读入。0 n1 c$ N- o0 S
2、宏指令G65
8 J6 t! M; N* u- H- ^ 宏指令G65可以实现丰富的宏功能,包括算术运算、逻辑运算等处理功能。
$ |9 R: ~5 b' O( l9 C) V 一般形式: G65 Hm P#i Q#j R#k
2 T3 v' Y5 z' J* V1 U. r( s式中:--宏程序功能,数值范围01~99;4 n' g* t6 c% }( {' T- n
#i--运算结果存放处的变量名;" U0 y; F, p6 U* |5 d4 p# m3 f
#j--被操作的第一个变量,也可以是一个常数;% y% Q9 r+ ~/ s: b
#k--被操作的第二个变量,也可以是一个常数。
7 k2 }8 @% [( `4 [; Q/ u例如,当程序功能为加法运算时:
, p4 L& g# V. {- I+ y3 }6 J程序 P#100 Q#101 R#102...... 含义为#100=#101+#102
) M8 u$ K4 g# L: w7 z' d( z# X# X1 `程序 P#100 Q-#101 R#102...... 含义为#100=-#101+#102/ v9 I! R9 R, D! r$ T& u0 _
程序 P#100 Q#101 R15...... 含义为#100=#101+15 / ^3 E' Z8 ~# U2 Q6 [
* D' M! V% @! I& }
3、宏功能指令
- D2 F/ O: ?: T7 E6 u9 g' K4 Y; J" \
(1)算术运算指令
9 n& y2 i" i" m$ d% v* @
S g* X4 K: K3 M' e0 s0 h6 s1)变量的定义和替换 #i=#j
! L8 q4 r. U* \0 w, ?- Y: L2 R
' m1 ?$ D- {0 M: U1 Y# D3 I编程格式 G65 H01 P#i Q#j
% y: f, | X5 V& M# c5 Y5 g例 G65 H01 P#101 Q1005; (#101=1005)
& x6 u( ^! L5 {9 P1 n( T7 _6 W' |3 B, kG65 H01 P#101 Q-#112;(#101=-#112) ' a4 Y+ M+ V) O# l. p; F; L2 R
2)加法 #i=#j+#k4 }. w y& P% H9 _
编程格式 G65 H02 P#i Q#j R#k
: h: d$ T. d& U4 O( ^ O例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103)
% D; |- b" m$ G- F+ p, m: _3)减法 #i=#j-#k" c, w! N. _. i) Z, O
编程格式 G65 H03 P#i Q#j R#k
* f# ~ C# d; U! J0 K1 Y9 p例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103)* L+ ^$ k# Q1 t! n9 |8 h7 o! }
4)乘法 #i=#j×#k
9 b- A$ O8 |# ?( {2 Q z$ w# _编程格式 G65 H04 P#i Q#j R#k' u" l6 W; O, Y' q) N
例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103). A" o* {3 H6 S' q& u
5)除法 #i=#j / #k
0 `8 e; t" |2 K1 F编程格式 G65 H05 P#i Q#j R#k
- N! H+ ]" D" p; q8 t: m0 p* ~1 T例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103)& {5 `: {) r$ w) }
6)平方根 #i=
7 O( m( o/ N# o! \$ m/ }' A. z编程格式 G65 H21 P#i Q#j
# m$ `! H) T2 P7 J例 G65 H21 P#101 Q#102;(#101= )
- z! ]9 G9 Q) y, K4 {7)绝对值 #i=│#j│: D+ J3 Q2 W+ @2 v$ r- `
编程格式 G65 H22 P#i Q#j" w9 C2 W3 o+ S0 ^
例 G65 H22 P#101 Q#102;(#101=│#102│)
7 X+ w& Z. |* V5 ]8)复合平方根1 #i= $ y' c: g" \7 [/ d' A, A
编程格式 G65 H27 P#i Q#j R#k* j/ D$ s; ^$ f9 U
例 G65 H27 P#101 Q#102 R#103;( #101=
. ?3 R5 a1 k9 R: s" ~ T4 Y! b- G9)复合平方根2 #i=
4 x/ N% W/ F# {( ]/ M% q编程格式 G65 H28 P#i Q#j R#k* @+ p0 G! B# N7 P' p( S
例 G65 H28 P#101 Q#102 R#103 3 `# B9 @. J$ q4 L0 k
7 M% b8 a7 }* d2 J- j1 I' }
1)逻辑或 #i=#j OR #k
; y* i4 d9 V( {& W编程格式 G65 H11 P#i Q#j R#k
0 R$ ?+ ]4 J E7 A例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103)
: B/ Y# F+ U/ P8 ]4 A: D7 m0 c0 l9 i; `
2)逻辑与 #i=#j AND #k
% E. L, `" ^2 r, ^编程格式 G65 H12 P#i Q#j R#k
6 T2 b/ e: D( m* O& k+ a( ~例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103
2 Z+ n3 j* ]/ q2 b; }6 l4 r# {8 H* B6 l3 s2 R7 n
! r5 e( W1 t3 |4 ]/ }
0 O' e4 t' H+ P. _" \5 D2 x" u
/ r, T9 V! j# [! t! T+ J(3)三角函数指令
* w$ o: t5 j7 I8 I: L% s9 }; @; X I
5 N* L9 J2 ]8 }7 y+ k* l) A
5 i3 `: j: _" k! u9 Z1)正弦函数 #i=#j×SIN(#k)
. B+ U: L4 F* b; g
' w; M- M* v# J! d1 q7 R编程格式 G65 H31 P#i Q#j R#k (单位:度) .
% I4 Y+ w1 j0 K- v, P& J# N4 s, z% L. O; \
例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103))
( I* H8 P% ?) W3 X2)余弦函数 #i=#j×COS(#k)
5 w4 K# Z$ z; Z+ A% R编程格式 G65 H32 P#i Q#j R#k (单位:度)& K6 a9 _$ T; i1 J3 \
例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103))
4 z$ F7 N1 U4 R+ p. S7 F( c( C3)正切函数 #i=#j×TAN#k
+ P$ f. W6 i# m d: F编程格式 G65 H33 P#i Q#j R#k (单位:度)0 h" t# x! C! x4 o5 E8 x
例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103))+ w) L' J' y$ b; p( }" Q5 [9 y# T
4)反正切 #i=ATAN(#j/#k)
: p: P+ n1 F% `- Z) v+ l+ e* W编程格式 G65 H34 P#i Q#j R#k (单位:度,0o≤ #j ≤360o)+ X" D" J& v# q% A7 M9 h8 E
例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103): c7 O, l$ M% b; {) F2 V
4 v( \3 P& @" b2 a8 \
1 x M7 X% m3 [+ W P7 f+ t: w
, Z4 g7 P! P/ k8 L" W+ O
(4)控制类指令) U4 G7 f7 o0 n6 ` P9 u
. `, |! S: S% {
! V- g3 ^% `! ?9 @) b
1 y4 e" p2 ]5 \5 |- @- W
编程格式 G65 H80 Pn (n为程序段号)& w6 x5 ?2 d' A5 {+ c: d) x
例 G65 H80 P120;(转移到N120)
% J' _ g& X3 T( n: m, G. d) k2)条件转移1 #j EQ #k(=)' |) U; M. x/ e2 M
编程格式 G65 H81 Pn Q#j R#k (n为程序段号)7 u" {' j, v0 B# W0 \
例 G65 H81 P1000 Q#101 R#102
: P/ L, \: g4 H- g% n当#101=#102,转移到N1000程序段;若#101≠ #102,执行下一程序段。# H! C. n4 r( `8 D$ b: d8 e- Z
3)条件转移2 #j NE #k(≠)$ h* t/ L/ b" R, K
编程格式 G65 H82 Pn Q#j R#k (n为程序段号); z2 k3 n0 K# }- G- v' R8 g
例 G65 H82 P1000 Q#101 R#1028 L+ f Q" I3 a! W$ c; }
当#101≠ #102,转移到N1000程序段;若#101=#102,执行下一程序段。
% r Y5 @1 N" l1 F0 {4)条件转移3 #j GT #k (> )
. M) N3 A! x }- S& B+ C) i# Z编程格式 G65 H83 Pn Q#j R#k (n为程序段号)& M/ \; s y, d* [+ p
例 G65 H83 P1000 Q#101 R#102. K6 J6 N5 Y Z/ w, C# j
当#101 > #102,转移到N1000程序段;若#101 ≤#102,执行下一程序段。- J g& u/ p# N1 A" j) t2 y
5)条件转移4 #j LT #k(<)( f8 }5 K8 ~0 v( F
编程格式 G65 H84 Pn Q#j R#k (n为程序段号)
/ ^6 C; w# G0 t, E例 G65 H84 P1000 Q#101 R#102 ( ^9 L! p2 \! S" E# a/ W. c% s) b4 H
当#101 < #102,转移到N1000;若#101 ≥ #102,执行下一程序段。
5 q" N$ J9 ?: Y3 n! R/ @+ {* P! P6)条件转移5 #j GE #k(≥)
8 e. { M: v: j l2 J% @' f编程格式 G65 H85 Pn Q#j R#k (n为程序段号)
5 h5 ]0 a6 U8 j8 m5 M- x: K: C0 J1 ?- c例 G65 H85 P1000 Q#101 R#102) a0 R8 r1 C" U/ o9 a7 g/ k
当#101≥ #102,转移到N1000;若#101<#102,执行下一程序段。8 T8 L) G. N) h
7)条件转移6 #j LE #k(≤)
7 A3 M2 _, s/ Y9 m; o* l" V编程格式 G65 H86 Pn Q#j Q#k (n为程序段号): R. C( G2 z5 `' Z
例 G65 H86 P1000 Q#101 R#102
' m- L; U8 \0 F; c1 t" S当#101≤#102,转移到N1000;若#101>#102,执行下一程序段。: i+ D2 a5 z3 W( E. n1 |
* @" C7 t/ p# l- i4、使用注意& ~* }7 ~+ G9 c! m: Q* l' h$ t7 E
为保证宏程序的正常运行,在使用用户宏程序的过程中,应注意以下几点;
. r% D7 c1 s: ]7 E2 x1 g, I(1)由G65规定的H码不影响偏移量的任何选择;" S2 g! N. A3 B8 z3 ^
(2)如果用于各算术运算的Q或R未被指定,则作为0处理;1 F7 T6 V) u! K7 M2 \
(3)在分支转移目标地址中,如果序号为正值,则检索过程是先向大程序号查找,如果序号为负值,则检索过程是先向小程序号查找。' z4 b9 ], A: e( O
(4)转移目标序号可以是变量。 4 i- d* r% E0 W( l# o5 x- }" R: R
5 F# x$ R1 _4 G, T! J' p8 M
5、用户宏程序应用举例 :
# ~" d0 Q) i& u: W) s
: U. j7 s$ B! [, r用宏程序和子程序功能顺序加工圆周等分孔。设圆心在O点,它在机床坐标系中的坐标为(X0,Y0),在半径为r的圆周上均匀地钻几个等分孔,起始角度为α,孔数为n。以零件上表面为Z向零点。
* |1 k) {; v% E+ v
, |7 y8 m4 T" B2 Z" t使用以下保持型变量:* i o) l9 j$ ]7 R8 I6 c4 m8 S/ c
#502:半径r;; f- W: W! {7 C
#503:起始角度α;$ A9 c1 L' [. T; M; l6 q$ ?, N
#504:孔数n,当n>0时,按逆时针方向加工,当n<0时,按顺时针方向加工;! s e# g7 f/ \* s& ]
#505:孔底Z坐标值;
1 `8 M0 E# i& K; k4 I0 a, Z#506:R平面Z坐标值;1 X- R6 f! w3 z0 i' p$ Q# T
#507:F进给量。 ; }( ]7 g! v- L# c( O
使用以下变量进行操作运算:
, y. {1 b- S% H9 t! C' C# b0 O/ p#100:表示第i步钻第i孔的记数器;
! w8 S6 T- G" W% N8 g#101:记数器的最终值(为n 的绝对值);
9 T5 Y9 Z. Y' E3 b) m% e' K6 A#102:第i个孔的角度位置θi的值;
) P% @/ ?! c, G5 z* O; I#103:第i个孔的X坐标值;, D" J. V8 V2 N! v" b" g% ~, |8 T
#104:第i个孔的Y坐标值;
0 D5 C0 S, U" ]1 {用用户宏程序编制的钻孔子程序如下: ( g# n2 W1 v" ~' ~
O90102 Z# v: I* N5 }/ t9 m [6 }
N110 G65 H01 P#100 Q0 //#100 = 0
6 \/ q* b$ [: @( `N120 G65 H22 P#101 Q#504 //#101 = │#504│4 O6 z" j6 D9 Q" [, }- j1 L
N130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o
+ x) J: E% O1 y6 \7 _N140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #5046 p0 W1 T9 s! D6 b( ]$ d% b
N150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102当前孔角度位置θi =α+ (360o×i) / n
3 x Y8 n. H' H9 Z8 @$ ~N160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)当前孔的 X坐标
2 G1 j4 F. C" c5 `N170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 当前孔的Y坐标/ ]4 v' t& [6 k+ ?) m- ?7 M
N180 G90 G00 X#103 Y#104 //定位到当前孔(返回开始平面)
; x% N4 V2 j" |6 b1 {2 kN190 G00 Z#506 //快速进到R平面
b+ S8 j) `: ?5 KN200 G01 Z#505 F#507 //加工当前孔
7 w$ E/ y5 o8 zN210 G00 Z#506 //快速退到R平面
7 {+ _' x' D9 M- X: |N220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔计数4 m7 N0 O" x# a/ }1 `) l& z( w8 Z
N230 G65 H84 P-130 Q#100 R#101 //当#100 < #101时,向上返回到130程序段9 O0 N4 Q; ^- F, Z! ~
N240 M99 //子程序结束 ; f [1 K. r; R
; v9 q+ L7 M" |! R
: P! |0 V; B3 [: S
: x( N. o3 K- g/ e调用上述子程序的主程序如下:
- a; A4 M* M$ F) c) ~- G2 I# R# DO00104 B8 X9 G7 g+ N& u% s
N10 G54 G90 G00 X0 Y0 Z20 //进入加工坐标系- [* p( d7 u6 r& m
N20 M98 P9010 //调用钻孔子程序,加工圆周等分孔7 B- @# ~3 [8 B% t
N30 Z20 //抬刀: f( G8 Z+ C, U1 p) V5 h
N40 G00 G90 X0 Y0 //返回加工坐标系零点 & I, @; \0 w- a( u
N50 M30 程序结束- j8 h; ~ I+ E# w0 A- m
设置G54:X=-400,Y=-100,Z=-50。7 \2 r4 b$ z. u9 C6 Y
变量#500~#507可在程序中赋值,也可由MDI方式设定。 & t! Y+ Q# D9 Y! Z% {+ a. e8 s
5 |. ]" Q. ?8 d+ `B类宏G65" |* \) s8 Q/ |1 Z6 i) Y
: x& V0 |& ~, C4 x
简单调用(G65)+ G# u: C' R! f H4 H% C5 g9 o
功能 G65被指定时,地址P所指定的程式被调用,自变量能传递到用户宏程序中。
& b, p: B9 c& T( D) |# Z 格式 G65 Pp Ll <自变量表>;
8 ~2 @( E o: u 其中: p 要调用的程序号
$ ]$ l% e# C: f& z- f l 重复的次数(缺省值为1,取值范围1~9999)9 P- n6 Z d! ~8 T5 D# o D
自变量 传递给被调用程式的数。通过使用自变量表,值被分配给相应 * J8 a2 d- {1 r; @( ?. j; H% N
的局部变量。
% E6 V. _" w: W6 x. |
6 B' N. o! K' n& I 自变量分为两类。第一类可以使用的字母只能使用一次,各自变量与局部变量的对用关系如下:9 J8 d5 s1 z; | w% V7 D" R( P
3 G3 S; Y! [. b/ H地址 变量号 地址 变量号 地址 变量号
! Q6 x6 n" F+ u: ZA #1 E #8 T #200 k5 }0 v& s. B
B #2 F #9 U #211 }2 e6 V6 a9 {1 k. {: _% @6 _
C #3 H #11 V #22
* ]& T; R; v; c6 ZI #4 M #13 W #23
; m' |3 e9 P6 |, w6 ]5 T, t& KJ #5 Q #17 X #24
! {( V: I. c6 w. oK #6 R #18 Y #251 Q. j) ]2 L; _+ m$ ^
D #7 S #19 Z #26' [1 T1 l$ i/ Z; H" |$ N f
☆ 地址G、L、N、O、P不能当作自变量使用。
4 j7 }4 y; Y0 {! H/ z☆ 不需要的地址可以省略,与省略的地址相应的局部变量被置成空。5 T) D6 d. ]2 q6 x. k2 U
N4 F. [# z. C0 q6 p
第二类可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自变量使用的类别根据使+ P$ a/ U( p) ^( V+ d5 @- G
用的字母自动确定:
4 {& |( u' L* E' m/ A- y7 z地址 变量号 地址 变量号 地址 变量号- I. g6 d% n% X5 y% x5 {& @( N0 W
A #1 K3 #12 J7 #23" ^5 {) A( m9 J o
B #2 I4 #13 K7 #24
* k$ O# r& _) E: U% e" cC #3 J4 #14 I8 #25, V# l1 c, ^; y) A2 t6 x
I1 #4 K4 #15 J8 #26$ ]8 ~/ R- n- W- C r9 Q
J1 #5 I5 #16 K8 #27" c5 r, o, n# L- K9 u# \, S; e
K1 #6 J5 #17 I9 #282 h& k& j/ [" N0 Y
I2 #7 K5 #18 J9 #29* G$ I" R. x, ^* P3 j# R; Y
J2 #8 I6 #19 K9 #30
2 Z2 z6 g1 B) I2 X- \6 uK2 #9 J6 #20 I10 #31 c! J0 q5 Z$ [. [! F& G' K0 P% B
I3 #10 K6 #21 J10 #32
: _8 O$ l- _% cJ3 #11 I7 #22 K10 #338 H' I1 L6 a$ U
☆ 在实际的程序中,I、J、K的下标不用写出来。
( j; A$ m/ C: t+ L" o4 V9 u注意:
" C: Q! d+ O# S) N☆ 在自变量之前一定要指定G65。
O* }2 k6 V2 V4 x: \5 E) E, F! E☆ 如果将两类自变量混合使用,系统自己会辨别属于哪类,最后指定的那一类优先。8 Q X* B/ ~/ K0 ]- s3 q
☆ 传递的不带小数点的自变量的单位与每个地址的最小输入增量一致,其值与机床的系统结构非常一致。为了程序的兼容性,建议使用带小数点的自变量。
9 N! c. f7 k7 v% \' Z: K: ^7 H☆ 最多可以嵌套含有简单调用(G65)和模态调用(G66)的程序4级。不包括子程序调用(M98)。局部变量可以嵌套0~4级。主程序的级数是0。用G65和G66每调用一次宏,局部变量的级数增加一次。上一级局部变量的值保存在NC 中。宏程序执行到M99时,控制返回到调用的程序。这时局部变量的级数减1,恢复宏调用时存储的局部变量值。( J& F E0 J) l
G65简单宏调用可方便地向被调用的副程式传递数据,但是用它制作诸如固定循环4 ]# }$ Z- Y* F* ?; g
之类的移动到坐标后才加工的程式就无能为力了。 |
评分
-
查看全部评分
|