|
发表于 2011-7-12 08:32:36
|
显示全部楼层
回复 1# 钟云驹
4 w" B H5 `; h( D详解A类宏
8 I l0 e0 _" |分类:默认分类 字号: 大大 中中 小小 用户宏功能是提高数控机床性能的一种特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一样存入存储器,然后用一个总指令代表它们,使用时只需给出这个总指令就能执行其功能。
" A. z4 \4 ? ?% M8 h- K' J# v 用户宏功能主体是一系列指令,相当于子程序体。既可以由机床生产厂提供,也可以由机床用户自己编制。
5 Y8 {# u! Y1 ~! t m 宏指令是代表一系列指令的总指令,相当于子程序调用指令。
, Z2 p; S1 G4 J. e, |2 h5 p5 d 用户宏功能的最大特点是,可以对变量进行运算,使程序应用更加灵活、方便。
5 H! g$ p4 q% Z 用户宏功能有A、B两类。这里主要介绍A类宏功能,B类宏功能请参见本课程的B类宏程序介绍。
* F6 E' a# S6 P3 D+ b1、变量/ j: y Y2 Q0 l7 q8 `' j
在常规的主程序和子程序内,总是将一个具体的数值赋给一个地址。为了使程序更具通用性、更加灵活,在宏程序中设置了变量,即将变量赋给一个地址。
8 O; L- S0 l0 K1 |. [(1)变量的表示
& P3 B {; p7 x" k2 J变量可以用“#”号和跟随其后的变量序号来表示:#i(i=1,2,3......)* l: V& C" ?3 F, g
例:#5, #109, #501。4 a: m' q+ K9 [$ q( i* j0 ^! A- M
(2)变量的引用
8 C6 L- C2 c* N1 m, ~3 h 将跟随在一个地址后的数值用一个变量来代替,即引入了变量。7 k9 U3 z: N9 c. g: S& j
例:对于F#103,若#103=50时,则为F50;* m8 H& X5 h7 l( S
对于Z-#110,若#110=100时,则Z为-100;, T$ W5 L* O& Y
对于G#130,若#130=3时,则为G03。5 B C; @2 O- H6 j
(3)变量的类型
) @- E& @" ]" f& i 0MC系统的变量分为公共变量和系统变量两类。* H% F' ]& ^1 B* w
1)公共变量
. p4 h% T3 Z# m; E u& Q" O+ R* D 公共变量是在主程序和主程序调用的各用户宏程序内公用的变量。也就是说,在一个宏指令中的#i与在另一个宏指令中的#i是相同的。
6 m) J, \8 Y9 w公共变量的序号为:#100~#131;#500~#531。其中#100~#131公共变量在电源断电后即清零,重新开机时被设置为“0”;#500~#531公共变量即使断电后,它们的值也保持不变,因此也称为保持型变量。 6 Z4 @7 o8 G C+ D" v+ {7 D
5 K( ^ j: j, C* q' Z S! S e
" X( x0 p0 u7 b* h9 F4 y4 }6 t( n4 A4 a W' x4 n
2)系统变量
) C0 H- v! B# t @, V# Q 系统变量定义为:有固定用途的变量,它的值决定系统的状态。系统变量包括刀具偏置变量,接口的输入/输出信号变量,位置信息变量等。
; w( y" O5 p$ n/ }7 o7 u0 I, { 系统变量的序号与系统的某种状态有严格的对应关系。例如,刀具偏置变量序号为#01~#99,这些值可以用变量替换的方法加以改变,在序号1~99中,不用作刀偏量的变量可用作保持型公共变量#500~#531。; S" g0 N, V/ o
接口输入信号#1000~#1015,#1032。通过阅读这些系统变量,可以知道各输入口的情况。当变量值为“1”时,说明接点闭合;当变量值为“0”时,表明接点断开。这些变量的数值不能被替换。阅读变量#1032,所有输入信号一次读入。, W! p% }+ x* M2 R% G' E9 R
2、宏指令G65
% X; b. x( o& T: o* ^; U7 o% } 宏指令G65可以实现丰富的宏功能,包括算术运算、逻辑运算等处理功能。$ t: n: d+ C. y: y8 j% a2 K% K
一般形式: G65 Hm P#i Q#j R#k; b3 n' D8 T2 T; E1 l
式中:--宏程序功能,数值范围01~99;( C- z" v, @( k9 H- ~, M" m' }
#i--运算结果存放处的变量名;
! k! `4 X5 @3 ?' A# g#j--被操作的第一个变量,也可以是一个常数;$ G! l: w# K+ U) U/ x
#k--被操作的第二个变量,也可以是一个常数。
% p6 }( A( |9 w4 i$ \例如,当程序功能为加法运算时:
5 z+ }: Z8 H- [. M* c! S1 t$ R% C程序 P#100 Q#101 R#102...... 含义为#100=#101+#102
- h; @# S& O# y8 R4 i6 g程序 P#100 Q-#101 R#102...... 含义为#100=-#101+#102
6 z4 k, y' ^7 a& s程序 P#100 Q#101 R15...... 含义为#100=#101+15 o r r4 U7 ^2 y) b% \
" a* [2 D& O _# K ]9 q5 p3、宏功能指令
& E% y$ y# y9 f' L% g6 r; Q( I- x8 o* x& _3 L- d! F
(1)算术运算指令
" ?+ W- g6 M9 [* [# D4 f6 y, H& n& q4 m3 {, F+ p- _
1)变量的定义和替换 #i=#j
1 h! ]/ p0 J1 e9 V
2 j! }9 [: ^/ T9 |* M0 i/ _编程格式 G65 H01 P#i Q#j
# n" h l' g; k1 Y w. _1 P2 I5 T例 G65 H01 P#101 Q1005; (#101=1005)
/ G% j$ v, U) I" N# ~0 pG65 H01 P#101 Q-#112;(#101=-#112)
4 k2 Z. c( w; j( H3 b! @2)加法 #i=#j+#k
7 q" ?! c6 s) a" o) J7 k: ]9 v# i编程格式 G65 H02 P#i Q#j R#k 9 W5 W: K. I4 K* T- C* C
例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103)$ D* I/ M C9 I' I) D0 r- ~
3)减法 #i=#j-#k( @0 ?: w, g% a( A+ X
编程格式 G65 H03 P#i Q#j R#k
8 e% b7 S3 {7 B例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103)2 V9 Z7 \: k5 t' H2 ^9 r
4)乘法 #i=#j×#k- f5 W; ]5 d- ]7 \6 T; ?* J
编程格式 G65 H04 P#i Q#j R#k
% N, |+ i4 [# F例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103)
& ]( }2 o5 H) k* K5)除法 #i=#j / #k
* I4 l j, D8 P" j/ ~* J编程格式 G65 H05 P#i Q#j R#k
. |( v' E; l3 a4 i例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103)
5 [+ R* q% Q5 W" k1 V& G$ t6)平方根 #i=
" d3 i p4 ?- a; P" E编程格式 G65 H21 P#i Q#j
% p" O7 N/ h6 p例 G65 H21 P#101 Q#102;(#101= )0 Q: L; c- ~+ v7 c2 Y1 g9 g
7)绝对值 #i=│#j│
( T0 {8 N. H. ]) D. Y( l N/ }! {编程格式 G65 H22 P#i Q#j
7 g5 K# K. i& [+ y1 O( T例 G65 H22 P#101 Q#102;(#101=│#102│)
, ]5 f5 r+ Q+ A' s" u8)复合平方根1 #i= ! ^( s3 _5 \5 e/ D' V
编程格式 G65 H27 P#i Q#j R#k
l( d3 M! d- U1 V, N$ v例 G65 H27 P#101 Q#102 R#103;( #101=
$ f- h0 I0 z+ {; H0 E% C9)复合平方根2 #i= 0 e6 g1 {! v/ s0 [
编程格式 G65 H28 P#i Q#j R#k
6 Q9 s9 _# C3 @" {5 J/ M' W; \例 G65 H28 P#101 Q#102 R#103
1 @) o9 G1 X& `' X& [4 A \2 o4 E( R1 `2 G( b% P4 ]
1)逻辑或 #i=#j OR #k
5 @& H& Z% o, Q6 B; C& j+ w编程格式 G65 H11 P#i Q#j R#k
' ]$ H L+ l+ u- Z例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103); {2 c! f! D1 H+ ~8 J5 h& {. N0 K
/ k, A' `1 e7 C8 G. b+ Q
2)逻辑与 #i=#j AND #k+ g9 h( l6 H' r; ]6 Q3 O3 E
编程格式 G65 H12 P#i Q#j R#k0 e [% y; H( U9 }8 o3 I% ^
例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103
& B0 @0 l' U) W8 A. A7 E. B9 H* H& V. D% M
Z; B7 q& V' ]/ B+ d * j# V" |4 v7 I% n+ i5 R. N
4 o4 } L3 B6 w1 z: H" X
(3)三角函数指令 , ]3 |5 c. a n- v4 @
+ E4 z) L0 T u: L8 [
) p: s" f% w+ [ ?* `& w+ m$ |4 Z% t+ s
1)正弦函数 #i=#j×SIN(#k)
" E8 P8 m( r8 t$ d/ u
. [5 L/ N/ Z! U+ y- _编程格式 G65 H31 P#i Q#j R#k (单位:度) .
9 E" y" F& l- Z! m( v! i7 Q/ N7 y6 a" o( c) D0 C2 Y" B
例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103))
* }: S$ K# o( l, } q0 v: p+ I5 x K2)余弦函数 #i=#j×COS(#k)
# A \* ?& N7 A5 o2 P( l2 L! X编程格式 G65 H32 P#i Q#j R#k (单位:度)7 T+ r8 J- l D# E
例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103)); ?( u, u8 j; c h
3)正切函数 #i=#j×TAN#k
) A: ?1 q0 B7 n8 K+ F5 O# k编程格式 G65 H33 P#i Q#j R#k (单位:度)) U2 }( E& _- `+ b5 K4 D4 Q: C
例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103)): q6 h& b0 _/ V, r, W
4)反正切 #i=ATAN(#j/#k)0 Z+ {. |( N5 r
编程格式 G65 H34 P#i Q#j R#k (单位:度,0o≤ #j ≤360o)
& b' E! Y5 n1 M例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103)) d) v& B& L& Q; {1 z
, h% X/ W! D. C! d* `
- ? ~; y% H/ x: |4 w1 e" ^' d; x) l, l" I7 L
(4)控制类指令" Y( l& w1 i6 k# ^( K
, `9 T4 W# F2 Q8 I
3 O4 R7 ]9 `* @, n! p1 a# S( v; F/ f
编程格式 G65 H80 Pn (n为程序段号)" p- z# k$ w: Y; K+ c+ j+ ^, O8 V
例 G65 H80 P120;(转移到N120)4 ^& L( o& u+ ~: o
2)条件转移1 #j EQ #k(=)8 R) L8 o5 s! Z
编程格式 G65 H81 Pn Q#j R#k (n为程序段号)# V# ?% e# d# \
例 G65 H81 P1000 Q#101 R#102
- A0 U6 V L8 ~( W m当#101=#102,转移到N1000程序段;若#101≠ #102,执行下一程序段。/ j# ]* t2 v0 Z6 n
3)条件转移2 #j NE #k(≠)
5 w8 Z8 a* l; ~2 `8 N/ ?编程格式 G65 H82 Pn Q#j R#k (n为程序段号)7 p* F* j/ @3 s
例 G65 H82 P1000 Q#101 R#102
, D; [" ?5 _; H" C& |1 e* [& c当#101≠ #102,转移到N1000程序段;若#101=#102,执行下一程序段。
+ V: n$ I/ }# r* L! d7 S Y; c4)条件转移3 #j GT #k (> )
7 Z) g0 t; d& S8 v: c* c5 L+ H# ?编程格式 G65 H83 Pn Q#j R#k (n为程序段号)
- |* x& F9 `" n8 C$ _& \0 i; n例 G65 H83 P1000 Q#101 R#102; V* J {- X1 J; q
当#101 > #102,转移到N1000程序段;若#101 ≤#102,执行下一程序段。
) K+ B" _/ w* A, g5)条件转移4 #j LT #k(<)* u0 b' h5 P E
编程格式 G65 H84 Pn Q#j R#k (n为程序段号)
, n( D! A+ O% t' n. f3 H- G3 v例 G65 H84 P1000 Q#101 R#102 2 }' m- N3 I: W! d$ r8 k: m
当#101 < #102,转移到N1000;若#101 ≥ #102,执行下一程序段。9 d1 q7 w9 o2 E: ]. c
6)条件转移5 #j GE #k(≥)( O7 L7 A3 E& |! |- F
编程格式 G65 H85 Pn Q#j R#k (n为程序段号)
2 ?' Y$ C4 u$ Q; y; r例 G65 H85 P1000 Q#101 R#1020 |* [2 Q6 {/ |# ^* X8 L
当#101≥ #102,转移到N1000;若#101<#102,执行下一程序段。
" c# B' O1 x, N) r$ U" Q; s& f* w: ?7)条件转移6 #j LE #k(≤)
% g J* }* L* D2 ^$ N# N% X6 w& s编程格式 G65 H86 Pn Q#j Q#k (n为程序段号)6 O/ q; I* W9 `4 T9 R
例 G65 H86 P1000 Q#101 R#102; u$ D. ? k5 \
当#101≤#102,转移到N1000;若#101>#102,执行下一程序段。6 w, M) q# c4 a
& Q$ O$ T( g9 f/ y2 t' P$ \: U" N; G' h* G4、使用注意
! [( u. l0 b' l 为保证宏程序的正常运行,在使用用户宏程序的过程中,应注意以下几点;
/ c5 m$ r3 l5 z4 z(1)由G65规定的H码不影响偏移量的任何选择;: E* D5 P: t( o a2 l
(2)如果用于各算术运算的Q或R未被指定,则作为0处理;
' V" j" ~# i5 d0 [0 j) A(3)在分支转移目标地址中,如果序号为正值,则检索过程是先向大程序号查找,如果序号为负值,则检索过程是先向小程序号查找。# c5 v% j8 y4 B" v5 m" b( p7 L9 g
(4)转移目标序号可以是变量。 4 R; N) x, \0 r# r% j* r$ x
* x/ J6 j/ @# v! f5、用户宏程序应用举例 : 1 u. {- K. C. B6 F3 h- Q$ ?
* i# W8 {, ]& @/ p6 f
用宏程序和子程序功能顺序加工圆周等分孔。设圆心在O点,它在机床坐标系中的坐标为(X0,Y0),在半径为r的圆周上均匀地钻几个等分孔,起始角度为α,孔数为n。以零件上表面为Z向零点。 # T- x" F8 ]' {! v9 @4 O* j
4 Z4 z, l* H2 n- U1 z2 A) K7 u; g
使用以下保持型变量:) R# V. Q7 G! B* q/ _
#502:半径r;5 Q6 |5 e* }) h
#503:起始角度α;6 p& V# @: _ d o( I* i
#504:孔数n,当n>0时,按逆时针方向加工,当n<0时,按顺时针方向加工;
# V0 {! q, V+ z S0 ^#505:孔底Z坐标值;
* L: S/ e" u: ]% {1 n! h' N: w#506:R平面Z坐标值;' H; }: K+ O* P0 z1 @1 h2 B+ K
#507:F进给量。 & q! ? A- f/ y& x+ ~; E5 [4 v6 f9 }
使用以下变量进行操作运算:% p& p! W! d1 T- a
#100:表示第i步钻第i孔的记数器;6 F+ v7 K4 ~0 A
#101:记数器的最终值(为n 的绝对值);% q1 Q: {* ^' z2 \0 n
#102:第i个孔的角度位置θi的值;
0 U5 B& @, [6 G' R#103:第i个孔的X坐标值;
2 w, _7 B) Y5 i8 n& ]/ {#104:第i个孔的Y坐标值;* ^$ p' {# ^% b$ e
用用户宏程序编制的钻孔子程序如下: : B1 E$ \; T- g$ G. H$ h1 [
O90101 O: f8 @( F8 v5 {8 M) l0 `
N110 G65 H01 P#100 Q0 //#100 = 0- M) a9 T2 m% v, w7 n4 k% K# S) v
N120 G65 H22 P#101 Q#504 //#101 = │#504│. c" f: u6 Y& |/ f5 w( \0 p
N130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o) Q" B. o2 |, G+ s- t
N140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #504
" U8 p' M6 L; |/ pN150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102当前孔角度位置θi =α+ (360o×i) / n
S: n4 O( f0 I- SN160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)当前孔的 X坐标
: Q! Y$ ?2 I: H$ i$ [1 GN170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 当前孔的Y坐标& w& u) J; F& X9 C% Q3 r6 h4 D K
N180 G90 G00 X#103 Y#104 //定位到当前孔(返回开始平面)6 |1 b+ ~) x5 v7 r t+ q
N190 G00 Z#506 //快速进到R平面8 O- o& a% K% M% g2 l0 M
N200 G01 Z#505 F#507 //加工当前孔
/ v; b- P, c8 d$ j# dN210 G00 Z#506 //快速退到R平面
9 F) |- \ L8 F) P; v) e2 l- LN220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔计数
$ y/ E' V2 F, ^6 ]! P! j3 b; jN230 G65 H84 P-130 Q#100 R#101 //当#100 < #101时,向上返回到130程序段$ y! U J2 G3 E0 X- v& `. l, i1 B( t
N240 M99 //子程序结束 3 f @ X) C1 t5 q# F# C f+ Q) F
2 T: N+ N& J' c+ V, y- n
7 e3 L9 E9 Q q" w/ R; R: _; u
- T( `' @/ R1 E; w7 Z& [
调用上述子程序的主程序如下:
% x! |, c F3 P6 ]1 z/ kO0010
" k0 z$ ~9 F, h' g. R5 p4 Z$ qN10 G54 G90 G00 X0 Y0 Z20 //进入加工坐标系* `) Q& o1 F; D% L8 B3 `
N20 M98 P9010 //调用钻孔子程序,加工圆周等分孔
6 E5 V# O) q$ @) ]N30 Z20 //抬刀% m( I4 {/ ^- p. D4 o; y! D
N40 G00 G90 X0 Y0 //返回加工坐标系零点
! ]' d+ A+ F. {& {" pN50 M30 程序结束
. D% I3 }8 {$ L0 H3 v设置G54:X=-400,Y=-100,Z=-50。- Z8 J5 c% p& b1 o" J1 `
变量#500~#507可在程序中赋值,也可由MDI方式设定。
% u) k' O+ K7 \
. @) d1 P( T( s8 ~1 S! P; UB类宏G65
6 h' w! U% l& E& c
/ t* c" c# r/ `3 @简单调用(G65)0 s( f1 {/ X5 x5 j/ q, q% T
功能 G65被指定时,地址P所指定的程式被调用,自变量能传递到用户宏程序中。
8 y* ?4 E! K }; N! z& ? 格式 G65 Pp Ll <自变量表>;
$ o& m) E- J, r/ L4 u 其中: p 要调用的程序号# y& r; ^* c# ^
l 重复的次数(缺省值为1,取值范围1~9999); H. E( s2 c. V- K5 v" q
自变量 传递给被调用程式的数。通过使用自变量表,值被分配给相应 $ x! Z9 t7 U/ P( w; v2 T
的局部变量。
& e% _+ z- \$ o9 }
& ~# H6 O; R$ ` W- t 自变量分为两类。第一类可以使用的字母只能使用一次,各自变量与局部变量的对用关系如下:0 D% c0 s1 d: r2 |
3 C/ W& m% `6 u& r( K地址 变量号 地址 变量号 地址 变量号
% {: d5 y( f6 r& |A #1 E #8 T #20
- C* {$ x; |7 O. VB #2 F #9 U #214 P0 d6 K6 a3 ]3 w
C #3 H #11 V #22
/ P. _" I$ r, nI #4 M #13 W #23
1 i: }2 m7 ^; c! l9 i7 f4 ?J #5 Q #17 X #24
! T, \% {; |+ M* JK #6 R #18 Y #25' q+ ^0 n( Y( x& l0 \ O& y
D #7 S #19 Z #26
! g, H4 Z) H& W5 c! a0 o/ ~# `☆ 地址G、L、N、O、P不能当作自变量使用。7 j; ~; ^! a, {1 d$ l {
☆ 不需要的地址可以省略,与省略的地址相应的局部变量被置成空。
; r O" ~, ~, e5 R
7 P- ?0 G: N0 j3 G 第二类可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自变量使用的类别根据使
, I z4 ^3 R& A a# f7 t用的字母自动确定:
( Q6 E1 D+ Z* e% y- ~, h' L地址 变量号 地址 变量号 地址 变量号
, m; B: z. e) G" Q0 [A #1 K3 #12 J7 #233 S9 {6 ?2 F d6 B& m# L, N" k
B #2 I4 #13 K7 #24
5 D b) b" P& kC #3 J4 #14 I8 #25
( l; _0 v" m( n6 G6 B0 V' MI1 #4 K4 #15 J8 #26
! z/ s$ ^ v* g3 D7 kJ1 #5 I5 #16 K8 #27
4 j. x I9 m- u! |3 hK1 #6 J5 #17 I9 #28
2 W: n+ x0 M$ U6 JI2 #7 K5 #18 J9 #291 W# \6 l: C) r4 C# n$ j
J2 #8 I6 #19 K9 #30, T6 e' g& Y9 o, g
K2 #9 J6 #20 I10 #318 Y: p6 b' @: Q2 ^, U0 R) [" T
I3 #10 K6 #21 J10 #32
/ \, ?: b' P Y, ]4 d9 `# qJ3 #11 I7 #22 K10 #33
9 Z# r5 ^" H7 g m3 k0 h1 ^☆ 在实际的程序中,I、J、K的下标不用写出来。
6 Z- z. j u3 S% H* a) y注意:. w0 j" X$ I# A4 u; L$ f9 b, a
☆ 在自变量之前一定要指定G65。
4 a5 a8 \! o6 ~2 {☆ 如果将两类自变量混合使用,系统自己会辨别属于哪类,最后指定的那一类优先。$ }$ F& g1 ]& o' d
☆ 传递的不带小数点的自变量的单位与每个地址的最小输入增量一致,其值与机床的系统结构非常一致。为了程序的兼容性,建议使用带小数点的自变量。
. {; U5 t& C; P- y4 M( b☆ 最多可以嵌套含有简单调用(G65)和模态调用(G66)的程序4级。不包括子程序调用(M98)。局部变量可以嵌套0~4级。主程序的级数是0。用G65和G66每调用一次宏,局部变量的级数增加一次。上一级局部变量的值保存在NC 中。宏程序执行到M99时,控制返回到调用的程序。这时局部变量的级数减1,恢复宏调用时存储的局部变量值。
( c. z% y- l$ c: m8 F0 f8 [3 X) X G65简单宏调用可方便地向被调用的副程式传递数据,但是用它制作诸如固定循环. F5 ^0 }4 ]7 s* Z+ x' i
之类的移动到坐标后才加工的程式就无能为力了。 |
评分
-
查看全部评分
|