tft每日頭條

 > 科技

 > 數控編程宏程序學習

數控編程宏程序學習

科技 更新时间:2024-12-27 09:56:04

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

  • 學宏之前必懂變量
  • 我們普通程序(如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 = 10N10 #2 = 20IF[#2 EQ 20] GOTO10G0 X100.Z100........

    M30

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

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

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

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

    數控編程宏程序學習(學好數控高級編程)1

    所以這裡我們不難理解上面判斷語句的意思了:如果#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 = 20WHILE[#1 EQ #2] DO1GO X50. Y50.G0 X0.Y0.END1G0X100.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

    數控編程宏程序學習(學好數控高級編程)2

    阿基米德螺旋線

    #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

    數控編程宏程序學習(學好數控高級編程)3

    凹球面

    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

    數控編程宏程序學習(學好數控高級編程)4

    倒斜角

    M3S200

    Z-35.

    #1=0

    WHILE[#1LE35]DO1

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

    G1X#2Z[-35 #1]

    G3I-#2

    #1=#1 3

    END1

    M30

    數控編程宏程序學習(學好數控高級編程)5

    倒圓角

    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

    數控編程宏程序學習(學好數控高級編程)6

    凸球面

    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

    數控編程宏程序學習(學好數控高級編程)7

    卧加自動找正宏程序

    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

    數控編程宏程序學習(學好數控高級編程)8

    螺旋銑孔

    #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

    數控編程宏程序學習(學好數控高級編程)9

    螺旋線

    #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

    數控編程宏程序學習(學好數控高級編程)10

    ,

    更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

    查看全部

    相关科技资讯推荐

    热门科技资讯推荐

    网友关注

    Copyright 2023-2024 - www.tftnews.com All Rights Reserved