|
发表于 2011-7-12 08:32:36
|
显示全部楼层
回复 1# 钟云驹
: `( _& ]9 _7 M+ m: v% ^* r详解A类宏
9 p$ H9 a' ^; @分类:默认分类 字号: 大大 中中 小小 用户宏功能是提高数控机床性能的一种特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一样存入存储器,然后用一个总指令代表它们,使用时只需给出这个总指令就能执行其功能。( [. N9 Y% \6 x s. b
用户宏功能主体是一系列指令,相当于子程序体。既可以由机床生产厂提供,也可以由机床用户自己编制。
2 g% i; O" b7 _' S! | 宏指令是代表一系列指令的总指令,相当于子程序调用指令。$ w# j% D: y+ b& X* Z- N. a0 ~8 _
用户宏功能的最大特点是,可以对变量进行运算,使程序应用更加灵活、方便。* W$ U$ z7 q5 g, H1 t
用户宏功能有A、B两类。这里主要介绍A类宏功能,B类宏功能请参见本课程的B类宏程序介绍。) h8 a$ l. b. D; o' X1 W
1、变量
9 m7 ^& e3 Z5 X- { 在常规的主程序和子程序内,总是将一个具体的数值赋给一个地址。为了使程序更具通用性、更加灵活,在宏程序中设置了变量,即将变量赋给一个地址。& m- N7 I; V! N$ [ ^, L
(1)变量的表示9 t1 p. g" q" b+ W! k% L+ `! A' v9 z
变量可以用“#”号和跟随其后的变量序号来表示:#i(i=1,2,3......)* F5 v* l( q" p6 r; n2 ]$ U
例:#5, #109, #501。
# w9 w4 @+ G$ n% N) X" f(2)变量的引用. F, n9 k% O( C9 k, ?
将跟随在一个地址后的数值用一个变量来代替,即引入了变量。
( A: C7 @* g- t. a: k例:对于F#103,若#103=50时,则为F50;' F' @1 V# i( H- U7 ~, f6 e
对于Z-#110,若#110=100时,则Z为-100;
. ]- c& k: @ Q0 ^) |9 d) W/ q对于G#130,若#130=3时,则为G03。
2 l8 z: d ~2 [* f8 z0 k(3)变量的类型 , X# T# o! E9 F/ c. F% w4 X3 ~
0MC系统的变量分为公共变量和系统变量两类。
2 n8 B' L/ S, Z: b# t. V* C5 S9 v1)公共变量
6 C9 P" e" i, L6 }- ^0 U$ l 公共变量是在主程序和主程序调用的各用户宏程序内公用的变量。也就是说,在一个宏指令中的#i与在另一个宏指令中的#i是相同的。
5 P1 T6 l( n$ b) [, {7 I# b公共变量的序号为:#100~#131;#500~#531。其中#100~#131公共变量在电源断电后即清零,重新开机时被设置为“0”;#500~#531公共变量即使断电后,它们的值也保持不变,因此也称为保持型变量。
+ ]& c) H; f: f( z/ s
5 h7 m8 e$ E) x, I2 ]8 B# y* z% s
) a* H/ { L1 s7 A3 A+ K o0 u6 I n1 Q7 M9 { u' q
2)系统变量
' e2 @/ \( t* V) g 系统变量定义为:有固定用途的变量,它的值决定系统的状态。系统变量包括刀具偏置变量,接口的输入/输出信号变量,位置信息变量等。. G! o$ w( B0 Q2 o: n# S. Q4 U
系统变量的序号与系统的某种状态有严格的对应关系。例如,刀具偏置变量序号为#01~#99,这些值可以用变量替换的方法加以改变,在序号1~99中,不用作刀偏量的变量可用作保持型公共变量#500~#531。
+ m+ i" |. U: _) g 接口输入信号#1000~#1015,#1032。通过阅读这些系统变量,可以知道各输入口的情况。当变量值为“1”时,说明接点闭合;当变量值为“0”时,表明接点断开。这些变量的数值不能被替换。阅读变量#1032,所有输入信号一次读入。; M. K3 ], Y( R! J a1 S/ Q
2、宏指令G65- v' q3 S4 f; v+ R) L9 F8 o
宏指令G65可以实现丰富的宏功能,包括算术运算、逻辑运算等处理功能。
. D* u4 R& w' j9 g: K% o h 一般形式: G65 Hm P#i Q#j R#k
2 H1 _0 `1 k% X0 L) L式中:--宏程序功能,数值范围01~99;' ~) s( Y8 L0 v1 U5 o9 d7 A
#i--运算结果存放处的变量名;
( W- `8 z; a- Z1 p! l#j--被操作的第一个变量,也可以是一个常数;8 F% c) E4 I% Z7 o, V
#k--被操作的第二个变量,也可以是一个常数。$ g. Z2 O# C2 X Z$ G; `
例如,当程序功能为加法运算时:& R/ x7 s) {; v0 r7 ?! ^# R
程序 P#100 Q#101 R#102...... 含义为#100=#101+#102! k" u Y( E+ A' d8 ^# N
程序 P#100 Q-#101 R#102...... 含义为#100=-#101+#102* B! x1 { j/ R- ?4 f
程序 P#100 Q#101 R15...... 含义为#100=#101+15 ' @+ q" U: [+ ]( A) F' H6 L
( Z: T8 B% d7 `9 g$ Y* }8 n3、宏功能指令 # X) I* w4 Y8 D( \3 S: y5 \( @7 R" F
# B: [) e( Z5 H! n: F& Q4 ?(1)算术运算指令
* O/ [3 }$ y6 G7 v! W
: e. Q+ W' d' z' j! z* |1)变量的定义和替换 #i=#j
9 s, y& {% A+ u- z
( ]8 x/ L, ?4 V+ @编程格式 G65 H01 P#i Q#j, B. H/ M2 U! `8 Q" G
例 G65 H01 P#101 Q1005; (#101=1005)
6 u$ d+ v% E8 t$ U, p) XG65 H01 P#101 Q-#112;(#101=-#112)
% L# f6 K% L/ ]: c& u Y T+ A& j2)加法 #i=#j+#k
. p# z% a" v5 {, A$ |% A, z编程格式 G65 H02 P#i Q#j R#k J8 Z0 B0 x( ^3 Q* b. b4 `
例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103)
, M+ c- E6 S+ V; z3)减法 #i=#j-#k% B# G# k$ U" E) H' |
编程格式 G65 H03 P#i Q#j R#k( y; D- Y9 W9 ]# \( c( \' n7 S, U1 |
例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103)' x8 J' @4 ]% ]; M d3 T5 x
4)乘法 #i=#j×#k7 i# r7 s* T; k: s" U
编程格式 G65 H04 P#i Q#j R#k
, z! N4 `4 T4 e, F例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103)
$ k1 r1 z% p! K* i: r' n- ?' {5)除法 #i=#j / #k% @5 w. @3 i% j; G7 M! \
编程格式 G65 H05 P#i Q#j R#k& V/ ~( J. B$ j/ M5 Q
例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103)
# M& _5 r! I9 L- H$ P+ U6)平方根 #i=
7 @- I) I& z+ }2 D编程格式 G65 H21 P#i Q#j
1 _' @, Y7 W5 d/ `例 G65 H21 P#101 Q#102;(#101= )
$ C$ G/ ` P0 L" d7)绝对值 #i=│#j│
" D: {3 `: [, g, y; _: @% D3 y6 k编程格式 G65 H22 P#i Q#j) E9 ~! E; O/ @1 E1 r' K1 K
例 G65 H22 P#101 Q#102;(#101=│#102│)
7 O; P9 i- \% @' }+ p# }8)复合平方根1 #i=
+ o$ @) v9 f& I' e: r' H2 q# z编程格式 G65 H27 P#i Q#j R#k
7 S) H; f. P6 Z3 ? a' B( B) M例 G65 H27 P#101 Q#102 R#103;( #101=
! {) \1 N, o+ d9)复合平方根2 #i=
, l: @$ B( s$ S' E2 [# a6 J编程格式 G65 H28 P#i Q#j R#k$ V2 C# r) i# ]" z
例 G65 H28 P#101 Q#102 R#103
3 M% w7 k' p# T3 z& A6 b$ U/ R, E/ y; b8 C2 e
1)逻辑或 #i=#j OR #k
- r9 f5 u% ^/ w/ p4 p( x+ J编程格式 G65 H11 P#i Q#j R#k
, j4 ?. j' X" X" C- K1 T例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103)
. I7 {( {2 x! ^ H" Y1 A, z5 X5 ]0 t5 c0 R* Z9 s- w+ ^& S5 H
2)逻辑与 #i=#j AND #k
* m* j# E, P# g6 a编程格式 G65 H12 P#i Q#j R#k
; K2 v( t! S2 o/ Y# i' m例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103
: h. `: J/ I' c+ L c2 `
% u$ K+ B( Q1 Z ?# r0 @9 x) k! X5 T5 ~# g+ H( z7 q, \3 V1 B
" M2 {4 T7 y; T# }, ]1 h
' p5 y5 s. }- b4 B- j: A. g% W(3)三角函数指令
+ Q% n4 ^! N7 n- { X- I+ l( W) Z# m& {# Q
1 ~9 O4 \7 P/ Z7 d& y3 s$ [( G- g4 u9 E) f/ Y$ N! d7 `3 ?. D3 d
1)正弦函数 #i=#j×SIN(#k) + ?% U) E" F8 {6 k
3 u3 f0 R4 n; D% Q' x
编程格式 G65 H31 P#i Q#j R#k (单位:度) .# Z6 b- e6 X8 m+ B
/ D+ k* ~- M) E+ ]. A例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103))
/ T, S; F4 w4 W5 I- O2 ^ K9 H2)余弦函数 #i=#j×COS(#k): H) |: k6 Z% {) _1 |5 D' ?
编程格式 G65 H32 P#i Q#j R#k (单位:度)
$ O) W( S6 T! L1 u8 f, S0 e例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103))
) y) L. x( `1 b5 H8 w' C/ o3)正切函数 #i=#j×TAN#k
8 w% I5 Z9 x0 b" j编程格式 G65 H33 P#i Q#j R#k (单位:度)
. l( `7 J9 M# T/ }8 h! d例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103))2 q/ |+ ]: p( k a4 U) R
4)反正切 #i=ATAN(#j/#k)# w6 h+ n& j' ]! D
编程格式 G65 H34 P#i Q#j R#k (单位:度,0o≤ #j ≤360o)
# [3 G i: ?& |1 q& K例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103)2 B+ E; U# v8 H
8 Y& o' b; O6 ~. O ( ~0 n |" C1 L) a9 W6 w2 W
. K- k% H7 d6 ]9 R) O
(4)控制类指令3 T2 Y' @" V5 f4 j, N$ E
! z3 D( M! K# x % T9 E) i3 B) S; x$ j
9 X: D' _! x _5 Y
编程格式 G65 H80 Pn (n为程序段号)# @# ]1 X) ~/ N2 o+ m2 v- A
例 G65 H80 P120;(转移到N120)" }1 m8 z: N, c* R
2)条件转移1 #j EQ #k(=)* ^7 Q+ L' M2 [- f6 S( q
编程格式 G65 H81 Pn Q#j R#k (n为程序段号)
/ X4 @1 `1 g& _5 A9 P例 G65 H81 P1000 Q#101 R#102: \1 {) @* x( M/ c
当#101=#102,转移到N1000程序段;若#101≠ #102,执行下一程序段。9 r* E( p/ p ]$ F7 o
3)条件转移2 #j NE #k(≠)
7 s4 i( y' U8 t编程格式 G65 H82 Pn Q#j R#k (n为程序段号)% Z! ^! ]! ]' |7 w6 H$ s' `% K
例 G65 H82 P1000 Q#101 R#102 a$ l( _6 t2 v- V& L
当#101≠ #102,转移到N1000程序段;若#101=#102,执行下一程序段。0 Y5 A7 h& M! F
4)条件转移3 #j GT #k (> )5 e4 [0 J0 ?+ s0 R: O4 n
编程格式 G65 H83 Pn Q#j R#k (n为程序段号)/ U1 [' c! R. _" J' F4 Z
例 G65 H83 P1000 Q#101 R#102" V0 P! R$ N$ H3 R0 s2 k
当#101 > #102,转移到N1000程序段;若#101 ≤#102,执行下一程序段。
& h# i" L7 b6 F) \+ F$ q3 w5)条件转移4 #j LT #k(<)
2 Y& n( y( O5 ?& u a! a% B编程格式 G65 H84 Pn Q#j R#k (n为程序段号)
' J7 Y) `/ P' r/ C+ a例 G65 H84 P1000 Q#101 R#102 9 i6 H! D3 `+ f+ X
当#101 < #102,转移到N1000;若#101 ≥ #102,执行下一程序段。
9 @0 o1 a# g6 W4 @; v& v6)条件转移5 #j GE #k(≥)2 ~5 l" P7 i2 B8 h; b! |; U
编程格式 G65 H85 Pn Q#j R#k (n为程序段号)
$ m5 ^- }$ s# ^2 F3 I例 G65 H85 P1000 Q#101 R#102
: Q J! V4 V- v5 R1 X5 T7 }. t当#101≥ #102,转移到N1000;若#101<#102,执行下一程序段。( h1 p/ ?' e. l) X3 R W
7)条件转移6 #j LE #k(≤)
1 K; N! A$ @# l编程格式 G65 H86 Pn Q#j Q#k (n为程序段号)4 Y z0 X8 ^- C6 c" l$ j
例 G65 H86 P1000 Q#101 R#102. ~! U& {1 b4 t
当#101≤#102,转移到N1000;若#101>#102,执行下一程序段。/ f3 K1 I! V' u% | g; S
" G# S" v+ S P$ k- ~! K
4、使用注意
1 f0 w" m$ I7 p5 Y! d7 L2 c 为保证宏程序的正常运行,在使用用户宏程序的过程中,应注意以下几点;2 Z9 O* p, }7 P7 G
(1)由G65规定的H码不影响偏移量的任何选择;
8 L9 ]! v! {. t2 _( a! K(2)如果用于各算术运算的Q或R未被指定,则作为0处理;" Q. \$ @( ]; s" j8 z
(3)在分支转移目标地址中,如果序号为正值,则检索过程是先向大程序号查找,如果序号为负值,则检索过程是先向小程序号查找。5 D5 l, T* l; q$ d
(4)转移目标序号可以是变量。
# G6 C7 c9 j' I( _! ]4 i* K! [! G8 k% Y5 U
5、用户宏程序应用举例 :
5 b2 F9 n% _8 ~5 e! j0 k, x
6 Z3 w2 w5 y% o用宏程序和子程序功能顺序加工圆周等分孔。设圆心在O点,它在机床坐标系中的坐标为(X0,Y0),在半径为r的圆周上均匀地钻几个等分孔,起始角度为α,孔数为n。以零件上表面为Z向零点。 . q2 M' H) J, N% H K
8 K3 b5 Q% w* j2 K: X
使用以下保持型变量:
% {5 K8 l8 J& g0 L#502:半径r;$ y6 S7 Z% [/ }. g9 L7 c. D& l* B# n
#503:起始角度α;/ `' V6 d7 T2 b$ |8 |
#504:孔数n,当n>0时,按逆时针方向加工,当n<0时,按顺时针方向加工;
9 }7 O. p3 n6 [2 u" f#505:孔底Z坐标值;9 X; X0 ~& P! M$ k; G r+ ?
#506:R平面Z坐标值;0 \# f! w, ^9 [9 ^7 q7 j
#507:F进给量。
; n- m/ y: W0 U* U5 V1 { k# n6 r使用以下变量进行操作运算:2 j' l/ { G. A8 A4 K: \; F
#100:表示第i步钻第i孔的记数器;7 S6 c5 s6 I: X2 d
#101:记数器的最终值(为n 的绝对值);
# X J0 V+ a2 s/ [#102:第i个孔的角度位置θi的值;
' Y, E& e% v0 X5 y4 X1 t" v#103:第i个孔的X坐标值;
/ n+ {3 z$ Z4 t- R- r#104:第i个孔的Y坐标值;
& u* e$ Y! T+ } g; B9 \4 Y用用户宏程序编制的钻孔子程序如下: . h3 d+ }* _6 T+ I8 d& v
O9010: \1 h6 r+ o% R& V$ Y- T1 _
N110 G65 H01 P#100 Q0 //#100 = 0
. M; B) N- p' X' t+ ON120 G65 H22 P#101 Q#504 //#101 = │#504│7 ~3 H. u) Q5 K) J. b/ I
N130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o
* Y- O) n) B& |3 v/ [& p# IN140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #504
4 _, }, @" _! BN150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102当前孔角度位置θi =α+ (360o×i) / n1 Z, |2 O0 d1 w7 T2 E8 ]
N160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)当前孔的 X坐标
p7 W m" v2 V9 i/ Z I5 Q, }4 jN170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 当前孔的Y坐标
: r% k0 F- L0 o; o: TN180 G90 G00 X#103 Y#104 //定位到当前孔(返回开始平面)' d5 \7 g7 M& T5 r0 {
N190 G00 Z#506 //快速进到R平面
% ~& G7 s& J9 L: p \) I* FN200 G01 Z#505 F#507 //加工当前孔
/ K. `1 k( x! e; v6 kN210 G00 Z#506 //快速退到R平面
2 }$ l6 [# w+ O% B4 i) `$ VN220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔计数& m" S% ]1 t6 F- h7 r
N230 G65 H84 P-130 Q#100 R#101 //当#100 < #101时,向上返回到130程序段
( F2 p7 w' b, Z7 r. ]% s. ON240 M99 //子程序结束
4 G g2 q$ H' j& G7 Q3 b! P0 l
2 @; t) ^! j$ Z# m
" d% \8 B S) S$ H" v
2 H! ?4 I8 |; h) ]' Y' r! N调用上述子程序的主程序如下:
) m+ A# o, f; o: s8 O* I qO0010
# }% e1 {, P, B i" _' b3 W4 ZN10 G54 G90 G00 X0 Y0 Z20 //进入加工坐标系
6 R/ s9 F4 O: \/ h. ^) ?N20 M98 P9010 //调用钻孔子程序,加工圆周等分孔) V _ G4 ]! y2 f
N30 Z20 //抬刀8 S0 z& a4 L9 H
N40 G00 G90 X0 Y0 //返回加工坐标系零点
0 k( Z# m" T) ?6 U. ^N50 M30 程序结束
1 ^2 l3 A6 N' X0 ~设置G54:X=-400,Y=-100,Z=-50。% S7 i2 t/ O% |6 V8 M% r
变量#500~#507可在程序中赋值,也可由MDI方式设定。
6 P$ D+ E! j* j
I1 {$ |2 [% ~. _. y m+ RB类宏G65
/ ?& U6 s/ b3 H. z4 J7 j5 |6 _) ]9 I* G; c% J$ X
简单调用(G65)
3 ]8 P2 p" {1 _ 功能 G65被指定时,地址P所指定的程式被调用,自变量能传递到用户宏程序中。( N3 |( C! e, k, b' C3 z
格式 G65 Pp Ll <自变量表>;/ F% k3 q. o2 `8 k! B9 {
其中: p 要调用的程序号0 X8 M& g; C7 f* e
l 重复的次数(缺省值为1,取值范围1~9999)
; S, Y7 a2 w' K9 O 自变量 传递给被调用程式的数。通过使用自变量表,值被分配给相应 " e. m! X. }; K \7 |3 V, q
的局部变量。
+ h' m4 ?* ]" x; l* g$ M( d
) w0 d: i) i* c) v5 `! a 自变量分为两类。第一类可以使用的字母只能使用一次,各自变量与局部变量的对用关系如下:
5 p3 V8 I S( S0 N1 X& Y" z0 c" S# q: ]! n3 ]
地址 变量号 地址 变量号 地址 变量号6 x5 y7 O, @. O( V
A #1 E #8 T #20
4 w( i% q Y9 {3 bB #2 F #9 U #210 I! C* q0 _4 l# ?
C #3 H #11 V #225 H# n2 \: U% L; t3 z- t# [' @
I #4 M #13 W #23
2 k' L& {4 @ BJ #5 Q #17 X #24
4 V8 o8 u0 T% d2 L, ?7 MK #6 R #18 Y #25
+ W2 x2 Z( N, q3 e9 K. U$ `1 kD #7 S #19 Z #26
/ Y: ~9 S3 {# H: N$ y1 W☆ 地址G、L、N、O、P不能当作自变量使用。
! \: x, q+ b# K, z$ _☆ 不需要的地址可以省略,与省略的地址相应的局部变量被置成空。
9 s! y6 f( x1 l+ }+ V/ j# C! k$ m/ C' j * ^- R% o. K3 n" y. v$ n
第二类可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自变量使用的类别根据使. B r. i6 r: V2 [; o h8 F6 C
用的字母自动确定:
: ]7 Y( A& L4 w) o, {& Y地址 变量号 地址 变量号 地址 变量号
4 M* J0 }7 u9 `2 @7 QA #1 K3 #12 J7 #23
; l; n7 m; ^7 V4 ]B #2 I4 #13 K7 #24! M# Q" g! c1 ?' m
C #3 J4 #14 I8 #25
! K; D! u2 n! W- |' ]% OI1 #4 K4 #15 J8 #26
4 m9 c" U; C2 p; z5 x5 { G! qJ1 #5 I5 #16 K8 #27, V: [# A, h# v4 X7 n" ]
K1 #6 J5 #17 I9 #28; q. v/ d" |8 s6 O9 N" P
I2 #7 K5 #18 J9 #29
5 B" |* s: M, y4 B) s0 M% R1 T) @4 RJ2 #8 I6 #19 K9 #307 ?: Y% U& `$ F+ r, L6 |' c: i$ G
K2 #9 J6 #20 I10 #31 k! G" D! z/ N
I3 #10 K6 #21 J10 #32& `% x2 m- f, g$ \/ K2 o' P
J3 #11 I7 #22 K10 #33- T0 G7 O# a g# C) m
☆ 在实际的程序中,I、J、K的下标不用写出来。
) f; H* Z+ `8 l/ j3 e* X$ G# P: ]注意:
) d/ y( r) M1 V5 ^9 H: Z☆ 在自变量之前一定要指定G65。
( Q! k7 f$ \* `4 |- F( a& P☆ 如果将两类自变量混合使用,系统自己会辨别属于哪类,最后指定的那一类优先。6 j9 C) d2 _/ M! G3 w9 I- ]
☆ 传递的不带小数点的自变量的单位与每个地址的最小输入增量一致,其值与机床的系统结构非常一致。为了程序的兼容性,建议使用带小数点的自变量。
1 l- ?2 @8 o" T/ {5 @+ Z☆ 最多可以嵌套含有简单调用(G65)和模态调用(G66)的程序4级。不包括子程序调用(M98)。局部变量可以嵌套0~4级。主程序的级数是0。用G65和G66每调用一次宏,局部变量的级数增加一次。上一级局部变量的值保存在NC 中。宏程序执行到M99时,控制返回到调用的程序。这时局部变量的级数减1,恢复宏调用时存储的局部变量值。
5 K- W: i7 K+ s G65简单宏调用可方便地向被调用的副程式传递数据,但是用它制作诸如固定循环
* U; Z2 D) `1 H: D2 ^% E' p之类的移动到坐标后才加工的程式就无能为力了。 |
评分
-
查看全部评分
|