|
发表于 2011-7-12 08:32:36
|
显示全部楼层
回复 1# 钟云驹
9 P& o t; F' O% A" t J& {+ ~: ^详解A类宏
6 Y* q3 n0 ^% `: z/ x分类:默认分类 字号: 大大 中中 小小 用户宏功能是提高数控机床性能的一种特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一样存入存储器,然后用一个总指令代表它们,使用时只需给出这个总指令就能执行其功能。
8 ~8 m; ^& b( M* | 用户宏功能主体是一系列指令,相当于子程序体。既可以由机床生产厂提供,也可以由机床用户自己编制。4 W, b2 s# u! H- g
宏指令是代表一系列指令的总指令,相当于子程序调用指令。
9 V9 Y+ e/ J; i 用户宏功能的最大特点是,可以对变量进行运算,使程序应用更加灵活、方便。7 b( @2 F( U3 _6 A" s
用户宏功能有A、B两类。这里主要介绍A类宏功能,B类宏功能请参见本课程的B类宏程序介绍。
$ G' [: h; M0 b* ]. ?3 w1、变量
! o1 m2 E3 n: v9 a1 U8 w9 G 在常规的主程序和子程序内,总是将一个具体的数值赋给一个地址。为了使程序更具通用性、更加灵活,在宏程序中设置了变量,即将变量赋给一个地址。6 a g/ o3 ^' R9 ^3 F
(1)变量的表示
) t x3 |! W) H6 r& D% P: z变量可以用“#”号和跟随其后的变量序号来表示:#i(i=1,2,3......)
: b: [: M3 l+ \0 K' k/ O) ^例:#5, #109, #501。8 ^$ e/ h0 P; `& Y- D" y( B G& O( y
(2)变量的引用6 M7 y; b, Y5 H) w1 O7 }' _
将跟随在一个地址后的数值用一个变量来代替,即引入了变量。
" C$ d0 x1 c; v: C7 Y) s/ E. Z例:对于F#103,若#103=50时,则为F50;! W( R5 L2 L! l$ h J2 i
对于Z-#110,若#110=100时,则Z为-100;- l4 j L* O3 s- P: V* o
对于G#130,若#130=3时,则为G03。8 {; ]8 K+ U! G+ ^# o
(3)变量的类型
$ z5 B' G0 ^( G/ _ 0MC系统的变量分为公共变量和系统变量两类。
- S* i% {8 z$ r- B) w2 {! F; ?. V1)公共变量 4 }; r' \% p5 i5 |" e
公共变量是在主程序和主程序调用的各用户宏程序内公用的变量。也就是说,在一个宏指令中的#i与在另一个宏指令中的#i是相同的。
9 }/ G9 u. x$ s, N/ L. P0 H+ T7 I公共变量的序号为:#100~#131;#500~#531。其中#100~#131公共变量在电源断电后即清零,重新开机时被设置为“0”;#500~#531公共变量即使断电后,它们的值也保持不变,因此也称为保持型变量。 6 y$ d, b( V1 Z2 x* P' F2 g
2 i0 w% _9 r: `" Z9 |4 q# a
; d: X: a# k6 ^- z+ ?
! O# N0 e2 ^. [( Z4 _* y% c) g
2)系统变量
" P( D+ M, A9 }& Q% b 系统变量定义为:有固定用途的变量,它的值决定系统的状态。系统变量包括刀具偏置变量,接口的输入/输出信号变量,位置信息变量等。
0 b1 u: O$ M7 L 系统变量的序号与系统的某种状态有严格的对应关系。例如,刀具偏置变量序号为#01~#99,这些值可以用变量替换的方法加以改变,在序号1~99中,不用作刀偏量的变量可用作保持型公共变量#500~#531。
- k+ J$ K! _% O) m8 S 接口输入信号#1000~#1015,#1032。通过阅读这些系统变量,可以知道各输入口的情况。当变量值为“1”时,说明接点闭合;当变量值为“0”时,表明接点断开。这些变量的数值不能被替换。阅读变量#1032,所有输入信号一次读入。# F8 A2 X1 M5 B) A6 h
2、宏指令G655 P, l$ |: H. }" X" o7 v
宏指令G65可以实现丰富的宏功能,包括算术运算、逻辑运算等处理功能。
6 _0 K7 J4 m( _) F 一般形式: G65 Hm P#i Q#j R#k; r& d6 l. Z: Z, k
式中:--宏程序功能,数值范围01~99;
5 @! I$ M1 J& \) ]; T#i--运算结果存放处的变量名;) _* y& y0 \& o7 [) |& j
#j--被操作的第一个变量,也可以是一个常数;
( Z! s' D2 F# D0 T5 {: ?3 S#k--被操作的第二个变量,也可以是一个常数。6 z/ U# `% M, |; X, b
例如,当程序功能为加法运算时:3 t9 m8 W, x3 v4 u; P
程序 P#100 Q#101 R#102...... 含义为#100=#101+#102
6 P9 h! n7 z- o/ X: E程序 P#100 Q-#101 R#102...... 含义为#100=-#101+#102
9 F5 i( H0 g- l1 z! F! k" y程序 P#100 Q#101 R15...... 含义为#100=#101+15 ) @' p# e9 O Y, D1 M5 H, |
0 M) f- i i5 k* I9 v7 w6 z1 ?' C3、宏功能指令
6 ?$ d& c& F" x
: D5 {. Y, J* b! q* \ L(1)算术运算指令
# C) J2 b. h! j' e; t) c! a- w, O0 N5 F
1)变量的定义和替换 #i=#j T$ B* M' |$ F4 w
: E, _! Z2 T8 ]5 n0 o, S* t
编程格式 G65 H01 P#i Q#j
/ h2 I: ~2 u$ I5 ]9 i w例 G65 H01 P#101 Q1005; (#101=1005)
/ B5 q) z. J2 C3 I, GG65 H01 P#101 Q-#112;(#101=-#112)
! \1 k- \# j# r9 l0 v2)加法 #i=#j+#k* {" U3 `3 e, t4 A8 a- |
编程格式 G65 H02 P#i Q#j R#k 8 b: m# \0 i4 F4 v4 I5 u
例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103) W$ c& u+ H6 v3 A7 m e0 x
3)减法 #i=#j-#k
( g% X! l/ v; b/ t编程格式 G65 H03 P#i Q#j R#k
- e4 K& w" v. p: P# i9 Y例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103)
G2 A0 c% T$ m6 ?9 ~: W. @1 B4)乘法 #i=#j×#k) P1 n: z, W6 {* W9 o X+ H3 C
编程格式 G65 H04 P#i Q#j R#k+ k* J0 O* {4 c4 y& L$ |) [) b% ?
例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103)
: c5 U( Z7 J M5)除法 #i=#j / #k
% P6 x( |0 ~! j+ n7 ]% B编程格式 G65 H05 P#i Q#j R#k
& b1 { c. d* O例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103)
- }; ]$ ]. {6 Q9 f) ?7 W) H6)平方根 #i=
+ s- v, Q1 G/ J2 M- c5 ?% y) p编程格式 G65 H21 P#i Q#j
- Z ~2 \1 r' m3 v; s例 G65 H21 P#101 Q#102;(#101= )" C6 P8 m$ N5 o, G0 x( I
7)绝对值 #i=│#j│, E/ y1 ~% X. P' P- \. \/ m
编程格式 G65 H22 P#i Q#j/ N) I* O* y7 E: I8 V. l9 b
例 G65 H22 P#101 Q#102;(#101=│#102│) : f7 B% `" q$ i# A9 j
8)复合平方根1 #i=
! B+ `) r( [5 L" U* p/ R编程格式 G65 H27 P#i Q#j R#k2 ?2 P; o# {, Q0 R; q# X: E
例 G65 H27 P#101 Q#102 R#103;( #101=
/ v( ^" R7 t3 S5 a9)复合平方根2 #i= 5 C; g) h7 A, y1 H0 l3 ]* c$ E' p5 T
编程格式 G65 H28 P#i Q#j R#k
% }* W( h9 b: D例 G65 H28 P#101 Q#102 R#103 2 V: h/ `# x% v
, \/ D9 s" K3 t# P; m' B/ \6 I' g1)逻辑或 #i=#j OR #k6 c- n! i9 O( `$ W' m$ W+ B
编程格式 G65 H11 P#i Q#j R#k$ i3 m7 \8 u# B7 a6 [3 ~3 W
例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103)( @) ]( `8 E1 R) @3 M8 \+ X k3 o
' c4 v5 {1 B7 x' y) j$ @2)逻辑与 #i=#j AND #k
( k: M: @# b B0 d1 |& b编程格式 G65 H12 P#i Q#j R#k
/ U; |: W+ R% Y3 i" y! B例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103
. P/ x) f" Z0 i* m7 u9 q4 ?8 S; L( g( g) ]9 [
4 a) x& e- d8 X3 S' J: t" ]
) a. Q; P0 B$ Y8 K9 L( G# ]
9 H$ K, h0 d/ r; N1 f( H7 F
(3)三角函数指令 ) `$ z/ ?6 e5 L+ T
" x) Q2 D3 @' S1 l) ~$ ^3 o
; E. m/ G% d6 A' T! z
0 g- Z5 R2 B7 p/ s1)正弦函数 #i=#j×SIN(#k)
& p/ G* o0 m1 r; f4 t) N4 f3 }1 z& Q" x5 {+ ~' @ V
编程格式 G65 H31 P#i Q#j R#k (单位:度) .
: Y+ y! `- q* k2 t t; g2 w( r
8 g# p/ l2 I h) I4 H1 A& z例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103))0 s! x5 ^( N2 V5 s
2)余弦函数 #i=#j×COS(#k)4 n# h! C: w4 [* B* n& H5 @! o
编程格式 G65 H32 P#i Q#j R#k (单位:度)
% v0 O# G+ R; y3 i$ w2 L例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103)), Q% x) m ^1 k
3)正切函数 #i=#j×TAN#k
) B3 x/ R: R; d2 \3 w编程格式 G65 H33 P#i Q#j R#k (单位:度)) c6 G: o$ k p* } c% i
例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103))
6 e" c& J' O9 R& A4)反正切 #i=ATAN(#j/#k)- X4 Q1 {, s% }
编程格式 G65 H34 P#i Q#j R#k (单位:度,0o≤ #j ≤360o)4 B7 ~+ A/ m% t% k2 |. ?4 q
例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103)- h6 c7 a; q$ O: ?! h
; i; n4 X1 n# T# c7 E/ p. j" h% H
- L& v1 {& r2 \- l/ |% I! G- G+ Z9 j' j7 {* F
(4)控制类指令) T9 B# C& d% A+ C; b
# f, t7 H8 a3 e3 I: x! U( q, ^
1 `7 B7 N. y6 k1 o# t" ~$ X! y( Q3 i- s4 t
编程格式 G65 H80 Pn (n为程序段号)
" c, @9 D4 [% K) u$ ^7 H; n例 G65 H80 P120;(转移到N120)( H3 t" \. C5 x2 r% e/ c8 ~9 k
2)条件转移1 #j EQ #k(=)+ z& ]$ F) t! E+ P
编程格式 G65 H81 Pn Q#j R#k (n为程序段号)
/ I' O8 b; v9 ?例 G65 H81 P1000 Q#101 R#102
. B+ W# I& W5 A0 u. l+ h% F$ B当#101=#102,转移到N1000程序段;若#101≠ #102,执行下一程序段。
" `+ j- ~& L% {3 s2 U9 I f, j9 R3)条件转移2 #j NE #k(≠)' e" s _6 n9 W3 b1 ~
编程格式 G65 H82 Pn Q#j R#k (n为程序段号). O/ y* G8 E# ~( A- ~$ \$ d
例 G65 H82 P1000 Q#101 R#102
, ] k6 F6 d( q* s6 a4 R当#101≠ #102,转移到N1000程序段;若#101=#102,执行下一程序段。. X1 @4 Q8 i9 b: N* O* v0 J
4)条件转移3 #j GT #k (> )* v7 C0 Y$ D1 d! p$ K5 r( W/ K- X7 E
编程格式 G65 H83 Pn Q#j R#k (n为程序段号)
- K3 K; E) M' }$ C& a1 _$ y例 G65 H83 P1000 Q#101 R#102; ?; L' {- B1 L, |4 y
当#101 > #102,转移到N1000程序段;若#101 ≤#102,执行下一程序段。, |0 @8 t( j9 E( [) h
5)条件转移4 #j LT #k(<)
! n3 ~& e) t3 I l. a/ {- m! r编程格式 G65 H84 Pn Q#j R#k (n为程序段号)
2 _4 n F5 Y0 t4 t2 J5 o" g7 Y+ L例 G65 H84 P1000 Q#101 R#102 5 Y) A+ N+ @2 }8 M. V
当#101 < #102,转移到N1000;若#101 ≥ #102,执行下一程序段。+ O+ ], m5 f, u5 h
6)条件转移5 #j GE #k(≥)
2 Q+ l( }+ y9 G- V( I9 f# j编程格式 G65 H85 Pn Q#j R#k (n为程序段号). H; J& C' a- f" h4 J" b
例 G65 H85 P1000 Q#101 R#102
" { r$ c% P/ \- r% [2 _$ O当#101≥ #102,转移到N1000;若#101<#102,执行下一程序段。
+ A+ d7 X! s* `7)条件转移6 #j LE #k(≤)* e- {* u! }. F, G* V: }# }
编程格式 G65 H86 Pn Q#j Q#k (n为程序段号)
" A" A a. U0 \4 I例 G65 H86 P1000 Q#101 R#102% l# ^* @% O- J6 V2 @. @/ y
当#101≤#102,转移到N1000;若#101>#102,执行下一程序段。# [8 h/ J# |7 m" a+ w
5 \* R* m6 e% S! C$ w# \( S- {4、使用注意
9 x' K% ~2 W0 ]2 N4 W# y. z" ] 为保证宏程序的正常运行,在使用用户宏程序的过程中,应注意以下几点;
( ] Y4 S( D4 U$ H3 n(1)由G65规定的H码不影响偏移量的任何选择;( @& C7 v6 }' T- k0 q3 k, o
(2)如果用于各算术运算的Q或R未被指定,则作为0处理;
4 c1 X* k$ V1 J% @1 D(3)在分支转移目标地址中,如果序号为正值,则检索过程是先向大程序号查找,如果序号为负值,则检索过程是先向小程序号查找。/ p. v/ o' ]7 @5 x# n' [
(4)转移目标序号可以是变量。
1 u% M6 w- s' l( Q. x: X4 p' ~4 ~; S3 L0 ^9 }- Q+ p& U+ ^
5、用户宏程序应用举例 : 1 P$ `: g1 ]& r+ [
# d, E7 i4 C D( e' Z- _
用宏程序和子程序功能顺序加工圆周等分孔。设圆心在O点,它在机床坐标系中的坐标为(X0,Y0),在半径为r的圆周上均匀地钻几个等分孔,起始角度为α,孔数为n。以零件上表面为Z向零点。
" z* ~9 u, M" K$ t/ U& `$ K% U: x: P! D/ d" a+ `# a/ a
使用以下保持型变量:
, ]4 ]4 G9 i6 c/ m1 H# |! q, y8 \# F#502:半径r;7 G( r" A4 g8 n9 w9 _
#503:起始角度α;
. ]" M$ w% z! p/ a5 ]5 r#504:孔数n,当n>0时,按逆时针方向加工,当n<0时,按顺时针方向加工;
/ m4 ]# T; o3 ]6 H& V( C#505:孔底Z坐标值;' V D8 s' s9 O- f& D9 h* E
#506:R平面Z坐标值;8 Y' k1 I7 n; e# O
#507:F进给量。
; y' N4 m( W8 s/ ^使用以下变量进行操作运算:% h8 g" O, I5 G( g! e
#100:表示第i步钻第i孔的记数器;
9 _4 d/ L3 s$ y! _#101:记数器的最终值(为n 的绝对值);$ D1 h3 i0 i( Y6 P! A
#102:第i个孔的角度位置θi的值; & v8 k& J# ?2 r; O& v, @
#103:第i个孔的X坐标值;- R) x' Y& a$ K0 G1 B
#104:第i个孔的Y坐标值;
+ k k! P2 ^: Y$ @/ d3 [5 d用用户宏程序编制的钻孔子程序如下: 0 v- [# v1 d8 x# y
O90107 g f9 S F8 s2 R' Q
N110 G65 H01 P#100 Q0 //#100 = 0) s2 D+ y) L/ W8 v- L
N120 G65 H22 P#101 Q#504 //#101 = │#504│
& X- }0 r8 R9 d. d6 MN130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o+ i$ P, `/ L( v
N140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #504
/ {9 J# ~/ I( M( [N150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102当前孔角度位置θi =α+ (360o×i) / n" f. B( L* U; d6 i, u, u
N160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)当前孔的 X坐标9 h9 A7 U' a* g c I! \1 ~8 ^# j% O
N170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 当前孔的Y坐标2 s) d8 y$ a0 p
N180 G90 G00 X#103 Y#104 //定位到当前孔(返回开始平面)
* v* u$ f) k3 X- d* ^N190 G00 Z#506 //快速进到R平面
" M% N+ P4 ^% z) JN200 G01 Z#505 F#507 //加工当前孔
% z0 V( o+ f" I4 r' ZN210 G00 Z#506 //快速退到R平面7 `$ ~. E8 j7 N/ O* L& n
N220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔计数
) H# `% \+ q9 H: Z. {4 TN230 G65 H84 P-130 Q#100 R#101 //当#100 < #101时,向上返回到130程序段
6 F$ H4 Z* B' E+ S1 e' kN240 M99 //子程序结束
6 n0 y A! L& A8 v
% S" q, C( k; R9 {. ?5 _
5 A% c; p" T8 }! g8 B% m% B- C# {, o2 q# B* D+ [
调用上述子程序的主程序如下:
: J' n& S6 ]+ N5 AO0010. m+ I% Q. ^7 i& O7 B& W
N10 G54 G90 G00 X0 Y0 Z20 //进入加工坐标系
6 v) k1 u/ B* Y: u$ d0 ]. rN20 M98 P9010 //调用钻孔子程序,加工圆周等分孔
9 o2 j0 h: l& N6 u: Q0 RN30 Z20 //抬刀& m7 g, C" n* M3 T- E4 S
N40 G00 G90 X0 Y0 //返回加工坐标系零点
/ }3 ~! ]; ^, ?5 AN50 M30 程序结束
9 I" B5 I2 l1 t" Z设置G54:X=-400,Y=-100,Z=-50。, |, n5 S3 C4 R- p# P' R! N3 N! t, P
变量#500~#507可在程序中赋值,也可由MDI方式设定。
) l, H& p: ]' B- ]8 G+ _' U
. Y9 R( @ T2 r* e: c. YB类宏G65
1 C- Y5 p* H2 C- e0 k H1 _/ }, u/ A! D. z
简单调用(G65) g( ], t* U( K; ~) o9 t
功能 G65被指定时,地址P所指定的程式被调用,自变量能传递到用户宏程序中。
. b# l" s, t% r$ | 格式 G65 Pp Ll <自变量表>;& c/ l' o( W3 M" R- F
其中: p 要调用的程序号
/ u Q1 U% B7 ~% x. N7 \ l 重复的次数(缺省值为1,取值范围1~9999)$ H& ?, I5 f' [: O2 P9 P( i
自变量 传递给被调用程式的数。通过使用自变量表,值被分配给相应
7 h/ z! _: y8 v5 g7 ` 的局部变量。 D, v9 R5 P+ o. m) U* R! A' X9 J) f
6 ]3 s# z$ h7 R" s' E) Y* s 自变量分为两类。第一类可以使用的字母只能使用一次,各自变量与局部变量的对用关系如下:3 F: ?; C8 x; \. }* Z4 A+ N
3 F" u8 Z9 D5 C# o地址 变量号 地址 变量号 地址 变量号
; }& c& z; X/ }% n) S1 PA #1 E #8 T #20
) E& v. W" F5 `* y8 Y* F$ r% z5 R9 pB #2 F #9 U #21
: N& C2 P5 D5 {6 f& IC #3 H #11 V #223 t" g# Q! y; \2 T/ w, ]" f9 K
I #4 M #13 W #23# ?! s0 R; q/ Q* s7 |/ c+ J( O
J #5 Q #17 X #24
, g' V+ d& Y8 n8 bK #6 R #18 Y #25
; z3 R/ e" {5 \# c( g9 q5 tD #7 S #19 Z #26
G' G B( h# n! W3 }☆ 地址G、L、N、O、P不能当作自变量使用。
! e, _' L3 P* u' ]1 e/ a7 \4 K☆ 不需要的地址可以省略,与省略的地址相应的局部变量被置成空。* ` j2 g5 X- ]
$ O1 L( O: X* \7 ^! ]& Y$ l% H
第二类可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自变量使用的类别根据使
4 m9 j! ~. W: Y6 T0 K3 g/ Q+ i用的字母自动确定:
s% k7 o" h; b8 W& l, L地址 变量号 地址 变量号 地址 变量号
/ {# r/ T7 }- L @A #1 K3 #12 J7 #234 d8 b6 t3 }$ @# ^
B #2 I4 #13 K7 #24: G" A' @$ J) d+ K( |
C #3 J4 #14 I8 #258 M7 V$ o, t0 D; M3 T
I1 #4 K4 #15 J8 #269 R& K' H8 g7 }
J1 #5 I5 #16 K8 #27
+ @: @0 d4 p6 o, @K1 #6 J5 #17 I9 #28
! M1 |3 g2 I# N3 KI2 #7 K5 #18 J9 #29
( U& }6 a/ i# L# ZJ2 #8 I6 #19 K9 #301 j) P- X" u% H- R k+ e4 A5 A6 b
K2 #9 J6 #20 I10 #31
" U2 l$ I2 l l9 QI3 #10 K6 #21 J10 #32 X0 W$ F: D6 a5 X) j+ g
J3 #11 I7 #22 K10 #33
" l z, X8 b( S$ h; P: M☆ 在实际的程序中,I、J、K的下标不用写出来。
& f) \0 J e$ ?1 X9 s( O1 L# d注意:
5 h# ^: q$ h0 D# t& b☆ 在自变量之前一定要指定G65。 t0 m% a& a" `5 ?) [
☆ 如果将两类自变量混合使用,系统自己会辨别属于哪类,最后指定的那一类优先。
+ \5 ~, r; K) a' @☆ 传递的不带小数点的自变量的单位与每个地址的最小输入增量一致,其值与机床的系统结构非常一致。为了程序的兼容性,建议使用带小数点的自变量。% E1 z7 N l2 @" d# k
☆ 最多可以嵌套含有简单调用(G65)和模态调用(G66)的程序4级。不包括子程序调用(M98)。局部变量可以嵌套0~4级。主程序的级数是0。用G65和G66每调用一次宏,局部变量的级数增加一次。上一级局部变量的值保存在NC 中。宏程序执行到M99时,控制返回到调用的程序。这时局部变量的级数减1,恢复宏调用时存储的局部变量值。" [: w8 h1 s! P
G65简单宏调用可方便地向被调用的副程式传递数据,但是用它制作诸如固定循环$ |& [$ j! T. A: N) v+ x6 P/ F0 Y
之类的移动到坐标后才加工的程式就无能为力了。 |
评分
-
查看全部评分
|