劉 洋,趙慶志,王宏甲,王嘉琦
(山東理工大學 機械工程學院,淄博 255000)
數控加工是現在使用較為廣泛的一種自動化加工方式,數控系統作為數控加工設備的核心部分,起到了存儲、計算、控制的作用,通過數字、字母、符號組成的標準代碼對數控設備進行驅動,在數控系統中,譯碼模塊是傳遞加工信息的核心部分,是人與數控設備交流的媒介[1~3]。所以高效而準確的譯碼模塊是數控系統的必備部分。
逐字比較法在傳統數控系統中的應用較為廣泛,基于逐字比較法的譯碼模塊開發代碼行數較多,且代碼繁瑣,對于多種類組合線段的加工軌跡加工效率較低。現階段對于基于正則表達式的譯碼方法開發仍有很大的完善空間。
QT是一個基于C++的跨平臺圖形用戶界面程序開發框架,本文采用C++作為編程語言,基于QT平臺,通過Qstring類對NC代碼進行定義,QregularExpression類對NC代碼進行詞語法匹配,結合正則表達式類對NC代碼的譯碼模塊進行優化設計,實現高效準確的譯碼模塊開發。
正則表達式又稱為規則表達式,可預先將普通字符串以及特殊字符進行組合完成一組邏輯公式,根據組合完成的邏輯公式可以對Qstring類數據進行分析處理,判斷輸入的字符串數據是否符合預先設定的表達式的特征,然后對接收字符串數據進行查找、匹配、替換、分割等操作。正則表達式高效的檢索效率非常適合對已經規范的NC代碼進行分析和處理,可在QT平臺基于正則表達式類開發數控系統的譯碼模塊[4,5]。
正則表達式的字符分為普通字符和特殊字符,特殊字符又稱為元字符,主要使用元字符對字符串模板進行設置。
Perl語言是在unix環境下運行的一種編程語言,Perl對字符有著很強的處理能力,通用表達式、量詞、斷言等是Perl語言的元字符的主要組成部分,通用表達式的作用是對有特殊意義的字符進行表達,量詞對通用表達式的表達次數進行記錄,文本的聲明則需要斷言來進行。正則表達式的元字符和其對應的功能如表1所示。

表1 常用正則表達式元字符功能說明
譯碼模塊開發環境選擇QT5.7社區版,此版本封裝的QregularExpression類以Perl語言的正則表達為基礎,優化且兼容Perl的正則表達式。
定義的QregularExpression類包括模式選項和模式字符串,兩者構成它的正則表達式。模式字符串通過給構造函數賦值定義正則表達式的格式,配合模式選項可以進一步更改模式字符串的代表含義。
完成正則表達式的類定義后,QregularExpression內的匹配函數match()返回數據類型仍然為QregularExpression類。反回類內封裝了hasMatch()函數可以判斷正則表達式的匹配情況,hasMatch()函數反回數據類型內封裝了capture()函數,capture()反回的數據類型最終為QString字符串。例如若捕捉字符X即函數可賦值capture(”X”),即為按照定義的正則表達式匹配后捕獲的字符串。
以此為根據,可以根據設定的正則表達式來匹配捕獲NC代碼中的坐標信息,可以通過正則表達式來對坐標字符串X?Y?內的坐標信息進行提取且匹配到X以及Y軸方向。編寫的捕獲實驗程序如圖1所示:

圖1 正則表達式示例程序
譯碼模塊需要從標準的NC代碼中提取加工信息,包括加工軌跡線段類型、主軸轉速、進給速度、加工坐標等[6~8]。NC代碼預先寫到txt的文本中,通過編寫的上位機對txt文件進行訪問,經過正則表達式對文件內容中的有用加工信息匹配和提取,譯碼流程如圖2所示:

圖2 譯碼模塊流程圖
NC代碼主要包括標準G代碼和M代碼,同時較為常用的有刀具功能T、進給速度F、以及主軸轉速S和坐標XYZ[9,10]。譯碼模塊將對以上的字母和數字組合而成的NC代碼進行處理分析并且提取信息,定義的NC代碼編寫以FANUC數控系統的代碼格式為標準。
當上位機載入NC代碼文件后,開始逐行對內容進行讀取,去除文件中的無用信息,調用正則類中的preprocess()函數,此函數的形參為Qstring類,可對應上位機識別代碼文件后創建生成的字符串類。
對于空格以及換行符的去除,調用Qsting::remove()函數可直接完成。正則表達式QregularExpression類則用來去除注釋,由于注釋一般用“\”來與代碼內容進行分隔,因此用來匹配的正則表達式為QregularExpression char_reg(“\.*”)。
“.”作為正則表達式中的元字符可匹配任意字符,“*”表示可多次匹配前導字符,通過此正則表達式可以完成對注釋內容的過濾。
完成NC代碼的預處理后,接下來的詞法分析的作用是對NC代碼的指令字母與坐標字母后的參數組合進行分析,判斷加工代碼中的組合是否符合規范標準,然后在操作界面上做出反饋。舉例與代碼行數字母N匹配的正則表達式如下所示,可對NC代碼行數N進行詞法分析匹配。

其它參數字母的正則表達式可按此方法定義。
當NC代碼中的字母全部為合法字符后,下一步需要匹配其語法是否符合規范。NC代碼的語法匹配就是確保指令G代碼以及功能M代碼不重復或者錯序出現,防止加工順序產生沖突[11~13],當檢測出錯誤時也可以產生反饋,語法匹配的流程圖如圖3所示:

圖3 語法匹配流程圖
本課題在應對語法匹配時對每一行代碼通過正則表達式進行匹配,保證單行代碼中的指令代碼和輔助代碼只出現一次,提取代碼數據采用匹配刪除法,以G代碼為例利用G代碼的正則表達式對指令代碼進行提取儲存后刪除匹配過的代碼,同時對創建的全局變量賦值,防止數據的重復定義。
譯碼模塊和整個數控系統的開發平臺都為QT5,譯碼模塊編寫完成后檢測其是否可以正確識別NC代碼,在開發的上位機中加入了圖形仿真模塊可以直接顯示譯碼后的加工路徑,通過對加工路徑的模擬判斷譯碼是否成功。NC代碼和模擬加工路徑仿真結果如圖4所示。

圖4 上位機界面仿真
將PC機作為上位機,下位機的控制板選擇基于ARM架構的STM32F4系列單片機。運行通過POWERMILL軟件生成的組合線段的加工代碼來進行測試實驗。加工軌跡是直線和圓、雙曲線、拋物線的組合線段,加工效果如圖5所示。

圖5 加工測試
在加工過程中,雕刻機運行較為平穩,沒有明顯的震動,雕刻加工軌跡平滑,實驗表明,本文提出的基于正則表達式的譯碼方式在QT平臺上可行。
本課題實現了基于正則表達式的譯碼模塊在QT5平臺上的開發,同時在QT5平臺開發了數控系統進行實際的加工測試,實驗結果表明,QT5的正則表達式QregularExpression類開發的譯碼模塊效率和精度較好,可以用作譯碼模塊的開發。