|
|
发表于 2011-7-12 08:32:36
|
显示全部楼层
回复 1# 钟云驹
9 R7 [# \ H% g6 o$ q5 t详解A类宏5 q) `5 P5 C' V$ d/ d/ s- @1 @9 D
分类:默认分类 字号: 大大 中中 小小 用户宏功能是提高数控机床性能的一种特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一样存入存储器,然后用一个总指令代表它们,使用时只需给出这个总指令就能执行其功能。8 c6 R: Z, q, e" m; [0 q
用户宏功能主体是一系列指令,相当于子程序体。既可以由机床生产厂提供,也可以由机床用户自己编制。/ @+ S1 q1 p/ n) B
宏指令是代表一系列指令的总指令,相当于子程序调用指令。
; T0 G$ M# F2 y8 A 用户宏功能的最大特点是,可以对变量进行运算,使程序应用更加灵活、方便。5 \+ j1 M/ j. o/ Y/ @+ D) M
用户宏功能有A、B两类。这里主要介绍A类宏功能,B类宏功能请参见本课程的B类宏程序介绍。
$ I' E) w( u" B1、变量
. e5 e5 q$ u% {+ ~ 在常规的主程序和子程序内,总是将一个具体的数值赋给一个地址。为了使程序更具通用性、更加灵活,在宏程序中设置了变量,即将变量赋给一个地址。
/ i& K+ W5 @1 k' o(1)变量的表示6 Q% V/ ?( {6 D& t& X
变量可以用“#”号和跟随其后的变量序号来表示:#i(i=1,2,3......)" l5 M8 H5 i. q- ]( E. @6 Z
例:#5, #109, #501。
\; I! E# z' \3 `(2)变量的引用
5 m: J; R4 A% ~ 将跟随在一个地址后的数值用一个变量来代替,即引入了变量。
, @" J0 _& _; Z* ?6 q$ J! V/ `例:对于F#103,若#103=50时,则为F50;
" q; p; H/ N5 c' O6 y对于Z-#110,若#110=100时,则Z为-100;
1 X' X6 J i9 I9 _/ s- Y对于G#130,若#130=3时,则为G03。
. ^/ ^/ I1 V* y" r2 Z$ ^(3)变量的类型
$ M1 I8 @5 u; h& Y3 o 0MC系统的变量分为公共变量和系统变量两类。
0 u5 s- h+ U0 s1)公共变量
6 G _1 t9 j" x. R/ L# R6 T 公共变量是在主程序和主程序调用的各用户宏程序内公用的变量。也就是说,在一个宏指令中的#i与在另一个宏指令中的#i是相同的。
6 u$ U% f/ p, V( Y5 j# `公共变量的序号为:#100~#131;#500~#531。其中#100~#131公共变量在电源断电后即清零,重新开机时被设置为“0”;#500~#531公共变量即使断电后,它们的值也保持不变,因此也称为保持型变量。
v2 N* r( ` [4 s% @3 x5 ]: R9 K8 e$ ^* ~5 ]' o
% B- c/ C9 s" O3 G* q* x& E) E
5 m& A- Z k8 q% j+ i( b/ `4 k
2)系统变量 / o6 y/ S/ P' Q* |( V
系统变量定义为:有固定用途的变量,它的值决定系统的状态。系统变量包括刀具偏置变量,接口的输入/输出信号变量,位置信息变量等。3 L4 f% Z" i- a, `2 A+ {; N0 f
系统变量的序号与系统的某种状态有严格的对应关系。例如,刀具偏置变量序号为#01~#99,这些值可以用变量替换的方法加以改变,在序号1~99中,不用作刀偏量的变量可用作保持型公共变量#500~#531。
0 i) P% B* ^# _5 H& I 接口输入信号#1000~#1015,#1032。通过阅读这些系统变量,可以知道各输入口的情况。当变量值为“1”时,说明接点闭合;当变量值为“0”时,表明接点断开。这些变量的数值不能被替换。阅读变量#1032,所有输入信号一次读入。# ? Q3 m* B6 O# T* n) m& R& E
2、宏指令G65
' c' f2 H* Q& u' ^) U& A# z 宏指令G65可以实现丰富的宏功能,包括算术运算、逻辑运算等处理功能。4 S/ {1 D. c$ M- [% B0 G! ~
一般形式: G65 Hm P#i Q#j R#k6 X% r* t5 R5 c- I
式中:--宏程序功能,数值范围01~99;
/ K0 B6 H* B7 z" Z A3 Y#i--运算结果存放处的变量名;
& _; I1 \; s+ Q& ~- W1 G#j--被操作的第一个变量,也可以是一个常数;" {9 t, v j# H
#k--被操作的第二个变量,也可以是一个常数。
: C% e8 `* V/ Z" }' A例如,当程序功能为加法运算时:
5 B: v+ Q2 q' o" I( i程序 P#100 Q#101 R#102...... 含义为#100=#101+#102- K" P2 U! E: o, S
程序 P#100 Q-#101 R#102...... 含义为#100=-#101+#102
0 V2 \& _' R; B/ M8 G+ L( r程序 P#100 Q#101 R15...... 含义为#100=#101+15 ; u2 s2 } {/ I6 n# n5 |5 N( X8 g/ f* a
2 r8 k p1 d4 I8 O/ n# e
3、宏功能指令
( F. d1 w5 d+ E) e! P
, H( ]; c. w5 }( Z/ R' b(1)算术运算指令 1 }( @( i8 x. F2 }# J$ V
* e: T- s6 L" c. q4 U1)变量的定义和替换 #i=#j 4 S- Z6 G0 C, q0 c% D
l$ |: w; F9 U9 E编程格式 G65 H01 P#i Q#j5 u7 Z* `, J; [5 N
例 G65 H01 P#101 Q1005; (#101=1005)
3 X8 X2 B- ?' u* N" k. t5 ^1 `: WG65 H01 P#101 Q-#112;(#101=-#112)
+ m3 M& w0 V$ H) j) l( c7 X( p5 Q6 N2)加法 #i=#j+#k6 p; B5 p d$ S1 y
编程格式 G65 H02 P#i Q#j R#k
& g) }# e8 u5 L. S; y6 I& |例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103)6 i! }8 G7 @) C z
3)减法 #i=#j-#k
; j$ v5 u8 @0 X& T7 Y* c编程格式 G65 H03 P#i Q#j R#k# `, s" f- n* }; {" ~
例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103)
1 U" @% n! ]- @1 ?; r4)乘法 #i=#j×#k3 j9 ^4 i, A9 y I$ y+ L' n" C! q
编程格式 G65 H04 P#i Q#j R#k( h7 p9 Q d5 s" b
例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103)
' C* M3 s: [0 M5 ]$ r l) O5)除法 #i=#j / #k5 G) v2 Y( e& {3 T0 y
编程格式 G65 H05 P#i Q#j R#k
% p9 C; C/ F) C. D+ ~" |9 _" C1 E例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103)9 ~( f+ n/ s. P) ~
6)平方根 #i= 7 W, t4 q5 t6 A3 B, ^% X# a
编程格式 G65 H21 P#i Q#j
. W# W2 J6 s4 y9 Z例 G65 H21 P#101 Q#102;(#101= )0 @' O1 x& h' W* u; A
7)绝对值 #i=│#j│
! ~( q# F1 n- T4 Q9 u, V编程格式 G65 H22 P#i Q#j( @1 h4 m! m0 ?( F$ }
例 G65 H22 P#101 Q#102;(#101=│#102│)
9 C2 n9 W$ s2 V. L5 U8)复合平方根1 #i=
& E0 b2 P7 f y编程格式 G65 H27 P#i Q#j R#k6 ~5 F: `. U; V3 @
例 G65 H27 P#101 Q#102 R#103;( #101=
5 }, N5 f% z6 f+ N: G9)复合平方根2 #i=
& k' X3 {0 W7 d6 k c编程格式 G65 H28 P#i Q#j R#k4 n- x& m$ f/ H% j- R9 o- F+ q5 t0 {) p
例 G65 H28 P#101 Q#102 R#103 $ a3 C7 o- E" c* q9 H" G( @
7 V% A' H7 t O+ W4 K1 F1)逻辑或 #i=#j OR #k
) _4 ~, E: y5 ^. N编程格式 G65 H11 P#i Q#j R#k" Q% m* X0 ]' G4 h1 s, F" Z- @* m
例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103)/ \ K* F: O. X# ?! K1 U: |
3 M& b' N1 ]9 y* a" u7 \
2)逻辑与 #i=#j AND #k
' j7 ]+ x3 a1 T& T M编程格式 G65 H12 P#i Q#j R#k
3 a: _! u) y- S/ I$ y m; t例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103 : p) K2 g, |; b* G( r5 m3 c
- W- W F6 A4 M9 [1 e% c2 ]. x# W
* S/ s* P3 T4 ~ e/ J! u! v
+ r- X) l# I: L/ J) L+ d
- b5 u0 l2 B' q4 x
(3)三角函数指令 7 D) w0 @3 X: h! G
. e/ J$ S/ O: Q 0 q; ~$ r3 w% ], W l0 Z1 V
2 ^% [5 X! c9 [0 D, C" @
1)正弦函数 #i=#j×SIN(#k)
: G- U& q! M7 U, x, O0 l7 n; q g) R; z$ p6 T
编程格式 G65 H31 P#i Q#j R#k (单位:度) .
, K. C: A- f2 e: W. a& P2 g7 \/ i2 ~2 `2 ^ Y" c' c" I8 P
例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103))* w" E! @& c) e7 K9 t" S
2)余弦函数 #i=#j×COS(#k); T0 l2 B5 x0 B, V1 L
编程格式 G65 H32 P#i Q#j R#k (单位:度)% K N2 k) O4 A) E/ P
例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103))2 _: |+ B/ F4 M# V
3)正切函数 #i=#j×TAN#k
; c: E7 g& }( [2 E$ |6 ]编程格式 G65 H33 P#i Q#j R#k (单位:度). M9 i6 w$ v) l% |. H9 v
例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103))1 W# E& \" s8 T" c, x& s- U, v
4)反正切 #i=ATAN(#j/#k) B) @# |5 l t3 c0 ^3 T
编程格式 G65 H34 P#i Q#j R#k (单位:度,0o≤ #j ≤360o)
% r6 _" N6 ?' ]( G r; F: ^/ l* I例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103)
1 E# W& ~; [# i# [/ M
- x: j N: B! d, ~
, @. n; L: X9 U% L+ i; z" w3 i
(4)控制类指令- M9 v7 G; Y9 }* J6 f, m1 W
+ Z& s: r: `, j
% d7 A! c* Q" P4 Z: }& y0 A! l( j5 D* b: g( g7 A" [
编程格式 G65 H80 Pn (n为程序段号)
3 U- W& i1 _9 f! } [3 b$ W' U: D例 G65 H80 P120;(转移到N120)" j9 q( A. v# F8 H1 K( S; j" u
2)条件转移1 #j EQ #k(=)& f; c2 c2 M9 {+ Q0 v
编程格式 G65 H81 Pn Q#j R#k (n为程序段号)
' H8 B# d$ y) t9 Q例 G65 H81 P1000 Q#101 R#102
: [1 K& s" k- B5 t当#101=#102,转移到N1000程序段;若#101≠ #102,执行下一程序段。& ~9 H) M6 k# n9 S/ Q
3)条件转移2 #j NE #k(≠)
/ @) X7 U8 R2 O( h4 z* r+ i编程格式 G65 H82 Pn Q#j R#k (n为程序段号)
' p8 s% E( b0 Y9 J: w( H( I) l: ]例 G65 H82 P1000 Q#101 R#102! H; `6 [/ ?: J
当#101≠ #102,转移到N1000程序段;若#101=#102,执行下一程序段。
" Z1 j$ b X/ ~; ?+ E- K& i3 m6 i2 v4)条件转移3 #j GT #k (> )
' ?. a. z' j' |, l! J编程格式 G65 H83 Pn Q#j R#k (n为程序段号)( L5 F$ Q) O* M+ |' ]& A G3 S
例 G65 H83 P1000 Q#101 R#102
- j5 P0 U3 {" A' Z. Q" T当#101 > #102,转移到N1000程序段;若#101 ≤#102,执行下一程序段。
" {* B# h, f% x4 Q$ _5)条件转移4 #j LT #k(<)
0 Q" z/ g8 A Y8 L( h% H9 A编程格式 G65 H84 Pn Q#j R#k (n为程序段号)
1 [! D( O' X5 @, v2 M* P7 @9 S7 c例 G65 H84 P1000 Q#101 R#102 0 m; \2 ~- M; }* y
当#101 < #102,转移到N1000;若#101 ≥ #102,执行下一程序段。% V* q! @- G5 t0 A3 M/ x! G
6)条件转移5 #j GE #k(≥)
$ W+ C/ |+ T& h3 a/ Z+ N编程格式 G65 H85 Pn Q#j R#k (n为程序段号)7 a T6 d, P+ Q- f' c0 `
例 G65 H85 P1000 Q#101 R#1023 s: a) ]7 x: r: g1 D7 E. ~
当#101≥ #102,转移到N1000;若#101<#102,执行下一程序段。
' |# J9 H( v7 q7)条件转移6 #j LE #k(≤)( A0 \, ], B# s$ v3 k
编程格式 G65 H86 Pn Q#j Q#k (n为程序段号)' r: t0 E. a- J8 M
例 G65 H86 P1000 Q#101 R#102
8 H- }0 V- ?; i- s9 b2 @当#101≤#102,转移到N1000;若#101>#102,执行下一程序段。1 |, O" y8 `( Y8 z% _+ L) \3 R
5 i" A. Y' `1 Z+ K4 f
4、使用注意
: S1 V; L. }3 G9 C8 t; D& D 为保证宏程序的正常运行,在使用用户宏程序的过程中,应注意以下几点;# j/ S- Y% W* Z
(1)由G65规定的H码不影响偏移量的任何选择;
7 Z) O# j* [' t$ Y$ F* X: e(2)如果用于各算术运算的Q或R未被指定,则作为0处理; f7 @4 S1 N; o) s/ a
(3)在分支转移目标地址中,如果序号为正值,则检索过程是先向大程序号查找,如果序号为负值,则检索过程是先向小程序号查找。
/ A/ r( J2 G4 G2 B(4)转移目标序号可以是变量。
+ ~$ j: F: u' g$ q7 f7 G6 \
$ Z% K6 N+ C; Q. x" {8 e5、用户宏程序应用举例 : & r9 s4 p3 V/ J5 z, d# L& @
4 {5 |# P4 i) W: ?% D3 w. @- ?$ @用宏程序和子程序功能顺序加工圆周等分孔。设圆心在O点,它在机床坐标系中的坐标为(X0,Y0),在半径为r的圆周上均匀地钻几个等分孔,起始角度为α,孔数为n。以零件上表面为Z向零点。 ?7 M/ ?" _% M. I0 X% u: J
* D. |& D# K8 e4 S# u使用以下保持型变量:# j3 E, B/ p0 b, v3 F) U/ G3 i
#502:半径r;' l! P8 d4 M8 f( S6 q
#503:起始角度α;9 v' ?$ L$ c5 q* p- m# z& r) Y
#504:孔数n,当n>0时,按逆时针方向加工,当n<0时,按顺时针方向加工;$ C0 m5 j2 @/ P9 d) `
#505:孔底Z坐标值;; k. |5 D2 @2 G4 M- \
#506:R平面Z坐标值;3 }2 F' k a2 i. d8 s; w
#507:F进给量。
$ J& H6 {# }" L使用以下变量进行操作运算:9 o- a9 H, i2 _5 T- [- v5 H
#100:表示第i步钻第i孔的记数器;
' W L) r9 S9 c1 p& y: K4 m; k#101:记数器的最终值(为n 的绝对值);
0 q8 w# ^4 y2 l% B8 \#102:第i个孔的角度位置θi的值; ) h* b, A9 W: v; P: d/ N% y6 ^# s, q X
#103:第i个孔的X坐标值;9 n+ F r4 f3 |( a( d4 ~; ~
#104:第i个孔的Y坐标值;2 |( Z' H w4 q
用用户宏程序编制的钻孔子程序如下:
. H- E+ U7 U6 z3 i: {- |O9010
; z" L; }0 j, P0 C: lN110 G65 H01 P#100 Q0 //#100 = 0
4 V% S6 A* K, d6 i2 dN120 G65 H22 P#101 Q#504 //#101 = │#504│/ b4 K5 E& h/ r( s4 @3 W' y7 @7 Q
N130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o; y, W# q# W3 ~+ p
N140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #5041 L0 b* `% }1 S; m0 x1 {
N150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102当前孔角度位置θi =α+ (360o×i) / n
" Y+ N" S1 P |N160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)当前孔的 X坐标3 P" r, j, r) M( t$ I c' O* C
N170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 当前孔的Y坐标
7 _: C: ^! m. q; J1 h) \N180 G90 G00 X#103 Y#104 //定位到当前孔(返回开始平面)
6 `6 l% F2 |+ uN190 G00 Z#506 //快速进到R平面7 l2 V8 w# m$ O" u( c k5 e
N200 G01 Z#505 F#507 //加工当前孔' p6 s6 L5 D/ V1 T, }2 d( |
N210 G00 Z#506 //快速退到R平面
1 W& A4 K3 y. nN220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔计数4 a' l8 U. [$ z# t- c
N230 G65 H84 P-130 Q#100 R#101 //当#100 < #101时,向上返回到130程序段- R0 r3 a: U5 E" p8 x& @
N240 M99 //子程序结束
0 v H8 \3 O, |4 P1 Q% s4 S
/ a. a$ s+ E* p' b { ' [! p( a- ~2 g
8 ~6 o- ~" ~+ O* _% ]) H调用上述子程序的主程序如下:
% m3 {! E" Q. [6 @) G. d3 \# H) ^O0010% w K7 |# }, o) T! q
N10 G54 G90 G00 X0 Y0 Z20 //进入加工坐标系
/ B2 U0 n4 x4 o) c5 k R( {5 x0 V/ ]N20 M98 P9010 //调用钻孔子程序,加工圆周等分孔3 O* O6 {4 @7 `" _# D- Z W
N30 Z20 //抬刀
* Z) `( ^$ V2 S e3 X2 fN40 G00 G90 X0 Y0 //返回加工坐标系零点
7 F$ Q- J) q WN50 M30 程序结束" i% ~6 R0 ?$ H# {+ _9 V
设置G54:X=-400,Y=-100,Z=-50。- \9 k; o. j$ [1 ^
变量#500~#507可在程序中赋值,也可由MDI方式设定。 3 H. B0 O7 `( c1 S+ m' G# X
- w: X7 A% k3 N. A9 {) P9 N1 yB类宏G65
" Y3 M4 h8 s: h. Q8 S. \* U ]8 {2 y2 f& v) m$ i- i
简单调用(G65)
4 A1 J( [0 \/ h$ |$ D. C 功能 G65被指定时,地址P所指定的程式被调用,自变量能传递到用户宏程序中。
' N; X3 T7 r+ k 格式 G65 Pp Ll <自变量表>;" D" i% l& Z' W
其中: p 要调用的程序号4 d, b8 c, ^3 E8 G3 g
l 重复的次数(缺省值为1,取值范围1~9999) M6 t( l7 |6 B( Y0 d9 j* [
自变量 传递给被调用程式的数。通过使用自变量表,值被分配给相应
: H* t) ^: f3 y 的局部变量。
b) X1 ~$ K, C) n6 o* }) O, V, k. w% j
自变量分为两类。第一类可以使用的字母只能使用一次,各自变量与局部变量的对用关系如下:& G6 ]9 X7 h. {% R" p% \
& b. L2 A7 ?# c地址 变量号 地址 变量号 地址 变量号
7 e! b$ ^; r5 m6 k0 A: w) t8 a) nA #1 E #8 T #208 i, M4 u- A# p9 O) H1 f7 u
B #2 F #9 U #21
7 r$ ~1 C7 E7 [. PC #3 H #11 V #22
& I: `! t" h( z$ eI #4 M #13 W #235 s+ y0 b9 [0 ~
J #5 Q #17 X #24
5 s; `1 Y. E0 l% J$ L: m/ Y$ sK #6 R #18 Y #25
- O3 ?& u @+ F2 I8 u& ZD #7 S #19 Z #26
+ i; o' Q) e! J8 H& C☆ 地址G、L、N、O、P不能当作自变量使用。; |# _4 L+ i# ]
☆ 不需要的地址可以省略,与省略的地址相应的局部变量被置成空。
! L! Q' x7 B% H% D
% A0 o' b. l; d0 K5 R+ A4 G 第二类可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自变量使用的类别根据使* J3 D) M6 D9 P
用的字母自动确定:& S+ _3 B* C0 b9 b0 W4 Z* h
地址 变量号 地址 变量号 地址 变量号
5 l6 w% T, G0 aA #1 K3 #12 J7 #23% U& M6 O/ n6 b, C3 u E" r
B #2 I4 #13 K7 #242 K% h7 ~) b$ p+ ]4 b
C #3 J4 #14 I8 #25+ V5 k( @' q& J$ {' Z
I1 #4 K4 #15 J8 #26! O& `* G$ ^/ ^, G- C. i" E3 M
J1 #5 I5 #16 K8 #27
1 K8 a3 R2 ]$ \# O$ i0 QK1 #6 J5 #17 I9 #28
9 H \& `$ g _0 W& s) GI2 #7 K5 #18 J9 #294 o- f0 ?: M7 C/ d, Y
J2 #8 I6 #19 K9 #30
( A2 q( m8 R7 bK2 #9 J6 #20 I10 #31" X" }1 m$ s0 U! K5 {! @8 S! @
I3 #10 K6 #21 J10 #32
7 F* n5 y& [9 t3 v) i4 _1 VJ3 #11 I7 #22 K10 #33
; y5 C* e6 E9 i ?5 C4 {☆ 在实际的程序中,I、J、K的下标不用写出来。# k: y8 a5 y' ` X
注意: |- d5 K. j8 M; \* l( C( I
☆ 在自变量之前一定要指定G65。* y/ g; B- W. ?9 H! A& s0 D
☆ 如果将两类自变量混合使用,系统自己会辨别属于哪类,最后指定的那一类优先。
- A' F5 v5 e. {# D0 G2 `☆ 传递的不带小数点的自变量的单位与每个地址的最小输入增量一致,其值与机床的系统结构非常一致。为了程序的兼容性,建议使用带小数点的自变量。( L% h- d- Y+ y
☆ 最多可以嵌套含有简单调用(G65)和模态调用(G66)的程序4级。不包括子程序调用(M98)。局部变量可以嵌套0~4级。主程序的级数是0。用G65和G66每调用一次宏,局部变量的级数增加一次。上一级局部变量的值保存在NC 中。宏程序执行到M99时,控制返回到调用的程序。这时局部变量的级数减1,恢复宏调用时存储的局部变量值。
, {4 Q6 t2 ^0 S: F$ P G65简单宏调用可方便地向被调用的副程式传递数据,但是用它制作诸如固定循环* G. v: c* x5 e9 k
之类的移动到坐标后才加工的程式就无能为力了。 |
评分
-
查看全部评分
|