|
|
回復 1# 鐘云駒 % D, Z2 M, V- f" E# I
詳解A類宏
6 Y G1 ^9 h7 h9 ]0 ?* U分類:默認分類 字號: 大大 中中 小小 用戶宏功能是提高數控機床性能的一種特殊功能。使用中,通常把能完成某一功能的一系列指令像子程序一樣存入存儲器,然后用一個總指令代表它們,使用時只需給出這個總指令就能執行其功能。
2 X& i) i, B/ s: ~. u. o 用戶宏功能主體是一系列指令,相當于子程序體。既可以由機床生產廠提供,也可以由機床用戶自己編制。
# V8 U6 [; I" _- z2 s 宏指令是代表一系列指令的總指令,相當于子程序調用指令。, Z" l* _( ?% Q" g. M) L4 T
用戶宏功能的最大特點是,可以對變量進行運算,使程序應用更加靈活、方便。
! h+ p& W. v0 I$ W. _8 E 用戶宏功能有A、B兩類。這里主要介紹A類宏功能,B類宏功能請參見本課程的B類宏程序介紹。
% c& x4 S' @7 }! e' j8 B1、變量
2 [4 X( I1 \. ^" A2 ~0 E 在常規的主程序和子程序內,總是將一個具體的數值賦給一個地址。為了使程序更具通用性、更加靈活,在宏程序中設置了變量,即將變量賦給一個地址。! c' ?( i& r. E% [4 V
(1)變量的表示# j' }0 W" {8 l& P* H# w4 L
變量可以用“#”號和跟隨其后的變量序號來表示:#i(i=1,2,3......)
2 y9 b4 o7 p7 {( l+ W# Z6 }例:#5, #109, #501。0 d$ n6 v9 H, h* T4 i( p
(2)變量的引用
7 p6 e# @$ @+ o& q9 T, x. P4 h# L- w 將跟隨在一個地址后的數值用一個變量來代替,即引入了變量。
( E* }6 r( V7 B5 v" g$ r" ~例:對于F#103,若#103=50時,則為F50;
* K, r8 I5 j9 ]# X9 X! L對于Z-#110,若#110=100時,則Z為-100;2 q8 z! G1 K6 u8 b+ N: G
對于G#130,若#130=3時,則為G03。
, U; s6 H( b) ]; Q( l(3)變量的類型
7 T9 g+ G" S7 M6 i7 {3 Y 0MC系統的變量分為公共變量和系統變量兩類。
3 |7 U# m+ m6 d/ l1)公共變量 3 K N- O0 ]1 R2 n$ y( c
公共變量是在主程序和主程序調用的各用戶宏程序內公用的變量。也就是說,在一個宏指令中的#i與在另一個宏指令中的#i是相同的。( h7 @2 l# D! S6 f1 s; j
公共變量的序號為:#100~#131;#500~#531。其中#100~#131公共變量在電源斷電后即清零,重新開機時被設置為“0”;#500~#531公共變量即使斷電后,它們的值也保持不變,因此也稱為保持型變量。 0 \7 U0 f3 W/ f+ m! x' Q" J
6 c9 q0 h+ @/ b" C/ E! Y3 Q1 d1 W
4 u) _; p+ d) S+ j$ c5 a- l
1 C9 W4 A/ y3 s& X s! O1 U2)系統變量
: _7 Z4 F) u" c7 D/ ?$ | 系統變量定義為:有固定用途的變量,它的值決定系統的狀態。系統變量包括刀具偏置變量,接口的輸入/輸出信號變量,位置信息變量等。4 Y9 o5 V/ y0 S8 c4 D5 K5 \
系統變量的序號與系統的某種狀態有嚴格的對應關系。例如,刀具偏置變量序號為#01~#99,這些值可以用變量替換的方法加以改變,在序號1~99中,不用作刀偏量的變量可用作保持型公共變量#500~#531。- X" N( J& R0 T+ Z' p1 l5 u
接口輸入信號#1000~#1015,#1032。通過閱讀這些系統變量,可以知道各輸入口的情況。當變量值為“1”時,說明接點閉合;當變量值為“0”時,表明接點斷開。這些變量的數值不能被替換。閱讀變量#1032,所有輸入信號一次讀入。
: T) ]6 U) A N2、宏指令G65
: V+ p# D5 A B- i8 y. j 宏指令G65可以實現豐富的宏功能,包括算術運算、邏輯運算等處理功能。( N% `4 E! j: |: x0 S
一般形式: G65 Hm P#i Q#j R#k4 v% y! |0 e( L3 C: H9 ^
式中:--宏程序功能,數值范圍01~99;* q* X5 V& ~1 B5 ?( W. H/ w
#i--運算結果存放處的變量名;% R! {6 d; Z" b& m) r7 h
#j--被操作的第一個變量,也可以是一個常數;
9 \& I' w' q0 Y, T#k--被操作的第二個變量,也可以是一個常數。
! d! V/ g/ N# B( _3 y; r例如,當程序功能為加法運算時:
9 d( q; `; S A- t程序 P#100 Q#101 R#102...... 含義為#100=#101+#102
& z5 ~/ F5 A& _$ S$ a3 U程序 P#100 Q-#101 R#102...... 含義為#100=-#101+#102) f1 \9 c) `9 R j3 U
程序 P#100 Q#101 R15...... 含義為#100=#101+15
6 _9 g# n/ P/ X- x7 e- ~# ^9 t+ s; f* G' H; e
3、宏功能指令
* E% ~5 m) {% |7 X" A$ T3 ]2 L
; [% Q' l5 Z# d# U6 Q m(1)算術運算指令
4 K* F, H6 E6 E- I- H% {
3 c) C8 x6 i2 e0 z9 s" G1)變量的定義和替換 #i=#j # Z. F( {) l+ R5 P. [
/ u6 Q1 d. ~+ i* j編程格式 G65 H01 P#i Q#j4 O4 Y( M d( A* x
例 G65 H01 P#101 Q1005; (#101=1005)
) q' H' c* k$ V4 W0 YG65 H01 P#101 Q-#112;(#101=-#112) * B/ ]$ c) o1 \/ Y$ l: p8 J
2)加法 #i=#j+#k
% j* d: m/ Y) p$ \# x' n編程格式 G65 H02 P#i Q#j R#k 4 S5 @/ K8 |9 w/ I4 t
例 G65 H02 P#101 Q#102 R#103;(#101=#102+#103)( ~: `/ Y- q4 Z. z0 B" l3 \' \
3)減法 #i=#j-#k* ^/ V! z1 J1 Z) i# N, f; i
編程格式 G65 H03 P#i Q#j R#k) Z# }% L. I: F9 n- l5 h
例 G65 H03 P#101 Q#102 R#103;(#101=#102-#103)/ }4 L8 m, o4 D# C0 r$ {. Q
4)乘法 #i=#j×#k
]" {0 ]: j# G編程格式 G65 H04 P#i Q#j R#k
c. A8 Q: {- l i3 I例 G65 H04 P#101 Q#102 R#103;(#101=#102×#103)) @% g, R" G3 b; Q
5)除法 #i=#j / #k
8 _- }) @0 ?" W: J7 Y編程格式 G65 H05 P#i Q#j R#k
P! w6 r) G4 `4 J; Y- q例 G65 H05 P#101 Q#102 R#103;(#101=#102/#103). t2 P9 k% [+ c2 _- r0 x
6)平方根 #i=
% u' J+ q9 F R0 f# b; A% d編程格式 G65 H21 P#i Q#j- j7 T4 Y! E% s: p/ H; B
例 G65 H21 P#101 Q#102;(#101= )/ e' l, y! q, Q
7)絕對值 #i=│#j│
2 P4 P! n$ n5 B5 X6 e- c編程格式 G65 H22 P#i Q#j2 k, W# o/ E( T- {4 Y8 _
例 G65 H22 P#101 Q#102;(#101=│#102│)
2 H: _8 n) H1 M7 h2 |; @: u8)復合平方根1 #i= 2 x6 s% h4 {9 j: |5 f; N
編程格式 G65 H27 P#i Q#j R#k
/ M4 [ E7 y. C4 s+ j例 G65 H27 P#101 Q#102 R#103;( #101=
4 _# |6 h- ~% ~1 s" ^9)復合平方根2 #i= % f o& T7 b+ ?# P4 V
編程格式 G65 H28 P#i Q#j R#k5 Z4 t% I! j3 d! v( t
例 G65 H28 P#101 Q#102 R#103
q" Z0 c) p. Q5 T, {" G
% X# j6 | l+ d. ^- _9 ^% J/ t9 Z1)邏輯或 #i=#j OR #k
2 w: A. j7 l) w+ e$ L- r/ o5 g編程格式 G65 H11 P#i Q#j R#k& U! @; _: T, V! f
例 G65 H11 P#101 Q#102 R#103;(#101=#102 OR #103)
# `% o8 D( f5 _, ?6 Q* W3 y$ o" w1 Y1 \8 q9 R
2)邏輯與 #i=#j AND #k6 o9 R7 m7 v5 f0 O3 }+ Q
編程格式 G65 H12 P#i Q#j R#k; ^1 @/ m3 h& H* a" Z+ i; ?
例 G65 H12 P#101 Q#102 R#103;#101=#102 AND #103
% N' V+ ? t4 m
! |) }7 G4 S$ W% j4 }! i$ _0 F! G+ M3 p# D7 \- ~( v A; P
/ C; Y, T( A! P& [* d* i9 S& [
, j9 y3 l# w5 q& E4 Q(3)三角函數指令
# }9 Z; l" P( i+ G7 k( {* i4 t9 P/ q- Q8 M
* ~1 j8 Z4 p( m$ n: T0 M7 Z z9 E) @: G D% s! ?7 X* }, B
1)正弦函數 #i=#j×SIN(#k)
1 N3 A% m% Z5 d
7 M" o! i& P* l3 |% t% B6 \: x編程格式 G65 H31 P#i Q#j R#k (單位:度) .
% c9 @ Y+ _* e2 R# R7 u# V ?$ }5 W- f# Q+ y8 z
例 G65 H31 P#101 Q#102 R#103;(#101=#102×SIN(#103))' S% w4 t+ Y* j' @ J$ a: }9 @3 Q+ v% L
2)余弦函數 #i=#j×COS(#k)+ b: O" R' k& f7 f
編程格式 G65 H32 P#i Q#j R#k (單位:度), \* Y* L T, L6 i7 L, w
例 G65 H32 P#101 Q#102 R#103;(#101=#102×COS(#103)) ?% N$ n" H. p
3)正切函數 #i=#j×TAN#k: i6 v/ s- j1 M1 N8 O, L" r
編程格式 G65 H33 P#i Q#j R#k (單位:度)
9 u k8 P$ R! A# Z. I$ E% V: L例 G65 H33 P#101 Q#102 R#103;(#101=#102×TAN(#103))
- c) r+ [5 R3 D( V& [' ]; R7 n7 H" L4)反正切 #i=ATAN(#j/#k)5 P8 T7 j2 l2 a9 H" M( D# i
編程格式 G65 H34 P#i Q#j R#k (單位:度,0o≤ #j ≤360o)
Y4 J2 I1 s0 G% P5 R- d例 G65 H34 P#101 Q#102 R#103;(#101=ATAN(#102/#103): U! V4 T* E* g% O$ f0 k
! F; b4 @+ N& H4 t' s% P- ^" r" [& ~
4 E5 j/ F! C9 c0 y7 i, T
* Q! C: j U, }(4)控制類指令
9 U1 T5 j( y; p& |
* J4 v% v- d4 l2 }; h0 t* U
0 a+ X2 W# I( C& n
2 u8 H' Q. D7 h- h, {' [% ?編程格式 G65 H80 Pn (n為程序段號). {% A, V0 X& j* k
例 G65 H80 P120;(轉移到N120)/ j- w, G2 t- T$ b
2)條件轉移1 #j EQ #k(=)! K4 {! M1 q! y
編程格式 G65 H81 Pn Q#j R#k (n為程序段號)! D5 K; p2 Q* Q5 e o& g% r
例 G65 H81 P1000 Q#101 R#102
. F8 q2 O6 Q; x8 \當#101=#102,轉移到N1000程序段;若#101≠ #102,執行下一程序段。
- S t7 V; X5 @& p! a3)條件轉移2 #j NE #k(≠)
* D6 @9 Q/ w+ R5 Y8 ]編程格式 G65 H82 Pn Q#j R#k (n為程序段號)" x" H" h& \$ L: O2 `, N9 R
例 G65 H82 P1000 Q#101 R#102
" G- z" U5 j; v5 V當#101≠ #102,轉移到N1000程序段;若#101=#102,執行下一程序段。
2 U, b4 O$ |. f! K7 B! @4)條件轉移3 #j GT #k (> )
2 E6 n( [2 O% y* c @1 [, @編程格式 G65 H83 Pn Q#j R#k (n為程序段號)
5 c, C e' m5 X! a* _% A& J例 G65 H83 P1000 Q#101 R#1020 A& @. q- _* X4 E8 N2 ~
當#101 > #102,轉移到N1000程序段;若#101 ≤#102,執行下一程序段。
) I m) o. D# `5 Z& q8 H2 p% u5)條件轉移4 #j LT #k(<)
, k# T2 b0 z, x6 P編程格式 G65 H84 Pn Q#j R#k (n為程序段號)
8 | C0 k6 J) A- M例 G65 H84 P1000 Q#101 R#102 ; q4 U& m( g; D0 a* T, S
當#101 < #102,轉移到N1000;若#101 ≥ #102,執行下一程序段。
0 t& x- F9 A0 N6)條件轉移5 #j GE #k(≥)
( v& B/ b% C/ O6 T編程格式 G65 H85 Pn Q#j R#k (n為程序段號)- o) Z+ \6 Y, g$ v/ Z0 `
例 G65 H85 P1000 Q#101 R#102
7 m5 Z: n1 P/ x當#101≥ #102,轉移到N1000;若#101<#102,執行下一程序段。
& i' M1 U- t/ G/ t4 Z9 ` i1 d7)條件轉移6 #j LE #k(≤)
! ?5 d: c" h5 q6 h編程格式 G65 H86 Pn Q#j Q#k (n為程序段號)
6 i9 F) t/ A' D; D7 ~* f例 G65 H86 P1000 Q#101 R#102
$ y0 c+ e' M) S9 x, ?: R' {當#101≤#102,轉移到N1000;若#101>#102,執行下一程序段。* I ?6 j1 X, _0 r# Q' O
) W8 I( A( t1 q4、使用注意
3 S! L. p) w8 e; V* a 為保證宏程序的正常運行,在使用用戶宏程序的過程中,應注意以下幾點;
6 I- s/ L. ~ h9 X! C& U! h(1)由G65規定的H碼不影響偏移量的任何選擇;& S& I# M7 M Z9 R8 Z
(2)如果用于各算術運算的Q或R未被指定,則作為0處理;" S. s0 L" [) b- h' C/ |, B
(3)在分支轉移目標地址中,如果序號為正值,則檢索過程是先向大程序號查找,如果序號為負值,則檢索過程是先向小程序號查找。( B3 L' l" H |$ n: o5 K- `
(4)轉移目標序號可以是變量。
: K: r8 w. K, D) n1 } n2 f- e8 v- o2 d
5、用戶宏程序應用舉例 :
9 q4 |& D$ y( {; Y; ?6 n) i; i( w V
用宏程序和子程序功能順序加工圓周等分孔。設圓心在O點,它在機床坐標系中的坐標為(X0,Y0),在半徑為r的圓周上均勻地鉆幾個等分孔,起始角度為α,孔數為n。以零件上表面為Z向零點。
. C/ b/ {( v* ~! S: p9 i2 w" e& o* \' K- R' D- P! `
使用以下保持型變量:
5 B3 c; B/ ]6 O& g#502:半徑r;
- c: f" m$ |0 y1 }! g#503:起始角度α;
; ]8 U1 O- H, Q6 @6 G6 k#504:孔數n,當n>0時,按逆時針方向加工,當n<0時,按順時針方向加工;" [- P6 X& N3 r) ]- m9 K7 j
#505:孔底Z坐標值;
; }. U8 j" a* X5 D3 o" `#506:R平面Z坐標值;
0 Q( T6 \6 C: M" L1 @- m9 P# e#507:F進給量。
8 w& v0 [1 x7 ?; m使用以下變量進行操作運算:! M) z0 k+ h5 }8 ^8 u, O, Z1 D
#100:表示第i步鉆第i孔的記數器;/ ?+ }: U. b) U; @3 e% o( P1 L
#101:記數器的最終值(為n 的絕對值);5 X, Q2 H; D( Q6 w
#102:第i個孔的角度位置θi的值;
# [- A/ U' c2 ]2 D1 T#103:第i個孔的X坐標值;9 _/ [6 ~* \# }' f3 [
#104:第i個孔的Y坐標值;2 K' C! m+ ^ [& H4 G/ R4 c
用用戶宏程序編制的鉆孔子程序如下: ! r3 Z; Q% l5 P9 `
O9010; L$ d4 w" X# Y: F9 r1 y3 Q3 j; m0 F
N110 G65 H01 P#100 Q0 //#100 = 0
+ ?/ Z" }, I- ?! @ aN120 G65 H22 P#101 Q#504 //#101 = │#504│6 r7 G8 S: v6 z6 p G* M, U
N130 G65 H04 P#102 Q#100 R360 //#102 = #100 ×360o
5 H* g H8 i" n$ j2 ^+ S( ]8 FN140 G65 H05 P#102 Q#102 R#504 //#102 = #102 / #504
: Y' T/ E6 J4 B3 K7 EN150 G65 H02 P#102 Q#503 R#102 //#102 = #503 + #102當前孔角度位置θi =α+ (360o×i) / n. H0 b1 N* r/ w3 u9 ]9 U* H
N160 G65 H32 P#103 Q#502 R#102 //#103 = #502 ×COS(#102)當前孔的 X坐標
4 e1 u; ~ t% h, ]* ^ iN170 G65 H31 P#104 Q#502 R#102 //#104 = #502 ×SIN(#102) 當前孔的Y坐標) D ]6 j% s, g! y7 v# k0 r
N180 G90 G00 X#103 Y#104 //定位到當前孔(返回開始平面)
6 I0 s9 t6 N2 oN190 G00 Z#506 //快速進到R平面
2 L" C0 k# x2 [; [! r5 yN200 G01 Z#505 F#507 //加工當前孔1 e4 M5 s# _+ n9 k% h2 W+ `: m
N210 G00 Z#506 //快速退到R平面
/ G, K5 C- K6 SN220 G65 H02 P#100 Q#100 R1 //#100 = #100+1孔計數
* A0 T. L9 r* ~& F1 v+ ON230 G65 H84 P-130 Q#100 R#101 //當#100 < #101時,向上返回到130程序段; K$ q9 E7 ~7 y. F4 `$ o' P0 j1 m
N240 M99 //子程序結束
4 x5 N/ z! {. y" P4 ]. g9 a0 y+ N! C9 I
! y$ Q) U* b' W- ?$ d" r: h# ^/ t9 @0 B$ B. Q& ]5 ]1 {* G
調用上述子程序的主程序如下:
4 ]4 u" h7 F" _! vO00104 A# E) {8 P( p
N10 G54 G90 G00 X0 Y0 Z20 //進入加工坐標系
5 |4 d6 P# [ j, Y1 {' pN20 M98 P9010 //調用鉆孔子程序,加工圓周等分孔
" s( T( `% X0 d! ]# N. w/ A2 vN30 Z20 //抬刀# U/ M5 N# h, I2 R a) g
N40 G00 G90 X0 Y0 //返回加工坐標系零點 $ O- d& i3 G4 @# S) p, l# @. }
N50 M30 程序結束+ g6 E+ ]' j, f" W2 [; \% I
設置G54:X=-400,Y=-100,Z=-50。" @3 ]; e* g2 v" \3 D' c
變量#500~#507可在程序中賦值,也可由MDI方式設定。 4 T* }) z# B! p3 A
/ P Z( l9 B# z, [! N+ Y! bB類宏G65
/ b6 _% o" B( a$ \% Y# G! F* a. O/ m$ x8 l v8 Y- V% P
簡單調用(G65)$ C/ j7 e# v( @) J! X
功能 G65被指定時,地址P所指定的程式被調用,自變量能傳遞到用戶宏程序中。
. b. W9 ~0 U+ z6 U$ w1 x r4 f 格式 G65 Pp Ll <自變量表>;6 x7 m% ^& m; {6 x8 m, w0 O. d# s
其中: p 要調用的程序號
- i1 e# g% Y7 O1 I# E2 T l 重復的次數(缺省值為1,取值范圍1~9999)/ \/ s) N' ~! [, A4 l
自變量 傳遞給被調用程式的數。通過使用自變量表,值被分配給相應
$ u: V5 a; d3 f3 D5 q' l9 l( I. t 的局部變量。
2 m4 }8 m. ~' {
, q4 _2 T W3 I* ^* W 自變量分為兩類。第一類可以使用的字母只能使用一次,各自變量與局部變量的對用關系如下:
4 g) b6 o- T3 v: U; t! |/ J$ U: E! S: Q- z2 B3 k4 n& o' ^) f
地址 變量號 地址 變量號 地址 變量號
% P5 R0 a) [: A. M0 j9 s: z4 YA #1 E #8 T #20- t; |- V0 P* H5 F! q4 [
B #2 F #9 U #21
; B4 v; G& c# ]7 l& ^C #3 H #11 V #22
. Z! Y7 x7 C/ }3 [( A" u6 M" K; TI #4 M #13 W #23
# V9 {8 d+ @, eJ #5 Q #17 X #24% x1 A- }& P0 z/ h% r: T/ G
K #6 R #18 Y #25: N" e' G; i4 E" R* n+ T) D) _
D #7 S #19 Z #265 T, d# b j2 t4 `3 ?
☆ 地址G、L、N、O、P不能當作自變量使用。& @ p: [* |" v! Q1 m; Z- L
☆ 不需要的地址可以省略,與省略的地址相應的局部變量被置成空。) R- Q, H3 q% u
' K/ [5 L% `1 |# n& y 第二類可以使用A、B、C(一次),也何以使用I、J、K(最多十次)。自變量使用的類別根據使
1 r2 U% }! W. W0 [/ d6 d! F用的字母自動確定:) j' \& k O. F1 U
地址 變量號 地址 變量號 地址 變量號
! S; C' Q$ a" s9 Z f- g( zA #1 K3 #12 J7 #23
' F9 w6 B1 T6 v% PB #2 I4 #13 K7 #24
! r" u$ N3 z* b" E5 FC #3 J4 #14 I8 #25
/ g- h8 U2 `1 ^2 f' {I1 #4 K4 #15 J8 #26" I! E( F% A3 O! T
J1 #5 I5 #16 K8 #27
0 t3 ?: \& ^- q1 u2 x2 o( |5 W% DK1 #6 J5 #17 I9 #287 `) Y1 D' n! S+ b
I2 #7 K5 #18 J9 #293 y' ^! n% @6 Z) c! Y2 J
J2 #8 I6 #19 K9 #30
y0 h6 @# N! Z% w6 mK2 #9 J6 #20 I10 #31- P J/ z6 X$ J$ E6 I9 O
I3 #10 K6 #21 J10 #32
8 v' u* c! o& H% GJ3 #11 I7 #22 K10 #33) r$ G( q2 V; x0 \
☆ 在實際的程序中,I、J、K的下標不用寫出來。" \3 I0 C# E6 g" b! K/ e/ F( ]
注意:
# d! G. c$ w, O( f- S% W☆ 在自變量之前一定要指定G65。4 r# ]0 c$ w! L: a
☆ 如果將兩類自變量混合使用,系統自己會辨別屬于哪類,最后指定的那一類優先。7 C* x6 m& [7 D- O
☆ 傳遞的不帶小數點的自變量的單位與每個地址的最小輸入增量一致,其值與機床的系統結構非常一致。為了程序的兼容性,建議使用帶小數點的自變量。
0 B/ O0 ]8 k" n1 ^8 }1 o2 r☆ 最多可以嵌套含有簡單調用(G65)和模態調用(G66)的程序4級。不包括子程序調用(M98)。局部變量可以嵌套0~4級。主程序的級數是0。用G65和G66每調用一次宏,局部變量的級數增加一次。上一級局部變量的值保存在NC 中。宏程序執行到M99時,控制返回到調用的程序。這時局部變量的級數減1,恢復宏調用時存儲的局部變量值。 ]2 y- [9 h. N0 X4 f Q9 i3 d
G65簡單宏調用可方便地向被調用的副程式傳遞數據,但是用它制作諸如固定循環
# v+ N0 N+ C3 ?之類的移動到坐標后才加工的程式就無能為力了。 |
評分
-
查看全部評分
|