|
|
回復 1# 鐘云駒 : w. P) V% `9 N; C/ I0 U
詳解A類宏
8 K* l+ i9 `# {+ E分類:默認分類 字號: 大大 中中 小小 用戶宏功能是提高數控機床性能的一種特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一樣存入存儲器,然后用一個總指令代表它們,使用時只需給出這個總指令就能執行其功能。
# E M" b9 ] H+ ?* r- @( }/ ` 用戶宏功能主體是一系列指令,相當于子程序體。既可以由機床生產廠提供,也可以由機床用戶自己編制。
$ p/ C9 ]' D& ~6 w7 R6 o: s/ } 宏指令是代表一系列指令的總指令,相當于子程序調用指令。
6 Y" f* T8 [4 K, v* b 用戶宏功能的最大特點是,可以對變量進行運算,使程序應用更加靈活、方便。
( }4 w% V+ [: \1 h% U+ A 用戶宏功能有A、B兩類。這里主要介紹A類宏功能,B類宏功能請參見本課程的B類宏程序介紹。' R. e2 Y3 }! E& P. y5 [
1、變量, N& p: M$ ]5 g! L3 z! _. e
在常規的主程序和子程序內,總是將一個具體的數值賦給一個地址。為了使程序更具通用性、更加靈活,在宏程序中設置了變量,即將變量賦給一個地址。5 v4 N4 R3 H3 V. ~+ q
(1)變量的表示 P* W) q7 J; R! C8 `
變量可以用“#”號和跟隨其后的變量序號來表示:#i(i=1,2,3......)$ \( j# b/ ] F$ T2 r
例:#5, #109, #501。
; x) n! a9 I1 m7 c# @6 i; H0 {(2)變量的引用# @" L2 _/ j. o: P7 ^2 O
將跟隨在一個地址后的數值用一個變量來代替,即引入了變量。/ E1 ]* S- {# r/ Y b3 G/ p1 B
例:對于F#103,若#103=50時,則為F50;& R) Q5 d$ r0 b8 c' z& Q
對于Z-#110,若#110=100時,則Z為-100;
3 s) A& V" d1 w對于G#130,若#130=3時,則為G03。
; E/ \9 p \" U0 C2 G y9 M(3)變量的類型 . U& i0 w! X* S
0MC系統的變量分為公共變量和系統變量兩類。
0 t! \. h: D; v7 `# K( C5 z1)公共變量
( ?0 O' Q, J# k3 Z 公共變量是在主程序和主程序調用的各用戶宏程序內公用的變量。也就是說,在一個宏指令中的#i與在另一個宏指令中的#i是相同的。
. H" z0 Y7 |5 H9 i4 R; l公共變量的序號為:#100~#131;#500~#531。其中#100~#131公共變量在電源斷電后即清零,重新開機時被設置為“0”;#500~#531公共變量即使斷電后,它們的值也保持不變,因此也稱為保持型變量。
( l+ n0 Y+ q" D4 ]0 S- |- ~1 F* W% [$ `) Z4 r) e. l" U
' S% Y* u: }+ R* l8 A
/ Q- o# k9 h/ o7 s: T9 t
2)系統變量 - q7 y# C; }& y. O7 A
系統變量定義為:有固定用途的變量,它的值決定系統的狀態。系統變量包括刀具偏置變量,接口的輸入/輸出信號變量,位置信息變量等。
( B7 v' E! I0 _2 W1 B 系統變量的序號與系統的某種狀態有嚴格的對應關系。例如,刀具偏置變量序號為#01~#99,這些值可以用變量替換的方法加以改變,在序號1~99中,不用作刀偏量的變量可用作保持型公共變量#500~#531。. V& C3 a. `: ]7 b
接口輸入信號#1000~#1015,#1032。通過閱讀這些系統變量,可以知道各輸入口的情況。當變量值為“1”時,說明接點閉合;當變量值為“0”時,表明接點斷開。這些變量的數值不能被替換。閱讀變量#1032,所有輸入信號一次讀入。
+ O% J. \4 x3 F \* H5 \2、宏指令G653 \0 A, [5 a3 a
宏指令G65可以實現豐富的宏功能,包括算術運算、邏輯運算等處理功能。
5 g- w4 s2 n+ N+ b 一般形式: G65 Hm P#i Q#j R#k5 f# u L7 m7 B2 a+ W( z' M6 t) w J
式中:--宏程序功能,數值范圍01~99;" U7 d0 D( ~' m4 I9 g2 i
#i--運算結果存放處的變量名;
' j0 a7 a6 |8 p6 b0 U$ N2 L#j--被操作的第一個變量,也可以是一個常數;- u$ F* G2 R- m& }3 y1 C* h
#k--被操作的第二個變量,也可以是一個常數。
0 P4 z. |' r& D+ H例如,當程序功能為加法運算時:
B" }" [ c2 N5 N$ c4 @& U程序 P#100 Q#101 R#102...... 含義為#100=#101+#102' j0 \/ N" ^0 J: V. k7 k
程序 P#100 Q-#101 R#102...... 含義為#100=-#101+#102
" n" ]9 t. T, u/ Q) Q程序 P#100 Q#101 R15...... 含義為#100=#101+15
% o& D( [4 c; b$ a# B1 J+ Z
) U) T n7 ^" M U1 ]1 Q, i' e2 M3、宏功能指令 6 y( e& J. M ~- w* E/ i7 H
3 m# E. J8 |4 {; J$ v(1)算術運算指令 B. R' K1 B$ z7 M
8 \- C% a$ h4 n! Z, m, x
1)變量的定義和替換 #i=#j
1 ~# v$ s0 e6 |- `- ^* e: e( J' c+ s5 y. e; d
編程格式 G65 H01 P#i Q#j
: v) p: ~) w8 w. W3 T( L; X例 G65 H01 P#101 Q1005; (#101=1005) 6 P7 r: X5 `7 U0 ?, ?! H
G65 H01 P#101 Q-#112;(#101=-#112)
5 m3 v5 u. W$ u- n! b2)加法 #i=#j+#k& d J7 {& v- e" \
編程格式 G65 H02 P#i Q#j R#k
2 W) O f, @- q2 \7 B例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103)- e8 F) Y, M' c/ t
3)減法 #i=#j-#k, c, \; z0 B0 @
編程格式 G65 H03 P#i Q#j R#k/ M8 S; a: u* p& t
例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103)
; n. ]" `* ^: _/ H4 j4)乘法 #i=#j×#k
4 t" f# p8 d& T編程格式 G65 H04 P#i Q#j R#k2 w+ Y6 V1 B; v& N9 A2 \7 F j; _% I
例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103)
4 v' @' t1 e3 l0 J7 o/ V1 n$ I5)除法 #i=#j / #k
8 s( |/ ]% U) k編程格式 G65 H05 P#i Q#j R#k' Y# \" f: y/ s/ r
例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103)
, |# d3 K! g" j4 S }6)平方根 #i= ' Y# y8 C0 m7 t# A1 Y' C! }; _
編程格式 G65 H21 P#i Q#j4 Z3 Q7 Z' _5 M$ Q/ g. t
例 G65 H21 P#101 Q#102;(#101= )
+ ], \0 c2 M. ~+ @0 D9 Q7)絕對值 #i=│#j│; T. Y4 O, H- v
編程格式 G65 H22 P#i Q#j6 z; l8 {- J( ^0 r8 k4 E+ I+ f( r
例 G65 H22 P#101 Q#102;(#101=│#102│)
) K+ N& ^, n) Z. D+ X8)復合平方根1 #i= ) S( v9 y4 e ^, O
編程格式 G65 H27 P#i Q#j R#k9 e+ l8 j0 h8 f. U7 B, U
例 G65 H27 P#101 Q#102 R#103;( #101= 8 Q7 i2 i8 w4 V
9)復合平方根2 #i= ( ^7 x4 { m! J. ]* Q
編程格式 G65 H28 P#i Q#j R#k$ n, J* Y/ W: C+ t4 l- n
例 G65 H28 P#101 Q#102 R#103
7 s8 z8 A% b0 R) L X8 X: `1 o7 `1 E) J. m2 b# v
1)邏輯或 #i=#j OR #k8 ^5 l3 n+ `0 y; s3 R) d
編程格式 G65 H11 P#i Q#j R#k
1 s) @* F6 x. e ^1 }例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103)
: i9 i* c/ v% J2 p1 L5 [# ^3 y7 b" |8 _ a' E0 z! r# l4 C
2)邏輯與 #i=#j AND #k } X$ I0 w0 @
編程格式 G65 H12 P#i Q#j R#k# T, i& E l- j
例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103
* v9 Y' j4 r3 {$ l+ P K; L
9 S" R5 J5 Z+ }/ V2 I E" V! B. a" }! Z
) \$ Y1 q* N. ]7 o$ z) N
, v" p T( a3 q" x. s- w(3)三角函數指令
0 e/ N5 q W2 y9 b0 i& f$ b( g9 s4 B8 g$ y" S7 [9 l+ E6 e6 o
2 k8 L5 ]/ S8 i
7 }" m$ S* n D9 U1 T
1)正弦函數 #i=#j×SIN(#k) 4 N1 r. { w P- @! g' P2 {/ u
% A' a% w5 |5 h- ]# {
編程格式 G65 H31 P#i Q#j R#k (單位:度) .5 X, k; E; R; N2 |$ w# k/ \+ o8 s) u
1 w* Z" Y" \ a5 }; Z# q. v
例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103)), M* G* g0 l. ]1 s. v4 Y Y2 j
2)余弦函數 #i=#j×COS(#k)
6 L/ v' w/ J# N編程格式 G65 H32 P#i Q#j R#k (單位:度)
, r# {; V9 I1 S% N0 f例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103))7 @+ X+ k, s+ _$ V6 X6 [0 \9 @
3)正切函數 #i=#j×TAN#k2 P% r* `$ O! }1 n
編程格式 G65 H33 P#i Q#j R#k (單位:度)7 _, o8 l$ I% e4 p, J! P' c! L" d
例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103))' b: G) O: E2 `0 ~
4)反正切 #i=ATAN(#j/#k)' v* b' F: ^, n; z8 v& W! _7 v0 \ B6 N& q
編程格式 G65 H34 P#i Q#j R#k (單位:度,0o≤ #j ≤360o)& o* ~" [+ [' V, }. L
例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103)
- |+ y+ @% z" T& @
3 \0 }- h7 c: k& F ( [. g$ a- o7 S" G2 t( K& W0 P6 @. A
" @& g P( B8 U; j# U: {" e
(4)控制類指令2 G, E* i# z0 [# [3 k5 M0 o
$ e* s( u2 Z, X: ?* j. M5 ~
" g# [! p( A$ u5 y
+ t) ?, E* J6 |4 U5 Q Y* I編程格式 G65 H80 Pn (n為程序段號). l6 j* X [. m' q) p
例 G65 H80 P120;(轉移到N120)
5 ]1 ]# y. `9 K* p1 F2)條件轉移1 #j EQ #k(=)1 \9 V0 C8 S8 B4 J7 l
編程格式 G65 H81 Pn Q#j R#k (n為程序段號)
/ i5 W, a, f9 G: U例 G65 H81 P1000 Q#101 R#102
% H# Y! o9 e2 C/ b) N當#101=#102,轉移到N1000程序段;若#101≠ #102,執行下一程序段。+ j( a$ p" U9 J/ ~2 @/ G; j
3)條件轉移2 #j NE #k(≠)0 T' ?0 P9 u: l9 D1 M: A
編程格式 G65 H82 Pn Q#j R#k (n為程序段號)/ w8 t/ Y8 l! V) G1 n2 [0 L. v
例 G65 H82 P1000 Q#101 R#102 A. g2 f- `/ k) j- U, r/ K( v! C
當#101≠ #102,轉移到N1000程序段;若#101=#102,執行下一程序段。
, Q: Y) X5 {4 `4)條件轉移3 #j GT #k (> )$ c! g" p/ I4 Y# l
編程格式 G65 H83 Pn Q#j R#k (n為程序段號)
1 m U* ~5 q* K8 u9 x" \0 _例 G65 H83 P1000 Q#101 R#102/ q' v* D" l/ k( q, Z
當#101 > #102,轉移到N1000程序段;若#101 ≤#102,執行下一程序段。
' u0 F* r" E1 W5)條件轉移4 #j LT #k(<)0 _3 L9 l! {! D( [
編程格式 G65 H84 Pn Q#j R#k (n為程序段號)
! J8 f& E! y9 r$ V5 l: L4 w例 G65 H84 P1000 Q#101 R#102 - {5 A: @+ @8 s& {. p. I( T5 _. w
當#101 < #102,轉移到N1000;若#101 ≥ #102,執行下一程序段。
" a5 E$ T# H* P l2 X( V! |0 b6)條件轉移5 #j GE #k(≥)! E+ F+ V( D ^' ] s7 G# M9 ~
編程格式 G65 H85 Pn Q#j R#k (n為程序段號)
3 j7 l7 |, D( |: T/ b例 G65 H85 P1000 Q#101 R#102' w; d2 T& @% e4 F! Y( \
當#101≥ #102,轉移到N1000;若#101<#102,執行下一程序段。
3 x3 H2 k# W) @7 T+ ]1 T1 L7)條件轉移6 #j LE #k(≤)8 b9 r" D# n1 G. i3 |' v7 h* i
編程格式 G65 H86 Pn Q#j Q#k (n為程序段號)6 _. Y P3 [9 _& R3 ?" T) z& b0 ^
例 G65 H86 P1000 Q#101 R#102
' ~, k% i0 J2 [ Z0 j當#101≤#102,轉移到N1000;若#101>#102,執行下一程序段。
. K# c$ h4 `' d( f$ x( j3 X8 n8 a5 o
4、使用注意
+ V* p% N& p+ g! e 為保證宏程序的正常運行,在使用用戶宏程序的過程中,應注意以下幾點;
9 m; B! E$ Q# `0 I2 Q; I, N(1)由G65規定的H碼不影響偏移量的任何選擇;) s+ v4 y7 K* z/ }2 i t
(2)如果用于各算術運算的Q或R未被指定,則作為0處理;
& c8 u% |, I1 g! z; e(3)在分支轉移目標地址中,如果序號為正值,則檢索過程是先向大程序號查找,如果序號為負值,則檢索過程是先向小程序號查找。9 Y7 y$ g' a- M% o
(4)轉移目標序號可以是變量。
4 e7 k) Q! G! Y& g9 T2 x; a$ o; U9 J, Q2 l
5、用戶宏程序應用舉例 :
# J, }% j; a' E# y. N3 W! P
( M" l+ @8 z, O0 T% [用宏程序和子程序功能順序加工圓周等分孔。設圓心在O點,它在機床坐標系中的坐標為(X0,Y0),在半徑為r的圓周上均勻地鉆幾個等分孔,起始角度為α,孔數為n。以零件上表面為Z向零點。 4 R) U7 n e# U6 T
2 I" g+ V8 k/ g) f7 g使用以下保持型變量:
. i) D3 j3 e" \, g#502:半徑r;
- [0 K+ e9 `2 D0 W" J9 C#503:起始角度α;' j+ r! b) _1 _! g0 m
#504:孔數n,當n>0時,按逆時針方向加工,當n<0時,按順時針方向加工;" c; K. Y# M7 X, P: L, G5 c) `
#505:孔底Z坐標值;2 j* v9 @- T6 q) V
#506:R平面Z坐標值;/ J! F7 s! A2 o' ?8 D6 W2 y
#507:F進給量。 + F! p- n% j1 e# h4 L5 u$ K! l
使用以下變量進行操作運算:* J- V% U+ D" l
#100:表示第i步鉆第i孔的記數器;
1 e- H9 W1 _) W: {9 F: t& f% f9 y4 f#101:記數器的最終值(為n 的絕對值);
. x2 w0 @1 M' e" H5 K) Y3 F#102:第i個孔的角度位置θi的值; " J) ?. I' p+ T( S: F4 U
#103:第i個孔的X坐標值;+ x# x0 K+ p; W
#104:第i個孔的Y坐標值;
5 N" f3 {. [' b4 n0 T: ^3 W用用戶宏程序編制的鉆孔子程序如下:
( \, b* K2 y( o# ?8 M. K [( cO9010
4 x0 G& S# R1 d7 K9 GN110 G65 H01 P#100 Q0 //#100 = 09 ^& ~2 `0 W: i; e) O2 q( R# s& t
N120 G65 H22 P#101 Q#504 //#101 = │#504│2 e+ D; q& w6 [) R, `+ _( N
N130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o6 m( g* F2 Z' x+ M
N140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #504
- f" I) T7 y, M5 D1 VN150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102當前孔角度位置θi =α+ (360o×i) / n+ {( `) L* X; k
N160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)當前孔的 X坐標
, ~0 t) W0 c& c {3 V9 O9 h; ^% SN170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 當前孔的Y坐標7 G) K' E$ F6 ?9 W
N180 G90 G00 X#103 Y#104 //定位到當前孔(返回開始平面)7 J3 T( I* j8 p- B
N190 G00 Z#506 //快速進到R平面
" R7 }8 S' L# {+ [. m4 jN200 G01 Z#505 F#507 //加工當前孔
. B3 x ~+ I# V3 n. rN210 G00 Z#506 //快速退到R平面
: k+ T5 w* }6 ~, RN220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔計數( F$ ?7 q2 K* S2 p2 b
N230 G65 H84 P-130 Q#100 R#101 //當#100 < #101時,向上返回到130程序段
' Q2 X8 S" N1 I$ J( n: O7 S& p; ON240 M99 //子程序結束
( s, ^; d. d8 D8 n, g' q( B2 a
+ x9 L: @1 E' n6 x3 \
9 B; X5 P" w& A, e6 o1 }
0 ^" I. a3 ?3 h0 c$ E5 H: w' |7 |調用上述子程序的主程序如下:
7 v* g( e9 o2 G* OO0010+ f! j- [( {+ J }- u5 m8 E
N10 G54 G90 G00 X0 Y0 Z20 //進入加工坐標系' F7 V9 C( {4 R
N20 M98 P9010 //調用鉆孔子程序,加工圓周等分孔3 p. \( Y! x. C+ r: ]8 E6 J+ I
N30 Z20 //抬刀
& u; T& w5 P" L* V: Y7 V* z: P8 ]N40 G00 G90 X0 Y0 //返回加工坐標系零點 8 j& v5 e; I4 Z: s1 r+ i$ ^
N50 M30 程序結束. F/ m5 ?5 G! I& V" x* e: g2 x
設置G54:X=-400,Y=-100,Z=-50。$ t# ^; R& V% e6 L9 I0 ~1 _
變量#500~#507可在程序中賦值,也可由MDI方式設定。 , u- K, j6 M0 a+ `/ ?* I' n
" C" v' S- V% s& B4 M
B類宏G65
! w8 y, D( m& o/ U) y1 z g2 G$ R- j {
簡單調用(G65)
- W6 y) O1 w% V; J* g 功能 G65被指定時,地址P所指定的程式被調用,自變量能傳遞到用戶宏程序中。) W% \6 x( ?( U& Z" c. w# o+ f
格式 G65 Pp Ll <自變量表>;, e! T( P4 M6 q+ J
其中: p 要調用的程序號
2 ?) ?# g# o% d l 重復的次數(缺省值為1,取值范圍1~9999)% E3 p! X2 o$ }" }* T) m
自變量 傳遞給被調用程式的數。通過使用自變量表,值被分配給相應 / f9 ~$ p9 Q% _7 s: l
的局部變量。$ Y$ d0 t/ j5 }4 r/ \# ?
/ N0 W- `& R5 D, X# w
自變量分為兩類。第一類可以使用的字母只能使用一次,各自變量與局部變量的對用關系如下:( d5 R$ O' p( c' ?% @. z# m
4 e0 i5 B0 a0 B5 o: C) h# Q4 \地址 變量號 地址 變量號 地址 變量號* b; \+ A+ A: }
A #1 E #8 T #20% M; w% ^0 V3 N4 f' L- |! m
B #2 F #9 U #21
/ k2 o0 T. d# ]" q+ |2 j# DC #3 H #11 V #225 ?# u2 | `2 w" ]
I #4 M #13 W #239 W( Z" ]9 e) b! R1 `; O; W
J #5 Q #17 X #24& S" G9 a1 E, y
K #6 R #18 Y #25- j% V% e( F, ^
D #7 S #19 Z #267 {% I* F/ J$ r6 ^8 P6 a, i
☆ 地址G、L、N、O、P不能當作自變量使用。
2 ?7 Z' f @0 M& C, ?) ], R☆ 不需要的地址可以省略,與省略的地址相應的局部變量被置成空。
& j6 T$ _' C$ W* o$ J! B % H2 [4 s/ q' {* ]4 R( P& _
第二類可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自變量使用的類別根據使% }1 S" j0 |! [/ [ x+ P g
用的字母自動確定:5 g- ^( L/ G( X |4 _1 ~7 m
地址 變量號 地址 變量號 地址 變量號
2 D* s1 a) K" S( M8 W, j1 \A #1 K3 #12 J7 #23
, k4 J J5 g" a+ O* w" VB #2 I4 #13 K7 #24# k3 |! v# s" W; t6 d. |
C #3 J4 #14 I8 #25
) b, ?/ \8 f- i NI1 #4 K4 #15 J8 #26
- R3 V" [4 K* JJ1 #5 I5 #16 K8 #27" b; D' W* Q; s2 V6 H' I$ V8 k
K1 #6 J5 #17 I9 #28, x3 T+ e# v+ Q! S- X0 S
I2 #7 K5 #18 J9 #299 N# u0 t2 g8 e b& k9 p1 I5 N( n7 A
J2 #8 I6 #19 K9 #30) }( S$ H# W; ]( i' O
K2 #9 J6 #20 I10 #31
8 S% ?2 c2 F) R- Q3 QI3 #10 K6 #21 J10 #32( U% v% w. u9 f) r
J3 #11 I7 #22 K10 #33
1 n' @3 M! C1 @5 Q: M1 L☆ 在實際的程序中,I、J、K的下標不用寫出來。
& v+ C n8 B6 y8 [. O注意:
$ ]" ~, E8 F1 X# L9 V☆ 在自變量之前一定要指定G65。) c X% ?+ Y! a
☆ 如果將兩類自變量混合使用,系統自己會辨別屬于哪類,最后指定的那一類優先。
, J8 a! s$ s9 J6 [% r☆ 傳遞的不帶小數點的自變量的單位與每個地址的最小輸入增量一致,其值與機床的系統結構非常一致。為了程序的兼容性,建議使用帶小數點的自變量。0 T. v) V4 z0 n1 V
☆ 最多可以嵌套含有簡單調用(G65)和模態調用(G66)的程序4級。不包括子程序調用(M98)。局部變量可以嵌套0~4級。主程序的級數是0。用G65和G66每調用一次宏,局部變量的級數增加一次。上一級局部變量的值保存在NC 中。宏程序執行到M99時,控制返回到調用的程序。這時局部變量的級數減1,恢復宏調用時存儲的局部變量值。/ E9 O9 p$ h6 l+ Q$ x
G65簡單宏調用可方便地向被調用的副程式傳遞數據,但是用它制作諸如固定循環
! P4 A8 I0 \- b% d之類的移動到坐標后才加工的程式就無能為力了。 |
評分
-
查看全部評分
|