|
|
发表于 2011-7-12 08:32:36
|
显示全部楼层
回复 1# 钟云驹
5 G. |. w) F) Q详解A类宏% Q/ |* P9 y! ~/ q
分类:默认分类 字号: 大大 中中 小小 用户宏功能是提高数控机床性能的一种特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一样存入存储器,然后用一个总指令代表它们,使用时只需给出这个总指令就能执行其功能。
; B4 [$ m( ?+ O4 u 用户宏功能主体是一系列指令,相当于子程序体。既可以由机床生产厂提供,也可以由机床用户自己编制。
9 a; U! s0 V4 s5 o" r+ t0 x 宏指令是代表一系列指令的总指令,相当于子程序调用指令。+ a" o, i1 ~0 s( u% T3 l D4 c& T/ B
用户宏功能的最大特点是,可以对变量进行运算,使程序应用更加灵活、方便。
) i7 t* l6 \" t7 {3 z7 m/ U/ e2 ]6 f- S 用户宏功能有A、B两类。这里主要介绍A类宏功能,B类宏功能请参见本课程的B类宏程序介绍。
. Z1 W5 c% x; ^) h4 @8 F$ [1、变量! a' L. d' |1 L" U
在常规的主程序和子程序内,总是将一个具体的数值赋给一个地址。为了使程序更具通用性、更加灵活,在宏程序中设置了变量,即将变量赋给一个地址。; u8 ]& c: l! p& g
(1)变量的表示! ^: o2 ?1 E# o! r) I! {
变量可以用“#”号和跟随其后的变量序号来表示:#i(i=1,2,3......)
7 H0 @, i* k2 W5 Y9 l例:#5, #109, #501。8 |. |( E" `- b/ {: ~# Q2 o
(2)变量的引用* ~, b' F4 i2 U7 r0 S# g
将跟随在一个地址后的数值用一个变量来代替,即引入了变量。8 [: ?; V0 u7 |3 B9 W: ~2 Q
例:对于F#103,若#103=50时,则为F50;/ j, {) c y& r. f: n$ q. L2 T
对于Z-#110,若#110=100时,则Z为-100;
# n8 C( n% K" S+ x" m对于G#130,若#130=3时,则为G03。
) ~, y( l$ |* R. y" G$ _* S(3)变量的类型
' ]+ J5 L3 _. _: p! L$ G2 N 0MC系统的变量分为公共变量和系统变量两类。) v4 i- ]) w6 H/ d. a
1)公共变量 7 [8 O1 s( d" y/ ]! X9 G/ l- C G
公共变量是在主程序和主程序调用的各用户宏程序内公用的变量。也就是说,在一个宏指令中的#i与在另一个宏指令中的#i是相同的。
: m5 ~3 K0 f2 \# S' b% @5 P公共变量的序号为:#100~#131;#500~#531。其中#100~#131公共变量在电源断电后即清零,重新开机时被设置为“0”;#500~#531公共变量即使断电后,它们的值也保持不变,因此也称为保持型变量。 5 p" A# p1 g, S3 k( F- l6 G
( J4 |$ _' [9 J( }+ V8 J
# S: G6 m6 f9 e6 C: S' \+ H+ X3 C$ P4 f( v/ x) |
2)系统变量 , @* t. R# p/ P0 N1 C. N0 i2 p
系统变量定义为:有固定用途的变量,它的值决定系统的状态。系统变量包括刀具偏置变量,接口的输入/输出信号变量,位置信息变量等。0 i- [( B% M) Z( i$ _
系统变量的序号与系统的某种状态有严格的对应关系。例如,刀具偏置变量序号为#01~#99,这些值可以用变量替换的方法加以改变,在序号1~99中,不用作刀偏量的变量可用作保持型公共变量#500~#531。+ v5 q/ c3 d, q
接口输入信号#1000~#1015,#1032。通过阅读这些系统变量,可以知道各输入口的情况。当变量值为“1”时,说明接点闭合;当变量值为“0”时,表明接点断开。这些变量的数值不能被替换。阅读变量#1032,所有输入信号一次读入。
5 V. @1 v0 y) a" y7 B, t: _& b2、宏指令G65
0 Y( }, n, w7 n; l: s0 y1 e. X 宏指令G65可以实现丰富的宏功能,包括算术运算、逻辑运算等处理功能。; I' X) u2 L" }# ^! M% s3 @
一般形式: G65 Hm P#i Q#j R#k- S+ x& w! K9 f2 D
式中:--宏程序功能,数值范围01~99;
W7 W5 u0 [5 A* s#i--运算结果存放处的变量名;
( v& U- L# m1 }6 z' ]#j--被操作的第一个变量,也可以是一个常数; W) i1 m# H' v6 `0 U3 _
#k--被操作的第二个变量,也可以是一个常数。
7 Z2 ]) k+ y- A$ m0 r9 n1 b% I例如,当程序功能为加法运算时:, t- z2 L5 j; k3 z* \, \8 h
程序 P#100 Q#101 R#102...... 含义为#100=#101+#102
+ n/ F3 `- o- r0 G/ P( g程序 P#100 Q-#101 R#102...... 含义为#100=-#101+#102
& e1 Q6 C, _+ c; t6 c- n4 i/ ?程序 P#100 Q#101 R15...... 含义为#100=#101+15 f3 `: _. Q; }' F! i& j; _ h
6 ~' ?+ n$ O' r i) I2 x3、宏功能指令
) ^1 z3 o& p$ m' [$ y( E
+ d! Q' p& \) p9 q7 V4 H+ d(1)算术运算指令 8 K7 X8 o0 Z0 _" w8 [5 r) U3 B) [
! M- T& D! N4 X K5 t( T9 F7 P
1)变量的定义和替换 #i=#j
2 Q# Q- E! E' }; d. v. A( j7 ~0 ?5 k4 d
编程格式 G65 H01 P#i Q#j
5 A$ J9 }' L. {! G5 p2 b例 G65 H01 P#101 Q1005; (#101=1005)
! ~5 _* m' O8 M$ S& v; g! ^4 v# CG65 H01 P#101 Q-#112;(#101=-#112) ( z7 O* |/ F8 _4 Q7 Z
2)加法 #i=#j+#k. v) v4 U$ E ]( G( T4 X
编程格式 G65 H02 P#i Q#j R#k * ?2 Y4 J3 Y+ D O1 W
例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103)% t: Y! M# v+ b/ c g! U
3)减法 #i=#j-#k
/ I- }* B& O7 k" Z& Y, A# d( {. S编程格式 G65 H03 P#i Q#j R#k
* @2 B/ U3 Z( U例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103)" l, v a) L2 }
4)乘法 #i=#j×#k4 N% f- U: U5 D+ v8 ~$ F( A0 F7 b
编程格式 G65 H04 P#i Q#j R#k
% M4 R; P' z& D* h) w例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103): b* D, B2 v& W' W% L
5)除法 #i=#j / #k
" p& i" t/ w4 @0 D1 C0 t- ^' `编程格式 G65 H05 P#i Q#j R#k
2 H' A3 ^: I1 A* \; X1 z例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103)7 c0 E; U0 A* L) n$ b
6)平方根 #i=
2 J7 i5 v$ r/ ?- ]编程格式 G65 H21 P#i Q#j
+ I7 v/ R% D" A例 G65 H21 P#101 Q#102;(#101= )
% [* v/ W9 \/ E& ~2 S# U7)绝对值 #i=│#j│
, {1 }5 t" n0 g* ?5 H! m# W0 a编程格式 G65 H22 P#i Q#j- v* S! N E! F
例 G65 H22 P#101 Q#102;(#101=│#102│) 8 s& l8 W2 G5 K( B% c k
8)复合平方根1 #i= & [$ Q+ E) h- q0 ]2 T" t; B0 I0 B
编程格式 G65 H27 P#i Q#j R#k# n" z# j# p2 |9 i
例 G65 H27 P#101 Q#102 R#103;( #101= 7 U% X: S9 G7 l: P. O- x
9)复合平方根2 #i=
1 n3 U" J5 p7 t* w; h编程格式 G65 H28 P#i Q#j R#k' R2 w# [! M5 h# @
例 G65 H28 P#101 Q#102 R#103 1 P# F0 F1 t- ~7 t1 u3 R
+ @1 A' b m8 v; e% E4 q5 K) M1)逻辑或 #i=#j OR #k
: G) {( f: X* s8 b9 T6 Q- e编程格式 G65 H11 P#i Q#j R#k5 v! a* M7 t3 N# Y5 U9 L
例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103): Y7 a/ F- n& u3 e# E( {+ ]& B. o5 O
: ? l1 a3 Y1 s" P. I& |/ z2)逻辑与 #i=#j AND #k
) I1 i; ]4 F/ A: k$ b6 ]0 m& u" f3 r, P! L编程格式 G65 H12 P#i Q#j R#k A8 ^/ D" y8 q7 |( g. F2 W
例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103 " f" {9 Q" s5 }$ A1 f0 a# k
0 R. |3 ]* H& [5 }' w
: z9 _8 n: V9 a( Z# C0 q! R
2 s9 `! r; a# r
3 R) ?- _6 g6 ^& f(3)三角函数指令 - q' G3 ^3 b% p
. h4 s3 R" @) Q# d% t6 m Z5 \
4 R X5 m6 R5 ^0 }' w; o
n" ]9 f$ d, w- ?( s; C1)正弦函数 #i=#j×SIN(#k) 9 e" g; U; Y7 c9 m" \7 d
; I) c) W1 z6 X# e
编程格式 G65 H31 P#i Q#j R#k (单位:度) .' F: K! f! I5 a; }" n5 ?& k
( ]1 G8 L: f: K例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103))8 F. k! z# v2 N- V
2)余弦函数 #i=#j×COS(#k)% j: Z' r; B2 F1 x1 U8 Y* f
编程格式 G65 H32 P#i Q#j R#k (单位:度)& W9 i' Z, M" W% ]7 F: J
例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103))
/ ?( {; a# l% x: H) h3)正切函数 #i=#j×TAN#k+ W6 U1 |8 \% F6 Q' p, c
编程格式 G65 H33 P#i Q#j R#k (单位:度)
/ o% f+ k) e y! [* v1 |例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103))
4 d9 S- v" H# x: P: v4)反正切 #i=ATAN(#j/#k)' w9 { C- t$ X8 q7 _7 O
编程格式 G65 H34 P#i Q#j R#k (单位:度,0o≤ #j ≤360o)0 X @4 W7 W# @3 r; i3 A# \
例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103)
. z; {! e2 ?6 }, r7 {
5 {# p" l" b% N* ]5 ~9 E3 R4 L
2 ]1 b$ e' ?6 |2 y5 N0 _5 B) F* B
# A: j8 X3 n1 H2 j2 H7 A(4)控制类指令4 @3 K2 r7 ?8 q8 w+ r: P
6 z/ o8 ]3 a1 d/ S/ ?" m9 V% G 3 L, P6 q( o$ _! Y# |) z1 h
! A, R6 `0 R7 t0 p; b2 a编程格式 G65 H80 Pn (n为程序段号)8 p' c7 G8 J% O4 z
例 G65 H80 P120;(转移到N120)8 u; g4 X Y: b' }. k2 G% f
2)条件转移1 #j EQ #k(=)- K l1 P' {/ V' i& K
编程格式 G65 H81 Pn Q#j R#k (n为程序段号)
# S, i9 F8 h* ` }# M Q x( L例 G65 H81 P1000 Q#101 R#1025 ]. c/ m2 V' @, a# p
当#101=#102,转移到N1000程序段;若#101≠ #102,执行下一程序段。; C( _) f) b" A, f
3)条件转移2 #j NE #k(≠)! o) z! T& L& H) T
编程格式 G65 H82 Pn Q#j R#k (n为程序段号)
' k$ e; ~+ m& g0 E( r9 L3 x例 G65 H82 P1000 Q#101 R#102
1 b1 k9 o4 K b! X' |当#101≠ #102,转移到N1000程序段;若#101=#102,执行下一程序段。
3 ]: _0 v' }- y w4)条件转移3 #j GT #k (> )0 _6 B0 g! t8 r, g
编程格式 G65 H83 Pn Q#j R#k (n为程序段号)) `7 \+ M. m; E( o% O
例 G65 H83 P1000 Q#101 R#102# Q; u; Q+ A3 y" B
当#101 > #102,转移到N1000程序段;若#101 ≤#102,执行下一程序段。
5 C* b9 J7 a' ^+ K# P5)条件转移4 #j LT #k(<)! {. ^( i- E+ E: f& ^# Q+ I# E
编程格式 G65 H84 Pn Q#j R#k (n为程序段号)5 d) ?( E- R" {+ X
例 G65 H84 P1000 Q#101 R#102 5 h9 l+ M/ p1 D0 a) s7 o: Z* s
当#101 < #102,转移到N1000;若#101 ≥ #102,执行下一程序段。9 \0 d& @& Q9 m
6)条件转移5 #j GE #k(≥)
8 d* [- b* ~5 h+ |2 m3 d编程格式 G65 H85 Pn Q#j R#k (n为程序段号)
" t; W r* K4 ~& p例 G65 H85 P1000 Q#101 R#1025 _# ~8 Z6 W$ S8 c0 q' y
当#101≥ #102,转移到N1000;若#101<#102,执行下一程序段。
" W2 E4 v, _" _3 c2 v, d% D$ F7)条件转移6 #j LE #k(≤)3 ^$ ?3 O; u2 g' I
编程格式 G65 H86 Pn Q#j Q#k (n为程序段号)
* M6 h9 U, _ k2 d例 G65 H86 P1000 Q#101 R#1021 p% L$ C/ W7 o) [, m! w+ I
当#101≤#102,转移到N1000;若#101>#102,执行下一程序段。* F2 |( U4 t/ {/ t& m
* H3 ^: \, M: |+ `$ }
4、使用注意) S& i1 A8 n3 A8 _+ f5 a
为保证宏程序的正常运行,在使用用户宏程序的过程中,应注意以下几点;
! c2 I/ X' Y0 ?" N8 d: H$ `(1)由G65规定的H码不影响偏移量的任何选择; @' r+ ^" \: Y0 v9 i5 s2 y* B$ n
(2)如果用于各算术运算的Q或R未被指定,则作为0处理;
8 Q4 ]/ c4 Y A; p, M(3)在分支转移目标地址中,如果序号为正值,则检索过程是先向大程序号查找,如果序号为负值,则检索过程是先向小程序号查找。
( S8 b) ~. S, N2 ^5 Q9 x" T0 s" z(4)转移目标序号可以是变量。
; g- s" s+ @- A7 ]$ z/ ]4 T8 Q- z. k3 O# \# w- c
5、用户宏程序应用举例 :
/ @/ a8 ?9 N3 y3 I0 |, [9 V1 ]0 N3 O7 U
用宏程序和子程序功能顺序加工圆周等分孔。设圆心在O点,它在机床坐标系中的坐标为(X0,Y0),在半径为r的圆周上均匀地钻几个等分孔,起始角度为α,孔数为n。以零件上表面为Z向零点。 5 t6 N& U$ F3 S* X! S
( a# L1 t- g" \使用以下保持型变量:
" h4 o! x/ G7 T- _#502:半径r;
* F4 q+ S- E8 {# z#503:起始角度α;
# R/ @8 P( m& S) P# i1 r#504:孔数n,当n>0时,按逆时针方向加工,当n<0时,按顺时针方向加工;* A) x& n* i; q, ]; e( a9 {
#505:孔底Z坐标值;9 _! O' L+ c; J d/ B9 ~
#506:R平面Z坐标值;; t- N2 l7 \8 u" Z& y; _
#507:F进给量。
9 I) `- [! @1 f" i使用以下变量进行操作运算:
9 D* H Y! W4 e* B- X3 S7 L0 T( S+ Z#100:表示第i步钻第i孔的记数器;9 p* N% u* }( S" n+ r W
#101:记数器的最终值(为n 的绝对值);9 w" [/ W @2 F, ?
#102:第i个孔的角度位置θi的值; , J* W$ [8 l/ F# p
#103:第i个孔的X坐标值;
% E7 [% ?/ Q$ x9 z2 N8 u/ R1 _#104:第i个孔的Y坐标值;
& H" _; S9 x! i, U6 t2 I用用户宏程序编制的钻孔子程序如下:
) o4 Z* x. S# I& X9 s2 a' _# nO9010* ]4 r+ N7 L6 O: J, N
N110 G65 H01 P#100 Q0 //#100 = 0
7 ?: J* A5 b& h: C- ]+ YN120 G65 H22 P#101 Q#504 //#101 = │#504│9 G& W$ g* A7 X
N130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o
# w" N( z. O' Z- L& d5 l) ?' jN140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #504
+ X' E- v8 }# q. C$ U* Y* x- l4 W& u5 ]2 NN150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102当前孔角度位置θi =α+ (360o×i) / n2 l; F( T f& u
N160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)当前孔的 X坐标4 r5 ]0 O( @( @
N170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 当前孔的Y坐标% b0 S+ m$ g& b, C
N180 G90 G00 X#103 Y#104 //定位到当前孔(返回开始平面)
' H+ I# D$ Y0 ^4 H; WN190 G00 Z#506 //快速进到R平面
/ a; ^: v& o; W7 aN200 G01 Z#505 F#507 //加工当前孔/ J h& V( [6 e. c2 @. P2 }
N210 G00 Z#506 //快速退到R平面 Y# }1 ~+ p5 }2 C" z! s) u! K6 [
N220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔计数
/ A! b4 r' d, cN230 G65 H84 P-130 Q#100 R#101 //当#100 < #101时,向上返回到130程序段* i% v1 ~; o) Y. Z+ O
N240 M99 //子程序结束
A; j0 E+ O& l3 g7 p9 s+ j
' [, ^) o/ }; c4 ] 7 n. ]! t3 P7 F$ @/ `3 n9 U0 \
) q3 u. m' q0 U* T8 K调用上述子程序的主程序如下: 6 H1 N c( U/ @
O0010
* Q& U" a$ d! pN10 G54 G90 G00 X0 Y0 Z20 //进入加工坐标系
* D* h3 p: e8 Q$ B6 oN20 M98 P9010 //调用钻孔子程序,加工圆周等分孔
2 |* X" z6 h0 |3 L0 |! w9 pN30 Z20 //抬刀
: B! [, _! @- M0 w. ~# L( }1 K5 s! sN40 G00 G90 X0 Y0 //返回加工坐标系零点
* ^! j4 b2 m5 S% }( k% A$ ON50 M30 程序结束
$ i/ N4 ^2 |4 ]" Q$ c设置G54:X=-400,Y=-100,Z=-50。
* `0 p/ X P9 h' S% G变量#500~#507可在程序中赋值,也可由MDI方式设定。
. H$ v: o; [/ _( S3 _
6 t) S" w5 w3 B( s2 _- W# @2 AB类宏G65
6 y. B4 K% y$ @. z# C- D
- N5 Y: ~) f# P: @2 u3 a6 ?# B1 v简单调用(G65)4 c' C4 r0 G' m7 D' u [3 Z/ t
功能 G65被指定时,地址P所指定的程式被调用,自变量能传递到用户宏程序中。
9 v" c' R7 t p/ w+ i 格式 G65 Pp Ll <自变量表>;
* C' u* i- B+ q1 f9 ~& J 其中: p 要调用的程序号
- s6 I0 d" p1 T: k7 V l 重复的次数(缺省值为1,取值范围1~9999)
" D' j. L8 l& f1 Y' S' ` 自变量 传递给被调用程式的数。通过使用自变量表,值被分配给相应
: z+ B [4 z0 c( o 的局部变量。* u2 M9 \7 @ I3 ?
) [2 O! K, F: X3 X 自变量分为两类。第一类可以使用的字母只能使用一次,各自变量与局部变量的对用关系如下:
0 H: l1 j. D" p6 }# s7 [+ u2 U5 b1 ]6 ~$ q
地址 变量号 地址 变量号 地址 变量号
' {0 Z0 `. p4 E" E7 r: |( w0 UA #1 E #8 T #20
7 q4 x b+ t1 M! NB #2 F #9 U #21' S$ b: @7 Y+ U$ x. Z& w- d6 _ \
C #3 H #11 V #226 K6 v+ Z$ t$ Y Q9 P
I #4 M #13 W #23 P8 T3 D7 U! Q( d" J
J #5 Q #17 X #246 i0 S* Q/ j( G7 Z5 g' i
K #6 R #18 Y #25
# ~) F3 t, g( zD #7 S #19 Z #263 m6 \ i7 F7 ]# R E, R$ a
☆ 地址G、L、N、O、P不能当作自变量使用。1 v. g* ?) C$ T
☆ 不需要的地址可以省略,与省略的地址相应的局部变量被置成空。
; f; Z2 @* \8 r( y% L! ?+ G k F) c! T' u5 C5 V$ E$ x2 _/ m* P$ `0 p
第二类可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自变量使用的类别根据使* h2 y! Y( ?, T" B+ \! D' L
用的字母自动确定:, I: O% Z( \+ I, O
地址 变量号 地址 变量号 地址 变量号
" u" T& j/ c6 | [0 TA #1 K3 #12 J7 #23
1 k9 D2 Q, U/ \4 _! UB #2 I4 #13 K7 #24
7 n1 \" i! u" {& s" F9 r, VC #3 J4 #14 I8 #25
' H4 f# M, Z/ j: P) vI1 #4 K4 #15 J8 #26
+ g1 G7 Y* h, D. P% `' E2 TJ1 #5 I5 #16 K8 #27
2 B+ b: y) u( e+ I& \/ @) S5 uK1 #6 J5 #17 I9 #28
0 p) d+ I8 F1 a+ w$ y% JI2 #7 K5 #18 J9 #29
P; r$ b) z9 _" B. _J2 #8 I6 #19 K9 #30' @; c" G0 S* a1 T& h" f5 O
K2 #9 J6 #20 I10 #31' l4 H! ?0 g9 r
I3 #10 K6 #21 J10 #32: O" r* p' V2 @3 }
J3 #11 I7 #22 K10 #338 p1 F; g6 D% A( ?9 p& Y
☆ 在实际的程序中,I、J、K的下标不用写出来。
' ]7 R7 h ~$ w" }6 Q- |/ c" q注意:
- h7 U+ K; i5 E0 y' W* n7 W: v☆ 在自变量之前一定要指定G65。6 |; z; @3 C0 g/ Z# |7 _
☆ 如果将两类自变量混合使用,系统自己会辨别属于哪类,最后指定的那一类优先。
h# h) ]# Y) |5 g. o: R☆ 传递的不带小数点的自变量的单位与每个地址的最小输入增量一致,其值与机床的系统结构非常一致。为了程序的兼容性,建议使用带小数点的自变量。; T/ n: d+ I( R* P8 Q
☆ 最多可以嵌套含有简单调用(G65)和模态调用(G66)的程序4级。不包括子程序调用(M98)。局部变量可以嵌套0~4级。主程序的级数是0。用G65和G66每调用一次宏,局部变量的级数增加一次。上一级局部变量的值保存在NC 中。宏程序执行到M99时,控制返回到调用的程序。这时局部变量的级数减1,恢复宏调用时存储的局部变量值。1 \. L* `3 s2 l4 K3 J( g$ N
G65简单宏调用可方便地向被调用的副程式传递数据,但是用它制作诸如固定循环 A) h% F1 q( d5 W6 i5 S% H3 Z+ ?
之类的移动到坐标后才加工的程式就无能为力了。 |
评分
-
查看全部评分
|