|
发表于 2011-7-12 08:32:36
|
显示全部楼层
回复 1# 钟云驹
1 P# a$ o; {9 w0 S* R" C* U详解A类宏" x0 h' I* T! D" H1 u
分类:默认分类 字号: 大大 中中 小小 用户宏功能是提高数控机床性能的一种特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一样存入存储器,然后用一个总指令代表它们,使用时只需给出这个总指令就能执行其功能。/ ]7 i. U6 r* ~
用户宏功能主体是一系列指令,相当于子程序体。既可以由机床生产厂提供,也可以由机床用户自己编制。5 `! Q) ^) h& g7 n, e: G7 i
宏指令是代表一系列指令的总指令,相当于子程序调用指令。/ O$ A1 m2 Z2 ^' J' B
用户宏功能的最大特点是,可以对变量进行运算,使程序应用更加灵活、方便。
0 [1 {$ j. C- r) ]/ a 用户宏功能有A、B两类。这里主要介绍A类宏功能,B类宏功能请参见本课程的B类宏程序介绍。, _& W/ q: K2 e' e, b9 w
1、变量
# e4 }6 `; `% ?9 a. I 在常规的主程序和子程序内,总是将一个具体的数值赋给一个地址。为了使程序更具通用性、更加灵活,在宏程序中设置了变量,即将变量赋给一个地址。
3 u! j& P* b9 S# C1 f. n D* u& F(1)变量的表示
) k j# P' Y1 B' G! ~) \变量可以用“#”号和跟随其后的变量序号来表示:#i(i=1,2,3......). R% a, x: G$ X- d3 a
例:#5, #109, #501。
( `1 v* Z0 N: L e5 b(2)变量的引用. O, O( Y5 B+ q, F
将跟随在一个地址后的数值用一个变量来代替,即引入了变量。1 y" V! J2 r) t+ G
例:对于F#103,若#103=50时,则为F50;
7 Z2 Z. r* s# g4 m) V& W* }对于Z-#110,若#110=100时,则Z为-100;
+ }6 ^! J, T" N7 b* L) r. ^对于G#130,若#130=3时,则为G03。
& ~( t) V: `. S7 ]# F$ X(3)变量的类型 : V) b: q% I) j% b
0MC系统的变量分为公共变量和系统变量两类。
+ n) ~, L6 {2 H- u! V. N K- J1)公共变量
0 S% o5 o" L+ `3 z' z! y2 D 公共变量是在主程序和主程序调用的各用户宏程序内公用的变量。也就是说,在一个宏指令中的#i与在另一个宏指令中的#i是相同的。
4 M4 C/ I, [. y6 f3 |9 x& T公共变量的序号为:#100~#131;#500~#531。其中#100~#131公共变量在电源断电后即清零,重新开机时被设置为“0”;#500~#531公共变量即使断电后,它们的值也保持不变,因此也称为保持型变量。 9 K8 C% C0 y2 I. [: Y" `
# H5 m( @0 z( ]1 B5 B+ Y2 e
4 H% s4 ^4 j4 D L6 D) m( ^3 d' ]* N$ ~. F6 i! N5 \
2)系统变量
2 u4 h8 E4 R8 {4 b. ]) L 系统变量定义为:有固定用途的变量,它的值决定系统的状态。系统变量包括刀具偏置变量,接口的输入/输出信号变量,位置信息变量等。$ P# F3 f. ~) {4 j
系统变量的序号与系统的某种状态有严格的对应关系。例如,刀具偏置变量序号为#01~#99,这些值可以用变量替换的方法加以改变,在序号1~99中,不用作刀偏量的变量可用作保持型公共变量#500~#531。! e( [3 V/ M2 r9 q8 r
接口输入信号#1000~#1015,#1032。通过阅读这些系统变量,可以知道各输入口的情况。当变量值为“1”时,说明接点闭合;当变量值为“0”时,表明接点断开。这些变量的数值不能被替换。阅读变量#1032,所有输入信号一次读入。
, s9 s& ~' ~# _0 b% t& d2、宏指令G657 ^7 e+ L) Z+ i" C7 h9 _* z+ G
宏指令G65可以实现丰富的宏功能,包括算术运算、逻辑运算等处理功能。
2 p5 s9 n& i3 ?% E) @: L/ G# N 一般形式: G65 Hm P#i Q#j R#k
1 c* I6 M: Z" j0 h- ?! A" I! [( C式中:--宏程序功能,数值范围01~99;
; c& R( ]% D0 s#i--运算结果存放处的变量名;
$ C: ]- G8 I! z1 ]! G' Z5 L; B9 |0 Y#j--被操作的第一个变量,也可以是一个常数;( }) h$ U# Q/ G" Y5 s: C
#k--被操作的第二个变量,也可以是一个常数。
' Y8 K8 F$ {' b: \! V6 _例如,当程序功能为加法运算时:! Z: P$ f% H. |, v
程序 P#100 Q#101 R#102...... 含义为#100=#101+#102# ?6 _5 i" t. ~5 C
程序 P#100 Q-#101 R#102...... 含义为#100=-#101+#102
3 X8 e5 D; i& ^$ X% g- |程序 P#100 Q#101 R15...... 含义为#100=#101+15
( c, d3 E6 ]- @9 ~' a) ?6 w/ f; R
3、宏功能指令 3 R# `/ T! a- ^6 F# ~
7 m( }& | g- {+ ]8 w" {# H(1)算术运算指令 ) z% N. ~0 A+ J
, Q' G8 W$ B) J5 ]# Z! T) x
1)变量的定义和替换 #i=#j
- \- Z' u: `# {2 Z' d B* d: d6 ?3 x2 X' y3 P
编程格式 G65 H01 P#i Q#j
4 h7 |$ w% e* w+ a' S( D; W例 G65 H01 P#101 Q1005; (#101=1005)
# T- [# p) A4 v, }8 @G65 H01 P#101 Q-#112;(#101=-#112) ' P6 j* H- D0 ^5 R* |' D: a5 K
2)加法 #i=#j+#k$ O/ y9 K$ @5 F; ^9 ~" k6 b6 o. L
编程格式 G65 H02 P#i Q#j R#k 6 E1 C8 t) Z6 e( \
例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103)7 T5 Z9 J Y$ P* [* V& t% ~
3)减法 #i=#j-#k
7 M$ h6 ?' x; d* @' B" ~编程格式 G65 H03 P#i Q#j R#k* _. U1 N M- f; |+ a6 P# w9 G
例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103)
& w+ b. K& Z" O5 a0 j% r4)乘法 #i=#j×#k/ c% P7 X7 i# E$ K& k& j
编程格式 G65 H04 P#i Q#j R#k# W, K& f; S* u& d
例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103)
+ |0 g' Z, ^4 e5 _" D5)除法 #i=#j / #k
! m: P s$ Q+ R9 c" S3 i编程格式 G65 H05 P#i Q#j R#k8 T1 c7 E: D( a7 Z. T2 }
例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103)
8 h7 d8 g; g6 t& t6)平方根 #i=
' h$ i3 j* y1 C9 D3 x编程格式 G65 H21 P#i Q#j% J+ Z; N B# A, d. b
例 G65 H21 P#101 Q#102;(#101= )5 ]9 f+ d0 c9 ^1 E$ a
7)绝对值 #i=│#j│
# k3 W) P Y' n+ a' T编程格式 G65 H22 P#i Q#j
/ g' p4 z/ s1 k: \4 h例 G65 H22 P#101 Q#102;(#101=│#102│) & Z h F) |5 M( B+ w/ z
8)复合平方根1 #i=
: ~" i5 h6 ~. \5 H p/ N编程格式 G65 H27 P#i Q#j R#k; a, ?4 T* |7 T( c# H2 c/ d1 v6 `
例 G65 H27 P#101 Q#102 R#103;( #101= + l! G5 q: E* t2 u9 T
9)复合平方根2 #i=
6 B& z( Y# k+ a$ Y编程格式 G65 H28 P#i Q#j R#k
' E' X! n% h$ ^- ^- O例 G65 H28 P#101 Q#102 R#103 ) V: R8 ^. ^% { R- w% D
( D% a6 x5 U3 B8 i
1)逻辑或 #i=#j OR #k% L8 m5 H, ]9 S6 f# U; ]
编程格式 G65 H11 P#i Q#j R#k) B6 w. S! @( j
例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103) Y) S& `7 r8 G8 X) |: S' o
7 @; N3 W8 b# ~' c2)逻辑与 #i=#j AND #k
9 N& e) N" u) B. G& \5 V编程格式 G65 H12 P#i Q#j R#k4 {0 L: E1 C% i4 D( U
例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103 # z9 \0 l. Y: \4 N5 O$ N
6 d+ O3 y0 d6 i' j, c- m
- D+ w- X6 @6 R1 C# y+ g f
- w( L/ d2 X, u, w3 m* G, S s. Z, q7 x% W9 U) |
(3)三角函数指令 2 h: s3 D& q1 }# R
; _$ f' k! m2 r2 a! K
9 J& B4 p/ t; Z* @; m5 [, a1 N _' p. @0 K; a7 x P8 f
1)正弦函数 #i=#j×SIN(#k)
' K3 u* c- \. H( [7 }, z, L) K+ i a
1 [( l" ~, c# I P$ H% R编程格式 G65 H31 P#i Q#j R#k (单位:度) .3 {" F( U, Z) H C6 i$ v- w
( _( `4 z J* W8 z+ c( z" t8 L* O例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103))
- w) j0 @% |8 [9 \0 _2)余弦函数 #i=#j×COS(#k)- h* _; j! v; f+ v2 k, {
编程格式 G65 H32 P#i Q#j R#k (单位:度)) v6 U$ N. l+ |3 i8 B2 J1 c1 r
例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103)); s! p: T) R+ |1 k, _
3)正切函数 #i=#j×TAN#k
! V6 r$ N7 V1 u4 f' f) R编程格式 G65 H33 P#i Q#j R#k (单位:度)' f4 h6 ~# T+ b4 d/ d5 G
例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103))
: y" G% K. P: v" S5 s2 O# U R4)反正切 #i=ATAN(#j/#k)
# t+ y' U! `' ?# N) [* c- l编程格式 G65 H34 P#i Q#j R#k (单位:度,0o≤ #j ≤360o)
6 R/ E+ p: K; x# X例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103)
( q. z0 |& I; q' K) k, J x. z: t2 Q& b7 M+ J
9 g; E$ k+ G/ l8 [
- v5 @5 q3 k5 b& A7 s$ T6 j" ]
(4)控制类指令
5 z0 ^( l2 h- | j
$ g( B% \/ M" V1 o0 I q 3 q: n6 d: f' }4 [: `; A
! z9 @) d+ `. N+ E- X. n) J( o8 L编程格式 G65 H80 Pn (n为程序段号)/ Z% j, q6 J7 k0 {8 T( g
例 G65 H80 P120;(转移到N120); t- s8 M$ L" N, c& ]& C" E3 }
2)条件转移1 #j EQ #k(=)
6 x5 k/ b8 _ u0 P o) M: s7 y7 y编程格式 G65 H81 Pn Q#j R#k (n为程序段号)# ]' x3 A; c9 o& ~6 V( }: ]
例 G65 H81 P1000 Q#101 R#102! W0 i( R: o4 t% R2 e1 W
当#101=#102,转移到N1000程序段;若#101≠ #102,执行下一程序段。
, j- H) H$ e, T! M9 Q3)条件转移2 #j NE #k(≠)
6 o k6 D2 n# }. }5 E* n编程格式 G65 H82 Pn Q#j R#k (n为程序段号)7 ~! n- s0 v& {5 P+ H
例 G65 H82 P1000 Q#101 R#102
: X8 E7 b7 U4 n8 h' r9 s1 \/ t* d' n当#101≠ #102,转移到N1000程序段;若#101=#102,执行下一程序段。( c* C; b3 t7 ^. S% M4 s6 z) y
4)条件转移3 #j GT #k (> ); c2 o; n3 B2 H2 M f) @% D* [9 i1 f
编程格式 G65 H83 Pn Q#j R#k (n为程序段号)
7 N$ f" `+ M! {3 B" C1 H例 G65 H83 P1000 Q#101 R#102
: e9 }( R5 Q9 }" p当#101 > #102,转移到N1000程序段;若#101 ≤#102,执行下一程序段。
! k5 T/ \1 L2 \1 F3 \1 y C- W5)条件转移4 #j LT #k(<) u9 U4 |' V+ g; F0 t
编程格式 G65 H84 Pn Q#j R#k (n为程序段号)( ~: h2 }6 r& L. Q
例 G65 H84 P1000 Q#101 R#102 - T2 Y6 e) J c6 t& V
当#101 < #102,转移到N1000;若#101 ≥ #102,执行下一程序段。3 f. U1 c& I+ X3 J* [# n1 G
6)条件转移5 #j GE #k(≥)) ]8 g6 z- r% @/ X2 _) e3 R3 g
编程格式 G65 H85 Pn Q#j R#k (n为程序段号)* C- L) Z1 @! Y* [ h6 W
例 G65 H85 P1000 Q#101 R#102
2 B2 W/ W( D$ d/ j. X( Q当#101≥ #102,转移到N1000;若#101<#102,执行下一程序段。
( h2 |' h# \3 O7)条件转移6 #j LE #k(≤)
1 G: c4 B6 _' i; i编程格式 G65 H86 Pn Q#j Q#k (n为程序段号): g. B& {2 [5 q+ A0 n
例 G65 H86 P1000 Q#101 R#102% ? q& k7 G/ M; o& G
当#101≤#102,转移到N1000;若#101>#102,执行下一程序段。! A0 K. N; U1 o6 c- N; W
; P5 K2 Z+ N0 |" j4、使用注意7 C% U7 N) k2 y3 S
为保证宏程序的正常运行,在使用用户宏程序的过程中,应注意以下几点;0 z- }" [3 M5 U4 a5 @% ^
(1)由G65规定的H码不影响偏移量的任何选择;
, @/ b% A# v V(2)如果用于各算术运算的Q或R未被指定,则作为0处理;( ~7 e: d v: T
(3)在分支转移目标地址中,如果序号为正值,则检索过程是先向大程序号查找,如果序号为负值,则检索过程是先向小程序号查找。1 |! C) {6 r# V9 C3 ~& {' l" C
(4)转移目标序号可以是变量。 9 R# _! a& B3 l# T7 Q' P: C
$ [& f+ a7 h& j9 j! N/ N
5、用户宏程序应用举例 :
1 ~0 g% _* M( B
: P4 \$ L' T. N9 f' n" p用宏程序和子程序功能顺序加工圆周等分孔。设圆心在O点,它在机床坐标系中的坐标为(X0,Y0),在半径为r的圆周上均匀地钻几个等分孔,起始角度为α,孔数为n。以零件上表面为Z向零点。 ' U) o6 }1 J: V8 K8 x! T8 U
' ^& A( Y2 V; v4 ^
使用以下保持型变量:
7 }' i7 G' g' p! M# D; `3 [, S- |#502:半径r;& J. b% y; }6 }9 y2 K2 h
#503:起始角度α;4 i, ~' G9 k4 u3 S _& Z
#504:孔数n,当n>0时,按逆时针方向加工,当n<0时,按顺时针方向加工;
0 b) f, O" h8 k2 u. T0 H#505:孔底Z坐标值;( K8 o. A+ B) D- `
#506:R平面Z坐标值;9 Q! G; T* ~! y. S# g2 N
#507:F进给量。 . n3 y Y) E& ~
使用以下变量进行操作运算:, X/ l+ t+ A0 b1 P& W
#100:表示第i步钻第i孔的记数器;. C8 I' R6 N' L& c( _
#101:记数器的最终值(为n 的绝对值);
8 ^3 } ]7 B, H#102:第i个孔的角度位置θi的值;
. U$ `: ~, h7 U% W#103:第i个孔的X坐标值;& \1 L4 ], G, b5 V4 M1 |7 N9 K% `1 B S
#104:第i个孔的Y坐标值;! o* Q- o( o k6 X% E
用用户宏程序编制的钻孔子程序如下: 2 h2 n$ v7 ?) ~. [
O9010
% o8 H- X# i" _9 zN110 G65 H01 P#100 Q0 //#100 = 0
4 G" a8 g' J' X+ q2 ?4 C9 Y2 CN120 G65 H22 P#101 Q#504 //#101 = │#504│+ d5 A6 \& {! F w" R
N130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o
" T6 H+ c" _4 t. W% c/ \; m& BN140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #5046 z3 w w: d/ W+ i( d
N150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102当前孔角度位置θi =α+ (360o×i) / n, q* d; R# r' z( l+ @# B* O; l
N160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)当前孔的 X坐标8 r4 u+ q' n" N4 C! `; @
N170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 当前孔的Y坐标8 I2 p4 A: K2 C$ G# r' y
N180 G90 G00 X#103 Y#104 //定位到当前孔(返回开始平面)( X3 ]7 S3 `2 `' K. Q7 g
N190 G00 Z#506 //快速进到R平面
! ^- I2 c8 W; f- p4 mN200 G01 Z#505 F#507 //加工当前孔( V7 _( Y- r2 ?: ]$ A# q8 O
N210 G00 Z#506 //快速退到R平面
' |! q( r5 u2 h9 {; R" l" D& S/ {$ U# tN220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔计数2 G; T6 z: ]0 @
N230 G65 H84 P-130 Q#100 R#101 //当#100 < #101时,向上返回到130程序段
2 l. v5 ~$ O6 O2 _. z+ uN240 M99 //子程序结束
j" L( f$ H2 q
2 H+ L8 u: N; e h+ x, A% [
% a- J& S/ }4 c$ U* U# d, ?# A. b5 L1 e! p' g
调用上述子程序的主程序如下:
( a" j3 N" z% f+ H% M: a- {O0010
6 Q; Q3 U/ c5 mN10 G54 G90 G00 X0 Y0 Z20 //进入加工坐标系- D" }+ e7 f" b4 m" y/ L
N20 M98 P9010 //调用钻孔子程序,加工圆周等分孔( E7 s8 r; ?4 u, \+ i4 |
N30 Z20 //抬刀, B$ N/ @; `/ @4 E. r6 l6 k1 s; O
N40 G00 G90 X0 Y0 //返回加工坐标系零点
* n( g' u }0 x" e! {N50 M30 程序结束* f2 `, t+ ]2 i& [# L6 I3 q
设置G54:X=-400,Y=-100,Z=-50。
+ V: z! w: M' K6 {0 H& @. g T( w变量#500~#507可在程序中赋值,也可由MDI方式设定。
' g* q( ?- _. A/ |& z
% H9 ^; s, W( Y, A$ z9 p. OB类宏G65
) L4 D" D0 d% k+ h+ h) T
/ W. D0 I6 K( ^7 @% ~4 K简单调用(G65)
9 e, I+ Q& G* |4 C& r' H W; G. { 功能 G65被指定时,地址P所指定的程式被调用,自变量能传递到用户宏程序中。
' G5 n9 ^. }1 i4 k 格式 G65 Pp Ll <自变量表>;% T6 J6 L" C; D. i
其中: p 要调用的程序号
- L4 ?, W/ Y9 z- D. Q$ h l 重复的次数(缺省值为1,取值范围1~9999)
, T: j9 b* L9 U: e) u 自变量 传递给被调用程式的数。通过使用自变量表,值被分配给相应 ) e3 ~, w. s' o/ g7 D9 n5 S* @
的局部变量。
, {1 f& ]( K6 G- G
4 h `% e. T" ~ 自变量分为两类。第一类可以使用的字母只能使用一次,各自变量与局部变量的对用关系如下:- W3 z9 M9 z: t* s: @9 o# S
1 V0 c/ j9 `/ h: I: H9 N. g' ~6 `3 y
地址 变量号 地址 变量号 地址 变量号5 ^( T" t0 T$ q5 u* W. ?1 \
A #1 E #8 T #20# y% _, q4 N# r. y- N4 [5 c
B #2 F #9 U #21
+ F( h2 Q/ R8 K7 @7 b8 ]( {C #3 H #11 V #22
3 o6 S5 k d' ~" R. ZI #4 M #13 W #23
+ W% V& f8 q9 u3 b$ mJ #5 Q #17 X #24* L" f5 C5 R4 h3 y/ k f
K #6 R #18 Y #25
- b0 h0 B8 O0 x$ B& F7 rD #7 S #19 Z #26
& _3 R+ \* X2 B* T" ~☆ 地址G、L、N、O、P不能当作自变量使用。
3 J0 y7 A! X5 j u/ |. X( b1 O☆ 不需要的地址可以省略,与省略的地址相应的局部变量被置成空。8 K4 w0 ^8 R8 Q7 N- T3 P
: {6 K& @0 X: E( ~
第二类可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自变量使用的类别根据使) S" f& u2 d$ y& j' G8 P# b4 Y
用的字母自动确定:
, g9 d) R# _3 X! n3 \地址 变量号 地址 变量号 地址 变量号/ L0 d/ D# N8 c" R
A #1 K3 #12 J7 #23
5 U' N0 w+ g8 [# w yB #2 I4 #13 K7 #24
) |2 U! v/ H( `. N9 Y% n/ z5 _2 R5 o' ?C #3 J4 #14 I8 #25
H4 P. b9 r. X3 V9 j; ^8 EI1 #4 K4 #15 J8 #264 m& s' c I, Z
J1 #5 I5 #16 K8 #27
0 w/ `0 n6 t( y7 ]K1 #6 J5 #17 I9 #28- x& _3 q& r5 Q, A
I2 #7 K5 #18 J9 #296 w' G& `6 {2 m }* S8 m) X& o! p
J2 #8 I6 #19 K9 #30
! |7 n( }: g5 l& bK2 #9 J6 #20 I10 #317 E! i" P& R! i" g8 |: E
I3 #10 K6 #21 J10 #32
! A. W8 {) z2 S4 ZJ3 #11 I7 #22 K10 #33
% k7 @. u) m+ d7 m( E☆ 在实际的程序中,I、J、K的下标不用写出来。" }" M- k2 v: W
注意:
l% y1 m1 }1 i" I☆ 在自变量之前一定要指定G65。$ v; h# c. f. u; k) j% B
☆ 如果将两类自变量混合使用,系统自己会辨别属于哪类,最后指定的那一类优先。
9 d; |4 \& q4 ^5 x0 [! D* m☆ 传递的不带小数点的自变量的单位与每个地址的最小输入增量一致,其值与机床的系统结构非常一致。为了程序的兼容性,建议使用带小数点的自变量。, [2 K. p7 D7 g. } D. R/ A
☆ 最多可以嵌套含有简单调用(G65)和模态调用(G66)的程序4级。不包括子程序调用(M98)。局部变量可以嵌套0~4级。主程序的级数是0。用G65和G66每调用一次宏,局部变量的级数增加一次。上一级局部变量的值保存在NC 中。宏程序执行到M99时,控制返回到调用的程序。这时局部变量的级数减1,恢复宏调用时存储的局部变量值。
# _! r0 I& I* k5 t1 P G65简单宏调用可方便地向被调用的副程式传递数据,但是用它制作诸如固定循环- ^+ N$ u9 ?; M& l6 t; Q3 q4 N! B
之类的移动到坐标后才加工的程式就无能为力了。 |
评分
-
查看全部评分
|