|
|
发表于 2011-7-12 08:32:36
|
显示全部楼层
回复 1# 钟云驹
% ^7 e5 f- H# x- O9 H详解A类宏( P+ G, Y0 Z1 t/ E3 _
分类:默认分类 字号: 大大 中中 小小 用户宏功能是提高数控机床性能的一种特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一样存入存储器,然后用一个总指令代表它们,使用时只需给出这个总指令就能执行其功能。& f) ], ^8 `( e
用户宏功能主体是一系列指令,相当于子程序体。既可以由机床生产厂提供,也可以由机床用户自己编制。) F# a) b0 P) D$ i. Q7 _) I6 X
宏指令是代表一系列指令的总指令,相当于子程序调用指令。
* `5 U( U4 v$ m+ z& l 用户宏功能的最大特点是,可以对变量进行运算,使程序应用更加灵活、方便。
, K0 K: X, N4 s, `! ], Y2 c 用户宏功能有A、B两类。这里主要介绍A类宏功能,B类宏功能请参见本课程的B类宏程序介绍。
, Z: i# r/ Z6 z( Q3 f. q8 I1、变量
3 n2 \4 @# m: ~, D# `6 | 在常规的主程序和子程序内,总是将一个具体的数值赋给一个地址。为了使程序更具通用性、更加灵活,在宏程序中设置了变量,即将变量赋给一个地址。
( ?. J' n& `2 A5 X& f(1)变量的表示
' I8 L( v9 }1 Y/ ?2 h- \- Q变量可以用“#”号和跟随其后的变量序号来表示:#i(i=1,2,3......)) J- ]9 S# Q% P, T% A
例:#5, #109, #501。
. r+ m) a0 b: j: m5 Y$ U, x1 r(2)变量的引用
4 o% _+ f; ]6 x; q* M 将跟随在一个地址后的数值用一个变量来代替,即引入了变量。
2 v- N- o8 p! i! `3 N3 W例:对于F#103,若#103=50时,则为F50;
, }, q4 P5 C" T1 ^ w5 L1 W对于Z-#110,若#110=100时,则Z为-100;
. s$ b1 [. {- D% v9 P. {& Z2 K对于G#130,若#130=3时,则为G03。
. E9 T0 U5 I3 Q$ J: L; |; P(3)变量的类型
" ?0 C2 o, ?! Z; o' h3 V! P 0MC系统的变量分为公共变量和系统变量两类。
* ~/ g# P) Q/ ?6 ^$ h% ?$ ^1)公共变量 9 k4 w4 c3 r" W7 F+ \) X/ C; H
公共变量是在主程序和主程序调用的各用户宏程序内公用的变量。也就是说,在一个宏指令中的#i与在另一个宏指令中的#i是相同的。5 ~; b# Z& m5 I6 d9 W! L& E% W
公共变量的序号为:#100~#131;#500~#531。其中#100~#131公共变量在电源断电后即清零,重新开机时被设置为“0”;#500~#531公共变量即使断电后,它们的值也保持不变,因此也称为保持型变量。 ! f. W Q* ]6 i, Y; S$ f; g
! t4 V& R, l6 Y" m' |4 ~
4 N- p5 W0 W% S1 L2 K9 N; {' H, _
1 [! \9 u1 z! r2 D& d. Q
2)系统变量 $ M. `! H8 f3 e
系统变量定义为:有固定用途的变量,它的值决定系统的状态。系统变量包括刀具偏置变量,接口的输入/输出信号变量,位置信息变量等。3 q& q* r( {- e; q. S6 _
系统变量的序号与系统的某种状态有严格的对应关系。例如,刀具偏置变量序号为#01~#99,这些值可以用变量替换的方法加以改变,在序号1~99中,不用作刀偏量的变量可用作保持型公共变量#500~#531。
- ~( j( f+ A1 I9 O2 C 接口输入信号#1000~#1015,#1032。通过阅读这些系统变量,可以知道各输入口的情况。当变量值为“1”时,说明接点闭合;当变量值为“0”时,表明接点断开。这些变量的数值不能被替换。阅读变量#1032,所有输入信号一次读入。
0 w, Y1 D4 P( D& ]2、宏指令G65+ F8 ?; {# {* q( U4 U: u
宏指令G65可以实现丰富的宏功能,包括算术运算、逻辑运算等处理功能。- E6 w( F$ B9 i! s0 ^
一般形式: G65 Hm P#i Q#j R#k1 H! T+ a. w4 I
式中:--宏程序功能,数值范围01~99;+ F3 A/ G( \7 F' q1 x# @6 Z! N/ q
#i--运算结果存放处的变量名;
; T6 @2 {+ h/ T, @# s#j--被操作的第一个变量,也可以是一个常数; y* f' b) S" m1 ^" Z1 q
#k--被操作的第二个变量,也可以是一个常数。
?# z: z8 R8 n- m6 e! S例如,当程序功能为加法运算时:: u ^: ?) {' b/ |. T7 l) r
程序 P#100 Q#101 R#102...... 含义为#100=#101+#102
# V3 ^1 N4 J+ `程序 P#100 Q-#101 R#102...... 含义为#100=-#101+#102
2 L6 H' z+ f8 D. D程序 P#100 Q#101 R15...... 含义为#100=#101+15 8 ?+ X/ W9 H' ^6 Y3 I) g. |* p
: s* k+ K( ]. l4 E+ m
3、宏功能指令
* J" R7 `4 R) c9 o- B7 |
" |( v w |* y7 R9 t0 @(1)算术运算指令 1 @" ]1 A; ]8 h3 E/ i' {
3 _/ u4 C# ?8 I. N' \: m+ t5 Z
1)变量的定义和替换 #i=#j
9 N) {4 x- u, h- B. [: K5 v% C7 F" R% L) C; L5 k9 x1 a' P/ u
编程格式 G65 H01 P#i Q#j
% c) p/ ?2 ~- a- q q5 |7 \例 G65 H01 P#101 Q1005; (#101=1005)
w5 H. c7 `1 f" y9 qG65 H01 P#101 Q-#112;(#101=-#112)
& a6 t5 z6 T7 e( R+ w. t* E# J2)加法 #i=#j+#k& V1 I/ Q4 j# z
编程格式 G65 H02 P#i Q#j R#k - A- Z- a0 D( a- D6 \. n& F; j7 l
例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103)% L6 H1 ~; s% V* g+ g! Q0 e, c
3)减法 #i=#j-#k
# ~% b( L! k5 F. x$ z' f5 d' o! I编程格式 G65 H03 P#i Q#j R#k7 I6 z; K% H# N/ ]) o
例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103)) I% G9 y/ H0 u7 W5 d6 f
4)乘法 #i=#j×#k
# M+ n* P3 M8 n" x; v5 T编程格式 G65 H04 P#i Q#j R#k. o( X. I6 l' w; U" Z6 {
例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103)
6 h' a% o8 I6 P$ A, F. \* l1 x+ k* Y5)除法 #i=#j / #k
; d5 Q+ Z& O6 O) m! I编程格式 G65 H05 P#i Q#j R#k
R: {! k4 F' F' O例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103)
- _. \4 z8 q( X; r3 A* l: P* l6)平方根 #i= + |/ h# U4 Z' E& R" i$ ^6 ^; Z
编程格式 G65 H21 P#i Q#j! d* J P( V3 p( Z3 k
例 G65 H21 P#101 Q#102;(#101= )
3 o2 |. g; v7 @7)绝对值 #i=│#j│, l S4 ~% o9 z8 K# m; K
编程格式 G65 H22 P#i Q#j
6 d$ o) L4 v, S) x例 G65 H22 P#101 Q#102;(#101=│#102│) & E8 ^- U9 v$ F+ N
8)复合平方根1 #i=
3 Z/ {0 A$ R" H" X. [6 Z: `: G编程格式 G65 H27 P#i Q#j R#k
* C2 \6 D+ R2 P9 c1 y5 y% d$ s例 G65 H27 P#101 Q#102 R#103;( #101= 2 b8 t$ Z: b7 J0 `2 O2 z6 W
9)复合平方根2 #i= " c+ [) ^* U* U3 t S
编程格式 G65 H28 P#i Q#j R#k
/ Q) z3 O) e. a# x- g6 z例 G65 H28 P#101 Q#102 R#103 ( Q3 |- g3 }# s1 z, d
: Q: G; X N, L; u0 U* K* D1)逻辑或 #i=#j OR #k; W* m2 B! K3 a/ u' B8 o: Q5 L) s
编程格式 G65 H11 P#i Q#j R#k8 s$ ?% t" T# A, K$ \7 i6 T/ O
例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103)1 ^, _0 E1 y, l w! @5 ^* O6 O
% h' n" S T8 D
2)逻辑与 #i=#j AND #k% o% x+ U6 J* P* F9 n5 K ?8 N7 b4 a
编程格式 G65 H12 P#i Q#j R#k4 T, K4 b9 w8 F7 {
例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103 2 y6 K7 C/ E( l3 h) T/ `& z
/ b7 `2 V- p2 b+ M1 o1 B" V! Q
% G2 {* i( F' S, Y + V7 i5 e0 h: N' C* O
$ C, D; L0 l# T$ f9 X0 \9 N
(3)三角函数指令
" V$ C5 }: x0 {5 J
- w! z ]# R) ?/ y/ z2 p" _
( z, u/ O/ h5 H& `+ A
0 \' \: R0 `4 ~# f: }1)正弦函数 #i=#j×SIN(#k)
( |& L' w+ t2 }
4 C O; \7 r6 Y: J: f8 [: y编程格式 G65 H31 P#i Q#j R#k (单位:度) .3 f$ r3 ^7 R- {- K) c8 h2 R& K* L' q$ I
4 m4 M( c3 Q+ R' r5 O+ h
例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103))) |$ R+ X% W7 n' P+ x: C* v9 n( |
2)余弦函数 #i=#j×COS(#k)% O- w, z$ V4 v6 u5 D' X& s
编程格式 G65 H32 P#i Q#j R#k (单位:度)
. k! g' j$ e3 X2 c+ w例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103)) L0 V1 S& v, t2 E
3)正切函数 #i=#j×TAN#k
) u) z5 z9 N+ w- b: H' N5 c编程格式 G65 H33 P#i Q#j R#k (单位:度)
* P/ i5 f$ ]$ t. c例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103))( Z% o5 x4 O# W3 q: ?
4)反正切 #i=ATAN(#j/#k)
! j- t3 D0 Z+ M编程格式 G65 H34 P#i Q#j R#k (单位:度,0o≤ #j ≤360o)
" z; Q8 R) v- |) z. K% D3 T9 K! k例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103)9 O7 Q" k, U3 T3 {
% x3 {$ j; K, H, f8 ]' S / z) U2 O+ q3 w- b
+ ?) d; d; {, B6 W5 H+ } X" ]
(4)控制类指令8 |& K* X j; L) Y! j3 D
7 L9 @4 A1 J. C& I. ^
1 k4 v6 @! M1 S: @/ V
6 z. k v: x+ T! `6 v( f, t1 N编程格式 G65 H80 Pn (n为程序段号)6 A' D4 t7 j& Z* x
例 G65 H80 P120;(转移到N120)
! w9 X5 K7 r2 b7 ]" }1 V2)条件转移1 #j EQ #k(=)
: q9 D; Y# J; j. u编程格式 G65 H81 Pn Q#j R#k (n为程序段号)
1 _* ?7 M; s, ]+ I9 [* d) u例 G65 H81 P1000 Q#101 R#102
& J( m- f% }1 I$ i$ G7 \/ M- d当#101=#102,转移到N1000程序段;若#101≠ #102,执行下一程序段。0 f" X4 r, E1 i' d$ }7 {6 [; ]
3)条件转移2 #j NE #k(≠)
3 G$ m" n% l- X8 H: M编程格式 G65 H82 Pn Q#j R#k (n为程序段号)
7 M3 W+ Z, C2 I1 a$ D! E$ Z- W例 G65 H82 P1000 Q#101 R#102; {: F* d$ o5 E- V7 ?
当#101≠ #102,转移到N1000程序段;若#101=#102,执行下一程序段。
! {; v T( h9 z7 v4)条件转移3 #j GT #k (> )
: d, \' ]1 Q0 N! {' u4 b编程格式 G65 H83 Pn Q#j R#k (n为程序段号)1 B( Y2 g$ @( x H! @& ^: G
例 G65 H83 P1000 Q#101 R#102
% y$ w/ A* q: s当#101 > #102,转移到N1000程序段;若#101 ≤#102,执行下一程序段。 @/ ~# C/ |' C, h
5)条件转移4 #j LT #k(<)
6 R% R7 L9 ~- {5 {: F1 k$ ~5 x! C. ~# Z编程格式 G65 H84 Pn Q#j R#k (n为程序段号)8 R2 r2 m* d/ K7 u
例 G65 H84 P1000 Q#101 R#102
; H# j5 u+ I5 a8 n2 x当#101 < #102,转移到N1000;若#101 ≥ #102,执行下一程序段。/ \& |1 C1 Q; [% c, ^) l6 N# o q6 ?
6)条件转移5 #j GE #k(≥)6 S' C4 J0 \ E, n& O4 X
编程格式 G65 H85 Pn Q#j R#k (n为程序段号)6 ^8 v1 ?. i( f/ _
例 G65 H85 P1000 Q#101 R#102
7 t2 e( \5 }0 H; i2 A当#101≥ #102,转移到N1000;若#101<#102,执行下一程序段。0 t' O& @+ q" } U2 c& z; i
7)条件转移6 #j LE #k(≤)* p; V& q- t4 G8 t5 D p- x
编程格式 G65 H86 Pn Q#j Q#k (n为程序段号), g, p7 ~. A. A( `; _
例 G65 H86 P1000 Q#101 R#102; e' U$ k1 h, u
当#101≤#102,转移到N1000;若#101>#102,执行下一程序段。* A) K5 v# Q* i' }4 U
, T8 a" O1 h5 S/ G9 R+ \3 f
4、使用注意
/ z0 V" a6 h! A" V+ O+ Z+ G @ 为保证宏程序的正常运行,在使用用户宏程序的过程中,应注意以下几点;
. K: q3 t+ i6 Q0 ](1)由G65规定的H码不影响偏移量的任何选择;, }0 K; @0 ], [' L# K* ~
(2)如果用于各算术运算的Q或R未被指定,则作为0处理;
% j' N$ D; b3 j(3)在分支转移目标地址中,如果序号为正值,则检索过程是先向大程序号查找,如果序号为负值,则检索过程是先向小程序号查找。
+ d; C4 k0 v, R' n" @(4)转移目标序号可以是变量。 ! P5 f% b. U. B6 F9 }
) a+ z/ d# w1 c' Y5 v
5、用户宏程序应用举例 :
1 G, ]. i: X% ]2 T# a# | |5 k/ y! k
用宏程序和子程序功能顺序加工圆周等分孔。设圆心在O点,它在机床坐标系中的坐标为(X0,Y0),在半径为r的圆周上均匀地钻几个等分孔,起始角度为α,孔数为n。以零件上表面为Z向零点。 ' b5 g3 ~7 q3 \7 v
8 M+ n: h l, G6 S8 V7 c9 W; A
使用以下保持型变量:
% z4 Z; y) p/ `: H/ ?1 c0 c' a#502:半径r;& z: U' M0 C- S! K
#503:起始角度α;( u( X. {$ Q9 N9 G1 x
#504:孔数n,当n>0时,按逆时针方向加工,当n<0时,按顺时针方向加工;
$ a; w* r2 t/ c) e1 Y) @#505:孔底Z坐标值;
! d! }- m& ~& y& U#506:R平面Z坐标值;
8 B M& L+ n& K, d# c9 w, A+ d0 k9 \#507:F进给量。 , _1 \5 F2 R9 P, A8 ? H
使用以下变量进行操作运算:
3 _6 z E* O9 a4 Z; _9 G& J#100:表示第i步钻第i孔的记数器;, ]8 `) q7 U, g* Z2 x" i
#101:记数器的最终值(为n 的绝对值);5 M5 U6 a( {) W; [/ i% e4 i
#102:第i个孔的角度位置θi的值;
Z# e& H/ D9 y$ e4 f: L#103:第i个孔的X坐标值;
: X: i. j4 A' s; ~) J8 J. ~9 q#104:第i个孔的Y坐标值;
, Z! D0 w$ O) q: L( B+ o j用用户宏程序编制的钻孔子程序如下: % X% A" H6 T9 o& |3 B0 k
O90103 a+ T, x2 u3 }) ^
N110 G65 H01 P#100 Q0 //#100 = 0
; a& ~; {0 B9 V. b+ FN120 G65 H22 P#101 Q#504 //#101 = │#504│$ L1 D$ j3 ?1 `! R
N130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o
! I/ n/ R7 q- JN140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #504
% e" U" T2 B2 E, FN150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102当前孔角度位置θi =α+ (360o×i) / n
+ i! s; @5 p$ m" } LN160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)当前孔的 X坐标
$ K' x3 O; c8 E: F) iN170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 当前孔的Y坐标$ C4 i# o* }3 _- l' u* I S
N180 G90 G00 X#103 Y#104 //定位到当前孔(返回开始平面)
( ^9 F% f1 M. U& |N190 G00 Z#506 //快速进到R平面
$ ^8 j; y, V( l' C( a. ?" B) xN200 G01 Z#505 F#507 //加工当前孔
3 ]6 s j- c" u9 kN210 G00 Z#506 //快速退到R平面3 s0 c; |& x6 I% s# F
N220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔计数
- N' }5 {6 A! H% C8 t: M. `- uN230 G65 H84 P-130 Q#100 R#101 //当#100 < #101时,向上返回到130程序段
6 L) {! p2 x6 P, V* \, `6 ?N240 M99 //子程序结束
3 r o1 R( N5 D$ a; ~
( s1 X* Z! v8 a; R5 u! k
! o9 n0 Y+ g) L% P% k3 S
2 Y8 k& \8 j8 ?* p X3 g* t调用上述子程序的主程序如下: ! @% m c; i( k- b7 i- @% Y5 G
O0010
( @! q8 d) S9 K$ E* Q; T3 MN10 G54 G90 G00 X0 Y0 Z20 //进入加工坐标系! f! P& H- q* j& F
N20 M98 P9010 //调用钻孔子程序,加工圆周等分孔7 o* O& T* p9 H" Y% n
N30 Z20 //抬刀
) o, u" Q2 @; dN40 G00 G90 X0 Y0 //返回加工坐标系零点 / r! {7 M; U% {6 ?2 L0 ^( ]' p
N50 M30 程序结束
: Z1 j1 K2 P( G, W; k! L8 ~设置G54:X=-400,Y=-100,Z=-50。2 I5 s2 ^4 q3 Z' u" P6 \
变量#500~#507可在程序中赋值,也可由MDI方式设定。 0 T, I! h" t9 K6 K9 ^
* |4 O- j9 n) t8 |2 m, ^
B类宏G65& C8 s! [7 G$ ?) W
/ B1 {8 Z9 t( \3 f0 G简单调用(G65)& r, C% h! j( j6 W3 s
功能 G65被指定时,地址P所指定的程式被调用,自变量能传递到用户宏程序中。
6 a6 v6 D: ]8 `, U% c* y5 p 格式 G65 Pp Ll <自变量表>;
( ?- B. [8 j1 u9 n9 @ 其中: p 要调用的程序号
7 D" c( \% w }# M% [* z' R# J l 重复的次数(缺省值为1,取值范围1~9999)3 v/ E! l' k5 d4 Y4 }8 [
自变量 传递给被调用程式的数。通过使用自变量表,值被分配给相应
) C5 Y. @/ V" F! k$ j( \ 的局部变量。# o. ^$ m8 v; ` u9 m
, }0 B5 ]4 c( }6 r }
自变量分为两类。第一类可以使用的字母只能使用一次,各自变量与局部变量的对用关系如下:3 J/ a4 L1 D( ]% Q
8 e$ B8 D _) U. u3 ?& z地址 变量号 地址 变量号 地址 变量号& O& B7 @5 L* M4 ?
A #1 E #8 T #20
* e/ P1 e4 ^8 {) ?7 ]! gB #2 F #9 U #21% x3 l7 z5 G- Z; y: a7 o. `# m
C #3 H #11 V #22' ?/ ?+ A$ z0 D7 t$ t m
I #4 M #13 W #23
# P' b9 M% R% c2 A6 c! m$ rJ #5 Q #17 X #24
, ]; R' w( L# U) X0 fK #6 R #18 Y #25- T. S1 m! G4 |
D #7 S #19 Z #267 c& T( ~% h |/ w
☆ 地址G、L、N、O、P不能当作自变量使用。) s. `- D: y5 T
☆ 不需要的地址可以省略,与省略的地址相应的局部变量被置成空。
7 r1 R; L5 x S( w
4 l6 h5 v+ r6 Z1 }1 ^ 第二类可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自变量使用的类别根据使
/ T/ x2 o) s* C$ T. p) [用的字母自动确定:. R: C8 k6 H% \: t
地址 变量号 地址 变量号 地址 变量号
5 W$ |& Z+ j6 Q0 F& `. U4 MA #1 K3 #12 J7 #23
6 T1 v `/ ]! p7 ?* {4 MB #2 I4 #13 K7 #24
$ `: U$ T$ {1 \$ ^6 RC #3 J4 #14 I8 #25
4 r! h. K5 p0 u n- u( }$ v$ rI1 #4 K4 #15 J8 #26+ n& h7 k+ \9 f
J1 #5 I5 #16 K8 #27' |1 Q I; ~6 h4 J
K1 #6 J5 #17 I9 #28) v) M2 V% F# a& s0 r5 i
I2 #7 K5 #18 J9 #293 i6 A+ M, D# A' `) @
J2 #8 I6 #19 K9 #30( Y" f8 x7 W( x% b* x/ O
K2 #9 J6 #20 I10 #31
z, y+ u$ n9 [" g ]I3 #10 K6 #21 J10 #32
% ^) f* e: W$ Z0 a- h4 O XJ3 #11 I7 #22 K10 #33; d' ?7 x! Q) h. ?# L9 U$ P9 D" z
☆ 在实际的程序中,I、J、K的下标不用写出来。( {/ L# l, }4 z9 f0 }
注意:( I$ m9 u, ~) R4 E
☆ 在自变量之前一定要指定G65。) S# U# ]0 t; y2 W
☆ 如果将两类自变量混合使用,系统自己会辨别属于哪类,最后指定的那一类优先。
! a3 P( r0 M6 E& v- `4 `* ^☆ 传递的不带小数点的自变量的单位与每个地址的最小输入增量一致,其值与机床的系统结构非常一致。为了程序的兼容性,建议使用带小数点的自变量。
. V6 @7 {- Z8 ^: M- S3 j! _☆ 最多可以嵌套含有简单调用(G65)和模态调用(G66)的程序4级。不包括子程序调用(M98)。局部变量可以嵌套0~4级。主程序的级数是0。用G65和G66每调用一次宏,局部变量的级数增加一次。上一级局部变量的值保存在NC 中。宏程序执行到M99时,控制返回到调用的程序。这时局部变量的级数减1,恢复宏调用时存储的局部变量值。
) J0 b6 E8 s( q) h m G65简单宏调用可方便地向被调用的副程式传递数据,但是用它制作诸如固定循环
% u! {$ \ `" O3 J6 P% g8 U之类的移动到坐标后才加工的程式就无能为力了。 |
评分
-
查看全部评分
|