學好數控高級編程——宏程序,只需要學好以下幾點

宏程序是指在程序中主要起到運算所用的程序,似乎系統為用戶配備了強有力的類似於高級語言的宏程序功能,用戶可以使用變量進行算術運算,邏輯運算和函數的混合運算。那麼宏程序這麼好,該怎麼學習呢?那麼由老傅帶你們走進這神秘的宏程序大門吧!

學宏之前必懂變量

我們普通程序(如G01X100.Y100.F200)X,Y地址後面都是些常量,如果我們把這些常量用變量來編寫如G01X#1 Y#2 F200,這就是我們所謂的宏程序。


那麼# 和後面的1、2、3、4.....數字標識到底什麼關係。這些#號,它是宏代碼,1、2、3....是區分這些宏代碼的標記。


舉個最簡單的例子:如果有三個人,他們的名字叫 小李、小李、小李。那麼當你呼叫小李的時候,會發生一個問題,這三個人都會回答,但你其實只想喊其中的一個。這就分不清了。


同理,#1 #1 #1 ,如果後面的數字都是一樣,當系統使用#1的時候,它也會發生糊塗,到底讓我用哪個呢?


所以為了區分它們,就把後面的數字寫成不同的,比如#1,#2,#3。

此時如果系統使用#1,就不會發生混亂了。


當然了,標示數字的不同,宏變量的意義也不同,分局部變量、公共變量、系統變量等等,就目前來說,我們使用的是局部變量,能把它用好就不錯了,基礎打好了再說!


變量的賦值


這所謂賦值,我們可以這麼理解:我本來很窮,突然有一天有人給我100塊!那麼此時此刻,這100塊就是我的了,因為它給我了!這個“給我”的過程,就稱為賦值。


那麼在宏裡面怎麼賦值呢?我們看一個賦值的語句就理解了:#1 = 100 這就稱為賦值!


它的意思是把100這個值給了#1。那麼#1在不發生運算的情況下,它的結果就是100。


也就是說#1此後代表100。如果有一個程序語句:GOX100. 那麼宏語句GOX#1 與其等同。


下面在舉個例子:

#1=10

#2=20

#3=30

G01X#1 Y#2 F#3

以上這個宏程序相當於G01X10.0 Y20.0 F30這個普通程序。


補充說明:

上面的例子是給變量#1,#2,#3賦了一個具體值,宏程序中我們還可以賦予表達式。

表達式的運算優先級就是加減乘除先算哪個,後算哪個。如果有括號,就先算括號裡面的等等


看下面的例子,設:

#1 = 100

#2 = 10

#3 = 50

#4 = 20

那麼 #1 - #2 * #3 = ?
#1/#2 = ?

