曹陽, 劉心宇
(黑龍江省機械科學研究院,哈爾濱150040)
簡單地說,宏程序就是通過公式編程來加工數控零件的。通過數控系統的宏程序功能,可以運用如算術、邏輯和函數等運算方法進行編程,同時宏程序還具有強大的循環、分支、子程序等調用功能。本文介紹了宏程序的概念、宏程序的優勢及宏程序在非圓曲線數控加工中的應用。對于各種不規則形狀的復雜零件加工程序的編制可以極大地減少計算量,精簡程序。
數控編程是數控加工的重要內容之一,首先要進行零件圖樣分析,根據分析確定加工工藝過程,如加工刀頭軌跡、控制介質、走刀數據等,進一步校對并確認程序,進行首件試加工[1]。數控編程有人工編程和自動自動編程兩種形式,對于形狀規則簡單的零件,可以進行人工編程,但對于幾何形狀不規則或過于復雜的零部件來說,人工編程工作量大,是不適用的,此時就需要借助計算機來進行自動編程。自動編程是通過數控編程語言進行加工源程序的編寫,最后生成加工程序。近幾年,隨著數控加工技術的飛速發展,很多數控系統都為用戶提供了編程輔助功能,能夠滿足用戶需要的數控功能的擴展,實現邏輯運算及程序流程,并且應用靈活、形式自由。
數控編程的重要部分就是宏程序,它是加工程序重要的編程語言?!昂辍痹谟嬎銠C科學里有批量處理的概念,在數控加工中也是如此。宏程序能夠很大程度地簡化編程,對于外形類似、尺寸不同、相同工藝、不同位置參數的系列零件非常好用。同時宏程序指令還適合拋物線、橢圓、雙曲線等非圓無插補指令的加工程序編制,應用范圍廣。
宏程序就是采用變量的方式進行數控編程,以達到切削復雜曲面的方法[2]。宏一般分為A類宏和B類宏,它們的區別在于格式輸入不同,在oi系統中B類宏的應用更廣泛一些。宏程序最關鍵的兩個因素:宏變量和常量。舉例說明:G00 X20.0,其中20.0是不變的常量,表示在X軸作快速定位。當引入變量#1=20.0,則#1代表一個變量。再引用G00程序,G00 X[#1],這里G00是#1,而#1是20.0,說明變量的引入后作用是等效的。二者的區別是:如果要改變刀具的位置,用G00程序就需要改變語句,而引用變量后就不需要改變程序,僅僅需要改變變量值即可。其中變量可以代表程序中的各類數據,如尺寸、G指令編號、刀補號等。如果數值改變,只需要改變變量的值,而不用修改程序,這樣給程序設計帶來了極大的靈活性,這也是宏程序的優點,這樣就可以用幾行程序替代一個程序段。
編程中的變量用途主要有4個:將變量賦值傳送給程序;運算;與其他表達式的比較,決定并實現是否跳轉功能的條件分支;遞增(減)量。其中運算是最主要的功能,運算包括:算術運算、函數運算和比較操作。以FANUC數控系統為例,系統變量表示形式為# +(1~4位數字),宏程序變量種類有3種:
1)#0~#49代表局部變量,作用范圍是當前程序(在同一程序號內),用于存放當前宏程序中的數據,斷電時丟失為空。舉例:N60 #0=1和N80 #1=40×COS[#0×PI/180]。其中#1~#33代表變量,它用于自變量轉移,即在宏程序中局部使用的變量。
2)#50~#199代表全局變量,作用范圍是零件的整個加工程序,全局變量對于由主程序調用的各子程序及其他各宏程序來說,是可以通用的??梢?,名稱(編號)相同的變量,且帶有相同的值,不論是主程序還是子程序,就代表的是同一個變量。一旦在某個地方改變這個變量的大小,所有其它和它關聯的地方都受影響。當電源關閉時,#500~#509變量值則可以保存,#100~#149變量的值會全部被清除。如圖1所示,局部變量和全局變量的作用范圍是不同的。

