|
|
发表于 2011-7-12 08:32:36
|
显示全部楼层
回复 1# 钟云驹
# K6 _5 [, i( `( B+ S1 t2 K% f详解A类宏1 ~8 j+ Q0 B# a) @
分类:默认分类 字号: 大大 中中 小小 用户宏功能是提高数控机床性能的一种特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一样存入存储器,然后用一个总指令代表它们,使用时只需给出这个总指令就能执行其功能。
% B! S/ m4 @0 v1 [1 K 用户宏功能主体是一系列指令,相当于子程序体。既可以由机床生产厂提供,也可以由机床用户自己编制。
& Z5 g& m4 ~- [4 } 宏指令是代表一系列指令的总指令,相当于子程序调用指令。
2 n9 r: {9 y: [" { |+ u 用户宏功能的最大特点是,可以对变量进行运算,使程序应用更加灵活、方便。* \6 C: ]( O- ?
用户宏功能有A、B两类。这里主要介绍A类宏功能,B类宏功能请参见本课程的B类宏程序介绍。
; M# n, ^7 R: K! d1、变量
; m+ s" H9 u' v 在常规的主程序和子程序内,总是将一个具体的数值赋给一个地址。为了使程序更具通用性、更加灵活,在宏程序中设置了变量,即将变量赋给一个地址。
5 e' Z! i6 F! H7 X(1)变量的表示
7 A0 h; B- ]8 O8 e5 l; y变量可以用“#”号和跟随其后的变量序号来表示:#i(i=1,2,3......)' t6 c+ I; ^5 E, u# x- d
例:#5, #109, #501。
' @" G; l4 g: c7 }2 D% X(2)变量的引用* W, f( ~9 p; | l4 Q
将跟随在一个地址后的数值用一个变量来代替,即引入了变量。
7 S! w5 Q& X; U8 f. F _* Z例:对于F#103,若#103=50时,则为F50;2 o2 A6 G# {0 ~. j
对于Z-#110,若#110=100时,则Z为-100;; T$ e' w S W/ X q& `
对于G#130,若#130=3时,则为G03。
6 J) a1 Q( e, v(3)变量的类型 " s2 }% q9 p i2 h- U/ p
0MC系统的变量分为公共变量和系统变量两类。" O3 n" {4 W$ c+ u1 t4 t3 B# y
1)公共变量 1 ?& M2 `) T1 v% b+ L# g
公共变量是在主程序和主程序调用的各用户宏程序内公用的变量。也就是说,在一个宏指令中的#i与在另一个宏指令中的#i是相同的。9 y$ u1 f/ I. t j
公共变量的序号为:#100~#131;#500~#531。其中#100~#131公共变量在电源断电后即清零,重新开机时被设置为“0”;#500~#531公共变量即使断电后,它们的值也保持不变,因此也称为保持型变量。
! S9 Q i4 R+ d0 l$ H' w! e
- L9 x$ w& P* B5 W& z7 ?! ?1 C% ]" X' `
) ~. Y; n' P0 W3 _2)系统变量
6 k' K: u8 `# h9 }, W' q4 _! [ 系统变量定义为:有固定用途的变量,它的值决定系统的状态。系统变量包括刀具偏置变量,接口的输入/输出信号变量,位置信息变量等。
8 L0 @0 E" a& O1 U6 O5 W L 系统变量的序号与系统的某种状态有严格的对应关系。例如,刀具偏置变量序号为#01~#99,这些值可以用变量替换的方法加以改变,在序号1~99中,不用作刀偏量的变量可用作保持型公共变量#500~#531。: Y) ^' K- ?/ \: m
接口输入信号#1000~#1015,#1032。通过阅读这些系统变量,可以知道各输入口的情况。当变量值为“1”时,说明接点闭合;当变量值为“0”时,表明接点断开。这些变量的数值不能被替换。阅读变量#1032,所有输入信号一次读入。- H$ ^: M, L0 I& Q
2、宏指令G65
% F4 v$ C0 x4 O 宏指令G65可以实现丰富的宏功能,包括算术运算、逻辑运算等处理功能。/ V7 X8 T! E* Y) W' V2 u
一般形式: G65 Hm P#i Q#j R#k
$ l& _* j4 B# L: w2 I6 q$ F" C式中:--宏程序功能,数值范围01~99;. e' ~0 v8 k/ h( i3 w
#i--运算结果存放处的变量名;7 e$ B7 `, R) Z% `) ~
#j--被操作的第一个变量,也可以是一个常数;5 y( d; r1 K+ a ^( v: K
#k--被操作的第二个变量,也可以是一个常数。
I o g7 [% x! D6 d: i例如,当程序功能为加法运算时:8 A4 f5 R" q- s) n0 a/ q/ n9 ~, l
程序 P#100 Q#101 R#102...... 含义为#100=#101+#102
" Y% Y) N' o7 |程序 P#100 Q-#101 R#102...... 含义为#100=-#101+#102
% c3 ?+ W5 M$ I0 c+ l程序 P#100 Q#101 R15...... 含义为#100=#101+15 % v1 X# ^' P/ R/ k' ~
3 Q! X4 @( N! @$ |" H, F
3、宏功能指令
+ X: W4 _* G; R. [7 ^
5 f4 D' y& x4 d: b(1)算术运算指令
/ ~, U7 S/ \- N# |7 D: A. ^7 E; S/ p- b- Q n
1)变量的定义和替换 #i=#j 5 G. _, E1 d' ?' M* D8 {3 p
6 l2 s0 g$ G( {, K. G编程格式 G65 H01 P#i Q#j
7 a3 A5 p, b. S7 `* M/ h- g; o例 G65 H01 P#101 Q1005; (#101=1005) 0 m! ~2 O$ ~- K3 x. y- ^! d E2 H
G65 H01 P#101 Q-#112;(#101=-#112) & L& Q" Z. a" ^! ]: Y5 ^' F J
2)加法 #i=#j+#k' ]2 v) ~- Q/ j/ h4 ^
编程格式 G65 H02 P#i Q#j R#k " N5 u8 @/ D# H* S1 I
例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103)
$ T ^4 V5 m. q. m3)减法 #i=#j-#k3 h5 e+ x- b% y0 w
编程格式 G65 H03 P#i Q#j R#k7 j- j' D& ` c5 ~: L6 g+ F4 h E
例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103)4 E9 P4 D! W) x. [% I
4)乘法 #i=#j×#k
: } E7 m/ {" ?) |3 [8 O! Q编程格式 G65 H04 P#i Q#j R#k8 j) Q) g9 c/ ^4 r$ c2 ?* D
例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103)
5 M4 {- a6 T" C% w5)除法 #i=#j / #k
* m* K( N% c5 E编程格式 G65 H05 P#i Q#j R#k
# G+ D# v6 i& T; J0 i例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103)
8 a0 o) Z, U Z5 p( t! n6)平方根 #i= 2 G1 o y) h+ n% O6 o/ \( D
编程格式 G65 H21 P#i Q#j
( _8 q2 I: |" w. Q例 G65 H21 P#101 Q#102;(#101= )
7 j4 \1 M7 ~% e |) a7 S7)绝对值 #i=│#j│5 N( {7 w; e- }9 l O
编程格式 G65 H22 P#i Q#j
5 A5 P- V% r O例 G65 H22 P#101 Q#102;(#101=│#102│)
4 a) I7 Y8 A5 ?7 |8)复合平方根1 #i=
# w8 q( |: j! f: K- V- i编程格式 G65 H27 P#i Q#j R#k' m+ q7 o' {) y1 Y; E$ [
例 G65 H27 P#101 Q#102 R#103;( #101= + h ^3 T+ {' M- K3 ~
9)复合平方根2 #i= n3 @; m- g0 \. y1 c
编程格式 G65 H28 P#i Q#j R#k
: e9 W) S2 \4 L2 w Q0 U3 f! f例 G65 H28 P#101 Q#102 R#103 / p. ~* L; S2 J5 L( n7 S% {+ x/ \
4 E* l; j' S3 l% k0 p/ F1)逻辑或 #i=#j OR #k8 y0 g7 V6 G) {3 p) U4 l2 e8 D5 n" B
编程格式 G65 H11 P#i Q#j R#k
: @+ N7 C& t; `( K- W" `8 T# t例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103)
+ x) @9 L! J+ z) [
/ N3 O/ G4 P2 N! T; \2)逻辑与 #i=#j AND #k7 {! F$ S- r, B3 ~
编程格式 G65 H12 P#i Q#j R#k+ u2 \( Q6 C7 N& m( y
例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103
8 r& h; T% \* F9 O: _/ `$ L9 Z! T) b* d; p# u4 `' z. |
$ _, m+ Z8 ^$ t3 h9 _0 ]7 i
% p0 W1 p. C4 N9 I; \7 l3 |5 O- j& }1 R( Y3 G* \1 Q
(3)三角函数指令
$ G2 ~) T$ j: y. y# Z
2 g& l) p& [6 w! A! q# s 6 ]( t+ \: u2 v
+ r* v- I( ~- s- G L
1)正弦函数 #i=#j×SIN(#k)
8 d( n' K" M4 |$ S
6 _/ h* A/ q. _4 m! q# S t编程格式 G65 H31 P#i Q#j R#k (单位:度) .
5 C1 J; ^0 X5 A& m; _
5 E- x+ B' i% H' u# G y$ ~例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103))
6 m. f5 }+ c8 ?2)余弦函数 #i=#j×COS(#k)
( Y2 q9 B0 d- S: r/ \. W编程格式 G65 H32 P#i Q#j R#k (单位:度): D( f; H% m. l x4 Q- }
例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103))- s* m; k8 x. B( B/ M$ Y
3)正切函数 #i=#j×TAN#k
L; l& P( N5 C: D) Y7 ]编程格式 G65 H33 P#i Q#j R#k (单位:度)
1 |; F; Z( D% I: l( n7 B例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103))
4 U7 J6 S! S' P) H$ u4)反正切 #i=ATAN(#j/#k)
' V/ @3 V* i8 y; E, t' E编程格式 G65 H34 P#i Q#j R#k (单位:度,0o≤ #j ≤360o)) q& a$ p+ ^& z) e1 a; G. v2 o
例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103)
% j l' `. P: Z% x
! R6 M I$ y# Z5 O! N . u* `" e1 \& J+ i* V
9 h# t) K S: ~+ \' g; D3 b9 i/ a
(4)控制类指令
% X" W0 V9 P: [* [0 `$ A
* V* L- G( k( N9 F) |' H8 u. H 5 O' A$ c& a/ k; d
: ?' a9 L3 [3 L) U" J2 h
编程格式 G65 H80 Pn (n为程序段号)
) {) F, i) W$ y3 L( |0 R+ m例 G65 H80 P120;(转移到N120)
' L+ L* c) W, p4 s& p2)条件转移1 #j EQ #k(=)
5 X9 J# P- h3 v$ L编程格式 G65 H81 Pn Q#j R#k (n为程序段号)4 ^$ I- Q' Q6 a0 v L: `
例 G65 H81 P1000 Q#101 R#102
& y: T$ Z! |0 N6 r当#101=#102,转移到N1000程序段;若#101≠ #102,执行下一程序段。: z! F2 ]5 X3 `+ ?. |. b& {& R
3)条件转移2 #j NE #k(≠)
, r; ^" U. q! l, h, S% T2 c编程格式 G65 H82 Pn Q#j R#k (n为程序段号)
& R7 m( Y: N; y+ E4 E: Y例 G65 H82 P1000 Q#101 R#102- ~4 H9 Z5 {7 y: ^0 ~8 `
当#101≠ #102,转移到N1000程序段;若#101=#102,执行下一程序段。
, @8 G* N t! s3 q4)条件转移3 #j GT #k (> )% H, K8 G% B& v* w
编程格式 G65 H83 Pn Q#j R#k (n为程序段号)
" X; I- y3 w& t例 G65 H83 P1000 Q#101 R#102 `3 ~' I' v5 _3 t
当#101 > #102,转移到N1000程序段;若#101 ≤#102,执行下一程序段。
& X/ `' k1 l0 [8 `5 Z, b o5)条件转移4 #j LT #k(<)0 K& Z8 g4 f( W' J% n, h( e
编程格式 G65 H84 Pn Q#j R#k (n为程序段号)
# g0 ]1 e% `2 {( B0 ]) t) Z, q例 G65 H84 P1000 Q#101 R#102
6 W. c Z# v1 e- R当#101 < #102,转移到N1000;若#101 ≥ #102,执行下一程序段。
! h" \+ g2 s+ h4 a0 I# k1 d6)条件转移5 #j GE #k(≥)
: j5 N0 p A& @/ Y# }6 P编程格式 G65 H85 Pn Q#j R#k (n为程序段号)
7 x! Q( H7 O( s& c1 G, |3 X例 G65 H85 P1000 Q#101 R#102
. Z7 u6 X0 z# r当#101≥ #102,转移到N1000;若#101<#102,执行下一程序段。
3 o" B* q! i8 I) h9 @7)条件转移6 #j LE #k(≤)) I6 G ^& J2 ?3 c5 ^& B) C! h; ]
编程格式 G65 H86 Pn Q#j Q#k (n为程序段号)
8 a- u3 [# ]) t3 m# i例 G65 H86 P1000 Q#101 R#102
1 M% P3 u- n/ u. p) ]2 n当#101≤#102,转移到N1000;若#101>#102,执行下一程序段。& Z' M* h0 L3 C ~
1 q* ]& L: ~. g/ \( h3 s W4、使用注意
. C4 w. {- Q1 E( v 为保证宏程序的正常运行,在使用用户宏程序的过程中,应注意以下几点;
# M2 W7 P$ v* ^* }(1)由G65规定的H码不影响偏移量的任何选择;
- X) ?5 B; W8 n2 C(2)如果用于各算术运算的Q或R未被指定,则作为0处理;
1 T1 m7 q3 J* @3 r/ p! N/ B: i(3)在分支转移目标地址中,如果序号为正值,则检索过程是先向大程序号查找,如果序号为负值,则检索过程是先向小程序号查找。- [- M. q* K- U, }
(4)转移目标序号可以是变量。
2 \, s: F/ q. O l+ }6 I( ~( M. n$ k- E
5、用户宏程序应用举例 :
3 |1 M# V: _1 m2 {" W3 D. V7 E4 W3 Q* V/ Q @! X$ a
用宏程序和子程序功能顺序加工圆周等分孔。设圆心在O点,它在机床坐标系中的坐标为(X0,Y0),在半径为r的圆周上均匀地钻几个等分孔,起始角度为α,孔数为n。以零件上表面为Z向零点。
6 k; W$ Q3 M2 n* ` F i
* ~5 R [9 T; F/ M& f使用以下保持型变量: Y) R% H6 T/ o' e% z0 F: `! `8 A
#502:半径r;+ g2 ]* ?' D$ k. i3 p
#503:起始角度α;
6 i# h/ E2 w4 F& [: g( p#504:孔数n,当n>0时,按逆时针方向加工,当n<0时,按顺时针方向加工;
. m$ f0 q8 I# P5 |3 I- {#505:孔底Z坐标值;
9 b9 f9 |9 H+ _! m5 `' h i$ j#506:R平面Z坐标值;
+ q, C# F# F) |6 M8 @& c( i#507:F进给量。 + D z5 K! M% q7 d3 D( _
使用以下变量进行操作运算:
. Y7 H" u3 ~4 n" H#100:表示第i步钻第i孔的记数器;6 l9 P* O3 r5 w- K
#101:记数器的最终值(为n 的绝对值);( ~2 e' _' c* L8 ~% n$ k
#102:第i个孔的角度位置θi的值;
7 U; B3 }' `, Q) @% G#103:第i个孔的X坐标值;
) L4 z% \/ g& G2 r#104:第i个孔的Y坐标值;
; `9 f$ c6 m% q8 N用用户宏程序编制的钻孔子程序如下: ) U) J9 o+ F; F5 g
O9010& {3 b( R8 V+ x& E+ y- q
N110 G65 H01 P#100 Q0 //#100 = 0
; K/ b, b+ A) l) u) f( ]6 d# lN120 G65 H22 P#101 Q#504 //#101 = │#504│
: z& M S% M7 q- zN130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o. a6 \/ X! t* q* u. N+ H
N140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #504& U2 h6 ~. y; j# r# J
N150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102当前孔角度位置θi =α+ (360o×i) / n' k3 p! P- Z* @/ H
N160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)当前孔的 X坐标
# @6 u* `2 ]$ s- y# V. n0 U5 Y h& YN170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 当前孔的Y坐标/ f4 @& j' ~; S8 M7 @# t. [/ j
N180 G90 G00 X#103 Y#104 //定位到当前孔(返回开始平面)
1 w3 b8 {8 }6 y5 Y" V: Y2 lN190 G00 Z#506 //快速进到R平面, E5 I& u4 }# b3 l, h/ D
N200 G01 Z#505 F#507 //加工当前孔
, J2 ^4 u$ ~# R3 M* t7 P XN210 G00 Z#506 //快速退到R平面$ q1 U$ Z3 Q" t8 a! u
N220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔计数
) q4 H5 S& |( P: X" ^- KN230 G65 H84 P-130 Q#100 R#101 //当#100 < #101时,向上返回到130程序段
2 x2 h x$ k5 O: gN240 M99 //子程序结束
) ?: c7 W6 v% U: Z* @4 h8 Z7 e
0 s9 Z* Q9 S$ t! i0 h: {
% J7 R7 z6 w: j( }' }
H, y+ e$ C/ @: x! @6 r! y5 G调用上述子程序的主程序如下:
& I1 Z- D& @) [9 dO0010
2 L( Y2 S6 M& J6 \# q9 n4 aN10 G54 G90 G00 X0 Y0 Z20 //进入加工坐标系
$ Q+ F: r5 H$ ]! lN20 M98 P9010 //调用钻孔子程序,加工圆周等分孔
5 f) i( j6 d+ f3 I/ B, W! LN30 Z20 //抬刀, k$ B2 k8 r1 X6 n+ d( w
N40 G00 G90 X0 Y0 //返回加工坐标系零点 1 ]6 V2 `8 B9 ^ s( q
N50 M30 程序结束
. C3 Z( G( h. G6 W3 \设置G54:X=-400,Y=-100,Z=-50。% J; M5 P, w G d' p' @ e
变量#500~#507可在程序中赋值,也可由MDI方式设定。
# l3 a" M" c2 F8 P) D5 l- }
7 | ?) }/ x3 F- J% CB类宏G65
7 u9 i! Z4 @8 N; _
+ N8 x$ u8 ]7 W$ H9 q: E简单调用(G65)6 R' |; Z7 l. U( u+ b; Y
功能 G65被指定时,地址P所指定的程式被调用,自变量能传递到用户宏程序中。
7 Y9 w5 t# j5 G6 N 格式 G65 Pp Ll <自变量表>;
- a% v. H, t- N) k 其中: p 要调用的程序号
9 J' S# G6 R) w B$ c l 重复的次数(缺省值为1,取值范围1~9999)7 V5 c* ~. k) h, V
自变量 传递给被调用程式的数。通过使用自变量表,值被分配给相应 & k `! B( w5 j
的局部变量。
8 ? r6 z- }- `, }4 d" h+ o* V" y! z, n
自变量分为两类。第一类可以使用的字母只能使用一次,各自变量与局部变量的对用关系如下:' p8 y" V4 S/ t: i+ p
2 a& l4 u: @# e6 F" X
地址 变量号 地址 变量号 地址 变量号
" F3 L! O, c3 v/ r GA #1 E #8 T #208 o+ l( C3 p) q9 a/ m; [9 {
B #2 F #9 U #21
7 H; W D) T- f9 G. tC #3 H #11 V #22
' p& v# j7 }: s5 t8 t x. NI #4 M #13 W #239 @0 g1 a& Q9 }: }
J #5 Q #17 X #241 D7 {2 A8 Q% e9 O
K #6 R #18 Y #25
' \! y9 t" M. I4 q+ ~+ uD #7 S #19 Z #26
; |' ` k& k7 }5 }☆ 地址G、L、N、O、P不能当作自变量使用。5 D* O8 u$ K+ y$ \0 c `, \1 `
☆ 不需要的地址可以省略,与省略的地址相应的局部变量被置成空。
, }( V0 {1 U, l) a8 ?1 P 0 p u( t, _$ Y4 Q( x
第二类可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自变量使用的类别根据使- k: q/ @ b C7 m! ^1 [) q
用的字母自动确定:; P0 k7 O/ X! i" c
地址 变量号 地址 变量号 地址 变量号. L& p% Z+ ?4 P6 N! _* Z9 D
A #1 K3 #12 J7 #23: ~/ @) t5 F. E$ S7 |
B #2 I4 #13 K7 #24
4 W0 V& T1 Z! JC #3 J4 #14 I8 #25. X# \9 o: n5 v( R1 c
I1 #4 K4 #15 J8 #26, t7 o; ?! a$ r
J1 #5 I5 #16 K8 #273 W# ?4 j% Y! R5 r. p) v R
K1 #6 J5 #17 I9 #285 N$ E, j+ r8 _" e0 Y6 _
I2 #7 K5 #18 J9 #292 D4 l2 c) \) B: B+ A% U/ H
J2 #8 I6 #19 K9 #30+ M0 l% [/ |' T) M) T! @
K2 #9 J6 #20 I10 #31 c0 o; k k2 b- o6 ?3 n, \
I3 #10 K6 #21 J10 #32$ z, W. ^$ _6 A$ z4 z
J3 #11 I7 #22 K10 #33
) x& z' _& I) h; t6 @8 |☆ 在实际的程序中,I、J、K的下标不用写出来。
Q' P4 L% S" x/ P# p注意:
+ W( N5 V1 S2 Q! H2 x1 ]7 Y☆ 在自变量之前一定要指定G65。
" c- d, S' a: j4 Q+ V☆ 如果将两类自变量混合使用,系统自己会辨别属于哪类,最后指定的那一类优先。8 v% r& N; \, u! Z: A7 M5 @
☆ 传递的不带小数点的自变量的单位与每个地址的最小输入增量一致,其值与机床的系统结构非常一致。为了程序的兼容性,建议使用带小数点的自变量。7 F8 w1 s6 c# m5 Q6 e5 l. \
☆ 最多可以嵌套含有简单调用(G65)和模态调用(G66)的程序4级。不包括子程序调用(M98)。局部变量可以嵌套0~4级。主程序的级数是0。用G65和G66每调用一次宏,局部变量的级数增加一次。上一级局部变量的值保存在NC 中。宏程序执行到M99时,控制返回到调用的程序。这时局部变量的级数减1,恢复宏调用时存储的局部变量值。# S4 I/ s/ }" {" q( K' _5 y
G65简单宏调用可方便地向被调用的副程式传递数据,但是用它制作诸如固定循环. B7 p& h0 X9 K0 A6 I& `
之类的移动到坐标后才加工的程式就无能为力了。 |
评分
-
查看全部评分
|