#3/#2*#4 = ?
(#1-#3)/#2 = ?

以上四個運算表達式的結果分別是:-400、10、100、5 相信你也沒什麼問題吧!


以上包工給大家詮釋了變量,賦值等最基本的宏程序概念。大家明白即可!

我們此時更重要的是先學習好宏語句,它將伴隨著所有學習宏程序的人,所以一定要理解透徹!


宏程序兩大主要語句

1,IF…..GOTO語句:

直觀意思是:如果...就跳轉到哪(或者是做什麼事)。

我們不妨用這個格式來造句,如果福布斯有我的名字,那麼我就不上班了;

如果我看過清風的宏教程,那麼我還會看他的其他教程!


這類語句都有一個共同點:“如果”的後面會跟著一個條件!

根據這個條件,決定我做什麼事!

所以很多書中都這麼介紹此語句:IF[條件成立]GOTO


%

O0001
#1 = 10
N10 #2 = 20
IF[#2 EQ 20] GOTO10
G0 X100.
Z100.
.......

M30

%
上面這個IF語句是什麼意思呢? 它表示:如果#2這個變量的值等於20的話,就跳轉到第10號程序段。可能有人會問“GOTO10”後面的10表示什麼意思。

其實這個10表示行號。數控的程序一般都有行號的,如果沒有,那是系統參數設定的事,不過你只要知道有行號就行。

還有人會問 EQ 是什麼意思,這個是英文EQUAL的簡寫,含義是等於的意思。


對於新手,建議掌握以下幾個常用的符號(如下表):



所以這裡我們不難理解上面判斷語句的意思了:如果#2等於20,就跳轉到第10號段。由於#2是等於20的(因為在賦值的時候,#2=20),所以條件成立,就跳到了第10號段執行。


我們都知道數控程序一般是從上往下執行的,那麼我們這跳到了第10行,接著往下執行時又遇到了IF判斷語句,於是有開始判斷#2是不是等於20,結果等於!於是又成立了,繼續跳到第10行。所以,這個程序是死循環,永遠不會結束。

說到這,細心人會發現一個問題:條件成立了,會執行GOTO語句,那要是不成立,程序會怎麼辦? 其實很簡單,不成立就往下面走。也就是說如果不成立,就執行G0X100. 的程序段,直到程序運行至M30結束!

總結:如果條件成立,就執行GOTO語句,你寫的行號是多少,它就跳到那個行;要是條件不成立,那麼就執行IF下面的語句,不執行GOTO語句!


2,WHILE…..DO語句:

看到這個語句,還是老樣子,先直觀翻譯下:當.....就執行某某代碼段。

和IF語句差不多,這個語句也是用來做條件判斷的,但WHILE.....DO自身沒有跳轉的功能。


那麼這個語句該怎麼用?我們是造句說明吧,“當年薪達到100W的時候,我就可以買跑車”。這裡“年薪達到100W”是條件,如果條件達到了100W,我就執行買跑車這個想法。就這麼簡單的邏輯!


下面我們用一個程序來解釋它

%

O0002
#1 = 20
#2 = 20
WHILE[#1 EQ #2] DO1
GO X50. Y50.


G0 X0.Y0.
END1
G0X100.
Z100.
.......

M30

%

上面這個程序段的意思是:當#1和#2的值相等,那麼就執行DO1與END1之間的程序。有人會問一個問題:END1是什麼東西。DO後面的 1 又是什麼東西?這裡呢要說明一下,WHILE語句一定要和 END 結合使用。因為END是它的目標地址。就像IF語句裡的行號一樣,是個目的地!那麼END和DO 後面各有一個1,我們就白話的理解為第一層循環的意思。


如果這裡DO後面跟的是2,而END後面跟的是1,那麼程序將報警,因為DO2找不到與之匹配的END2!所以DO和END後面的數字,一定要匹配!前面說到第一層循環,因為宏是支持循環嵌套的,這個知識點系統教程會著重的講解,這裡不贅述。


現在我們分析下上面的程序段。

由於#1和#2在初始賦值的時候都是20,所以#1和#2是相等的。程序在執行WHILE語句時,它會判斷中括號裡的#1和#2是不是相等,如果相等,就執行DO1與END1之間的程序;

反之如果#1和#2不相等,那麼就不執行 DO1 與 END1 之間的程序,而是往END1下面的程序走,執行G0X100. 直到程序運行至M30結束!
講到這,很多朋友會發現WHILE和IF其實一樣的,只不過格式不同、目的地的表示方法不同而已。

接下來分享幾組宏程序供大家參考:

多邊形 宏程序


#1=0 起始角度 0°

#2=16 邊數 16

#4=360+#1

#3=10/COS[360/2*#2]

WHILE[#1LE#4]DO1

G01X[#3*COS[#1]]Y[#3*SIN[#1]]

#1=#1+360/#2

END1



阿基米德螺旋線


#1=0 起始角度

#2=15 起始半徑

#3=30 終止半徑

WHILE[#2LE#3]DO1;

G01X[#2*COS[#1]]Y[#2*SIN[#1]]

#1=#1+1

#2=#2+15/200 跨度200增加半徑15 (每旋轉1°半徑r增加15/200)

END1



凹球面


G00 G90 G54 X0. Y0.

G43 H01 Z30.

Z0.

#1=0

#10=0.2

N10 #2=-7

#3=16.216-#1

#4=SQRT[30*30-#3*#3]

#5=#4-7

G01X[#5]Y0Z[#1]F1200

G02I[-#5]J0

#1=#1-#10

IF[#1GE#2]GOTO10



倒斜角


M3S200

Z-35.

#1=0

WHILE[#1LE35]DO1

#2=50-#1*TAN[45]

G1X#2Z[-35+#1]

G3I-#2

#1=#1+3

END1

M30




倒圓角


G43G00Z50H3

X0Y0

Z0

G41G01X17D01F1000

#1=0

#2=-7

N10 #3=7+#1

#4=SQRT[7*7-#3*#3]

#5=17-#4

G01X[#5]Y0Z[#1]F1000

G02I[-#5]J0

#1=#1-0.1

IF[#1GE#2]GOTO10

G40X0



凸球面

G00X0Y0Z0

#1=-15

N10 #2=0

#3=27.059+15+#1

#4=SQRT[45*45-#3*#3]

#5=#4+8

G01X[#5]Y0Z[#1]F1200

G02I[-#5]J0

#1=#1+0.02

IF[#1LE#2]GOTO10



臥加自動找正宏程序

1.取兩個任一點,用百分表壓在同一個數(先壓在旋轉中心的負方向)

2.壓好第一點運行程序

O0428;

#1=ABS[#5021];

#2=ABS[#5023];

M99;



3.壓好第二點運行程序

O0429;

#3=ABS[#5021];

#4=ABS[#5023];

#5=#3-#1;

#6=#4-#2;

#7=ABS[ATAN[#6]/[#5]];

G91 G0 Z100.;

IF[#7GT90] GOTO10;

G91 G0 B#7;(先壓在旋轉中心的負方向才能不轉反)

M30;

N10;

G91 G0 B-[180-[#7]];

M30;

4.#5021、#5023分別為X、Z軸當前的位置座標;

5.機床自動運用反正切計算出當前夾角,B軸自動找正。

6.#6004為反正切的角度計算範圍:#6004為“0”時,角度為0-360度;#6004為“1”時,角度為(-180)-180度;

7.Tan1-89度(為正數)分別對應Tan91-179度(為負數)Tan0、180為0,Tan90不存在;

此程序有侷限性:不適用於梳齒盤類型B軸結構的機床(一度一分、和半度一分的)。

正弦曲線

#1=0

WHILE[#1LE360]DO1

G01X[50*#1/180-50]Y[10*SIN[#1]]

#1=#1+1

END1


螺旋銑孔

#1=50 圓孔直徑

#2=40 圓孔深度

#3=30 刀具直徑

#4=0 Z座標設為自變量,賦值為0

#17=1 Z座標每次遞增量

#5=[#1-#3]/2 刀具迴轉直徑

G00 G90 G54 X0 Y0 S1000 M3

G43 H01 Z30. M08

G00 X#5

Z[-#4+1]

G01 Z-#4 F200

WHILE[#4 LT #2]DO01

#4= #4+#17

G03 I-#5 Z-#4 F1000

END 01

G03 I-#5

G01 X[#5-1]

G00 Z100.

G91 G28 Z0. M09

M30

螺旋線

#1=8 ( 圈數 )

#2=2 ( 螺距 )

#3=0

#4=-360*#1

#5=10 ( 螺旋直徑 )

#6=0

WHILE[#3GE#4]DO1

G01X[#5*COS[#3]]Y[#5*SIN[#3]]Z-#6

#3=#3-1

#6=#6+#2/360

END1