|
发表于 2011-7-12 08:32:36
|
显示全部楼层
回复 1# 钟云驹 2 Q9 c/ T3 C& [# R. ?
详解A类宏9 M: n% o* b' P' c# M' p, [) v! U
分类:默认分类 字号: 大大 中中 小小 用户宏功能是提高数控机床性能的一种特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一样存入存储器,然后用一个总指令代表它们,使用时只需给出这个总指令就能执行其功能。' C- w4 g* l6 }) ` k
用户宏功能主体是一系列指令,相当于子程序体。既可以由机床生产厂提供,也可以由机床用户自己编制。( C: X1 H2 R8 G5 V3 z+ `
宏指令是代表一系列指令的总指令,相当于子程序调用指令。 D# E5 o) e$ _. G1 r9 @
用户宏功能的最大特点是,可以对变量进行运算,使程序应用更加灵活、方便。
8 S3 R7 e& \8 P4 u+ |4 u D( f 用户宏功能有A、B两类。这里主要介绍A类宏功能,B类宏功能请参见本课程的B类宏程序介绍。
5 w9 ]1 n0 n- ^8 e8 P) B" U( f1、变量) A0 g4 u! z' s Y1 J9 A
在常规的主程序和子程序内,总是将一个具体的数值赋给一个地址。为了使程序更具通用性、更加灵活,在宏程序中设置了变量,即将变量赋给一个地址。* H; U+ J) ^. ~) j
(1)变量的表示
m9 F8 d5 M2 g5 r% E( a6 N0 H3 Z变量可以用“#”号和跟随其后的变量序号来表示:#i(i=1,2,3......)
# v7 ]) N1 d5 p* c$ ~. k+ @1 {. |例:#5, #109, #501。) P' I2 }3 Z# }/ ^
(2)变量的引用
/ J$ c0 n4 f$ h" h T, s 将跟随在一个地址后的数值用一个变量来代替,即引入了变量。
( ^+ M7 ], ~8 V例:对于F#103,若#103=50时,则为F50;
$ i. b3 I4 l1 |# g对于Z-#110,若#110=100时,则Z为-100;9 s8 j3 p. P' r# v+ b/ d4 ]& F
对于G#130,若#130=3时,则为G03。, T0 }" k9 O: `) e7 Q9 `' k
(3)变量的类型
9 o3 _. D c; ? 0MC系统的变量分为公共变量和系统变量两类。9 D( K- @. `( g: O' N- I# ^
1)公共变量
: q' F6 U% o+ s 公共变量是在主程序和主程序调用的各用户宏程序内公用的变量。也就是说,在一个宏指令中的#i与在另一个宏指令中的#i是相同的。
D s! k3 {* r' j* L" p' [公共变量的序号为:#100~#131;#500~#531。其中#100~#131公共变量在电源断电后即清零,重新开机时被设置为“0”;#500~#531公共变量即使断电后,它们的值也保持不变,因此也称为保持型变量。 0 |5 k- B" x2 }# c" |$ x2 }2 r
. s/ h2 ?% L4 D3 ~) m% v7 L t- i! H+ G6 e5 V9 e3 G
3 r2 n9 h! Y0 k+ O
2)系统变量
) l0 M' i. Q5 ` 系统变量定义为:有固定用途的变量,它的值决定系统的状态。系统变量包括刀具偏置变量,接口的输入/输出信号变量,位置信息变量等。% e/ O* R& T+ `* E
系统变量的序号与系统的某种状态有严格的对应关系。例如,刀具偏置变量序号为#01~#99,这些值可以用变量替换的方法加以改变,在序号1~99中,不用作刀偏量的变量可用作保持型公共变量#500~#531。& {" V& Q4 q; O( w2 P
接口输入信号#1000~#1015,#1032。通过阅读这些系统变量,可以知道各输入口的情况。当变量值为“1”时,说明接点闭合;当变量值为“0”时,表明接点断开。这些变量的数值不能被替换。阅读变量#1032,所有输入信号一次读入。8 G# x' l! l1 o. p5 T4 Y6 N. D
2、宏指令G65* W9 T# n: T6 z1 l$ U
宏指令G65可以实现丰富的宏功能,包括算术运算、逻辑运算等处理功能。
0 X' @# Y* | ^0 f 一般形式: G65 Hm P#i Q#j R#k
, E o0 C) `" G5 Z3 `$ E式中:--宏程序功能,数值范围01~99;4 x4 O! d! m( n
#i--运算结果存放处的变量名;
W2 q6 e+ t& D1 ?% g#j--被操作的第一个变量,也可以是一个常数;0 D$ t% p6 C/ w
#k--被操作的第二个变量,也可以是一个常数。
3 |, M! Z6 B6 I( K例如,当程序功能为加法运算时:; f7 g# T+ N" s2 H# t3 S$ ^( ]# _
程序 P#100 Q#101 R#102...... 含义为#100=#101+#102
) \$ Y u+ ~4 G1 ]' j% O3 G程序 P#100 Q-#101 R#102...... 含义为#100=-#101+#102
" [7 ^" D' c5 W. @$ x/ G* @程序 P#100 Q#101 R15...... 含义为#100=#101+15
. n6 x# r+ M8 o) d' I1 ]. W- ]0 O+ _
3、宏功能指令 $ ~. W1 g# v' O
: T; v9 O8 u: l# \9 I3 ~, b" m(1)算术运算指令 - K" N- A6 Y1 U9 ~4 m) X X
; @; ^/ `7 [1 ~+ w( \+ z: d J: g1)变量的定义和替换 #i=#j - F9 |- f/ \" _/ a( @6 {
. x* q R/ D% W编程格式 G65 H01 P#i Q#j
9 ~4 y# C, h8 t; ]$ q例 G65 H01 P#101 Q1005; (#101=1005) ; a$ k2 E0 o3 ~9 o- f
G65 H01 P#101 Q-#112;(#101=-#112) 9 E- j) e1 x- q; I) J" ?
2)加法 #i=#j+#k$ g8 s0 e8 v! {. B I' N1 v
编程格式 G65 H02 P#i Q#j R#k
: ]; h. g2 A9 x; o0 {# a3 n9 Z8 s3 |例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103)
2 F1 y" W0 Q- R: G8 T2 l& i4 \( w3)减法 #i=#j-#k
+ Q$ v& \: i& K( M! U' U+ G! d编程格式 G65 H03 P#i Q#j R#k
! r, }. p1 @9 y! G例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103)
& g2 n0 ~; r. K# h3 H$ v/ l4)乘法 #i=#j×#k4 q, b, w* |3 g8 V$ h
编程格式 G65 H04 P#i Q#j R#k- w9 S+ u, {/ c
例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103)- E* p6 M: p5 V O- z
5)除法 #i=#j / #k. ~' D- F7 U8 v0 ^. x4 J
编程格式 G65 H05 P#i Q#j R#k" C D: B6 m( D4 _) u
例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103)
, X: |* X4 }8 n( q9 e7 a6)平方根 #i=
/ d* h5 |1 ~1 s& \1 u编程格式 G65 H21 P#i Q#j- t. A. b2 u, {
例 G65 H21 P#101 Q#102;(#101= )
; n9 y% k* x' N5 ]' |% o1 M5 O0 m7)绝对值 #i=│#j│
0 f) B( |) D: A( N4 L' N$ c编程格式 G65 H22 P#i Q#j. c% F: i% k3 L( K. ]: a2 \* n
例 G65 H22 P#101 Q#102;(#101=│#102│) 7 f9 N( h8 {+ K
8)复合平方根1 #i=
2 [) P( P4 T9 P- j$ |+ b编程格式 G65 H27 P#i Q#j R#k
e, m; L n F; @" W9 A例 G65 H27 P#101 Q#102 R#103;( #101= 4 _& k- M7 G( B! Z: h
9)复合平方根2 #i= 5 @2 K9 e' }. G: f9 M
编程格式 G65 H28 P#i Q#j R#k$ g/ A5 }. ]# }9 C
例 G65 H28 P#101 Q#102 R#103
% D1 l# @4 {" Z1 ]! U, b# g
) J- P6 |# J+ ?8 m4 s5 L; g1)逻辑或 #i=#j OR #k
! a- w2 k. U) r. J编程格式 G65 H11 P#i Q#j R#k. a% ]/ R5 p6 p
例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103)
4 r1 h" ]" l1 J* g
6 y# f5 s; C( H8 u# A7 f: W' h2)逻辑与 #i=#j AND #k. _+ ^6 a$ G0 j7 U0 M2 H
编程格式 G65 H12 P#i Q#j R#k* E1 @4 Z; x; p1 D7 L
例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103
! g$ b' H. ]8 t, \# P) Z
s& d# Q1 ]4 d
5 l+ h1 X5 ]# l, ^2 x; ~
; K+ N) {0 c" C2 P* w$ ^" e
& Z$ T. r% c" b(3)三角函数指令
: q6 D" Y9 o* E9 d2 G2 A9 ? u" b& X6 `1 e1 P
; B3 |/ J+ q0 j7 \: O1 o4 H9 P, g9 Q
1)正弦函数 #i=#j×SIN(#k)
1 P! L" c7 _6 y' S1 A2 }. U5 z5 m/ o* l9 R3 O
编程格式 G65 H31 P#i Q#j R#k (单位:度) .
, I m' o( P; L( ~3 l# u2 i. r$ ~" l# b4 Z S* [5 N! G
例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103))
0 O+ N( h" C2 X. }6 l5 U2)余弦函数 #i=#j×COS(#k)9 y. N4 @( y0 C5 n/ u) |) N1 W
编程格式 G65 H32 P#i Q#j R#k (单位:度)
" H8 h" I* r6 f9 N. }0 J例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103))
G3 e& K! J& R1 e! D$ S3)正切函数 #i=#j×TAN#k- n5 C' e% a9 B( V1 b* N! R
编程格式 G65 H33 P#i Q#j R#k (单位:度)
8 t# |; e, L6 i) _例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103))
* k! W: a4 U. h5 l) o7 m' Y4)反正切 #i=ATAN(#j/#k)
! s v* O6 h- Q! |' M3 J编程格式 G65 H34 P#i Q#j R#k (单位:度,0o≤ #j ≤360o)
7 C( T4 m0 \+ W例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103)
: W" u7 A" ^5 r$ {
- O& _. n. L! @; v
& B4 L) C' q" ]" _2 d1 q! b# H y9 f+ L# O) [* d
(4)控制类指令
`' y. e3 y* W0 ]; R# s, C
3 t( k7 S8 `# X: G+ i( E
$ S* |" S D; t: g
3 [" W5 Q% U& N3 E编程格式 G65 H80 Pn (n为程序段号)( A& b0 ] k2 ]9 a2 Z
例 G65 H80 P120;(转移到N120)2 q( N: W- u, [8 G) k- K% t
2)条件转移1 #j EQ #k(=)
- B( `. N! X. P8 L编程格式 G65 H81 Pn Q#j R#k (n为程序段号)7 H4 p% k$ K' ~& D
例 G65 H81 P1000 Q#101 R#102, T, O" G7 J4 v. x9 u
当#101=#102,转移到N1000程序段;若#101≠ #102,执行下一程序段。
8 x5 V5 ^5 F: J& {3)条件转移2 #j NE #k(≠); t$ l. h% d- H' x9 a2 x
编程格式 G65 H82 Pn Q#j R#k (n为程序段号)
' |5 A' l, K2 I例 G65 H82 P1000 Q#101 R#102
7 j6 B3 p) y" d$ d当#101≠ #102,转移到N1000程序段;若#101=#102,执行下一程序段。
) X: R/ e* S: d9 C4)条件转移3 #j GT #k (> )
5 }- p" N; D- r5 G( ?编程格式 G65 H83 Pn Q#j R#k (n为程序段号)
d( ]* m6 y8 \例 G65 H83 P1000 Q#101 R#102; m" b. \1 o3 l7 }! C' @ b3 |( S
当#101 > #102,转移到N1000程序段;若#101 ≤#102,执行下一程序段。& D3 Q5 R0 D4 @* B! p& J
5)条件转移4 #j LT #k(<)' J( G1 D& m1 r. ~- v1 E. {0 V' @/ r* ~$ h
编程格式 G65 H84 Pn Q#j R#k (n为程序段号). I% a6 C+ m. x% V
例 G65 H84 P1000 Q#101 R#102
0 O7 L& W; C) F/ ]当#101 < #102,转移到N1000;若#101 ≥ #102,执行下一程序段。7 `2 W! u( g/ b- x2 v
6)条件转移5 #j GE #k(≥)
K( q6 a1 l. @: H7 j. w6 A4 _编程格式 G65 H85 Pn Q#j R#k (n为程序段号)
6 V2 F2 J. } f. F例 G65 H85 P1000 Q#101 R#102" A% b( V+ B1 U" \! y' r: p/ Q
当#101≥ #102,转移到N1000;若#101<#102,执行下一程序段。
0 X b) t5 Z4 M& O, f0 Y2 V7)条件转移6 #j LE #k(≤)
. X1 {0 g, J4 g3 G编程格式 G65 H86 Pn Q#j Q#k (n为程序段号)
6 x2 i( y/ T& k例 G65 H86 P1000 Q#101 R#102
3 |3 {+ e9 B# o4 c- b4 y当#101≤#102,转移到N1000;若#101>#102,执行下一程序段。
" G' w# ]; R5 z# W& J& o% x# i9 @
' U1 O7 c9 T# M* M4、使用注意) g" ?4 i. d7 C+ S2 A5 S0 ~0 q
为保证宏程序的正常运行,在使用用户宏程序的过程中,应注意以下几点;2 Q' |; N8 O# n
(1)由G65规定的H码不影响偏移量的任何选择;
: j- I0 `/ ~ w(2)如果用于各算术运算的Q或R未被指定,则作为0处理;
L9 w" M6 q, `6 o0 { J* v(3)在分支转移目标地址中,如果序号为正值,则检索过程是先向大程序号查找,如果序号为负值,则检索过程是先向小程序号查找。, S( s- f& h7 L4 J: J' o# [& @
(4)转移目标序号可以是变量。 : A2 i2 W8 ~+ u
) z o9 g. h+ E0 t" \5、用户宏程序应用举例 : + e& ` t9 R' m: w- H' s
1 J2 l4 M& U) r' P" E
用宏程序和子程序功能顺序加工圆周等分孔。设圆心在O点,它在机床坐标系中的坐标为(X0,Y0),在半径为r的圆周上均匀地钻几个等分孔,起始角度为α,孔数为n。以零件上表面为Z向零点。
) A0 \4 [7 u& `4 I( G: O4 X% L' S b, ~' x
使用以下保持型变量:/ o- |7 P& G; l
#502:半径r;
) }2 N" S5 A! e# ^: Q6 e#503:起始角度α;
W3 u& ?2 a; _& }+ c/ G% u! T. ~#504:孔数n,当n>0时,按逆时针方向加工,当n<0时,按顺时针方向加工;
7 ]4 ?: i* e6 `; I5 ~#505:孔底Z坐标值;
4 W/ W8 k9 @+ u) [#506:R平面Z坐标值;
* v) P; h/ x+ ~. I0 ^! r1 R#507:F进给量。
* P9 |, [0 O; Q+ e V使用以下变量进行操作运算:0 M% o5 N* b* h
#100:表示第i步钻第i孔的记数器;4 G& N( q( i+ Y+ U
#101:记数器的最终值(为n 的绝对值);% J8 ~. q! t7 N
#102:第i个孔的角度位置θi的值;
/ [( c6 K- `2 q! p#103:第i个孔的X坐标值;
5 \- y' W# G8 t+ h4 X#104:第i个孔的Y坐标值;
; j; ]' u8 [9 Y8 C用用户宏程序编制的钻孔子程序如下:
( G% t$ [7 }. X( r& R F( q& KO9010
6 D: d4 j6 @8 s; CN110 G65 H01 P#100 Q0 //#100 = 03 `0 @; K5 o2 Y8 _
N120 G65 H22 P#101 Q#504 //#101 = │#504│
7 }- ^7 d" I. }2 a! eN130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o! |2 x3 t& _1 J( g
N140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #504
n' C& i% J* jN150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102当前孔角度位置θi =α+ (360o×i) / n
4 {- s: R, z" |0 v) ?N160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)当前孔的 X坐标
/ {2 K5 U7 Z" t# qN170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 当前孔的Y坐标* x- a' z$ S$ c
N180 G90 G00 X#103 Y#104 //定位到当前孔(返回开始平面)) ~! K$ Y9 F( p8 z; \0 b" ^7 h4 y
N190 G00 Z#506 //快速进到R平面
# D& ]4 G4 }( ` A# }, `N200 G01 Z#505 F#507 //加工当前孔8 a, T( S6 ?+ }+ W- N0 T0 ?
N210 G00 Z#506 //快速退到R平面& B L( f; P; p0 u# H
N220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔计数
8 C+ b( q F7 ^# \ QN230 G65 H84 P-130 Q#100 R#101 //当#100 < #101时,向上返回到130程序段8 d/ s5 T' u$ V
N240 M99 //子程序结束
/ R, l. U% E) M: K' w5 C8 o, A/ k# F" {* o! y2 d5 k
# c! {" O1 x5 A8 @! I
+ w% U/ A6 e S+ B调用上述子程序的主程序如下: : X0 K* K4 Z( E) F" |. J
O0010
d1 p' i% M2 JN10 G54 G90 G00 X0 Y0 Z20 //进入加工坐标系, l( q7 ~! N. y# M6 E9 H0 a" N' X( k
N20 M98 P9010 //调用钻孔子程序,加工圆周等分孔
z" x; a x5 N/ B& \$ z# j+ yN30 Z20 //抬刀. Z% r: E1 x0 \1 r2 k) c
N40 G00 G90 X0 Y0 //返回加工坐标系零点
8 o) Z- Y7 b$ w6 k8 ]1 P) i0 ]N50 M30 程序结束6 i- Z8 H5 x {3 \- v+ u
设置G54:X=-400,Y=-100,Z=-50。$ l; X0 {( y8 \* [7 l, D
变量#500~#507可在程序中赋值,也可由MDI方式设定。 - x6 ?8 n4 o; {; B
: y0 C4 z; S& I+ h) [
B类宏G65- a s. E& Z& L) h) d5 Y. I% S
( Z6 m6 `, ~5 ]/ J8 M7 ~" Q
简单调用(G65)
3 g- E& V) A1 `! r' F3 v 功能 G65被指定时,地址P所指定的程式被调用,自变量能传递到用户宏程序中。
! m T8 {" N8 X! @ 格式 G65 Pp Ll <自变量表>; z! n3 d& {/ C5 ]
其中: p 要调用的程序号9 f8 V a, d5 K4 [
l 重复的次数(缺省值为1,取值范围1~9999)& h8 m, k$ _& _+ F4 N
自变量 传递给被调用程式的数。通过使用自变量表,值被分配给相应
# M' m$ `! e2 s- n i& }2 c3 T- J 的局部变量。* x B3 f+ ^7 j1 F/ B3 K
. U+ r+ O) F+ v
自变量分为两类。第一类可以使用的字母只能使用一次,各自变量与局部变量的对用关系如下:) y9 ~7 v; ]$ X! `+ a$ c$ `4 V# H
# j2 R: `/ c& Q% u3 K/ `) ~. H
地址 变量号 地址 变量号 地址 变量号( ]0 x6 p0 A+ W. m: ^$ H
A #1 E #8 T #20
1 U8 `1 |9 I3 E$ gB #2 F #9 U #215 S7 V1 k! g, l9 H
C #3 H #11 V #229 c( w" Q Z" w p3 h
I #4 M #13 W #23
" c# i L$ q, bJ #5 Q #17 X #24
7 v" A5 D, U+ D( f$ UK #6 R #18 Y #252 L& J6 ]. ^# c: V( z
D #7 S #19 Z #26
$ L; p2 }4 R0 s9 C/ j☆ 地址G、L、N、O、P不能当作自变量使用。
8 t0 Q; M" U8 N& n☆ 不需要的地址可以省略,与省略的地址相应的局部变量被置成空。" Z" S5 ~+ m. f+ W( f( T" h
4 A& u* r) C. k$ ]
第二类可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自变量使用的类别根据使, r9 S4 a% {5 c/ }9 M8 y
用的字母自动确定:+ |" @. R3 @, }+ ]
地址 变量号 地址 变量号 地址 变量号( S- D! g( C: x$ j8 z
A #1 K3 #12 J7 #23
8 r7 P# N: R, \" z* o5 P+ aB #2 I4 #13 K7 #24" Z0 G; p- c( X+ [/ h
C #3 J4 #14 I8 #25
6 A7 h7 W8 E, ]! e: j% lI1 #4 K4 #15 J8 #26* P5 d- i: v8 w( ?
J1 #5 I5 #16 K8 #27
: d' i2 y% N0 o k4 LK1 #6 J5 #17 I9 #28 p$ `2 W" [& D) I4 ^% v
I2 #7 K5 #18 J9 #293 ^& F0 c1 l( h( e8 \8 W
J2 #8 I6 #19 K9 #30
! ~$ n) T9 l b5 V% FK2 #9 J6 #20 I10 #310 A8 }( L' G. i
I3 #10 K6 #21 J10 #32" E) S, Y2 t$ t6 I
J3 #11 I7 #22 K10 #33
1 p9 c3 \' w: r/ h/ C% R7 E☆ 在实际的程序中,I、J、K的下标不用写出来。+ T5 B5 _3 J$ ?( V3 _& R: t
注意:( B( k$ L4 n9 r- r
☆ 在自变量之前一定要指定G65。1 E Y- H W5 a, @1 J
☆ 如果将两类自变量混合使用,系统自己会辨别属于哪类,最后指定的那一类优先。" K+ p9 z+ a v) A' ^
☆ 传递的不带小数点的自变量的单位与每个地址的最小输入增量一致,其值与机床的系统结构非常一致。为了程序的兼容性,建议使用带小数点的自变量。, F/ n* |3 I. T' [6 _4 v
☆ 最多可以嵌套含有简单调用(G65)和模态调用(G66)的程序4级。不包括子程序调用(M98)。局部变量可以嵌套0~4级。主程序的级数是0。用G65和G66每调用一次宏,局部变量的级数增加一次。上一级局部变量的值保存在NC 中。宏程序执行到M99时,控制返回到调用的程序。这时局部变量的级数减1,恢复宏调用时存储的局部变量值。
- ]. A g4 r* Z4 O: i9 K G65简单宏调用可方便地向被调用的副程式传递数据,但是用它制作诸如固定循环- t* C" M7 k0 X, I/ G0 n0 P
之类的移动到坐标后才加工的程式就无能为力了。 |
评分
-
查看全部评分
|