0 引言:
數(shù)控機床可以保證產(chǎn)品達到很高的精度和穩(wěn)定的加工質(zhì)量,生產(chǎn)效率高,準備周期短。可以大大節(jié)省專用工藝設(shè)備,適應產(chǎn)品快速更新?lián)Q代的要求,已經(jīng)得到廣泛的應用。
數(shù)控程序記錄了數(shù)控加工的一切必要信息:零件加工的工藝順序,運動軌跡與方位,工藝參數(shù)(轉(zhuǎn)速,進給量和切削速度)以及輔助功能(換刀,變速,切削液的開啟)。在CNC系統(tǒng)中,無論是自動生成還是手工編制的數(shù)控程序,計算機都無法直接根據(jù)數(shù)控程序進行加工,必須通過解釋程序提取數(shù)據(jù),轉(zhuǎn)換為計算機可以執(zhí)行的程序,以供計算機進行加工仿真或控制機床加工零件。因此數(shù)控代碼解釋器也就成為CNC系統(tǒng)的一個重要模塊。
對程序進行譯碼的方式主要由兩種:編譯和解釋,編譯系統(tǒng)速度快,結(jié)構(gòu)復雜;解釋系統(tǒng)速度慢,結(jié)構(gòu)簡單。目前,絕大多數(shù)的數(shù)控系統(tǒng)都采用解釋方式對數(shù)控加工程序進行譯碼。因為數(shù)控系統(tǒng)雖然是一個對系統(tǒng)的實時性要求比較高的應用程序,但其主要的實時性任務(wù)是插補及位置控制,譯碼并不需要非常快的速度,盡管越快越好。考慮到解釋程序結(jié)構(gòu)簡單,且足夠滿足系統(tǒng)需要,本系統(tǒng)采用解釋的方式進行譯碼,相應的程序稱為G代碼解釋器。
1 數(shù)控加工程序的組成和特點
1.1 數(shù)控程序的組成
國際標準化組織制定了字地址程序段格式ISO-6983-1-1982標準,其形式如下:
N...G...X...Y...Z...I..J..K...M...S...T...F...<CR>
其中,N是程序段的順序號,G是準備功能字,X,Y,Z,I,J,K后為機床的運動坐標尺寸,第三部分是一些加工時的工藝參數(shù)(主軸轉(zhuǎn)速,進給速度,刀具號等)。數(shù)控程序是由這樣一組字地址組成的指令集,它包含加工時所需的一切信息,提供了數(shù)控機床實際加工零件時所需的一切信息。
1.2 數(shù)控程序的特點
分析數(shù)控程序的組成,可知數(shù)控程序如下的一些結(jié)構(gòu)特點:
(1)每一個數(shù)控程序段由若干個字組成
(2)每個字由表示地址的英文字母及數(shù)字集合而成
(3)每個程序段表示機床的位移或功能指令
(4)在同一個程序段內(nèi),同一個字不能重復出現(xiàn)
(1)數(shù)控程序段為典型的上下文無關(guān)文法,即語法單位可完全獨立于其可能出現(xiàn)的環(huán)境。
(2)數(shù)控代碼語法規(guī)則簡單,數(shù)量較少。
2 數(shù)控程序解釋器的功能
(1)語法檢查,詞法檢查和邏輯檢查:
語法檢查主要是檢查數(shù)控指令是否符合數(shù)控系統(tǒng)的語法規(guī)則。例如G代碼中一般要求字母要大寫,指令的某些參數(shù)必須要明確指定。程序開始有程序開始字符,結(jié)束有程序結(jié)束字符等。
詞法檢查主要是檢查G代碼中每一指令字中的地址符,及其后面的數(shù)字類型,數(shù)字范圍是否符合G代碼中的規(guī)則,如在程序中不能出現(xiàn)未定義的地址符號,地址符后的X,Y,Z的坐標值不能超過機床本身最大的工作行程
邏輯檢查就是檢查G代碼指令必須符合邏輯,如圓弧插補指令中指定要插補的圓弧必須要存在。另外,加工過程中不得發(fā)生過切,干涉碰撞等
(2)數(shù)據(jù)格式轉(zhuǎn)換:
讀入程序行,提取運動信息,將所有的程序行轉(zhuǎn)化為機床運動的坐標信息和機床輔助功能指令
(3)處理變量表達式:
支持變量和表達式,可以使用戶編程更具靈活性,從而為用戶帶來更多方便。
(4)控制結(jié)構(gòu)處理:
解釋器可以根據(jù)用戶設(shè)定的具體條件來選擇合適的執(zhí)行路徑以實現(xiàn)預定的控制邏輯。
(5)處理子程序和宏程序調(diào)用
子程序和宏程序的實現(xiàn)可以方便用戶重用程序,提高效率。
3 數(shù)控程序解釋器的實現(xiàn)
NC程序的解釋思路是建立一個與數(shù)控代碼程序行相對應的類對象,將此對象作為一個臨時的數(shù)據(jù)緩沖區(qū),將程序段的數(shù)控加工程序依次讀出,經(jīng)解釋變換后寫入類對象數(shù)組,這樣,所有的NC信息文件就全部保存在類對象數(shù)組中,其中存放著加工時所需的一切指令和坐標信息。
NC信息的結(jié)構(gòu)如下:
struct Dot
{
int command; //G代碼命令
int LineNumber; //代碼行號
int MyLineNumber;//解釋行號
int assitantcode;//輔助功能字
double XPosition; //相對于機械坐標原點的X軸絕對位置
double YPosition; //相對于機械坐標原點的Y軸絕對位置
double ZPosition; //相對于機械坐標原點的Z軸絕對位置
double OXPosition; //原始X軸位置
double OYPosition; //原始Y軸位置
double OZPosition; //原始Z軸位置
double DXPosition; //兩點的X軸相對位置
double DYPosition; //兩點的Y軸相對位置
double DZPosition; //兩點的Z軸相對位置
double IPosition; //圓弧插補時的I值
double JPosition; //圓弧插補時的J值
double KPosition; //圓弧插補時的K值
double angle; //圓弧插補時的角度值
double radius ; //圓弧插補半徑
. . . . . .
double advancespeed; //進給速度
double rotatespeed; //主軸轉(zhuǎn)速
BYTE byMoveAxis; //移動軸
};
另外對于子程序,它被主程序調(diào)用,執(zhí)行結(jié)束后回到主程序中指定的位置,且子程序又可以調(diào)用自身或其它子程序,當每次完成子程序后,它又得回到相應的主程序中,其先進后出的特點,可以用棧來實現(xiàn),因此在其被調(diào)用時建立一個子程序棧,其數(shù)據(jù)結(jié)構(gòu):
struct programme
{
int name; /子程序名
int beginaddress /子程序的起始地址
int endaddress /子程序的返回地址
int loop /子程序的執(zhí)行次數(shù)
};
其具體解釋過程如下:
(1)逐行讀入NC程序,進行預處理,過濾去除注釋文字及空格,得到有效的字符程序段
(2)執(zhí)行語法檢查,詞法檢查和邏輯結(jié)構(gòu)檢查。
對依次讀入的每一程序行,與G代碼的詞法規(guī)則,語法規(guī)則,邏輯結(jié)構(gòu)進行比較檢查。
如果產(chǎn)生沖突,則顯示出相應的錯誤信息,指出其錯誤性質(zhì)和錯誤所在的位置。(1)(2)步軟件流程圖如圖1所示。如所有的檢查都已通過,整個G代碼無任何詞法,語法和邏輯錯誤,則進入第(3)步。
(3)從有效的字符段中提取相應命令和數(shù)據(jù)。
在確認整個程序沒有任何錯誤之后,逐行讀入G代碼,從字符行中提取有效信息,把所有命令和相應的參數(shù)放在前面所定義的Dot類型中。如存在子程序調(diào)用或跳轉(zhuǎn)時,就轉(zhuǎn)入相應的子程序或跳轉(zhuǎn),逐行解釋,然后再回到主程序中或跳轉(zhuǎn)指令所指定的行號,繼續(xù)逐行讀入,逐行解釋,這樣整個G代碼就展開為轉(zhuǎn)化為Dot類的對象數(shù)組。其軟件流程圖如圖2所示。
(4)執(zhí)行語義分析,將所有命令轉(zhuǎn)化為圓弧和直線插補。
讀入Dot類對象的數(shù)組,將所有的非圓弧和直線插補的動作指令轉(zhuǎn)化為圓弧和直線插補,其中的回參考點指令,固定循環(huán)等。如固定循環(huán),就是一系列圓弧插補和直線插補的組合,根據(jù)其指令中的參數(shù),完全可以計算出轉(zhuǎn)化為直線插補時的每一步的進給量和圓弧插補的參數(shù)。
在最后所得到的一系列的類對象數(shù)組中,所有的動作命令全部都已轉(zhuǎn)化為圓弧插補和直線插補這兩種指令,所有的功能指令也都存放在相應的標志位中,所有的X,Y,Z的坐標都已轉(zhuǎn)化為相對于機械坐標原點的值。
總而言之,整個G代碼解釋的過程就是通過詞法檢查,語發(fā)檢查,邏輯檢查,然后提取命令和數(shù)據(jù)。最后是對具體命令進一步解釋為圓弧和直線插補指令。
4 實際加工和仿真
筆者用Visual C++ 6.0 語言在windows平臺下開發(fā)了一套與運動控制卡相配套的數(shù)控雕刻軟件.已經(jīng)基本實現(xiàn)數(shù)控軟件的基本功能,同時通過實際加工和圖形仿真,充分驗證了G代
碼解釋的正確性和可靠性。下面兩張圖分別為用雕刻機實際加工的飛機模型的相片和計算機
讀入G代碼,通過解釋得到數(shù)據(jù),傳送給仿真程序而生成的圖像
圖3為實際加工飛機的圖像。
5 結(jié)論
本文分析了G代碼的形式,結(jié)構(gòu)和特點,設(shè)計和實現(xiàn)了G代碼解釋器,并經(jīng)過實踐證明,代碼解釋器實現(xiàn)了對數(shù)控機床各種指令和功能的正確解釋,完全可以用于計算機實際加工和仿真。
參考文獻:
【1】王愛玲 沈興全 吳淑琴 彭彬彬 編著 現(xiàn)代數(shù)控編程技術(shù)和應用 國防工業(yè)出版社
【2】 邁克 馬特森 CNC編程原理與應用 機械工業(yè)出版社
【3】 Kenneth Louden 編譯原理技術(shù)與實踐 機械工業(yè)出版社