|
|
回復 1# 鐘云駒
: R6 q- ]' W9 D3 b F9 R' e5 k, A: l詳解A類宏
" `1 v E& S) H) n# N# I) O7 R分類:默認分類 字號: 大大 中中 小小 用戶宏功能是提高數控機床性能的一種特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一樣存入存儲器,然后用一個總指令代表它們,使用時只需給出這個總指令就能執行其功能。' L9 M- V/ s3 s8 r
用戶宏功能主體是一系列指令,相當于子程序體。既可以由機床生產廠提供,也可以由機床用戶自己編制。; b; J5 W9 b6 y5 w1 c
宏指令是代表一系列指令的總指令,相當于子程序調用指令。
' ^9 f6 r& t5 M G$ o0 g" ~" m 用戶宏功能的最大特點是,可以對變量進行運算,使程序應用更加靈活、方便。
% p) G; I. ]+ M8 U 用戶宏功能有A、B兩類。這里主要介紹A類宏功能,B類宏功能請參見本課程的B類宏程序介紹。 o+ n6 z5 K0 E6 j- g
1、變量
4 k8 J4 E5 \5 F1 J( b2 k7 |/ c 在常規的主程序和子程序內,總是將一個具體的數值賦給一個地址。為了使程序更具通用性、更加靈活,在宏程序中設置了變量,即將變量賦給一個地址。% i5 ]0 v5 L, K! `
(1)變量的表示. e! M! l4 U; c0 c1 V
變量可以用“#”號和跟隨其后的變量序號來表示:#i(i=1,2,3......)
+ y: y/ h! A k! k3 V. [: D' _2 \例:#5, #109, #501。
: \- n! d" Z2 h9 H3 r7 O8 G(2)變量的引用2 s- d. l# D+ m6 k5 Z. O4 a5 W
將跟隨在一個地址后的數值用一個變量來代替,即引入了變量。
" ]" [5 S8 \( \: a1 _4 {. d例:對于F#103,若#103=50時,則為F50;
$ G/ I+ Q( G: N, Y) d對于Z-#110,若#110=100時,則Z為-100;
" C8 `) `# t. p, P: ~對于G#130,若#130=3時,則為G03。9 b% ?9 y% d- Q- Y2 }7 z
(3)變量的類型 , z$ T0 P% q8 u( q+ Q" J
0MC系統的變量分為公共變量和系統變量兩類。
- a: m; K1 M' R1)公共變量 5 y6 z( Y) d. j+ \- K
公共變量是在主程序和主程序調用的各用戶宏程序內公用的變量。也就是說,在一個宏指令中的#i與在另一個宏指令中的#i是相同的。
2 R, J4 x3 j4 y( K% f/ N7 m公共變量的序號為:#100~#131;#500~#531。其中#100~#131公共變量在電源斷電后即清零,重新開機時被設置為“0”;#500~#531公共變量即使斷電后,它們的值也保持不變,因此也稱為保持型變量。 " G" i; {' Q5 w [, w# I1 y4 ?' N( h
8 Q3 }- w; D0 _# |
4 Q% B1 Z) p, }" u
2 ~7 K8 f& t; x
2)系統變量 . h& ]+ a) E# m+ D( k% w
系統變量定義為:有固定用途的變量,它的值決定系統的狀態。系統變量包括刀具偏置變量,接口的輸入/輸出信號變量,位置信息變量等。7 F9 j( ^1 ]/ ^& E, A# U7 }& a
系統變量的序號與系統的某種狀態有嚴格的對應關系。例如,刀具偏置變量序號為#01~#99,這些值可以用變量替換的方法加以改變,在序號1~99中,不用作刀偏量的變量可用作保持型公共變量#500~#531。
; ~9 W7 q% I& s) x3 W 接口輸入信號#1000~#1015,#1032。通過閱讀這些系統變量,可以知道各輸入口的情況。當變量值為“1”時,說明接點閉合;當變量值為“0”時,表明接點斷開。這些變量的數值不能被替換。閱讀變量#1032,所有輸入信號一次讀入。
+ i7 I; {% |$ G- z2、宏指令G65/ {9 c K# O$ E. O0 R6 K7 H4 M
宏指令G65可以實現豐富的宏功能,包括算術運算、邏輯運算等處理功能。
+ D% T% [* `1 o 一般形式: G65 Hm P#i Q#j R#k
; ]+ |7 F1 d1 x9 u$ Q" X4 k3 w式中:--宏程序功能,數值范圍01~99;
7 g2 U2 G( P v* h6 ~#i--運算結果存放處的變量名;
' _) I& }+ ?! X H6 u+ k; I#j--被操作的第一個變量,也可以是一個常數;
) r y1 f3 Q& H) \& P#k--被操作的第二個變量,也可以是一個常數。: U% E3 c6 P5 Y2 _9 W! A2 q
例如,當程序功能為加法運算時:# X9 J- P& q4 g/ q
程序 P#100 Q#101 R#102...... 含義為#100=#101+#102& }7 T, E# l U- N3 j
程序 P#100 Q-#101 R#102...... 含義為#100=-#101+#102! S$ ^8 ?) c' t+ d7 v% e
程序 P#100 Q#101 R15...... 含義為#100=#101+15
- I6 a7 R! x7 ^
. f: p6 V$ u- R9 l# r1 Q3、宏功能指令
5 s" A; Q- ^$ C$ H+ }% ~
! c+ d1 |' V; W(1)算術運算指令 7 }2 m% j0 x f- v V
. W9 x: r7 \3 N( E) n( u
1)變量的定義和替換 #i=#j
+ x* a! z' E3 k. e* w, p$ v& C L* R" y% s
編程格式 G65 H01 P#i Q#j
; b& S8 X! x/ e: Z% P例 G65 H01 P#101 Q1005; (#101=1005) 7 Z5 F% a6 L. Q/ O) M
G65 H01 P#101 Q-#112;(#101=-#112)
! j# g+ Z' L) e# v2)加法 #i=#j+#k' P7 m3 X8 a7 P1 J6 f
編程格式 G65 H02 P#i Q#j R#k ! M1 W$ B. R% ]3 A, f9 T
例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103) o2 c( W* I1 q( r
3)減法 #i=#j-#k% @. J3 F, s/ `6 ]
編程格式 G65 H03 P#i Q#j R#k
1 d% `2 n& u. u0 a0 F& ?例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103)
/ _/ |% O# V7 m2 B$ G7 L! ~. b, j4)乘法 #i=#j×#k
- A5 Z9 }! _9 O編程格式 G65 H04 P#i Q#j R#k
* ?; X( o2 ~' m; _' t3 m例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103)
3 F( `0 s m) z) p; A# Y' o; D5)除法 #i=#j / #k
! V9 f5 v u, U: ~' F編程格式 G65 H05 P#i Q#j R#k2 b* Z4 y: d; C. \! Q
例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103)
, D) V4 ~6 b9 r6 P4 j6)平方根 #i= ; G) [: K- Y" G6 y7 o$ F
編程格式 G65 H21 P#i Q#j3 _( v, u3 ]; O$ X/ `% }
例 G65 H21 P#101 Q#102;(#101= )
5 M* f2 L$ W7 x$ j0 F. ~: m7)絕對值 #i=│#j│
3 V) J4 G5 X, m2 k) t6 v編程格式 G65 H22 P#i Q#j9 D# C, ^* X1 b3 U( k
例 G65 H22 P#101 Q#102;(#101=│#102│) 7 ^ I2 M z! M+ b+ q
8)復合平方根1 #i=
?% v A* ~" P# ^) W編程格式 G65 H27 P#i Q#j R#k
( s; S. p! ?2 ]" B2 w: e例 G65 H27 P#101 Q#102 R#103;( #101= 2 @% e( B# Y& B. Q% }9 A; H
9)復合平方根2 #i=
. o4 |8 V( F b5 [7 y編程格式 G65 H28 P#i Q#j R#k( I5 n6 K" H# A y; k5 h& n
例 G65 H28 P#101 Q#102 R#103
" x& [9 A1 L9 Q# r. i" `6 @
# N9 p3 i' J" z% ]5 [1)邏輯或 #i=#j OR #k
; F6 s o# c( `- J編程格式 G65 H11 P#i Q#j R#k8 y8 G7 B9 E1 j/ K3 ~1 M
例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103)6 R2 Q& b; U/ `5 S
9 B+ M; o# i- t/ y( q0 G, A
2)邏輯與 #i=#j AND #k6 Q1 q$ r2 T9 D& D% v2 P
編程格式 G65 H12 P#i Q#j R#k3 p6 x9 ~: |3 q( @+ v
例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103
. v C7 K: T& d' B1 t
( [8 [: ]' t! ?, @( K& r/ d% J( U9 m. p8 \6 l
- c* x# m. k( @. z7 O% c
Q! p" j6 E; _. H* z" L(3)三角函數指令
: T; [' D" i1 J j6 ^) J0 x+ ]: G- q. h; M
# O- q5 w. H# k6 j: j) _
' _& S. i+ K9 M) T1 x/ F1)正弦函數 #i=#j×SIN(#k)
* E' \3 R y* |: N+ X+ q
3 ~) b j- Z: {& q, L1 [; A1 v編程格式 G65 H31 P#i Q#j R#k (單位:度) .0 S9 Z! u7 H1 G; U0 p
5 V5 L* ~, d; k, x例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103)) B) Z# F$ a4 C) n6 s
2)余弦函數 #i=#j×COS(#k)$ x9 C; b6 P1 G. v5 @0 `' c P9 T
編程格式 G65 H32 P#i Q#j R#k (單位:度), B" Q7 G5 E- w7 e* s
例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103))5 m; k: @& q$ N6 E# X/ V
3)正切函數 #i=#j×TAN#k; w7 a1 {2 _2 z8 N. ?3 q: _6 v
編程格式 G65 H33 P#i Q#j R#k (單位:度)" Q% ^# y! ?0 [4 \/ z
例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103))& t3 ~, Q& r. \0 e+ |; Q9 H( T' z
4)反正切 #i=ATAN(#j/#k) n3 x& w H4 c
編程格式 G65 H34 P#i Q#j R#k (單位:度,0o≤ #j ≤360o)
1 d* ?8 }0 P ~# c例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103)
( u, ]/ ?. _! F, I5 B
! _/ A& B( L8 k8 ] 6 L, x0 H% S0 K2 L
% @* p8 }0 {' }. \(4)控制類指令. K N+ G9 O' Y, `8 f) y' O3 z
$ {) p! t2 S/ ^$ e: n6 G s
0 E" @4 Y9 w: j# F
( _, S8 ~) _: X1 K1 D; i
編程格式 G65 H80 Pn (n為程序段號)
! }# f$ E% W3 D \例 G65 H80 P120;(轉移到N120)
: C/ W& z7 O8 @4 c/ G: r2)條件轉移1 #j EQ #k(=)
# p9 `/ n4 c6 j8 M編程格式 G65 H81 Pn Q#j R#k (n為程序段號)& O* [* _" n$ R) f6 f
例 G65 H81 P1000 Q#101 R#102
0 T' R" m, e# G$ r5 i' G% {當#101=#102,轉移到N1000程序段;若#101≠ #102,執行下一程序段。& U% R1 \) ?; P/ J
3)條件轉移2 #j NE #k(≠)
6 W7 r k% e K4 V7 \; W6 X7 u編程格式 G65 H82 Pn Q#j R#k (n為程序段號)
: F$ A+ o$ ?4 k% B1 L例 G65 H82 P1000 Q#101 R#102
* z" W' E `% y當#101≠ #102,轉移到N1000程序段;若#101=#102,執行下一程序段。
3 P+ s8 }9 F* l/ ?4)條件轉移3 #j GT #k (> )1 v0 L6 {" K% }3 z; T! S0 L' f. N T
編程格式 G65 H83 Pn Q#j R#k (n為程序段號)
2 e; B0 e' F; v! }% K; c例 G65 H83 P1000 Q#101 R#1023 o j( R* f- P' V# e5 q
當#101 > #102,轉移到N1000程序段;若#101 ≤#102,執行下一程序段。
- H1 A1 V2 r! u5)條件轉移4 #j LT #k(<)
5 `% \; g% r: x# ]6 u z, b編程格式 G65 H84 Pn Q#j R#k (n為程序段號)- V/ q# Z% I% E/ i* x0 \
例 G65 H84 P1000 Q#101 R#102
# B: G" Z& f; Y$ |& @當#101 < #102,轉移到N1000;若#101 ≥ #102,執行下一程序段。. k' y% l4 q5 i1 A4 S; X
6)條件轉移5 #j GE #k(≥)1 H$ M* a2 T. v
編程格式 G65 H85 Pn Q#j R#k (n為程序段號)7 w6 n+ ]6 o) W/ L+ h) `; [& n- E
例 G65 H85 P1000 Q#101 R#102
1 @ b) C) x1 s* F: f/ w. l6 ]' [6 s當#101≥ #102,轉移到N1000;若#101<#102,執行下一程序段。
1 d+ k2 ~' ^ P+ j+ t7)條件轉移6 #j LE #k(≤)- j- n4 D& ]5 K, B) y
編程格式 G65 H86 Pn Q#j Q#k (n為程序段號)1 Z, s0 J5 g: W, M. D* n8 x7 Q
例 G65 H86 P1000 Q#101 R#102
5 _; F8 Z/ x) k. ?當#101≤#102,轉移到N1000;若#101>#102,執行下一程序段。7 k1 \6 n: q) N' u9 U3 L" M
% i" P, V; P1 [
4、使用注意
x! I; Z6 p8 q+ Z5 \+ v: E 為保證宏程序的正常運行,在使用用戶宏程序的過程中,應注意以下幾點;
7 |" J/ H5 E& w' \& D) i(1)由G65規定的H碼不影響偏移量的任何選擇;
9 c0 r4 j% M" A+ I# L* G(2)如果用于各算術運算的Q或R未被指定,則作為0處理;
2 ]) N% f1 o' Z# K, v% Q(3)在分支轉移目標地址中,如果序號為正值,則檢索過程是先向大程序號查找,如果序號為負值,則檢索過程是先向小程序號查找。
! Z* }# c. H) X4 M: k(4)轉移目標序號可以是變量。
& ~ D: c+ g) V G
/ i9 w, w& ]4 P7 |& `- _5、用戶宏程序應用舉例 : M+ G' N* Y% H1 b& ~8 {
- g0 v2 f) Q0 c6 X1 W! V. U2 @% ~3 Y# g
用宏程序和子程序功能順序加工圓周等分孔。設圓心在O點,它在機床坐標系中的坐標為(X0,Y0),在半徑為r的圓周上均勻地鉆幾個等分孔,起始角度為α,孔數為n。以零件上表面為Z向零點。
" U3 J6 T2 A4 ~( O% D4 k; I M, d: y- c7 N- a
使用以下保持型變量:
% @/ c: t6 r. i8 ^#502:半徑r;0 P0 {2 y2 d* ]# Q: f. G; y
#503:起始角度α;; ~9 @2 [- I4 d
#504:孔數n,當n>0時,按逆時針方向加工,當n<0時,按順時針方向加工;
! o; T3 `+ a$ n* R" ^& w#505:孔底Z坐標值;
& a0 E2 F+ z( [3 N# o#506:R平面Z坐標值;
: b4 B% s9 p L2 E- ?3 R" D" B7 q#507:F進給量。 2 H. i1 C E- @0 P# z } \% G
使用以下變量進行操作運算:4 V- @: W; l/ g$ o
#100:表示第i步鉆第i孔的記數器;3 T8 h( r0 j" e* _
#101:記數器的最終值(為n 的絕對值);
0 G- a- G; P- z7 a: o#102:第i個孔的角度位置θi的值; 8 F% J1 B3 Z% N
#103:第i個孔的X坐標值;
4 q+ B* J0 Q1 v#104:第i個孔的Y坐標值;9 R5 R3 i, [4 U( w- m5 W$ k
用用戶宏程序編制的鉆孔子程序如下:
, R; n% A- J; q" y" v% m# v. U8 VO9010
) P6 u; H, |' Y- J; y% \. ]) LN110 G65 H01 P#100 Q0 //#100 = 05 R; `/ u! V" U/ V# D/ ^- Z
N120 G65 H22 P#101 Q#504 //#101 = │#504│( \) ]! l+ w4 J3 u* B3 D7 T6 U
N130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o& F7 m9 {8 c) R2 O- o
N140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #5040 P0 E" M% I0 V# t2 M5 w
N150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102當前孔角度位置θi =α+ (360o×i) / n
' v2 m; d, K5 j, kN160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)當前孔的 X坐標
* q6 `9 m, Q3 ON170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 當前孔的Y坐標- {: B: v3 ~+ ?# @7 R
N180 G90 G00 X#103 Y#104 //定位到當前孔(返回開始平面)9 V6 a$ H: y# n! g; W" K% ]
N190 G00 Z#506 //快速進到R平面9 A! f, r" R* Z3 L" K5 y) Y# v- ^
N200 G01 Z#505 F#507 //加工當前孔
: ~9 k7 `, p. G$ H2 c+ g+ _N210 G00 Z#506 //快速退到R平面
; N: j: T& P8 ?$ ~& iN220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔計數1 v4 L3 |4 Q9 A1 J' e% X; t
N230 G65 H84 P-130 Q#100 R#101 //當#100 < #101時,向上返回到130程序段* i! Y7 E2 H, I: H3 a' Q
N240 M99 //子程序結束 " D) N/ u5 J* l% h8 \6 k& c
% S# ?! f, j. N$ u7 a7 R! x ; R K/ }5 b9 W, M' z0 L5 R" v
) I9 a6 S" e" w0 t& i+ F調用上述子程序的主程序如下: * w# N6 g8 p1 H2 D. \& u& |- q! u
O0010
/ ~1 F. v0 b9 e) U }. SN10 G54 G90 G00 X0 Y0 Z20 //進入加工坐標系
$ \4 v5 l+ D6 I1 dN20 M98 P9010 //調用鉆孔子程序,加工圓周等分孔' \ H) ^# F: H* n8 ]1 [
N30 Z20 //抬刀
3 G! N, |3 C4 H0 nN40 G00 G90 X0 Y0 //返回加工坐標系零點
" U2 e, R, P1 V6 U) @7 wN50 M30 程序結束4 [! Y! I3 V2 B( V+ \1 i: j- Q
設置G54:X=-400,Y=-100,Z=-50。5 K& m6 T' r! f: W% `/ `
變量#500~#507可在程序中賦值,也可由MDI方式設定。
4 P) g/ l# q+ c1 t1 S/ _0 k& h
. \7 Q9 e) W y2 tB類宏G65; L8 Q% N0 B9 {) W W# K/ N# K
: I0 I# y* L3 m2 H7 i
簡單調用(G65)
/ M0 Z% [3 T2 p/ }- e8 _4 w Q: D( W1 S 功能 G65被指定時,地址P所指定的程式被調用,自變量能傳遞到用戶宏程序中。1 ~% Q- a# q- _! A7 E; G, @" _
格式 G65 Pp Ll <自變量表>;
8 _9 M" ^% y* e F: G4 K' n, J5 B- d 其中: p 要調用的程序號
% W- I' Z' p8 ~. n0 @' ]1 j l 重復的次數(缺省值為1,取值范圍1~9999)
: L8 L* K6 A- W; }5 K/ m 自變量 傳遞給被調用程式的數。通過使用自變量表,值被分配給相應 + k. n2 ~4 q# `5 R
的局部變量。7 w% d# Z! l/ c1 e. d; Z; H3 J2 Q
0 @; Y2 |3 N. T& t$ n5 R 自變量分為兩類。第一類可以使用的字母只能使用一次,各自變量與局部變量的對用關系如下:
, V% L4 x7 g! s1 K. u, x7 h) p
' g9 O1 S& A$ h8 E地址 變量號 地址 變量號 地址 變量號) ?9 [* a+ d& F- x2 P! W5 a
A #1 E #8 T #201 k: e; U( o/ ~4 q
B #2 F #9 U #21
4 F* F5 [( Z, f: V- K( nC #3 H #11 V #225 A' U9 `8 ~3 _, K$ Z: J: Q4 E+ M
I #4 M #13 W #23/ s' V# o! J, a! P0 G
J #5 Q #17 X #24' {! P# ?9 n8 r# N
K #6 R #18 Y #25! X' o7 f# I2 J# \2 N4 v" B; r
D #7 S #19 Z #261 y* J1 g2 ?* G/ g# j* p
☆ 地址G、L、N、O、P不能當作自變量使用。. K$ B% n. s# X
☆ 不需要的地址可以省略,與省略的地址相應的局部變量被置成空。& ]$ {8 W% v$ w
5 u7 s6 N; Z( x7 e9 K* V) |4 I
第二類可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自變量使用的類別根據使
) p/ C/ Y# u6 G3 m2 z用的字母自動確定:( v) |0 ^7 R9 F
地址 變量號 地址 變量號 地址 變量號1 i6 h1 T8 p, e6 n1 l* ^
A #1 K3 #12 J7 #231 J0 g8 z- d- D6 @
B #2 I4 #13 K7 #24' Z& B n$ ` S7 {% K
C #3 J4 #14 I8 #25+ ^, I0 U, Y# U# \ g
I1 #4 K4 #15 J8 #26' x+ v6 r! I, N
J1 #5 I5 #16 K8 #27
2 H4 @' b3 o, fK1 #6 J5 #17 I9 #28
4 b( Y2 ^3 I {0 |- G( O5 H! A& YI2 #7 K5 #18 J9 #29/ Z# t" j- N/ K- l# x- I9 S
J2 #8 I6 #19 K9 #30
$ n; j: u8 D9 i9 r/ IK2 #9 J6 #20 I10 #31" b! G# t6 v% ~
I3 #10 K6 #21 J10 #32
( P5 T3 E5 H& v/ QJ3 #11 I7 #22 K10 #33, ?4 ~ e5 A- b- o( U9 O
☆ 在實際的程序中,I、J、K的下標不用寫出來。
2 _8 K" Z( t& A注意:' M! V- |! _# `% h7 p
☆ 在自變量之前一定要指定G65。# H$ \. P& |9 F/ d0 L
☆ 如果將兩類自變量混合使用,系統自己會辨別屬于哪類,最后指定的那一類優先。
, t3 K: N; n K; i☆ 傳遞的不帶小數點的自變量的單位與每個地址的最小輸入增量一致,其值與機床的系統結構非常一致。為了程序的兼容性,建議使用帶小數點的自變量。' D% n. X9 x) R
☆ 最多可以嵌套含有簡單調用(G65)和模態調用(G66)的程序4級。不包括子程序調用(M98)。局部變量可以嵌套0~4級。主程序的級數是0。用G65和G66每調用一次宏,局部變量的級數增加一次。上一級局部變量的值保存在NC 中。宏程序執行到M99時,控制返回到調用的程序。這時局部變量的級數減1,恢復宏調用時存儲的局部變量值。. Z+ ~- `& R* r; S( @! O
G65簡單宏調用可方便地向被調用的副程式傳遞數據,但是用它制作諸如固定循環4 ~8 A1 u% O8 O+ y O* d1 t* Q: {
之類的移動到坐標后才加工的程式就無能為力了。 |
評分
-
查看全部評分
|