|
|
回復 1# 鐘云駒
* k3 G& Q, u2 }3 f詳解A類宏3 W0 U2 M) h0 y: J3 Q- t
分類:默認分類 字號: 大大 中中 小小 用戶宏功能是提高數控機床性能的一種特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一樣存入存儲器,然后用一個總指令代表它們,使用時只需給出這個總指令就能執行其功能。
" l. |; y$ C8 W5 c4 ^$ H: u 用戶宏功能主體是一系列指令,相當于子程序體。既可以由機床生產廠提供,也可以由機床用戶自己編制。
+ ^2 ]+ P1 z# r4 E0 r9 O9 a0 q 宏指令是代表一系列指令的總指令,相當于子程序調用指令。. A+ H3 @: D/ D1 a3 P1 \3 J
用戶宏功能的最大特點是,可以對變量進行運算,使程序應用更加靈活、方便。
3 Y% k% H* \5 x6 q, \4 n6 I 用戶宏功能有A、B兩類。這里主要介紹A類宏功能,B類宏功能請參見本課程的B類宏程序介紹。
9 }+ i# E, B3 q/ u8 Y4 J1、變量6 i, T x7 U3 p3 L1 ^
在常規的主程序和子程序內,總是將一個具體的數值賦給一個地址。為了使程序更具通用性、更加靈活,在宏程序中設置了變量,即將變量賦給一個地址。
3 {3 O% C/ C% x(1)變量的表示6 w \: Z s6 w) R- t3 t7 F
變量可以用“#”號和跟隨其后的變量序號來表示:#i(i=1,2,3......)
! v2 N: |; L( ~: @$ e2 w; I5 W例:#5, #109, #501。
7 k8 D/ _0 L% g6 N(2)變量的引用
3 |6 ]: b8 p7 m6 k% K5 D 將跟隨在一個地址后的數值用一個變量來代替,即引入了變量。' f+ o; |' i! h" K2 o; Q
例:對于F#103,若#103=50時,則為F50;9 a% |: f7 U( H1 R+ G# z6 _, J
對于Z-#110,若#110=100時,則Z為-100;2 h: F$ O! e$ M
對于G#130,若#130=3時,則為G03。" E7 m; V1 X, ~" ^% A) I
(3)變量的類型
; {1 f5 D) I6 r' V5 D! @* ^* t 0MC系統的變量分為公共變量和系統變量兩類。
4 V1 _$ @8 W/ M" Y3 V$ y1)公共變量 " \0 z! I, N3 o+ A( P, D
公共變量是在主程序和主程序調用的各用戶宏程序內公用的變量。也就是說,在一個宏指令中的#i與在另一個宏指令中的#i是相同的。
- i5 Z5 h& ]6 J1 v0 n C# I, @0 f公共變量的序號為:#100~#131;#500~#531。其中#100~#131公共變量在電源斷電后即清零,重新開機時被設置為“0”;#500~#531公共變量即使斷電后,它們的值也保持不變,因此也稱為保持型變量。
9 Y, x+ t4 e. B" V' W! A) l
4 c# a( n: E8 A" O& V# D0 Q2 K. e+ u/ f6 m) b- I
8 K3 O; t- N! Z( _' }& O; E- v2)系統變量 6 r" `* l7 K7 Y2 G% G' t
系統變量定義為:有固定用途的變量,它的值決定系統的狀態。系統變量包括刀具偏置變量,接口的輸入/輸出信號變量,位置信息變量等。8 k5 N6 M+ _- ?6 \3 Y) j: }& L2 r
系統變量的序號與系統的某種狀態有嚴格的對應關系。例如,刀具偏置變量序號為#01~#99,這些值可以用變量替換的方法加以改變,在序號1~99中,不用作刀偏量的變量可用作保持型公共變量#500~#531。
/ P* }* ?8 y0 z8 }, A 接口輸入信號#1000~#1015,#1032。通過閱讀這些系統變量,可以知道各輸入口的情況。當變量值為“1”時,說明接點閉合;當變量值為“0”時,表明接點斷開。這些變量的數值不能被替換。閱讀變量#1032,所有輸入信號一次讀入。
+ J9 T! g5 U! \- S: y3 u8 {2、宏指令G658 A) u5 d9 c- \& G5 g
宏指令G65可以實現豐富的宏功能,包括算術運算、邏輯運算等處理功能。1 D8 U7 Z7 e; J7 h
一般形式: G65 Hm P#i Q#j R#k: [: Q: A! D+ Q% L
式中:--宏程序功能,數值范圍01~99;
% N# g5 q/ o( h#i--運算結果存放處的變量名;9 F" l8 w* ^+ k2 ^6 U
#j--被操作的第一個變量,也可以是一個常數;" W5 B$ |! R% R
#k--被操作的第二個變量,也可以是一個常數。2 o3 M2 Q; l1 R8 s6 V/ s
例如,當程序功能為加法運算時:. o( h) ^: X5 S$ h8 Z* f& W5 N
程序 P#100 Q#101 R#102...... 含義為#100=#101+#102
6 [' v: z6 v3 k# i2 V程序 P#100 Q-#101 R#102...... 含義為#100=-#101+#102/ v/ p* N6 A, J
程序 P#100 Q#101 R15...... 含義為#100=#101+15 ! ], X) O9 F2 j: x. g
" N& G. S8 K/ n; \3、宏功能指令 + X4 _) H2 X3 f
" ?+ m+ V7 U# j(1)算術運算指令
+ U" l$ Q2 o& v4 b. Q' X* t0 U0 A# N# N% O% d/ U8 ]( W
1)變量的定義和替換 #i=#j
7 j6 \$ f8 \* a% I! d" v+ c5 k$ h) H Q9 r
編程格式 G65 H01 P#i Q#j
; U0 _% q& o& W @4 @例 G65 H01 P#101 Q1005; (#101=1005)
" e5 {, I+ o AG65 H01 P#101 Q-#112;(#101=-#112)
$ Z- d% t. `. Z. c& n: U$ ?2)加法 #i=#j+#k
# [( K4 _/ a- c' O編程格式 G65 H02 P#i Q#j R#k
2 l2 \% g; ~* _# W8 N3 ~6 o例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103)( z2 T ~9 h; T) l
3)減法 #i=#j-#k
" V6 `& H& `8 T編程格式 G65 H03 P#i Q#j R#k9 P. _- a4 h5 h3 e2 ^9 A/ X; U
例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103)3 P4 ]9 s& b, w; K0 S8 i& l% a: ?
4)乘法 #i=#j×#k
$ X2 {) d! s: w( j" X. s7 e. L編程格式 G65 H04 P#i Q#j R#k
! v% D5 R1 v% \6 `例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103)( A( n: X m0 }3 n& x, U; e
5)除法 #i=#j / #k
: P8 C& j2 S9 x4 U3 p# C* b/ _2 J編程格式 G65 H05 P#i Q#j R#k
: o; G D( s3 d& m例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103)
" B3 H6 a' A. w) Z$ B6)平方根 #i=
% ~9 s" z5 j+ `: M' I& k% x編程格式 G65 H21 P#i Q#j
0 N2 E. |4 {4 g, O例 G65 H21 P#101 Q#102;(#101= ): L6 n/ f6 O! ?* S5 m* S+ A! e# q
7)絕對值 #i=│#j│. i$ H9 P: J: w6 J5 s6 d
編程格式 G65 H22 P#i Q#j7 g8 e$ ~5 N" D! P' K- L' A) X
例 G65 H22 P#101 Q#102;(#101=│#102│)
2 l+ z& l U( e8)復合平方根1 #i=
* Q/ A; c9 b; |8 J編程格式 G65 H27 P#i Q#j R#k6 }2 k- R. P: D/ j% f
例 G65 H27 P#101 Q#102 R#103;( #101=
, \/ i* g& }4 Q( k4 x: J0 e. x3 I9)復合平方根2 #i=
( [" E7 {2 o. S2 q T7 m$ D編程格式 G65 H28 P#i Q#j R#k
8 l0 t. c, k) R例 G65 H28 P#101 Q#102 R#103 , B6 K5 S$ e5 t: B3 }* `
" s$ z. K! ?3 n7 X+ u, n1)邏輯或 #i=#j OR #k
4 N- L* }% z0 D( j0 v* F; K/ U$ q# Q編程格式 G65 H11 P#i Q#j R#k
6 v; g$ [' p/ {% w# w7 x例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103)
4 W. a; j. t! l0 a8 N# l% M& v5 N: b3 B. u/ ?
2)邏輯與 #i=#j AND #k
6 e, K" h* @5 v' g. }5 s! E編程格式 G65 H12 P#i Q#j R#k
. D% P/ r" y4 O2 y例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103
, f2 n! c; M4 t, N
+ C- v" f% C, y0 S: Z* g# j: o' G
7 H/ V9 _ q% o / V4 ^+ N0 ^% L a l, C. D$ e
1 v7 r1 I$ I/ ^3 X) O) o
(3)三角函數指令
w4 m. F) b+ M. s
4 ?* B! G' V2 y* e) ~! x
% m& q! P& I% L
k; S: j# R3 D V/ T3 }1)正弦函數 #i=#j×SIN(#k) ( D; L; h- h A& V( g) C
' m' O2 Y5 b. G- }編程格式 G65 H31 P#i Q#j R#k (單位:度) .8 c( u& C$ I4 K* {7 E! x
- E: M1 c% b# ?" y: ], o1 W
例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103))4 R5 U+ z: W/ _$ J% N3 Z
2)余弦函數 #i=#j×COS(#k)6 U& u9 c& \" i: U3 l
編程格式 G65 H32 P#i Q#j R#k (單位:度)
; p2 W3 [: \0 S' m f5 Q* C例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103))
( {4 q& u+ `( l" T1 K/ P3)正切函數 #i=#j×TAN#k
2 I9 F$ k+ X' h1 M w編程格式 G65 H33 P#i Q#j R#k (單位:度)4 k; {) x# X0 M
例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103))2 m9 a+ z3 u+ ]' L0 @+ i
4)反正切 #i=ATAN(#j/#k)# N4 u0 _* k" {2 W: g" i
編程格式 G65 H34 P#i Q#j R#k (單位:度,0o≤ #j ≤360o)/ K; i( ^8 D+ K. P6 {1 \
例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103)$ v Q$ P+ v& y
# r, O+ @, V& v. b! j, ~- E
. V' |2 M8 c7 C& P( y$ r3 x$ @" a1 U6 {. }! Q
(4)控制類指令, v1 T+ d) X; k# ~1 }3 Y
8 O3 w R* d! u / `0 t+ ?& B; w( N, t: S" z
& l) W0 E3 j5 T& j' w
編程格式 G65 H80 Pn (n為程序段號)
2 w: Y3 B- ?& @+ I/ P例 G65 H80 P120;(轉移到N120), q- J8 a( E$ @, \' {7 l/ p
2)條件轉移1 #j EQ #k(=)" f& q* H( \" r2 O6 ^6 ?0 {
編程格式 G65 H81 Pn Q#j R#k (n為程序段號)! ]7 N8 W5 ^$ d" a
例 G65 H81 P1000 Q#101 R#102
+ f5 l9 v. |7 h6 C3 v! f6 O當#101=#102,轉移到N1000程序段;若#101≠ #102,執行下一程序段。
5 f2 k4 [0 q& p) X) p$ E3)條件轉移2 #j NE #k(≠)/ G% r4 r/ V, g0 `
編程格式 G65 H82 Pn Q#j R#k (n為程序段號)
$ f0 b7 v9 a& R) ^' e5 }: i' i9 U例 G65 H82 P1000 Q#101 R#102( e! [, m6 q. S6 T
當#101≠ #102,轉移到N1000程序段;若#101=#102,執行下一程序段。
, X u. C& S4 W; U: Z4)條件轉移3 #j GT #k (> )* {1 Z& a/ U4 _' Y* i; J# |
編程格式 G65 H83 Pn Q#j R#k (n為程序段號)0 S2 ?1 J; n$ e! l
例 G65 H83 P1000 Q#101 R#102
8 p9 o# z8 v. i2 {當#101 > #102,轉移到N1000程序段;若#101 ≤#102,執行下一程序段。4 f$ A( L4 L: P
5)條件轉移4 #j LT #k(<)
6 D0 ] z5 M* ~ c& E0 {2 Z! c7 q編程格式 G65 H84 Pn Q#j R#k (n為程序段號)
2 X: r+ l. K/ T8 n5 D+ T例 G65 H84 P1000 Q#101 R#102
7 h; h$ {0 a$ E3 C- h" i) |當#101 < #102,轉移到N1000;若#101 ≥ #102,執行下一程序段。- ^9 c/ B6 h5 {. w
6)條件轉移5 #j GE #k(≥)2 y9 N. _2 ^& P# q7 x
編程格式 G65 H85 Pn Q#j R#k (n為程序段號)
/ ?6 G' w* a! L' I* o6 {: r例 G65 H85 P1000 Q#101 R#102
1 b. T' D+ \8 i; I* X; u8 K當#101≥ #102,轉移到N1000;若#101<#102,執行下一程序段。
) }: H" W" M4 \0 [ K1 g7)條件轉移6 #j LE #k(≤)
" L7 D7 T; d q4 v) j, C編程格式 G65 H86 Pn Q#j Q#k (n為程序段號)) D7 b2 _# y4 ~! W% y/ |, B
例 G65 H86 P1000 Q#101 R#102
/ q* T' S; V1 e, K' P當#101≤#102,轉移到N1000;若#101>#102,執行下一程序段。* d v. v5 {0 K
4 a: X9 r; V6 ]/ h9 z: S5 ?
4、使用注意! d9 r3 Y1 V, r D: L
為保證宏程序的正常運行,在使用用戶宏程序的過程中,應注意以下幾點;
9 V' d D5 s* ?(1)由G65規定的H碼不影響偏移量的任何選擇;% n6 O3 g& e! b; {3 s3 w- j" P
(2)如果用于各算術運算的Q或R未被指定,則作為0處理;
, q- H% h% Z: s) F% G8 x4 Q(3)在分支轉移目標地址中,如果序號為正值,則檢索過程是先向大程序號查找,如果序號為負值,則檢索過程是先向小程序號查找。! P) ?7 K% i4 J* w$ b) E
(4)轉移目標序號可以是變量。 / }1 g5 _9 G8 i Y
1 j3 F9 G! A) T* z; N7 n9 G5、用戶宏程序應用舉例 : , Y+ P3 o4 [* i1 ^
% Z! z3 n( w2 @ F5 O用宏程序和子程序功能順序加工圓周等分孔。設圓心在O點,它在機床坐標系中的坐標為(X0,Y0),在半徑為r的圓周上均勻地鉆幾個等分孔,起始角度為α,孔數為n。以零件上表面為Z向零點。 3 z+ c* Y9 \6 [5 L! t: b
* }: ]% K5 r+ T- G3 f. x( I& U8 E使用以下保持型變量:& w! a$ e. j5 h1 L2 Y& A2 X
#502:半徑r;
* r2 M0 ~' Z2 {#503:起始角度α;
, R4 K( f; a/ A3 f, X#504:孔數n,當n>0時,按逆時針方向加工,當n<0時,按順時針方向加工;
( a/ M! u) W4 U( R#505:孔底Z坐標值;/ B' n+ s+ Z$ R) M1 w# A) ?) y
#506:R平面Z坐標值;) J) v6 i( O5 m& x$ N6 p' q8 T4 W
#507:F進給量。
4 B: }& F; J8 o2 }$ Y& ^( r使用以下變量進行操作運算:
1 X. B9 z' r% i+ F2 X7 L7 }#100:表示第i步鉆第i孔的記數器;' f' T0 s- R$ I e5 k
#101:記數器的最終值(為n 的絕對值);$ m- Z1 M% y6 l+ c/ a- _# X
#102:第i個孔的角度位置θi的值; O- o+ b" |6 P) L( e- ^1 z+ \
#103:第i個孔的X坐標值;, e0 b7 |% L, o
#104:第i個孔的Y坐標值;
, y9 U: @; L4 Y2 {+ J6 Y c4 \1 O& I, I用用戶宏程序編制的鉆孔子程序如下: 1 [ t6 |& o5 L1 }( |3 L: H
O90109 x" ^6 D& U5 V- y! N2 r0 A5 N
N110 G65 H01 P#100 Q0 //#100 = 0) z6 T, c4 F/ \6 `, J& C
N120 G65 H22 P#101 Q#504 //#101 = │#504│
: d9 Z2 E- H" a1 iN130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o: C9 e$ ]2 [* v* w* q4 T
N140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #504" w- ^0 \2 q/ e$ k$ x# l
N150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102當前孔角度位置θi =α+ (360o×i) / n
. k. k# v: F9 ~" pN160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)當前孔的 X坐標4 j: X- E' z# a# c. q% x3 z
N170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 當前孔的Y坐標& f0 e2 ^3 J8 q, Q# |* H M
N180 G90 G00 X#103 Y#104 //定位到當前孔(返回開始平面)
2 c" \' m7 Q1 _4 R/ P% k$ I# V- ?% S2 BN190 G00 Z#506 //快速進到R平面' s" G& V- L+ |) ?
N200 G01 Z#505 F#507 //加工當前孔; `4 b6 C2 r8 w+ I; k
N210 G00 Z#506 //快速退到R平面, t$ x% g" w1 f& e/ @2 i
N220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔計數
# H: q! Y% d: EN230 G65 H84 P-130 Q#100 R#101 //當#100 < #101時,向上返回到130程序段( ?& b. Y' b. J5 I
N240 M99 //子程序結束 ; c8 Q# i1 F8 H$ A2 g
. o) u- A, {6 a4 L2 A
( g/ W4 R2 l$ |5 Y3 K& J
: E& e; @0 \9 r( E& ?' C2 C R) N* X調用上述子程序的主程序如下:
" U# P) }% b3 a- xO0010
5 U. n6 |. x6 H% ]N10 G54 G90 G00 X0 Y0 Z20 //進入加工坐標系( h9 c: S, U# u9 O( ]9 h* k
N20 M98 P9010 //調用鉆孔子程序,加工圓周等分孔
. f3 T( G! K% b4 W, v8 |7 PN30 Z20 //抬刀
5 \2 G( [6 ^' b8 N) uN40 G00 G90 X0 Y0 //返回加工坐標系零點
% R# s+ ^3 A! p& ~4 r6 {4 fN50 M30 程序結束
# k+ ?5 x: v9 l7 P4 p' Q設置G54:X=-400,Y=-100,Z=-50。5 {& u; O s* q# R+ x
變量#500~#507可在程序中賦值,也可由MDI方式設定。 9 L8 l; n8 g4 z, O3 L2 M& A3 b( N0 @
) s: @( ~( i) g) ~B類宏G65
% ], a1 A& \. x7 |8 k9 \4 \% `, {7 r, B8 o. F% |$ D0 \
簡單調用(G65)2 J- {- w [1 _/ D/ n6 J
功能 G65被指定時,地址P所指定的程式被調用,自變量能傳遞到用戶宏程序中。! x5 ~1 @7 A- V
格式 G65 Pp Ll <自變量表>;7 `) X7 @* O+ f
其中: p 要調用的程序號1 V7 t: a$ M; M7 f( f0 B; r
l 重復的次數(缺省值為1,取值范圍1~9999)7 {1 W0 n% ]$ B0 T! O
自變量 傳遞給被調用程式的數。通過使用自變量表,值被分配給相應
* C6 U' ]3 `2 K; i# v& a2 q 的局部變量。
+ f0 x5 I5 Q8 j% L7 N/ F5 e! _( l, V
5 B8 p+ u* }9 d$ V% K 自變量分為兩類。第一類可以使用的字母只能使用一次,各自變量與局部變量的對用關系如下:
# _6 f) D1 t: P1 S4 N- K9 M( G9 w1 x! l4 y8 W# \2 y" ]
地址 變量號 地址 變量號 地址 變量號& T/ G% m& I/ f
A #1 E #8 T #20
& [5 U, [5 A t' `$ r3 I2 KB #2 F #9 U #21, U/ B7 L8 d. w: C
C #3 H #11 V #22( N/ _! m+ }1 x# c# u6 K. z
I #4 M #13 W #23% n# v) X# j0 H
J #5 Q #17 X #24
* N* I9 |; @- J7 W2 ?5 BK #6 R #18 Y #25% F! o' X) g& {1 B) F* |
D #7 S #19 Z #26
* u) }4 X+ @" W& s' K' x7 h' b# _☆ 地址G、L、N、O、P不能當作自變量使用。; O5 ?" [& r5 ~ {- P8 `
☆ 不需要的地址可以省略,與省略的地址相應的局部變量被置成空。, B6 |( P% G0 P# m; u% g& W
1 J3 I+ ~& Y9 k" K 第二類可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自變量使用的類別根據使
' @: Z, X" n% I# W5 D; X用的字母自動確定:, d+ \; k+ Q" G0 V
地址 變量號 地址 變量號 地址 變量號9 l5 S7 u; U: x! q
A #1 K3 #12 J7 #23
* @1 n6 ?1 k: o4 H! o- }B #2 I4 #13 K7 #24" S- B: ]5 j# s( |( n E6 \
C #3 J4 #14 I8 #25
# F+ q* X5 w! c; \- o3 d: i4 OI1 #4 K4 #15 J8 #26. p3 R. p5 D1 t! |4 n
J1 #5 I5 #16 K8 #27
3 U; o; a' m6 O, ]K1 #6 J5 #17 I9 #28
) m, s" N6 s% e4 f. m- ~5 xI2 #7 K5 #18 J9 #294 T. Q6 j! S; n5 B4 G3 ?$ N
J2 #8 I6 #19 K9 #30
/ U" Y" b- V6 Z* X. hK2 #9 J6 #20 I10 #31: g" J5 y9 p5 X' H5 F' Y
I3 #10 K6 #21 J10 #32' k T( q$ A! {# G7 j
J3 #11 I7 #22 K10 #33
, S, O1 a, z9 z( N☆ 在實際的程序中,I、J、K的下標不用寫出來。5 `5 q$ L+ g$ ]2 M- X. l$ m
注意:" ^+ r1 U) N( ]. U6 K/ S' ^
☆ 在自變量之前一定要指定G65。
* O, f" z6 p0 I- E/ N W) K W☆ 如果將兩類自變量混合使用,系統自己會辨別屬于哪類,最后指定的那一類優先。5 k3 t6 _, d& @+ S: j7 W" @; I$ ^
☆ 傳遞的不帶小數點的自變量的單位與每個地址的最小輸入增量一致,其值與機床的系統結構非常一致。為了程序的兼容性,建議使用帶小數點的自變量。8 F( B! E3 b* Y& `- h+ K! p
☆ 最多可以嵌套含有簡單調用(G65)和模態調用(G66)的程序4級。不包括子程序調用(M98)。局部變量可以嵌套0~4級。主程序的級數是0。用G65和G66每調用一次宏,局部變量的級數增加一次。上一級局部變量的值保存在NC 中。宏程序執行到M99時,控制返回到調用的程序。這時局部變量的級數減1,恢復宏調用時存儲的局部變量值。
* S, R; ^4 w1 A G65簡單宏調用可方便地向被調用的副程式傳遞數據,但是用它制作諸如固定循環
$ O" k7 t6 z# @( s# w# z之類的移動到坐標后才加工的程式就無能為力了。 |
評分
-
查看全部評分
|