|
|
发表于 2011-7-12 08:32:36
|
显示全部楼层
回复 1# 钟云驹 9 B: Z7 U- x+ N# L" S' p# F
详解A类宏$ O+ e; ?/ r0 C9 y1 g* m3 e
分类:默认分类 字号: 大大 中中 小小 用户宏功能是提高数控机床性能的一种特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一样存入存储器,然后用一个总指令代表它们,使用时只需给出这个总指令就能执行其功能。
# r8 Q/ ^5 X) m9 t% a3 ^ 用户宏功能主体是一系列指令,相当于子程序体。既可以由机床生产厂提供,也可以由机床用户自己编制。
- C: Z! d Y, M- m' y9 d 宏指令是代表一系列指令的总指令,相当于子程序调用指令。3 J" t$ t- `, J2 R8 Y0 y
用户宏功能的最大特点是,可以对变量进行运算,使程序应用更加灵活、方便。
, P) N; k1 r% H/ ?7 p 用户宏功能有A、B两类。这里主要介绍A类宏功能,B类宏功能请参见本课程的B类宏程序介绍。! R7 I+ A# v4 E1 ^7 I1 |. z
1、变量5 T4 w O: C1 @; B. b
在常规的主程序和子程序内,总是将一个具体的数值赋给一个地址。为了使程序更具通用性、更加灵活,在宏程序中设置了变量,即将变量赋给一个地址。
% j# f, v( N% A$ D% A% a(1)变量的表示1 L! ?$ S" E) K
变量可以用“#”号和跟随其后的变量序号来表示:#i(i=1,2,3......)7 t0 o: t; L% L7 \
例:#5, #109, #501。& b9 s- ]3 N+ U4 C& D O. _
(2)变量的引用, c @& M3 F5 s* b7 l
将跟随在一个地址后的数值用一个变量来代替,即引入了变量。; U7 T6 T, a1 ]6 [; t/ ^. @
例:对于F#103,若#103=50时,则为F50;
+ B1 I$ Z6 k7 i对于Z-#110,若#110=100时,则Z为-100;) ]. U0 j: t& _- \7 i
对于G#130,若#130=3时,则为G03。3 [$ x9 {2 C' }2 k
(3)变量的类型
9 t! d6 ~6 i, E0 E 0MC系统的变量分为公共变量和系统变量两类。5 a& K# f2 A0 q+ d4 t1 L- N6 g4 h% i
1)公共变量 $ ~( U$ t$ [/ O( H3 @. @
公共变量是在主程序和主程序调用的各用户宏程序内公用的变量。也就是说,在一个宏指令中的#i与在另一个宏指令中的#i是相同的。8 \* N5 g1 s$ N( V6 J& D
公共变量的序号为:#100~#131;#500~#531。其中#100~#131公共变量在电源断电后即清零,重新开机时被设置为“0”;#500~#531公共变量即使断电后,它们的值也保持不变,因此也称为保持型变量。
6 D4 i/ P: q, w3 H, u$ c. T5 F( G i( K" n/ b1 S
0 k/ d0 K$ V5 @6 v1 x+ o
0 z+ e1 e8 a9 P' r7 ~7 [, @; R
2)系统变量
- `6 B! v4 Q, O6 Y) g* S+ | 系统变量定义为:有固定用途的变量,它的值决定系统的状态。系统变量包括刀具偏置变量,接口的输入/输出信号变量,位置信息变量等。1 W2 Q* Y8 m, S% ?; j! N
系统变量的序号与系统的某种状态有严格的对应关系。例如,刀具偏置变量序号为#01~#99,这些值可以用变量替换的方法加以改变,在序号1~99中,不用作刀偏量的变量可用作保持型公共变量#500~#531。
: A4 x9 I1 {, D2 W+ V# s; |- b 接口输入信号#1000~#1015,#1032。通过阅读这些系统变量,可以知道各输入口的情况。当变量值为“1”时,说明接点闭合;当变量值为“0”时,表明接点断开。这些变量的数值不能被替换。阅读变量#1032,所有输入信号一次读入。8 A) o5 ~3 X$ Z
2、宏指令G655 N1 t4 p0 ?9 r, ^
宏指令G65可以实现丰富的宏功能,包括算术运算、逻辑运算等处理功能。
$ _# A( Z. q0 \4 O 一般形式: G65 Hm P#i Q#j R#k
, Y: C \- J: t. P6 t7 }式中:--宏程序功能,数值范围01~99;
- B4 g% D$ p, x- ~9 t; [#i--运算结果存放处的变量名;" l9 X& t& H" y( L2 ~
#j--被操作的第一个变量,也可以是一个常数;
( h0 b! E5 O( `, B0 g h) S9 T- E#k--被操作的第二个变量,也可以是一个常数。
' U5 ]/ J A* K3 j5 c7 a; z例如,当程序功能为加法运算时:
# }* l- H0 k9 a* o9 d程序 P#100 Q#101 R#102...... 含义为#100=#101+#102
, v- n E: ~; n% s1 L* ^" v7 F程序 P#100 Q-#101 R#102...... 含义为#100=-#101+#1020 E# y: m7 l4 I/ n) s& O
程序 P#100 Q#101 R15...... 含义为#100=#101+15 . h( a5 }' U3 i, ?1 X: F, N
) A' H& r, E- i- Y x
3、宏功能指令 " v5 ?) J! J+ s4 G- _; ^) q
; u' q/ c6 y* `9 E. V
(1)算术运算指令
0 B' Z. M: M# N2 t; R. {! b$ K; X4 Z
1)变量的定义和替换 #i=#j
3 p- h- n& e$ l4 h J
& |9 t! D, T5 B% h编程格式 G65 H01 P#i Q#j {$ I# J: O1 a& j$ Z! |
例 G65 H01 P#101 Q1005; (#101=1005) " M% d; X7 c& I1 X
G65 H01 P#101 Q-#112;(#101=-#112) , A5 u S4 ?8 T f* r( q
2)加法 #i=#j+#k/ \# M! d/ f0 r- W, D
编程格式 G65 H02 P#i Q#j R#k ; F/ U; w2 H' ^4 d6 z+ L
例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103)
1 [3 }2 _5 L* k2 p+ Q& i3)减法 #i=#j-#k4 M( z1 q% x' A( l
编程格式 G65 H03 P#i Q#j R#k
# s# V1 n' Q9 @例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103)
$ M: A9 E3 p4 y2 |, J# P4)乘法 #i=#j×#k
8 j4 c9 k7 x* j, `& w编程格式 G65 H04 P#i Q#j R#k
0 }5 }1 A7 v/ Y5 k例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103)* z/ X/ p5 ?: m' w, w; J+ |
5)除法 #i=#j / #k7 d1 i) J4 W* Q- F
编程格式 G65 H05 P#i Q#j R#k
: s8 |( l6 S A# Y例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103): z0 m) @# ]9 {$ \
6)平方根 #i=
4 P# X9 [8 L% d& ?编程格式 G65 H21 P#i Q#j
) C, i7 Q5 G* U9 R例 G65 H21 P#101 Q#102;(#101= ): d$ ^8 Q( n3 C' O* S3 C
7)绝对值 #i=│#j│9 k: F; T" k. H- X
编程格式 G65 H22 P#i Q#j' S' C- m% \2 |! ]5 ^6 r
例 G65 H22 P#101 Q#102;(#101=│#102│) ; u9 i6 F' l( x) X$ Q' \
8)复合平方根1 #i=
% P" ]% B: X& v编程格式 G65 H27 P#i Q#j R#k9 M3 s6 a @1 X) Z- F6 m5 E" x- H _' d
例 G65 H27 P#101 Q#102 R#103;( #101= 5 G9 ?) o- b0 {& J+ R
9)复合平方根2 #i=
, {( ? N" [' @编程格式 G65 H28 P#i Q#j R#k$ J. {* _+ `. I/ S% b: R
例 G65 H28 P#101 Q#102 R#103
! X3 q# H/ s3 |- j. \ U: z6 _( J3 r% E: d6 H" O' C
1)逻辑或 #i=#j OR #k6 T1 d7 Y+ [3 k" w8 g
编程格式 G65 H11 P#i Q#j R#k
3 C! A4 i/ L/ m$ T例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103)
- z. F; I" t2 W$ t& A
8 j, j! D9 j% a0 x2)逻辑与 #i=#j AND #k
# A3 L: }6 K! b+ S) h- N编程格式 G65 H12 P#i Q#j R#k* }' `1 R9 E/ r3 Y; B: V# a
例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103
' _$ u' N+ L2 K3 N/ D: Z8 z. {/ L$ M$ v, L0 g, a& d& m! N
3 T8 @; t A% j( w8 {4 X
6 r! n& n6 V3 r, p0 q/ y+ C
# X/ O& [3 m r1 ]5 s(3)三角函数指令 4 h9 w8 z/ T3 X! L
+ r9 v* Z( g9 m6 v" A1 ?# x
9 E6 R) o; `) R; G0 H, @( H, l: }8 h6 O# N$ c
1)正弦函数 #i=#j×SIN(#k) 6 j: i/ e, {6 a( A( u! b$ N% J
" C% i+ n0 V, { N
编程格式 G65 H31 P#i Q#j R#k (单位:度) .. d. |! t3 p6 Q; n$ u
$ v0 ]/ C) c8 ~! v* r8 k, O
例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103))- o& g( {7 h' m6 v: P' k
2)余弦函数 #i=#j×COS(#k)9 y- G! O; @$ @1 a6 H- G% }1 ?
编程格式 G65 H32 P#i Q#j R#k (单位:度)
. h9 t' t5 n2 d6 M6 ]# k例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103))
# x5 h' t7 M- V2 Y: @3)正切函数 #i=#j×TAN#k J( [7 f0 \; [ O# V
编程格式 G65 H33 P#i Q#j R#k (单位:度)8 s1 V3 S! `. j5 v
例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103))4 U5 N2 Q0 U7 l3 o# d
4)反正切 #i=ATAN(#j/#k)
( F- r0 z9 V1 k+ y; O) F编程格式 G65 H34 P#i Q#j R#k (单位:度,0o≤ #j ≤360o)& X& _6 x; u C( C1 l4 ` [
例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103)
2 N6 B) ^0 f' ]% P3 U6 q( Z9 t
U; g: {* f" z, X% _ 3 l& R- y" b- o# N- H
8 |! f2 S6 j. x3 X5 g(4)控制类指令% r& G' k+ ^0 d$ u: O* X( C
+ Z* [) Y/ H) ~- r: t. B
7 ^4 @) A5 {! a
& u# b0 y& h* U9 P编程格式 G65 H80 Pn (n为程序段号)
0 l8 |% l7 ` y例 G65 H80 P120;(转移到N120)0 n7 l' M$ U2 M
2)条件转移1 #j EQ #k(=)# Z; ?; c9 B3 H+ x9 W
编程格式 G65 H81 Pn Q#j R#k (n为程序段号)
8 @1 b# Q5 s) @3 c0 w3 U例 G65 H81 P1000 Q#101 R#102
- t- i4 r4 ?& I; |7 _, ?当#101=#102,转移到N1000程序段;若#101≠ #102,执行下一程序段。$ L: [2 O2 R2 z1 `
3)条件转移2 #j NE #k(≠)7 u1 Q' C1 {( k5 b+ L) J
编程格式 G65 H82 Pn Q#j R#k (n为程序段号)
8 L* c* v$ O1 v例 G65 H82 P1000 Q#101 R#1020 \. ?& a0 `* j* i7 g
当#101≠ #102,转移到N1000程序段;若#101=#102,执行下一程序段。
3 Q/ y+ ?+ |( ~1 A4)条件转移3 #j GT #k (> )
$ G( x1 }* F6 U# V" u) [编程格式 G65 H83 Pn Q#j R#k (n为程序段号)
# j( t( _# w5 j! c* {/ W! F例 G65 H83 P1000 Q#101 R#102; y2 Y0 N8 D# i& a" o5 S
当#101 > #102,转移到N1000程序段;若#101 ≤#102,执行下一程序段。& T+ i! A3 Y; Z8 l7 }' F& u
5)条件转移4 #j LT #k(<)# J1 {$ h' ?: Q$ X# `! ^
编程格式 G65 H84 Pn Q#j R#k (n为程序段号)
0 i. V/ H6 l$ r: k6 P$ s3 k例 G65 H84 P1000 Q#101 R#102 5 _3 _! o% n2 ~
当#101 < #102,转移到N1000;若#101 ≥ #102,执行下一程序段。5 M; i0 y6 @7 T( Z
6)条件转移5 #j GE #k(≥)
6 P2 h% J, d% b" A& V编程格式 G65 H85 Pn Q#j R#k (n为程序段号)
. A I0 s- h% u+ @) J例 G65 H85 P1000 Q#101 R#102. b3 \) y" |" L% k
当#101≥ #102,转移到N1000;若#101<#102,执行下一程序段。
* K' q# q/ W; }) u; n. C5 [6 n' A7)条件转移6 #j LE #k(≤)
' {' }' ]; N& v编程格式 G65 H86 Pn Q#j Q#k (n为程序段号)
% P3 F8 l0 {& N" Q例 G65 H86 P1000 Q#101 R#102
$ \/ M3 F/ D4 h# a, @# H当#101≤#102,转移到N1000;若#101>#102,执行下一程序段。' n% R5 u8 d$ F: m, |+ s+ \$ f
2 w+ s2 ?5 T0 F2 N- D; _4、使用注意7 s! u( r1 ]& j1 s, r2 M
为保证宏程序的正常运行,在使用用户宏程序的过程中,应注意以下几点;" R p9 ]0 w" Y2 a, {8 [0 ^& Y( p
(1)由G65规定的H码不影响偏移量的任何选择;
1 h9 c4 y9 p6 b(2)如果用于各算术运算的Q或R未被指定,则作为0处理;$ {( ?# V/ F$ v L1 z) o
(3)在分支转移目标地址中,如果序号为正值,则检索过程是先向大程序号查找,如果序号为负值,则检索过程是先向小程序号查找。
# i9 Z. i0 e8 T, l: I# L8 z(4)转移目标序号可以是变量。
% ]- N/ \& ~& {; `) _
$ d9 {6 u5 G6 Z% q7 N$ m5、用户宏程序应用举例 :
0 l' l7 r# z( G
9 E3 q" L( c; V; J/ U- q3 T1 t用宏程序和子程序功能顺序加工圆周等分孔。设圆心在O点,它在机床坐标系中的坐标为(X0,Y0),在半径为r的圆周上均匀地钻几个等分孔,起始角度为α,孔数为n。以零件上表面为Z向零点。 ( W( X5 M Y! h9 O
4 j w7 q/ U( Y' s, g& G! ^5 F
使用以下保持型变量:) f) s+ y3 L2 |* k: P
#502:半径r;
3 |1 T- C- _0 i# K: w#503:起始角度α;
8 G7 ~* B) V M' H6 j4 {#504:孔数n,当n>0时,按逆时针方向加工,当n<0时,按顺时针方向加工;# x( j# P. I4 o9 `+ Z
#505:孔底Z坐标值;. M3 c, S3 e+ l) l# T
#506:R平面Z坐标值;) _# J& F4 Y5 _3 I. F$ T7 e
#507:F进给量。
1 s! N9 g% ~" o使用以下变量进行操作运算:
. d' I, i4 R+ q' k4 D+ F9 J#100:表示第i步钻第i孔的记数器;3 u8 R: L* o" b# n/ I/ n3 P
#101:记数器的最终值(为n 的绝对值);% S- {) l- u; Y/ c0 f
#102:第i个孔的角度位置θi的值; . h4 y% E# V0 k
#103:第i个孔的X坐标值;7 s6 i' B3 H0 w3 A7 i: O* f
#104:第i个孔的Y坐标值;
; D$ I/ _4 h: I; y: s$ a* k用用户宏程序编制的钻孔子程序如下:
! i3 B* T3 I' u$ }4 i3 J, R( EO9010' \: `1 Y4 |1 M. P' j) d% m
N110 G65 H01 P#100 Q0 //#100 = 0* z% R# W0 a4 R3 c, {
N120 G65 H22 P#101 Q#504 //#101 = │#504│ i7 g- b2 A0 L% y
N130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o
6 U# S5 Z" z K Z$ T6 W* dN140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #504
" M3 b( s* I& ]4 i" l( U2 RN150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102当前孔角度位置θi =α+ (360o×i) / n
- f7 E8 Z# |( ^/ G6 P2 LN160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)当前孔的 X坐标& }- f2 E1 o9 X j' Y* ^
N170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 当前孔的Y坐标; g1 }; ~7 i: g z; h5 r' c5 v$ _
N180 G90 G00 X#103 Y#104 //定位到当前孔(返回开始平面)8 s4 X x5 k6 q# I6 Z% U
N190 G00 Z#506 //快速进到R平面
$ B, B5 u+ m7 aN200 G01 Z#505 F#507 //加工当前孔
4 I% i5 J7 h8 z( u5 R$ bN210 G00 Z#506 //快速退到R平面
1 I7 A3 H" }* P6 b' s7 h/ z, GN220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔计数
& Y; r" |, p( S$ c/ hN230 G65 H84 P-130 Q#100 R#101 //当#100 < #101时,向上返回到130程序段) F5 G' Q4 J& a" v$ c9 |! q
N240 M99 //子程序结束 2 o, J, S5 W" C* R5 m
3 {- f. M* U! @6 j0 v1 v
, @0 o$ q' U$ G- A0 ~: V
( O& r# t5 e% G6 w' B* P
调用上述子程序的主程序如下: ! A( b- l3 Y# y( O, w
O0010
8 K+ r) A, S3 t$ |6 lN10 G54 G90 G00 X0 Y0 Z20 //进入加工坐标系
6 _) }% V) j& C2 ~1 vN20 M98 P9010 //调用钻孔子程序,加工圆周等分孔9 ]2 A8 _/ y2 M# u
N30 Z20 //抬刀
h) T3 e2 P7 vN40 G00 G90 X0 Y0 //返回加工坐标系零点 , j& r# B! Q- z1 {% q
N50 M30 程序结束
8 M# b' k( z: q& f) I4 a: b( Z设置G54:X=-400,Y=-100,Z=-50。
$ w$ a) s t9 `3 y1 y变量#500~#507可在程序中赋值,也可由MDI方式设定。
; {2 t$ d, D8 R! i# u( E2 |! g1 e+ @2 ]( ~0 M
B类宏G65/ A Y! {8 F1 E7 d0 A
9 Q0 L8 x- ?* a% Z
简单调用(G65)
( m. m, F2 k+ E$ Z 功能 G65被指定时,地址P所指定的程式被调用,自变量能传递到用户宏程序中。6 t( S# p! Q" D m
格式 G65 Pp Ll <自变量表>;
4 D+ N6 |5 \7 b3 `- _$ Q 其中: p 要调用的程序号$ n0 C; @ u4 z: V5 a
l 重复的次数(缺省值为1,取值范围1~9999)$ T/ n2 s" _+ X
自变量 传递给被调用程式的数。通过使用自变量表,值被分配给相应 ! z0 l, S/ Z0 t. F( V% @
的局部变量。& k1 t# _5 W9 o& u, d
$ E% y, A/ `0 o
自变量分为两类。第一类可以使用的字母只能使用一次,各自变量与局部变量的对用关系如下:' W6 a# t5 [1 P+ Y# X6 }
& K, P; {! ~& R
地址 变量号 地址 变量号 地址 变量号
6 [1 |- Y C2 B; PA #1 E #8 T #20( ~. A2 P4 a9 w
B #2 F #9 U #213 U+ z0 B$ S* G$ w
C #3 H #11 V #22, x/ h7 D9 W. o
I #4 M #13 W #23& w' T6 V' v6 N5 o; P; g
J #5 Q #17 X #24* c( A8 {6 f0 e+ R
K #6 R #18 Y #25
c0 `' {. Q; p* C$ B4 m2 `D #7 S #19 Z #26& U3 p5 S7 H" O7 d
☆ 地址G、L、N、O、P不能当作自变量使用。
/ U3 `: r, X% X☆ 不需要的地址可以省略,与省略的地址相应的局部变量被置成空。4 i. I; G: x* R. ], Z8 Z* y4 K8 `: O
V. S7 e3 ], e. N7 K
第二类可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自变量使用的类别根据使
! c7 Z& J5 |- ?" }; b1 y' C用的字母自动确定:' g' r' C" G4 J) C& j! b3 g
地址 变量号 地址 变量号 地址 变量号
: g+ f6 z+ M; I' ]/ c2 m9 OA #1 K3 #12 J7 #23
% A! l% b' g8 B; N. Z: ^% rB #2 I4 #13 K7 #24: V4 K( m/ D4 h6 A1 E; U1 S
C #3 J4 #14 I8 #25
' L; w6 } `- }1 U: H& k; o0 vI1 #4 K4 #15 J8 #263 `8 e( i8 f! }6 w
J1 #5 I5 #16 K8 #27) z5 }$ q1 w( a
K1 #6 J5 #17 I9 #28
, L- g3 ^$ _3 oI2 #7 K5 #18 J9 #29
# o! }! b+ M) P+ N- pJ2 #8 I6 #19 K9 #305 E7 K7 \. Q5 S& | {- P: b3 O
K2 #9 J6 #20 I10 #31! a" p( @% T/ T9 O
I3 #10 K6 #21 J10 #32) L* H& j( K7 d" f5 ^6 C& E
J3 #11 I7 #22 K10 #33 b; T/ Z! i$ ?. A% h
☆ 在实际的程序中,I、J、K的下标不用写出来。0 a0 [ V/ j" p# B. K8 v+ V. k
注意:
9 C2 ]2 o' j* J) A8 c _; h! h☆ 在自变量之前一定要指定G65。
/ J7 {4 F- H: `) j. {$ L' c6 H7 i☆ 如果将两类自变量混合使用,系统自己会辨别属于哪类,最后指定的那一类优先。2 v- c- b9 K' G* m% {3 j; ^8 w
☆ 传递的不带小数点的自变量的单位与每个地址的最小输入增量一致,其值与机床的系统结构非常一致。为了程序的兼容性,建议使用带小数点的自变量。
. \; d- M) X3 \☆ 最多可以嵌套含有简单调用(G65)和模态调用(G66)的程序4级。不包括子程序调用(M98)。局部变量可以嵌套0~4级。主程序的级数是0。用G65和G66每调用一次宏,局部变量的级数增加一次。上一级局部变量的值保存在NC 中。宏程序执行到M99时,控制返回到调用的程序。这时局部变量的级数减1,恢复宏调用时存储的局部变量值。
$ I. j0 A. Z$ ~3 g' C# {1 U6 q5 l( F G65简单宏调用可方便地向被调用的副程式传递数据,但是用它制作诸如固定循环; c, H# y( O6 F' _ h
之类的移动到坐标后才加工的程式就无能为力了。 |
评分
-
查看全部评分
|