|
|
发表于 2011-7-12 08:32:36
|
显示全部楼层
回复 1# 钟云驹
7 l$ Q/ T+ u( F; |5 n详解A类宏5 n7 t) i7 K) p8 f( Z4 N/ N
分类:默认分类 字号: 大大 中中 小小 用户宏功能是提高数控机床性能的一种特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一样存入存储器,然后用一个总指令代表它们,使用时只需给出这个总指令就能执行其功能。
: U3 q6 A/ p5 H& b+ d 用户宏功能主体是一系列指令,相当于子程序体。既可以由机床生产厂提供,也可以由机床用户自己编制。
: j6 Y `8 B- _/ v( | 宏指令是代表一系列指令的总指令,相当于子程序调用指令。
: k6 A* e6 e2 p$ J) O 用户宏功能的最大特点是,可以对变量进行运算,使程序应用更加灵活、方便。
4 Q/ @0 r4 H2 ?* O 用户宏功能有A、B两类。这里主要介绍A类宏功能,B类宏功能请参见本课程的B类宏程序介绍。! U: {2 k& {# r& u& {
1、变量
4 S7 H4 n0 E* \$ F* Z2 w& E3 X 在常规的主程序和子程序内,总是将一个具体的数值赋给一个地址。为了使程序更具通用性、更加灵活,在宏程序中设置了变量,即将变量赋给一个地址。$ t9 \' w& ?, M2 G/ n9 v
(1)变量的表示
( L# n4 Q* i/ n [1 d变量可以用“#”号和跟随其后的变量序号来表示:#i(i=1,2,3......)& b; O/ ^( x& @, T% y* d7 ^
例:#5, #109, #501。
7 \; y4 L! N9 z6 I, W6 @) }(2)变量的引用
- a A+ v' V/ |& g 将跟随在一个地址后的数值用一个变量来代替,即引入了变量。
2 r6 s" H9 v% O/ w+ r) t例:对于F#103,若#103=50时,则为F50;- T5 _ S1 Q3 b8 X7 [4 l7 D
对于Z-#110,若#110=100时,则Z为-100;
8 r( |5 d# ?( e5 x* I" t: w对于G#130,若#130=3时,则为G03。0 r: X N0 ]2 n: M1 Y
(3)变量的类型 , D3 Y9 A9 n- v1 z4 u( `$ y$ f& c
0MC系统的变量分为公共变量和系统变量两类。
+ ]' h, p" H6 R; Z _2 H$ ~- u& j3 s# Q1)公共变量
: Y; r+ g% ]2 G o: @6 {* J 公共变量是在主程序和主程序调用的各用户宏程序内公用的变量。也就是说,在一个宏指令中的#i与在另一个宏指令中的#i是相同的。: p z) L# i, y$ k7 Y& N8 k0 Z
公共变量的序号为:#100~#131;#500~#531。其中#100~#131公共变量在电源断电后即清零,重新开机时被设置为“0”;#500~#531公共变量即使断电后,它们的值也保持不变,因此也称为保持型变量。
; N! R& ^( L. g/ c# b7 T. B% ^& M' i- ]: u
7 j7 n$ q0 c. P
* T. ^2 R9 u4 W5 A1 ^! l9 m2)系统变量
3 x6 C7 [/ ?1 X7 o! h3 |' ~ 系统变量定义为:有固定用途的变量,它的值决定系统的状态。系统变量包括刀具偏置变量,接口的输入/输出信号变量,位置信息变量等。# o/ U/ Y q. I& e6 N" |
系统变量的序号与系统的某种状态有严格的对应关系。例如,刀具偏置变量序号为#01~#99,这些值可以用变量替换的方法加以改变,在序号1~99中,不用作刀偏量的变量可用作保持型公共变量#500~#531。3 @/ l7 b, P4 O" m/ w8 h: e
接口输入信号#1000~#1015,#1032。通过阅读这些系统变量,可以知道各输入口的情况。当变量值为“1”时,说明接点闭合;当变量值为“0”时,表明接点断开。这些变量的数值不能被替换。阅读变量#1032,所有输入信号一次读入。
# `9 O: Z" X2 z3 M- i2、宏指令G65
- P) h+ k: R8 d+ w- x# i 宏指令G65可以实现丰富的宏功能,包括算术运算、逻辑运算等处理功能。
; n& w+ h: Y1 c h 一般形式: G65 Hm P#i Q#j R#k
& Q' b' x1 y5 G$ W$ ]式中:--宏程序功能,数值范围01~99;
# K! Y$ c5 ~/ C1 V% z# ^6 Y" b. v#i--运算结果存放处的变量名;' l" k/ U* ^% x; e7 w/ {4 M
#j--被操作的第一个变量,也可以是一个常数;5 n9 N. C2 [2 q
#k--被操作的第二个变量,也可以是一个常数。3 m1 h; J/ c- y* u' ^; ^) U
例如,当程序功能为加法运算时:9 n2 ?! h* @: |0 |+ k
程序 P#100 Q#101 R#102...... 含义为#100=#101+#1023 U+ o6 }$ l9 v+ X4 R7 K/ T
程序 P#100 Q-#101 R#102...... 含义为#100=-#101+#102
# E: m" v" h- e& h& v/ D: m程序 P#100 Q#101 R15...... 含义为#100=#101+15
+ k7 Y* `9 `! M: b
[6 o3 L' v9 [8 w0 Y( k7 R3、宏功能指令
" m' f! ?* J. ?# b2 G; i
4 h! @( f& t0 Y1 f9 H/ y(1)算术运算指令 5 l, t- p: A7 Y, R7 `
( `7 b% m- |2 D# ]
1)变量的定义和替换 #i=#j " j9 Q z" z( F8 H
5 v" F3 a( T6 G/ N编程格式 G65 H01 P#i Q#j2 t: a6 i* @ V, r, t) f# T; e# {
例 G65 H01 P#101 Q1005; (#101=1005)
# c7 Y8 s- g" EG65 H01 P#101 Q-#112;(#101=-#112) - z6 m0 k/ J/ O9 t1 j, ]5 {* y4 a
2)加法 #i=#j+#k
1 ^& j* y- Z. {4 n; G9 ?编程格式 G65 H02 P#i Q#j R#k
" L/ ]) u5 L' K% k9 M( ~5 ]' _例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103)
8 y; i0 A4 Y2 {3)减法 #i=#j-#k
' Y" R0 [" u) m0 s6 j编程格式 G65 H03 P#i Q#j R#k
4 T7 S6 |% D* e( n4 O$ b例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103)' I l$ w1 h% _$ X0 a
4)乘法 #i=#j×#k
Q+ x+ c; Z K6 o/ b编程格式 G65 H04 P#i Q#j R#k
" i* n; D) j8 ~例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103); H! I e' U9 Q4 m/ I4 ]
5)除法 #i=#j / #k
# R% S# `$ B0 ?6 R4 w8 I编程格式 G65 H05 P#i Q#j R#k5 m3 R$ N$ }7 T' C
例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103)9 I+ X& I1 V1 a5 I) N/ h' H
6)平方根 #i= ; h9 n- ~7 a2 P0 u
编程格式 G65 H21 P#i Q#j
! W. ]% e k9 C& u$ u例 G65 H21 P#101 Q#102;(#101= )3 k% U* j3 N1 A7 K1 a' O5 T
7)绝对值 #i=│#j│+ h* {1 T$ S6 L3 R) K
编程格式 G65 H22 P#i Q#j
" y* X- X& k2 s6 |, ]例 G65 H22 P#101 Q#102;(#101=│#102│) - r# S' k) k8 Y' c" C+ M% a! A& ]' y
8)复合平方根1 #i= " O2 }3 _9 x E6 Z0 M& ?
编程格式 G65 H27 P#i Q#j R#k
( a, j6 Q3 z1 u2 J" q" K$ l例 G65 H27 P#101 Q#102 R#103;( #101=
6 P# s, W; ^+ Y, c9)复合平方根2 #i= - D5 _! z2 I) ^
编程格式 G65 H28 P#i Q#j R#k+ B4 T( \4 `5 D* Q2 s' |( v4 p
例 G65 H28 P#101 Q#102 R#103 6 D# U* [2 E$ E8 E
# e" | A3 r2 [' S1)逻辑或 #i=#j OR #k
' |6 @( D0 J& z e$ X编程格式 G65 H11 P#i Q#j R#k
9 V$ T2 o4 t; W. l- ^例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103)
1 e9 b" ?7 L* h+ F7 N9 ]; }
3 E; Q2 a; _) t& ~) ~" c! h2)逻辑与 #i=#j AND #k1 ^6 ]% u3 f: J" I6 a# v7 {2 R
编程格式 G65 H12 P#i Q#j R#k, l& I+ ^5 y F" P9 s
例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103 ( E% S7 W7 Z2 r, ~6 O0 p) y9 r
; Y6 ?7 c3 h' u3 @9 W) R+ b
; N6 s& S: ]1 j- w" i' [
! \, C5 B$ S1 M- ~" Q1 u9 ?% [% c
(3)三角函数指令
% ^3 o. }+ I; |4 X0 F g1 x# A2 D/ b& J
8 O8 L# I( j! |# N ~% `. Z1 X
# Q' F! z' f( [6 [1)正弦函数 #i=#j×SIN(#k)
+ F+ C* C0 f' s9 e, ]& O2 l, E7 m" G8 l2 Q* K$ {
编程格式 G65 H31 P#i Q#j R#k (单位:度) .
q) a; [4 p8 e2 k
# R$ @3 l7 N7 C9 D1 F例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103))/ P- b% S0 J. B, E7 G# ?. X; |
2)余弦函数 #i=#j×COS(#k), p" a5 V; f) L
编程格式 G65 H32 P#i Q#j R#k (单位:度)- Y1 W6 f8 K0 c+ o. _
例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103))
* s2 B: b0 [' w3)正切函数 #i=#j×TAN#k
" X) P W6 R, b' Z- S编程格式 G65 H33 P#i Q#j R#k (单位:度)* k) Y5 R7 Y' H* }2 p; a3 y
例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103))
1 C3 L. p$ t# B7 s4)反正切 #i=ATAN(#j/#k)" g; f) L2 D h# P- e, G
编程格式 G65 H34 P#i Q#j R#k (单位:度,0o≤ #j ≤360o)
# g/ o4 }% E" l) z0 q: U( ?例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103)2 l" y2 e8 o) O3 H
p7 S A0 H- }/ ?: i
. t- l- q. Z" ^; Z
4 Q: p1 {& E5 k1 ~/ e3 D& Z(4)控制类指令6 C$ p0 X: s9 i
& B8 F. {/ Y: \( V: T% C# r0 ~3 M
2 z0 {6 X+ y" \0 C9 S
( ^- R& e! d/ c0 K编程格式 G65 H80 Pn (n为程序段号)
# B/ ?" _4 Z& u6 E+ T: d u例 G65 H80 P120;(转移到N120)
# W3 u. n0 R7 ?' i0 u4 M! t. _2)条件转移1 #j EQ #k(=)
; S; X+ ?/ X/ X编程格式 G65 H81 Pn Q#j R#k (n为程序段号)
% g* ]7 P+ _. Y5 R1 x例 G65 H81 P1000 Q#101 R#102$ e5 e. t7 ^ p7 | R" r
当#101=#102,转移到N1000程序段;若#101≠ #102,执行下一程序段。
7 _! |# l1 N7 g' q3)条件转移2 #j NE #k(≠)
8 U$ b1 G) H C+ L8 V# C编程格式 G65 H82 Pn Q#j R#k (n为程序段号)
$ T9 F2 Q% q# t2 v9 w- Z例 G65 H82 P1000 Q#101 R#102
& f& w6 v* M9 c当#101≠ #102,转移到N1000程序段;若#101=#102,执行下一程序段。
% R+ ?9 Y% W. B2 R" _4)条件转移3 #j GT #k (> )% n! |# v1 l5 V4 C. ~7 h& p. u8 J
编程格式 G65 H83 Pn Q#j R#k (n为程序段号): n' O+ u* \- J% _
例 G65 H83 P1000 Q#101 R#102
7 l; h! u, {$ Q2 V当#101 > #102,转移到N1000程序段;若#101 ≤#102,执行下一程序段。, \, b ^+ H3 T; w: [
5)条件转移4 #j LT #k(<)( w! X d8 l) m) d% I% u% i' W
编程格式 G65 H84 Pn Q#j R#k (n为程序段号)7 v5 S! c0 v4 t7 b
例 G65 H84 P1000 Q#101 R#102 4 p& b7 I4 m4 b$ X& U; s9 }
当#101 < #102,转移到N1000;若#101 ≥ #102,执行下一程序段。! [& r+ Q a! k7 @8 ?+ |. c
6)条件转移5 #j GE #k(≥)7 O( P: u. o: p9 I
编程格式 G65 H85 Pn Q#j R#k (n为程序段号)8 l( P9 `8 a% K0 t
例 G65 H85 P1000 Q#101 R#102
: t! I' B6 q+ }- A+ g当#101≥ #102,转移到N1000;若#101<#102,执行下一程序段。
. u; U/ ?8 l( ]8 K) K0 W7)条件转移6 #j LE #k(≤); R8 z, f$ p, S! e, w
编程格式 G65 H86 Pn Q#j Q#k (n为程序段号)
V K2 t& L5 t例 G65 H86 P1000 Q#101 R#102+ ?8 K7 q ]. c' x/ p
当#101≤#102,转移到N1000;若#101>#102,执行下一程序段。
' d! v c7 o! o6 W7 E q0 J* ^
9 d( y ?/ {2 v; ^, t# `1 x4、使用注意; C4 g9 z( ]1 T" c4 m0 m; R
为保证宏程序的正常运行,在使用用户宏程序的过程中,应注意以下几点;
" z4 {4 Z; w- y L! v(1)由G65规定的H码不影响偏移量的任何选择;
/ ? V/ j9 M# @- K: Q% `( Y(2)如果用于各算术运算的Q或R未被指定,则作为0处理;" `& k, M6 |. z% \, z9 ~5 G# O. e3 a* d: ]+ o
(3)在分支转移目标地址中,如果序号为正值,则检索过程是先向大程序号查找,如果序号为负值,则检索过程是先向小程序号查找。
/ J# N1 }/ f+ a0 M: w; i(4)转移目标序号可以是变量。
- ?7 D# H) A# ?! X, R) L& f) D- h
5、用户宏程序应用举例 : 2 y5 `' \. B0 P" r% W+ y2 s
J2 p2 V9 O4 {! i- ~& K1 V% B! J/ G0 v用宏程序和子程序功能顺序加工圆周等分孔。设圆心在O点,它在机床坐标系中的坐标为(X0,Y0),在半径为r的圆周上均匀地钻几个等分孔,起始角度为α,孔数为n。以零件上表面为Z向零点。 9 x! J5 m& y: E: V4 ^( }
t# R' T- h& O1 ~! J4 t/ m: L* ?6 X
使用以下保持型变量:
/ c; B5 s1 _. Y/ f& l5 w#502:半径r;
C# g B# ?$ A! O5 A#503:起始角度α;
9 _2 a% |9 _3 f9 I- F#504:孔数n,当n>0时,按逆时针方向加工,当n<0时,按顺时针方向加工;
8 G: d7 g4 _8 i$ C2 P#505:孔底Z坐标值;( s& m* c6 S, J6 X8 {
#506:R平面Z坐标值;: G8 _( i3 p% D8 J7 Z( e# V3 R% b9 Q
#507:F进给量。
+ D" Y% K2 n! J7 y7 l/ C使用以下变量进行操作运算:
( u3 b# c2 R" H# `6 _#100:表示第i步钻第i孔的记数器;
2 i( A( r. F0 s' u#101:记数器的最终值(为n 的绝对值);
( M- k& r& U3 @5 D#102:第i个孔的角度位置θi的值; ; F$ l! F* J+ b$ `' p
#103:第i个孔的X坐标值;
- P% l$ D6 D+ E! s#104:第i个孔的Y坐标值;
' \: e# N4 X C# P0 g用用户宏程序编制的钻孔子程序如下: % F- B; W, c% Z4 Q
O9010" Y$ ]/ M$ N- Z" D3 s \1 t
N110 G65 H01 P#100 Q0 //#100 = 09 l8 P& J6 w) B4 u
N120 G65 H22 P#101 Q#504 //#101 = │#504│
5 D x! u& ^4 o; d. IN130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o
* V; x/ z" I0 d n1 VN140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #504$ F( Y& V) I; W9 F' f) V
N150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102当前孔角度位置θi =α+ (360o×i) / n
# ^; @& J1 ^. p+ S: R1 Z9 X1 @N160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)当前孔的 X坐标. u1 x% F% d% ~$ F- `
N170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 当前孔的Y坐标( I* Z0 b2 A; z, c5 V% m
N180 G90 G00 X#103 Y#104 //定位到当前孔(返回开始平面). G* U* ]1 ~, b8 ^
N190 G00 Z#506 //快速进到R平面2 E9 z& t. u9 h' K6 w
N200 G01 Z#505 F#507 //加工当前孔" `( u9 t' E$ u6 J3 U$ f
N210 G00 Z#506 //快速退到R平面
5 e+ ?' \, [* |1 T' ^. \7 oN220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔计数( X2 @2 ~7 V2 @" a. I
N230 G65 H84 P-130 Q#100 R#101 //当#100 < #101时,向上返回到130程序段
; `! P; W" H% s! fN240 M99 //子程序结束 ( u- v1 m' p; N
/ {0 _. p' U8 X % ^) E& \ K) n8 G
5 o8 i I7 ^. M) X% @9 a调用上述子程序的主程序如下: $ W! `8 G* H9 V- Q7 o
O0010
" H) F3 G7 N4 B. _N10 G54 G90 G00 X0 Y0 Z20 //进入加工坐标系% |2 y: _3 T l0 y: ~7 \0 [6 L
N20 M98 P9010 //调用钻孔子程序,加工圆周等分孔
* }- T/ d1 ~1 G% L, M" v7 HN30 Z20 //抬刀6 ^! v2 b v! @0 k$ H: E
N40 G00 G90 X0 Y0 //返回加工坐标系零点
4 c( q0 Q) |9 o {% @N50 M30 程序结束3 `1 P1 @/ T6 B; Q( r" @
设置G54:X=-400,Y=-100,Z=-50。
) \) D s2 z) J9 I) G变量#500~#507可在程序中赋值,也可由MDI方式设定。
, @) t) @6 s$ p6 Q1 x
. W2 g/ Z- S% nB类宏G65
# ]3 n1 n+ |& _6 ?+ s) O. l- E# Z% [' {- {$ T# k/ ^% u' N- m8 e9 R
简单调用(G65)
# u& f! P& f+ @ 功能 G65被指定时,地址P所指定的程式被调用,自变量能传递到用户宏程序中。
! E9 j7 Y( U$ q" B* i 格式 G65 Pp Ll <自变量表>;
) g4 i* a7 Y: a6 P, O- t 其中: p 要调用的程序号# c" i4 M# q- v" Y3 A
l 重复的次数(缺省值为1,取值范围1~9999)! L; _# O9 K9 i7 u$ E( {7 Y
自变量 传递给被调用程式的数。通过使用自变量表,值被分配给相应
' _) x( |% K& B$ c; ^ 的局部变量。5 t7 I8 S9 v1 l, p1 E4 F
' I7 j* ?9 v5 i$ \; m; j
自变量分为两类。第一类可以使用的字母只能使用一次,各自变量与局部变量的对用关系如下:
3 A2 H) b) W7 W
5 a: g: H; f* c+ ~" M7 \地址 变量号 地址 变量号 地址 变量号9 R6 L4 @2 U* r4 p1 C+ R r; h% R
A #1 E #8 T #20: C7 Q; q& x) n- i
B #2 F #9 U #21
9 F+ i7 G5 p, [! [, IC #3 H #11 V #22
/ K1 }6 k' T' t* C( U% T% aI #4 M #13 W #23# Y+ x- B8 i- [: y
J #5 Q #17 X #24
5 \* \5 y# F0 l( |5 M9 g) _K #6 R #18 Y #25
. M& l. @& \. KD #7 S #19 Z #260 v% I# f- O/ `7 ]' n; p
☆ 地址G、L、N、O、P不能当作自变量使用。: q0 X0 H8 \8 q- ~8 W" o) _
☆ 不需要的地址可以省略,与省略的地址相应的局部变量被置成空。$ A+ {) \; w4 V
1 n8 d$ i0 t& \* z* E
第二类可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自变量使用的类别根据使3 t {5 `) p& T- s5 Y+ u. D
用的字母自动确定:( Z0 ?4 y% Y+ M. I4 x7 W3 Q
地址 变量号 地址 变量号 地址 变量号
( w$ F% @4 u6 [. WA #1 K3 #12 J7 #23, |- S; {' ?6 r' F5 ~, I
B #2 I4 #13 K7 #24
9 |1 w6 N. m6 n( sC #3 J4 #14 I8 #252 {, p) M+ o' f" o4 I
I1 #4 K4 #15 J8 #264 @' }5 j& G9 ?$ m7 A% S
J1 #5 I5 #16 K8 #27( i" l u4 p8 \" y2 ^
K1 #6 J5 #17 I9 #28: a4 B R0 m$ |7 m6 J% X; b
I2 #7 K5 #18 J9 #29
0 @/ z3 B* b% w/ O" [ T1 V Q- |* {) QJ2 #8 I6 #19 K9 #30
# ]( ]- M0 {2 w" W% ?* |" B( ?3 VK2 #9 J6 #20 I10 #31
' |" {, H, R5 f0 g$ l2 LI3 #10 K6 #21 J10 #32. A$ @8 c2 D3 I' B
J3 #11 I7 #22 K10 #33
1 d$ W( E1 ^3 t- z☆ 在实际的程序中,I、J、K的下标不用写出来。
2 P, J g/ R5 k6 J注意:- K/ ~) e( s& q9 \( O# g% B/ `' `
☆ 在自变量之前一定要指定G65。
/ g5 q5 a, v6 ?) F* @1 y2 [☆ 如果将两类自变量混合使用,系统自己会辨别属于哪类,最后指定的那一类优先。
5 v$ f% o* ^" n+ n/ P☆ 传递的不带小数点的自变量的单位与每个地址的最小输入增量一致,其值与机床的系统结构非常一致。为了程序的兼容性,建议使用带小数点的自变量。
- d5 g- u9 z0 A: G, E# S% i☆ 最多可以嵌套含有简单调用(G65)和模态调用(G66)的程序4级。不包括子程序调用(M98)。局部变量可以嵌套0~4级。主程序的级数是0。用G65和G66每调用一次宏,局部变量的级数增加一次。上一级局部变量的值保存在NC 中。宏程序执行到M99时,控制返回到调用的程序。这时局部变量的级数减1,恢复宏调用时存储的局部变量值。
, e, C4 g/ y' {; O# a- K1 D G65简单宏调用可方便地向被调用的副程式传递数据,但是用它制作诸如固定循环5 X* O0 Q9 Z2 @) t4 p/ y( s* Y
之类的移动到坐标后才加工的程式就无能为力了。 |
评分
-
查看全部评分
|