|
|
发表于 2011-7-12 08:32:36
|
显示全部楼层
回复 1# 钟云驹
% _( j8 ] J; M/ _详解A类宏9 y/ ?2 \& ~; T5 _/ F$ D6 g0 Y
分类:默认分类 字号: 大大 中中 小小 用户宏功能是提高数控机床性能的一种特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一样存入存储器,然后用一个总指令代表它们,使用时只需给出这个总指令就能执行其功能。- J3 ]& z9 E3 Z# H3 R
用户宏功能主体是一系列指令,相当于子程序体。既可以由机床生产厂提供,也可以由机床用户自己编制。
9 G$ H5 H1 W; Z3 d 宏指令是代表一系列指令的总指令,相当于子程序调用指令。
7 o+ J( S3 `* L2 e: U, t% z2 f 用户宏功能的最大特点是,可以对变量进行运算,使程序应用更加灵活、方便。
! e! ]! y4 e& L E1 D& n. K 用户宏功能有A、B两类。这里主要介绍A类宏功能,B类宏功能请参见本课程的B类宏程序介绍。
5 A% m x( `! ~7 V$ G2 L4 p1、变量
h* M1 ~3 k4 O! L 在常规的主程序和子程序内,总是将一个具体的数值赋给一个地址。为了使程序更具通用性、更加灵活,在宏程序中设置了变量,即将变量赋给一个地址。
8 X1 n2 D0 D4 Q- K' i: S' d: u(1)变量的表示% e$ l( X9 t4 q/ o" j5 ^
变量可以用“#”号和跟随其后的变量序号来表示:#i(i=1,2,3......)
3 K d) C& _# m例:#5, #109, #501。, o- b- H6 Y+ f, L
(2)变量的引用3 V, W3 g) K2 o+ @1 W, ^/ O; A
将跟随在一个地址后的数值用一个变量来代替,即引入了变量。. d1 _9 P4 T {8 Q
例:对于F#103,若#103=50时,则为F50;
, z& h- ^; P. k* E对于Z-#110,若#110=100时,则Z为-100;
. Q7 V1 L, o7 t; Z对于G#130,若#130=3时,则为G03。
- e& Z$ }. h. v& |2 V$ J(3)变量的类型
+ \4 f. _0 S5 b9 Z5 H- a, n2 j& P; ]0 E: b 0MC系统的变量分为公共变量和系统变量两类。
+ m1 o) ] ^6 M! N' l- h, k1)公共变量 3 d" g3 T! `# D* _
公共变量是在主程序和主程序调用的各用户宏程序内公用的变量。也就是说,在一个宏指令中的#i与在另一个宏指令中的#i是相同的。8 r- g8 G/ k' {0 T- y; v
公共变量的序号为:#100~#131;#500~#531。其中#100~#131公共变量在电源断电后即清零,重新开机时被设置为“0”;#500~#531公共变量即使断电后,它们的值也保持不变,因此也称为保持型变量。
) ?6 E8 m8 d0 y% V
! k7 P. d& F* d s* m
0 b {9 U7 U7 p/ H' C" [: C
7 u- A \/ D4 X" V3 @2)系统变量
% f: i/ h* g, j7 k9 R" x 系统变量定义为:有固定用途的变量,它的值决定系统的状态。系统变量包括刀具偏置变量,接口的输入/输出信号变量,位置信息变量等。
0 Z/ t H* z- `0 z& g5 T 系统变量的序号与系统的某种状态有严格的对应关系。例如,刀具偏置变量序号为#01~#99,这些值可以用变量替换的方法加以改变,在序号1~99中,不用作刀偏量的变量可用作保持型公共变量#500~#531。
" q. R* A8 T4 [2 w 接口输入信号#1000~#1015,#1032。通过阅读这些系统变量,可以知道各输入口的情况。当变量值为“1”时,说明接点闭合;当变量值为“0”时,表明接点断开。这些变量的数值不能被替换。阅读变量#1032,所有输入信号一次读入。
- \/ Z# p- i; Z$ Y1 L2 @2、宏指令G65
- }! i7 G9 o5 e, z3 L 宏指令G65可以实现丰富的宏功能,包括算术运算、逻辑运算等处理功能。
' \/ T& [1 v3 v/ E* O0 l7 E 一般形式: G65 Hm P#i Q#j R#k
8 a6 @, [3 C1 t2 d9 ^3 a( d式中:--宏程序功能,数值范围01~99;
0 C- B8 s5 j0 ? p0 g#i--运算结果存放处的变量名;+ t/ }3 P9 U$ ]4 [7 t; z
#j--被操作的第一个变量,也可以是一个常数;
, F% F5 u: V$ T+ C [#k--被操作的第二个变量,也可以是一个常数。
3 ~. `8 C8 U/ j例如,当程序功能为加法运算时:
+ y+ G7 {: f4 ~程序 P#100 Q#101 R#102...... 含义为#100=#101+#1027 ~$ B1 V$ Z( z9 {; k" S U4 J9 h
程序 P#100 Q-#101 R#102...... 含义为#100=-#101+#102* h5 H6 t! B' a7 b: k
程序 P#100 Q#101 R15...... 含义为#100=#101+15 * R0 }; R" B ]6 S, }
6 i, G" c6 ?+ y
3、宏功能指令
& j4 k; H! U$ j, U" { ?3 B2 }1 e1 Z( P9 S& e& f
(1)算术运算指令
* l, |' [+ C5 ?( u4 T( @% M3 U; k# f, u! t6 A0 U; t
1)变量的定义和替换 #i=#j
+ n/ l. d) l# Z* e" [1 U" t, H* o& Q1 _, Z- A8 O
编程格式 G65 H01 P#i Q#j
# E$ E9 p+ Z1 S+ p4 Z, l1 j例 G65 H01 P#101 Q1005; (#101=1005) 6 l* f. o: N$ T
G65 H01 P#101 Q-#112;(#101=-#112)
* I6 C; K- m/ {& }2)加法 #i=#j+#k M- K: B2 F3 |5 B. J
编程格式 G65 H02 P#i Q#j R#k 6 g, D. H7 L: R W, o6 Q c
例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103)1 N9 r8 v: A; [
3)减法 #i=#j-#k. e, x! v; t* ]( e- P6 t: k) H# x
编程格式 G65 H03 P#i Q#j R#k
. ]5 p& H6 w) B" I例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103)( |3 p5 |8 B( h1 \3 l0 f: k }$ K
4)乘法 #i=#j×#k
~9 y$ P6 u9 @编程格式 G65 H04 P#i Q#j R#k! k0 Z1 B* w. G0 K
例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103)
, R; V1 [( g( I5)除法 #i=#j / #k3 `( n9 l+ ~( N0 @9 R% {: J) \
编程格式 G65 H05 P#i Q#j R#k8 ^* f& P/ J- u/ J
例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103)
9 g2 k9 g6 q3 G% L6)平方根 #i= 1 ?4 \8 w7 a" L! g
编程格式 G65 H21 P#i Q#j7 ]0 J; u" t4 k; H3 I2 J1 j
例 G65 H21 P#101 Q#102;(#101= )
* `- p# H! o& T1 {6 l7)绝对值 #i=│#j│
* H4 H+ R% N2 Z, T$ R! n+ H7 @编程格式 G65 H22 P#i Q#j
^/ e, K r8 g# B6 u4 }% G例 G65 H22 P#101 Q#102;(#101=│#102│)
m/ e4 b" j" \% W9 m+ s8)复合平方根1 #i=
+ u3 o) ?( t4 o$ ?, P/ e3 R& b, Q编程格式 G65 H27 P#i Q#j R#k
4 A* K D' }2 F# s) ] a& [# B例 G65 H27 P#101 Q#102 R#103;( #101=
9 t% c) x4 C d# [! h6 X) y$ d2 ?9)复合平方根2 #i= ! q+ I8 v9 N! ~# s- D
编程格式 G65 H28 P#i Q#j R#k
0 v ]5 Y6 n7 J1 F* d* S0 ?9 [8 w例 G65 H28 P#101 Q#102 R#103 2 Q0 S1 o% @$ o" M7 s+ g
/ q) w V# b) }# U. K& V2 M
1)逻辑或 #i=#j OR #k4 U3 s& s% y7 R# \
编程格式 G65 H11 P#i Q#j R#k
; |" M0 m) U; p- X+ O" o例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103): V6 P# I l: v% W+ N
+ }" U( R5 ]) H2)逻辑与 #i=#j AND #k6 ~6 \7 G/ O6 C* ~+ P, ^% D" W
编程格式 G65 H12 P#i Q#j R#k0 d8 x0 A* ?5 U0 |; x
例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103
1 W$ ]. {2 b, i+ o8 s2 H6 ^( k, M5 E! [5 P6 d) s+ I
% P" J, m1 i7 r! o
4 v$ s; W! [1 e; E; x
' O$ o2 N! [ h/ L1 P(3)三角函数指令
- I( e. T T i0 ?# y3 k J' e; H: }* T( i9 F j
3 h" |# k" t$ M, Q+ C: _ I4 s; b2 w4 r& V% ^
1)正弦函数 #i=#j×SIN(#k)
$ O! S, t, O* H: x/ r. o: J s* c: H
编程格式 G65 H31 P#i Q#j R#k (单位:度) .
% Q9 v" b1 v3 K' _# a
' [) S* O. l6 L8 e: E+ ]2 X1 U例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103))
& E* A3 C3 E4 b. O! B; Y: l2)余弦函数 #i=#j×COS(#k)- Q% V" B4 p7 I) l4 ~' y* M
编程格式 G65 H32 P#i Q#j R#k (单位:度)- p; t( P9 ^+ g, D
例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103))- ?" J) U+ z ~+ \* Q7 U2 u
3)正切函数 #i=#j×TAN#k3 A4 n: P1 T% _4 a, y
编程格式 G65 H33 P#i Q#j R#k (单位:度)
6 T; Z$ F) X4 F6 ~; y例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103))
+ [. m3 L$ F) m0 M7 C5 o4)反正切 #i=ATAN(#j/#k)
0 e# L( `; n! m- F# \" T编程格式 G65 H34 P#i Q#j R#k (单位:度,0o≤ #j ≤360o)
( z( c! S2 T ^) [# ?3 K5 z例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103)
, g; N1 u$ h+ {9 }* i+ ~& k0 R' d2 D+ M- _
& u" Y4 c* S5 f) ?7 c
3 M Q& ^" G7 x5 t$ `2 E
(4)控制类指令
6 `. o# V5 N4 L# @' h/ p3 Q! X+ Z% ^! @, v) e8 d
9 x( R. `- ?8 k. ]' R
& w" c0 ?& [$ g
编程格式 G65 H80 Pn (n为程序段号)
+ Y0 [# a; j" [例 G65 H80 P120;(转移到N120)
. n, K* y0 x2 @, U2 G2)条件转移1 #j EQ #k(=)* M* c: ]/ J9 t, G, H5 x
编程格式 G65 H81 Pn Q#j R#k (n为程序段号)6 x9 G3 f4 X) ]5 `6 ~0 Z9 w
例 G65 H81 P1000 Q#101 R#102" L1 t. g l' i
当#101=#102,转移到N1000程序段;若#101≠ #102,执行下一程序段。
) p4 |$ V: q$ Q, t S; d3)条件转移2 #j NE #k(≠)
# K2 b% O" v9 L3 Y编程格式 G65 H82 Pn Q#j R#k (n为程序段号)
) O; {. t4 r4 N例 G65 H82 P1000 Q#101 R#102- G4 } B8 q4 N6 p; i4 D% r7 m2 O
当#101≠ #102,转移到N1000程序段;若#101=#102,执行下一程序段。6 S3 O0 q6 Z5 y( y
4)条件转移3 #j GT #k (> )
& R3 l4 h# M; t, q/ x编程格式 G65 H83 Pn Q#j R#k (n为程序段号)
9 q. K& g4 [+ I" ?+ `6 R例 G65 H83 P1000 Q#101 R#102% \3 A" J9 _9 B; }6 t
当#101 > #102,转移到N1000程序段;若#101 ≤#102,执行下一程序段。
- y1 {- ~* X$ U8 P5)条件转移4 #j LT #k(<); f5 E. r! V/ I6 a6 D1 V' |
编程格式 G65 H84 Pn Q#j R#k (n为程序段号)" m* T2 b, F, H% [" f3 W
例 G65 H84 P1000 Q#101 R#102 - ]' A) C6 [6 `! X& y# N
当#101 < #102,转移到N1000;若#101 ≥ #102,执行下一程序段。
% J+ S* q+ m9 Z' H3 ?6)条件转移5 #j GE #k(≥)7 I9 K: N, a v, ^- U6 p; ?
编程格式 G65 H85 Pn Q#j R#k (n为程序段号)
# L5 g' P' j1 d+ H例 G65 H85 P1000 Q#101 R#1025 y9 B' v2 [4 ~- J. P: Z
当#101≥ #102,转移到N1000;若#101<#102,执行下一程序段。' y5 u7 t3 x: p
7)条件转移6 #j LE #k(≤)9 `% k7 [ i+ {
编程格式 G65 H86 Pn Q#j Q#k (n为程序段号)7 d% j1 ~- m% o3 A% r
例 G65 H86 P1000 Q#101 R#102
- ^( H3 d# ?% `% R- t# o* }6 y6 I/ m4 V当#101≤#102,转移到N1000;若#101>#102,执行下一程序段。, G; b2 T& r2 f( {* e7 i
9 c! J u* N( W, e- S, b
4、使用注意* I+ v. j. b/ g+ q% Y) g
为保证宏程序的正常运行,在使用用户宏程序的过程中,应注意以下几点;; T7 y( i3 Y/ @ j- ~
(1)由G65规定的H码不影响偏移量的任何选择;$ C& s% h7 A; `) C) u) m. G' i
(2)如果用于各算术运算的Q或R未被指定,则作为0处理;
% \8 L+ Y# C- c- R' y) T. q) B(3)在分支转移目标地址中,如果序号为正值,则检索过程是先向大程序号查找,如果序号为负值,则检索过程是先向小程序号查找。8 @/ i4 l: x% N P& U9 _
(4)转移目标序号可以是变量。
E% v& b" g# Z: g: F5 f3 ]% b( k! y& d' P) V1 Z
5、用户宏程序应用举例 :
' V9 c& K6 g+ [) H
5 _0 M, J; \+ P+ K' b V用宏程序和子程序功能顺序加工圆周等分孔。设圆心在O点,它在机床坐标系中的坐标为(X0,Y0),在半径为r的圆周上均匀地钻几个等分孔,起始角度为α,孔数为n。以零件上表面为Z向零点。
- T& k$ t* S9 c- k' M
) T1 f& F: A/ {: ]# U- m1 F2 C使用以下保持型变量:
" }4 C* U) L* l+ v( F, c9 V0 o#502:半径r;% W1 J$ p8 O& [" E Y% G
#503:起始角度α;
: b6 M' c- b8 q! X8 S+ R: l#504:孔数n,当n>0时,按逆时针方向加工,当n<0时,按顺时针方向加工;" @. ~# P l* v7 F! g$ y/ t a5 E
#505:孔底Z坐标值;) a% p _3 M4 z. D; D; ?
#506:R平面Z坐标值;
9 i6 S/ p4 j1 |#507:F进给量。
- x8 c- ?8 G' a6 i使用以下变量进行操作运算:" z+ [, a2 J m) m0 h
#100:表示第i步钻第i孔的记数器;
; j8 N' A* G( t# h: A* X/ O#101:记数器的最终值(为n 的绝对值);) G' e' K3 B/ {) b- _; P9 i
#102:第i个孔的角度位置θi的值;
- M$ H. F- A. `4 q7 X0 o#103:第i个孔的X坐标值;5 J, t/ ? q3 ?) r! d- W7 v- x
#104:第i个孔的Y坐标值;
, P$ k, M- A; m用用户宏程序编制的钻孔子程序如下:
4 |6 b: b# J5 Y' C* |0 t; pO9010) c6 n0 W! P$ l; I& n- u* N
N110 G65 H01 P#100 Q0 //#100 = 0
" E3 a- k5 E; k" z! L! H# G: uN120 G65 H22 P#101 Q#504 //#101 = │#504│
# T; s0 D- J! r5 g0 |N130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o
9 n/ p( u6 c0 c8 G; pN140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #504& d8 u1 L% k$ Y7 ]0 B3 v' X/ ]
N150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102当前孔角度位置θi =α+ (360o×i) / n2 |$ j# n* U/ z; l2 @
N160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)当前孔的 X坐标
3 e# b6 x) q# kN170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 当前孔的Y坐标/ D9 a8 e6 a+ l& E3 k8 t
N180 G90 G00 X#103 Y#104 //定位到当前孔(返回开始平面)- S) m$ ^9 N$ r7 l& X7 w/ f+ _$ `
N190 G00 Z#506 //快速进到R平面
6 E) W8 k* { [' nN200 G01 Z#505 F#507 //加工当前孔7 w3 |) ]7 W- d
N210 G00 Z#506 //快速退到R平面
! |4 x% ^7 V j$ t2 s8 y2 pN220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔计数. L; H% [5 M4 D
N230 G65 H84 P-130 Q#100 R#101 //当#100 < #101时,向上返回到130程序段
' _0 }6 ]) S+ O; M8 nN240 M99 //子程序结束
N& U/ e) K3 f/ Z1 I: ?% G" B+ |! s. ?* B* p) N }
% @3 f! _3 u8 F7 r
* [/ v3 D/ ~: ?6 ?! D调用上述子程序的主程序如下: 8 `% |) `" _# c; i2 E
O0010( f5 E+ x4 C4 V( q) A) ~
N10 G54 G90 G00 X0 Y0 Z20 //进入加工坐标系% b. ^. p4 w+ J' g% v2 R
N20 M98 P9010 //调用钻孔子程序,加工圆周等分孔
. j8 a2 R d# u7 W) u6 hN30 Z20 //抬刀
7 o" x& `0 T" V" l |N40 G00 G90 X0 Y0 //返回加工坐标系零点 & ]( u6 y5 K6 ]1 H3 v: c
N50 M30 程序结束
9 I# F7 @& l. {" N! T2 n4 V设置G54:X=-400,Y=-100,Z=-50。
8 E v2 W6 p' u5 g9 n z, `% h) l7 u8 @变量#500~#507可在程序中赋值,也可由MDI方式设定。
2 d0 A& f( {! Z, C
8 B" ]$ t" x J' j; v5 nB类宏G65
" L1 L0 Z i6 {- e& x& g% l( P
1 W2 m) U, _7 c4 y0 _2 E简单调用(G65)
% s) F: e* O* Q3 ^ 功能 G65被指定时,地址P所指定的程式被调用,自变量能传递到用户宏程序中。! Z3 Y$ Y3 Q; k {- F
格式 G65 Pp Ll <自变量表>;$ [, i6 ^, C) `9 ~( X! ?* j+ x
其中: p 要调用的程序号
0 C( E% x$ N8 F% G. u! Q4 w& T/ M l 重复的次数(缺省值为1,取值范围1~9999)* J6 H# V1 f' s/ w5 l& d$ W
自变量 传递给被调用程式的数。通过使用自变量表,值被分配给相应 5 p3 A$ W4 G) q9 D0 F, z6 }/ N8 I( E
的局部变量。
& P7 e% X" @+ P- ~( r3 g& H# a" _+ g9 L# ~6 @8 S4 {0 U/ {
自变量分为两类。第一类可以使用的字母只能使用一次,各自变量与局部变量的对用关系如下:" d* {" W9 q. p# v8 e
( g+ a0 L* h# U1 e i( {% N# G地址 变量号 地址 变量号 地址 变量号# P, A9 y4 }1 u3 \' d
A #1 E #8 T #205 \8 y) P9 x* j1 V1 o) @9 P# u
B #2 F #9 U #21
" k. C- {6 b2 i5 f j' fC #3 H #11 V #226 ^& K% Q% W' S; n0 Y
I #4 M #13 W #234 ^- h& q) Y) `, i( ?
J #5 Q #17 X #24
6 @, U4 w5 ^* Y6 B0 }) ^% G* o1 p, |K #6 R #18 Y #25+ p5 S9 |& E6 h' m3 C6 G. d
D #7 S #19 Z #26
& ~7 @9 g V$ u6 f# M☆ 地址G、L、N、O、P不能当作自变量使用。
" a7 W0 `- ?) y3 C. j- ~☆ 不需要的地址可以省略,与省略的地址相应的局部变量被置成空。
& k9 _" U( M0 N+ S3 W
' ^& y2 n$ T2 `: {- X. Z4 R4 s 第二类可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自变量使用的类别根据使5 |; {/ b1 W/ U% B
用的字母自动确定:0 v2 M8 ?- g7 w; p8 P
地址 变量号 地址 变量号 地址 变量号
) f! S4 [5 g" j! {& ~1 C0 xA #1 K3 #12 J7 #23
' h3 x* `8 X* R: F/ ?- fB #2 I4 #13 K7 #24$ v* Q1 N% r7 w$ [! I# t
C #3 J4 #14 I8 #25- k; R3 i0 }3 F
I1 #4 K4 #15 J8 #26- _: A$ T7 c- x% |' o, u
J1 #5 I5 #16 K8 #27: ~5 B4 a0 b! M, q
K1 #6 J5 #17 I9 #28
% v7 P1 Q' V6 ?9 F8 _+ aI2 #7 K5 #18 J9 #29
* X2 Z4 P" k- R8 F. U, AJ2 #8 I6 #19 K9 #309 Y! B7 p X# G" z+ b
K2 #9 J6 #20 I10 #31: Z: M- u A/ M4 n* P0 {) f* Z
I3 #10 K6 #21 J10 #32' t, G4 w$ g g+ k
J3 #11 I7 #22 K10 #33
O; k$ ?* W. L4 u- H% G' d☆ 在实际的程序中,I、J、K的下标不用写出来。& w" h0 _- R6 t' _. U# j# D0 c7 }* W, t
注意:& U) r( C8 E2 }1 M' G
☆ 在自变量之前一定要指定G65。8 x5 i3 c6 e1 I
☆ 如果将两类自变量混合使用,系统自己会辨别属于哪类,最后指定的那一类优先。
) s$ O7 D8 Z) I- z+ d: q6 |☆ 传递的不带小数点的自变量的单位与每个地址的最小输入增量一致,其值与机床的系统结构非常一致。为了程序的兼容性,建议使用带小数点的自变量。- Q* t6 s. I' X5 i
☆ 最多可以嵌套含有简单调用(G65)和模态调用(G66)的程序4级。不包括子程序调用(M98)。局部变量可以嵌套0~4级。主程序的级数是0。用G65和G66每调用一次宏,局部变量的级数增加一次。上一级局部变量的值保存在NC 中。宏程序执行到M99时,控制返回到调用的程序。这时局部变量的级数减1,恢复宏调用时存储的局部变量值。- ~/ f( o5 w: S: r
G65简单宏调用可方便地向被调用的副程式传递数据,但是用它制作诸如固定循环( l& m4 Q' H2 l9 ^
之类的移动到坐标后才加工的程式就无能为力了。 |
评分
-
查看全部评分
|