|
发表于 2011-7-12 08:32:36
|
显示全部楼层
回复 1# 钟云驹
1 E/ s4 ]" N3 A, X# P: F$ f5 Z详解A类宏. S8 s9 k5 l' }: M5 W
分类:默认分类 字号: 大大 中中 小小 用户宏功能是提高数控机床性能的一种特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一样存入存储器,然后用一个总指令代表它们,使用时只需给出这个总指令就能执行其功能。; o0 C! w4 |: J1 G$ B" d
用户宏功能主体是一系列指令,相当于子程序体。既可以由机床生产厂提供,也可以由机床用户自己编制。5 @: i# i: }; |# S6 u+ D
宏指令是代表一系列指令的总指令,相当于子程序调用指令。
7 X6 V! T( k* h( _7 [ 用户宏功能的最大特点是,可以对变量进行运算,使程序应用更加灵活、方便。0 a* J- ?1 j Y( W: @5 | k/ ~
用户宏功能有A、B两类。这里主要介绍A类宏功能,B类宏功能请参见本课程的B类宏程序介绍。9 T3 [7 z2 ]' H* M) Q. x
1、变量
- s, Y, o5 U" ]# q) K/ u6 y. @; O 在常规的主程序和子程序内,总是将一个具体的数值赋给一个地址。为了使程序更具通用性、更加灵活,在宏程序中设置了变量,即将变量赋给一个地址。9 l( H, N- D8 J& y& e0 Y' B: b8 c3 S
(1)变量的表示
8 H$ |& ?" C4 L! Q, e& W变量可以用“#”号和跟随其后的变量序号来表示:#i(i=1,2,3......)/ v# R. c1 U# D+ F5 }0 D u1 z
例:#5, #109, #501。8 r1 a! `! j2 Y9 e; N
(2)变量的引用* R& F5 D- _4 [* a0 P9 e
将跟随在一个地址后的数值用一个变量来代替,即引入了变量。
% \ X; ~; P8 v' o5 b例:对于F#103,若#103=50时,则为F50;
! e# ]. `9 S1 W" K对于Z-#110,若#110=100时,则Z为-100;
* T- M) P p" N1 | g$ T) o1 X对于G#130,若#130=3时,则为G03。
/ B3 e: |. D7 ?(3)变量的类型 4 E" i; ^0 |# {, ]/ n3 u0 x+ |0 j
0MC系统的变量分为公共变量和系统变量两类。6 [) X0 ]5 _+ {) ]
1)公共变量
F' }+ M. P& N! [6 u 公共变量是在主程序和主程序调用的各用户宏程序内公用的变量。也就是说,在一个宏指令中的#i与在另一个宏指令中的#i是相同的。
+ p( r( Y" y6 F$ Q公共变量的序号为:#100~#131;#500~#531。其中#100~#131公共变量在电源断电后即清零,重新开机时被设置为“0”;#500~#531公共变量即使断电后,它们的值也保持不变,因此也称为保持型变量。
$ }# l6 ^$ B8 d5 v! G- a: z5 g4 M* B$ K9 @' N- S
! A: n. S- k+ O( d3 G3 R' t* F w1 i f* t) d7 R5 D
2)系统变量 % O/ S9 g& g. j4 Y& w
系统变量定义为:有固定用途的变量,它的值决定系统的状态。系统变量包括刀具偏置变量,接口的输入/输出信号变量,位置信息变量等。: ?+ [: J' P h
系统变量的序号与系统的某种状态有严格的对应关系。例如,刀具偏置变量序号为#01~#99,这些值可以用变量替换的方法加以改变,在序号1~99中,不用作刀偏量的变量可用作保持型公共变量#500~#531。; C. S7 R6 R/ S1 C! h6 u7 t, }
接口输入信号#1000~#1015,#1032。通过阅读这些系统变量,可以知道各输入口的情况。当变量值为“1”时,说明接点闭合;当变量值为“0”时,表明接点断开。这些变量的数值不能被替换。阅读变量#1032,所有输入信号一次读入。
( q/ H0 m3 o: K8 ]8 p2、宏指令G65
' P4 f) o w1 a! T 宏指令G65可以实现丰富的宏功能,包括算术运算、逻辑运算等处理功能。
; k$ C1 g1 H" U0 f2 V 一般形式: G65 Hm P#i Q#j R#k
3 E5 K& }. f% M: D式中:--宏程序功能,数值范围01~99;
# ~& Z' |* u K9 E0 ]4 N" J9 m2 N3 V s#i--运算结果存放处的变量名;
' V5 t7 C- C# u5 d/ x#j--被操作的第一个变量,也可以是一个常数;
2 Y: q2 q' |, }2 L8 u5 f#k--被操作的第二个变量,也可以是一个常数。. `/ V- }$ w5 o7 q: E2 |
例如,当程序功能为加法运算时:& ?5 L9 {$ D/ ]0 C. h
程序 P#100 Q#101 R#102...... 含义为#100=#101+#102) L; Z" A$ g5 T4 G* P
程序 P#100 Q-#101 R#102...... 含义为#100=-#101+#102
3 y# N0 }+ n0 I1 Q: R0 e5 V! W+ v程序 P#100 Q#101 R15...... 含义为#100=#101+15 ! Y6 ~4 i3 }8 z+ I1 Z
" L4 z. o3 _2 b- Q( K# o' e0 m
3、宏功能指令
% ?" \! ?: g2 V4 ]3 |" M: r1 ` l0 {2 U$ `0 \. P
(1)算术运算指令 3 {5 {+ F _. I* v: K
+ Y, n$ o+ k% ]& G) X* M! _# r! X1)变量的定义和替换 #i=#j , R3 x$ V, i$ ~8 ?& a
4 K. C7 U# l$ \8 b; |( o* J- g p编程格式 G65 H01 P#i Q#j: @ }9 e# o$ ^" w" q& b( T: `$ s
例 G65 H01 P#101 Q1005; (#101=1005) / [. v$ u7 T2 D( Y. f- I4 m
G65 H01 P#101 Q-#112;(#101=-#112)
, ?0 c0 Z0 c2 C2)加法 #i=#j+#k2 S; S6 x6 |0 `4 v; C$ N' `5 }
编程格式 G65 H02 P#i Q#j R#k
D8 M* l: O" ~# P5 g$ ~/ o例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103)
1 ?( h$ f$ L! J! s3)减法 #i=#j-#k% Z5 B2 _9 b1 ^
编程格式 G65 H03 P#i Q#j R#k
o, q! Z2 \( y2 g% F) |! g例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103)
~0 P0 D; S" B, i2 w+ z# G: r# @* D4)乘法 #i=#j×#k+ F& K0 N$ W9 ~$ t- e. K
编程格式 G65 H04 P#i Q#j R#k. d6 p: @/ \# w4 l( I' W3 l: f, X
例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103)
9 j, V- A8 j ~( }5)除法 #i=#j / #k/ s/ X2 t' a8 l' ^" P1 I
编程格式 G65 H05 P#i Q#j R#k8 t# z" J, E: h0 m
例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103), q, e1 A! i: w8 f( I9 D$ A6 P# R
6)平方根 #i=
: W8 s z8 q4 N4 A; @+ d8 R编程格式 G65 H21 P#i Q#j
. E5 q4 A0 m9 F7 T$ Q/ i例 G65 H21 P#101 Q#102;(#101= )
. A" \1 O* [3 u) S# P2 j( |4 m, \7)绝对值 #i=│#j│: M/ J- L. r `
编程格式 G65 H22 P#i Q#j7 Y! e* `5 ]1 m( c: t9 U6 V
例 G65 H22 P#101 Q#102;(#101=│#102│)
$ h% _- g; L, u% S; j# L3 m8)复合平方根1 #i=
! r, e9 |1 `6 F3 O. Q( t4 A编程格式 G65 H27 P#i Q#j R#k
4 i; w3 `" X. z- ^例 G65 H27 P#101 Q#102 R#103;( #101= 8 f1 o6 q3 Z" H* v" t
9)复合平方根2 #i= 7 R, Q, z2 m$ B7 V
编程格式 G65 H28 P#i Q#j R#k
/ b0 N4 @' J; |7 B2 i例 G65 H28 P#101 Q#102 R#103
/ k2 Y3 j; w9 j) \2 j% l% [5 K" W( y4 R, u) q
1)逻辑或 #i=#j OR #k
7 h3 l) P3 S7 z6 ~* Z编程格式 G65 H11 P#i Q#j R#k6 y! `* h" v3 p: \" R+ h
例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103)1 Z0 q0 I2 L! s) t; b+ T8 B
* W! [0 ~ e2 {/ J/ ~; D2)逻辑与 #i=#j AND #k
+ F) c. s3 I. ^) @* e编程格式 G65 H12 P#i Q#j R#k( j) ]$ B( N' b' y( L
例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103
' ]0 j2 G- i6 Y5 R. A. e) ^( X8 a' }8 D+ I& P
4 y4 B1 ^5 ]* t6 {
. |4 ]0 @2 t$ |8 G" ~) ?9 F+ X$ ?3 M5 r' k s
(3)三角函数指令
+ H1 x- @+ k7 i5 \, e5 J0 e; ^: t, W+ ]
* z% w+ G7 v9 y/ T; E
, v7 S. w& Q. V. f5 V+ c. M( S5 i1)正弦函数 #i=#j×SIN(#k)
- F; n7 r( ~. d
; o! T$ J( o/ \& ~3 r编程格式 G65 H31 P#i Q#j R#k (单位:度) .
5 B3 Z/ p0 ]4 D4 b( [
+ ~+ L; F0 c* s. f2 d- Q) w1 J例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103))
! ]2 M! r( [8 h2 G4 a2)余弦函数 #i=#j×COS(#k)- _ h- U9 s8 C/ u
编程格式 G65 H32 P#i Q#j R#k (单位:度)7 b3 |- q# g' O/ W. J+ _- x1 `3 M
例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103))
$ t1 S- E- i- Y: S! b7 s3)正切函数 #i=#j×TAN#k
: Y' S: e1 f) t1 m% d编程格式 G65 H33 P#i Q#j R#k (单位:度)* v5 T5 H- S# M& T8 a' C
例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103))
/ g( `% V. w c- m5 v. ~0 p4)反正切 #i=ATAN(#j/#k)
, |0 }1 ^# I- n0 G2 S! }编程格式 G65 H34 P#i Q#j R#k (单位:度,0o≤ #j ≤360o): b4 B! Z# P; S2 z- X1 Y
例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103)
& `9 [% L3 ^$ c7 P) D/ r6 ~
9 ?* M; R( u. b" v, ]+ x. P % F, `; i8 \ p* a
1 R$ g; Q q+ a/ Y3 }5 ^1 g
(4)控制类指令- W4 w$ b/ T! B% T* q0 d) H# u
( v" ]- U2 q( j
`7 ?) D( Z3 X7 k9 J
7 N. z' H" K" E- X" V编程格式 G65 H80 Pn (n为程序段号)1 C+ c$ y( k; v3 w* Q& _- H# a4 }
例 G65 H80 P120;(转移到N120)
/ o4 C& v5 G3 U" B( r1 ?2)条件转移1 #j EQ #k(=)7 L- x/ j& k! Q1 s7 A
编程格式 G65 H81 Pn Q#j R#k (n为程序段号)/ n9 ~0 E( O/ j' ^& J" h" t
例 G65 H81 P1000 Q#101 R#102- W" D7 i* S9 {. g, q4 z1 ]
当#101=#102,转移到N1000程序段;若#101≠ #102,执行下一程序段。4 v& a. z* C6 X- ?+ t# W1 @
3)条件转移2 #j NE #k(≠)
3 P5 f% h9 k' N$ Z ?3 W2 @/ T/ b编程格式 G65 H82 Pn Q#j R#k (n为程序段号); w8 o1 r# d( J. z' [9 I( c% w
例 G65 H82 P1000 Q#101 R#1024 k, t2 T/ E1 J# n2 l
当#101≠ #102,转移到N1000程序段;若#101=#102,执行下一程序段。
9 I, |. f H6 X6 X3 `( x4)条件转移3 #j GT #k (> )
) ~8 o/ w/ ~8 Z! D编程格式 G65 H83 Pn Q#j R#k (n为程序段号)
* R" Y, n: ]( _8 B; p& P9 S例 G65 H83 P1000 Q#101 R#102: |! n k$ H' y* T2 I
当#101 > #102,转移到N1000程序段;若#101 ≤#102,执行下一程序段。
3 {4 b8 w1 z$ J5)条件转移4 #j LT #k(<)
0 [) Q, p0 R4 c o, m编程格式 G65 H84 Pn Q#j R#k (n为程序段号)
5 s0 b. V6 C/ l7 T& C" ]例 G65 H84 P1000 Q#101 R#102 " A4 U7 `" t9 Z4 |+ g& P1 g9 O
当#101 < #102,转移到N1000;若#101 ≥ #102,执行下一程序段。+ |! [1 T) y, c; ~. O- t
6)条件转移5 #j GE #k(≥); q' H, U3 N7 K; F% ?- g) C
编程格式 G65 H85 Pn Q#j R#k (n为程序段号)) i% L' Z* B* t0 i3 }
例 G65 H85 P1000 Q#101 R#102
7 `$ k5 w+ u$ A) g; _2 n, d7 J当#101≥ #102,转移到N1000;若#101<#102,执行下一程序段。
! R, o7 O- M1 v6 r* s4 P8 Z& E! |7)条件转移6 #j LE #k(≤)$ P8 g% Y% ^; L) `( S5 U
编程格式 G65 H86 Pn Q#j Q#k (n为程序段号)
- ?4 y: v) Q8 M g/ c7 d; u8 j5 k例 G65 H86 P1000 Q#101 R#102/ n: @7 d8 t, \) @
当#101≤#102,转移到N1000;若#101>#102,执行下一程序段。
) b" ~' X* x; y$ W: h2 x% v
. K, Z( q2 g/ a* L4、使用注意
2 H, n0 Y! a5 i8 L 为保证宏程序的正常运行,在使用用户宏程序的过程中,应注意以下几点;
* U( N* |' s& S( @# v' C(1)由G65规定的H码不影响偏移量的任何选择;0 v" l, t7 X- ?7 k$ L9 K
(2)如果用于各算术运算的Q或R未被指定,则作为0处理;. E' M$ P, s) C1 h! Y
(3)在分支转移目标地址中,如果序号为正值,则检索过程是先向大程序号查找,如果序号为负值,则检索过程是先向小程序号查找。
/ D3 A$ `! M8 x. ]9 ?(4)转移目标序号可以是变量。
; {9 I+ W" S$ @" \
[" O' j( {% R9 |6 L& X5、用户宏程序应用举例 : 7 J4 f. r6 |/ _
( k0 ]3 p+ M: g: _& \ w: Z* W用宏程序和子程序功能顺序加工圆周等分孔。设圆心在O点,它在机床坐标系中的坐标为(X0,Y0),在半径为r的圆周上均匀地钻几个等分孔,起始角度为α,孔数为n。以零件上表面为Z向零点。 ' h6 @1 `* o; i
. i* A8 I V5 {! @. u$ |
使用以下保持型变量:
* E) A/ n1 C' Y3 i0 a9 L% `5 M#502:半径r;, \' o) A9 [; h8 g$ K! j: J
#503:起始角度α;6 L; S& h! p5 w' [4 N+ R- P
#504:孔数n,当n>0时,按逆时针方向加工,当n<0时,按顺时针方向加工;- u. C0 p4 I% f' j* B
#505:孔底Z坐标值;* a6 X5 [" R$ A+ F. d- T
#506:R平面Z坐标值;: t1 n" L% i/ p3 t V5 F+ r
#507:F进给量。
7 V% b3 y- f7 Z) {9 V" j# z5 |使用以下变量进行操作运算:; w/ n, m9 a3 z5 ~: n
#100:表示第i步钻第i孔的记数器;
' J: b' K6 Z5 D, i0 v/ E#101:记数器的最终值(为n 的绝对值);
+ N1 ?; V b3 t& @#102:第i个孔的角度位置θi的值;
; T& S1 C3 Z' e#103:第i个孔的X坐标值;
5 U( e1 y4 y* h* Z1 ?/ S#104:第i个孔的Y坐标值;
, S; J5 b. L* K5 m) O3 c用用户宏程序编制的钻孔子程序如下: 1 m/ i9 s0 W4 X
O9010
7 @' Q9 d5 R* W* rN110 G65 H01 P#100 Q0 //#100 = 0
/ l, F* k4 U* _+ U& ^N120 G65 H22 P#101 Q#504 //#101 = │#504│
1 A, r+ B. {1 AN130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o
. T; A2 m X1 S3 |N140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #504
- f9 [, W; r' V8 u/ U2 e: XN150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102当前孔角度位置θi =α+ (360o×i) / n
2 G3 w/ V7 I8 }N160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)当前孔的 X坐标4 P! d' ^" W+ V' u
N170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 当前孔的Y坐标
?) R X; ]7 O: u3 Z6 d: R% tN180 G90 G00 X#103 Y#104 //定位到当前孔(返回开始平面)
9 e, W! z4 I5 K4 NN190 G00 Z#506 //快速进到R平面" j+ K2 \- p6 w% r4 H# C2 J
N200 G01 Z#505 F#507 //加工当前孔3 j7 r, K0 f1 V8 \
N210 G00 Z#506 //快速退到R平面
1 @% Y$ A, G2 d, D! bN220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔计数
5 `: ^" ^2 w: TN230 G65 H84 P-130 Q#100 R#101 //当#100 < #101时,向上返回到130程序段
3 Z$ P( M2 L" y+ m7 NN240 M99 //子程序结束 U+ Q: o8 B! d G! h) {; v
" e7 A* B8 s2 m3 k
4 A5 y2 h# ?* t3 v# `0 ?
0 s) p$ @* f- b调用上述子程序的主程序如下:
7 z8 ^3 o4 k- J3 e( U* @; tO0010
- K, k3 J" `7 d4 g+ m! ]N10 G54 G90 G00 X0 Y0 Z20 //进入加工坐标系
8 X$ n6 h5 w' X: _/ B& v% CN20 M98 P9010 //调用钻孔子程序,加工圆周等分孔
1 g7 ]* x5 v8 D4 I6 TN30 Z20 //抬刀1 i- P- o6 z* A: _
N40 G00 G90 X0 Y0 //返回加工坐标系零点
/ x! z! s- I Y J/ B" MN50 M30 程序结束
7 U, Z' f# c8 D0 k" H设置G54:X=-400,Y=-100,Z=-50。* I; J9 B* ~; v; R; [
变量#500~#507可在程序中赋值,也可由MDI方式设定。
" i: Y9 o7 B" V3 {
# W" u( h( L5 d5 T6 K% ?. ~B类宏G65
- m4 ?9 I1 a! j, R( g: {& H4 g2 Y- w$ Y
7 C m( @2 \- n; m7 |2 ^2 O3 ~简单调用(G65)
# {3 g7 O, {( @' M 功能 G65被指定时,地址P所指定的程式被调用,自变量能传递到用户宏程序中。
, q% V/ l$ V6 O6 L% p* c4 u 格式 G65 Pp Ll <自变量表>;1 h& l; M6 j5 E# _! P$ \
其中: p 要调用的程序号
& y0 S' l5 H# B. h2 ~( B* h l 重复的次数(缺省值为1,取值范围1~9999)7 H1 R/ x1 q% d |) _) h* }
自变量 传递给被调用程式的数。通过使用自变量表,值被分配给相应
0 L, E2 j$ g0 g 的局部变量。/ Q- D) |" q* B( Z; ?/ Q, D
9 p W6 Y& J4 i9 a3 @" B6 r3 B 自变量分为两类。第一类可以使用的字母只能使用一次,各自变量与局部变量的对用关系如下:
! S5 K3 ]. @" u+ A2 K
; H+ ^+ o' N. q地址 变量号 地址 变量号 地址 变量号5 i1 b/ G. e7 w; G: \* ~
A #1 E #8 T #200 J9 w% B2 ^! ^
B #2 F #9 U #21: q" I' V) w2 t1 y7 j( j
C #3 H #11 V #22
, m' f/ ^& D7 GI #4 M #13 W #23
- l1 O2 ^! Q6 G* X; E. O! k% X2 k6 hJ #5 Q #17 X #242 d0 [) w D# Q, C: p
K #6 R #18 Y #25' B1 x( {4 L" c$ H" o; m
D #7 S #19 Z #26 Z4 W1 ^8 E; A l l7 Z
☆ 地址G、L、N、O、P不能当作自变量使用。
: }0 K7 P r# x2 _☆ 不需要的地址可以省略,与省略的地址相应的局部变量被置成空。& x5 q9 b D% X/ d
0 c2 J9 Q* q2 j$ W& L
第二类可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自变量使用的类别根据使8 V. {* Z8 D' ?
用的字母自动确定:$ V, \/ C, ^9 h; W9 F3 v, L0 u2 q
地址 变量号 地址 变量号 地址 变量号
. F6 }( q/ S. O2 G8 G$ g, QA #1 K3 #12 J7 #23
" n/ p7 ~+ y7 i. b7 GB #2 I4 #13 K7 #241 o6 L: J* W5 b/ l/ c( b$ e
C #3 J4 #14 I8 #25/ a: S {2 }2 S" j S5 r; J
I1 #4 K4 #15 J8 #26/ m0 M+ B H, L6 ~
J1 #5 I5 #16 K8 #27
3 p! z$ |9 w( ~8 X" C9 w; XK1 #6 J5 #17 I9 #282 Z) u7 T8 a5 d" t& g
I2 #7 K5 #18 J9 #29
2 [/ I7 }5 A+ {0 X( ^: ^3 hJ2 #8 I6 #19 K9 #30, e; z w' c8 N) J! O
K2 #9 J6 #20 I10 #31
* E; K: R% C; A/ W! C# U: lI3 #10 K6 #21 J10 #32' k; w: K7 S9 w6 _
J3 #11 I7 #22 K10 #336 ^# N; ~% H8 l* ?/ K
☆ 在实际的程序中,I、J、K的下标不用写出来。: Y9 J! w/ L4 j+ x F7 T. L
注意:5 j) E8 a7 a5 g/ U9 R! `5 P H
☆ 在自变量之前一定要指定G65。
7 g: O) J+ T$ g3 i☆ 如果将两类自变量混合使用,系统自己会辨别属于哪类,最后指定的那一类优先。
1 |) U% T7 j7 g# }# ]☆ 传递的不带小数点的自变量的单位与每个地址的最小输入增量一致,其值与机床的系统结构非常一致。为了程序的兼容性,建议使用带小数点的自变量。
% C; E9 ]1 `6 [% B9 D: M☆ 最多可以嵌套含有简单调用(G65)和模态调用(G66)的程序4级。不包括子程序调用(M98)。局部变量可以嵌套0~4级。主程序的级数是0。用G65和G66每调用一次宏,局部变量的级数增加一次。上一级局部变量的值保存在NC 中。宏程序执行到M99时,控制返回到调用的程序。这时局部变量的级数减1,恢复宏调用时存储的局部变量值。
( |& ]) {4 G* N; [! [1 b9 R G65简单宏调用可方便地向被调用的副程式传递数据,但是用它制作诸如固定循环
^; V3 I0 m/ m, ~之类的移动到坐标后才加工的程式就无能为力了。 |
评分
-
查看全部评分
|