圖1 局部變量和全局變量的作用
3)由# 與4位數字組成的變量,代表系統變量。它的作用范圍是能夠獲取機床處理器和NC內存中的所有系統信息。其中,#1000~#1199 系統變量能獲取包括與機床處理器有關的交換參數、機床狀態獲取參數、加工參數等系統信息。不同的系統變量代表不同的特殊意義,其代表的信息是數控系統內部已經定義過的。例如,#1000變量表示的是存儲機床當前的位置X,而#1001表示存儲機床當前位置Y。因此,系統變量的數值不允許自由使用,不可以隨意改變其數值和用途。
常量與數學概念想通,即把固定的值賦予相應的符號。例如:PI表示圓周率π;TRUE表示條件成立;FALSE表示條件不成立。
宏程序中所有的常量和變量都可以通過運算符和表達式進行表示。因此宏程序的運算可通過數學符號來表示,過程類似于數學運算與邏輯運算。
算數運算符:+,-,×,/;條件運算符:EQ(=),NE(≠),GT(>),GE(≥),LT(<),LE(≤);邏輯運算符:AND,OR,NOT;函數運算符:SIN, COS, TAN, ATAN, ATAN2, ABS,INT, SIGN, SORT, EXP。
表達式是用運算符連接起來的常數和宏變量構成的表達式,因此表達式是宏程序中最有效的、最能發揮其特征的形式。
把常數或表達式的值送給一個宏變量稱為賦值。變量的賦值方法有2種,即直接賦值和引數賦值,其中直接賦值的方法較為直觀、方便,其書寫格式為:宏變量=常數或表達式。賦值后的語句就可以在程序中進行運算,舉例:#100=100.0,#101=30.0+20.0。
控制指令起到控制程序流向的作用。在一個程序中,可以通過GOTO、IF語句的變化來控制程序的流向,分支循環語句有有3種表達方式:GOTO語句,代表無條件分支;IF或then語句代表條件分支;WHILE語句while... 代表循環。條件判別語句IF、ELSE、ENDIF的執行方式是:判斷條件是否滿足,當條件式不滿足時,向后執行ENDm的后面的程序段。這類語句有2種形式:

宏程序是批量處理的程序,會完成一個特定的功能,因此在定義宏程序上,可以像定義子程序一樣的方法。通常定義宏程序的格式有兩種:G65 P(宏程序名)+<變量賦值>;M98 P(宏程序名)+<變量賦值>。
一般情況下,數控系統無法直接對橢圓、雙曲線等非圓曲線加工程序進行插補加工[3]。例如,加工一個橢圓截面的手柄形狀工件。需要數學的間接處理方法:用直線段或圓弧段去逼近非圓曲線。求出每個直線段或圓弧段的起點和終點,就是節點,然后進行直線或圓弧插補。
以橢圓弧加工為例:在橢圓弧上設一個節點M,該點的橫坐標和縱坐標都可以通過橢圓的長軸和短軸及節點與中心的連線與長軸夾角α獲得。程序如圖2所示。

圖2 橢圓弧加工程序調用
通過計算用變量把M點的X、Y坐標賦值,然后進行直線插補,加工出近似橢圓弧的曲線。用幾行程序就可以加工出橢圓,足可見宏程序的便捷。
1)加工原理。以α角為主要參數,1°遞進增加,求得節點的坐標。對每次得到的節點進行直線插補,讓車刀進行車削。所有的節點都找到后,把所得線段連接后就得到近似橢圓。
2)編寫加工程序。如圖3所示,對橢圓曲線進行加工程序編寫:虛線框中程序部分之前是準備部分。以下為相應的注釋:

圖3 橢圓曲線加工程序

通過以上的過程,就可以實現橢圓的加工成型,通過宏程序指令,用短短的7行程序就完成了加工復雜曲線的程序編制。
3)加工實例對比。以二級轉子試驗件加工為例,加工設備為CINCINNATI CFV900四軸數控銑床,FANUC操作系統,材質為鈦合金。普通人工編程通過取點描繪加工曲線,計算量大。若取點不夠或數量少,曲線精度不夠,導致加工后走刀痕跡明顯,零件表面光潔度不夠,而且容易出現廢品(如圖4)。通過宏程序編制加工程序,不僅比人工計算取點大大地減少了運算量,而且提高了精度(如圖5)。
由此可見,對于復雜的數控加工零件,特別是非圓曲線的加工,基本上都可以用這種數學方法進行逼近和近似處理。正如上面提到的橢圓,想要畫出精確的曲線,我們只需要在程序中定義橢圓公式,每次改變Z坐標變量固定值,宏程序就會自動計算出相對應的X坐標并繪制加工曲線,進行切削??梢哉f,宏程序并不是十分復雜,了解它的規律和應用的特點后便很容易掌握,可提高加工效率。

圖4 零件精度不夠且易產生廢品

圖5 宏程序實現的精確的曲線加工