劉 洋,趙慶志,王宏甲,王嘉琦
(山東理工大學(xué) 機(jī)械工程學(xué)院,淄博 255000)
數(shù)控加工是現(xiàn)在使用較為廣泛的一種自動(dòng)化加工方式,數(shù)控系統(tǒng)作為數(shù)控加工設(shè)備的核心部分,起到了存儲(chǔ)、計(jì)算、控制的作用,通過數(shù)字、字母、符號(hào)組成的標(biāo)準(zhǔn)代碼對(duì)數(shù)控設(shè)備進(jìn)行驅(qū)動(dòng),在數(shù)控系統(tǒng)中,譯碼模塊是傳遞加工信息的核心部分,是人與數(shù)控設(shè)備交流的媒介[1~3]。所以高效而準(zhǔn)確的譯碼模塊是數(shù)控系統(tǒng)的必備部分。
逐字比較法在傳統(tǒng)數(shù)控系統(tǒng)中的應(yīng)用較為廣泛,基于逐字比較法的譯碼模塊開發(fā)代碼行數(shù)較多,且代碼繁瑣,對(duì)于多種類組合線段的加工軌跡加工效率較低?,F(xiàn)階段對(duì)于基于正則表達(dá)式的譯碼方法開發(fā)仍有很大的完善空間。
QT是一個(gè)基于C++的跨平臺(tái)圖形用戶界面程序開發(fā)框架,本文采用C++作為編程語(yǔ)言,基于QT平臺(tái),通過Qstring類對(duì)NC代碼進(jìn)行定義,QregularExpression類對(duì)NC代碼進(jìn)行詞語(yǔ)法匹配,結(jié)合正則表達(dá)式類對(duì)NC代碼的譯碼模塊進(jìn)行優(yōu)化設(shè)計(jì),實(shí)現(xiàn)高效準(zhǔn)確的譯碼模塊開發(fā)。
正則表達(dá)式又稱為規(guī)則表達(dá)式,可預(yù)先將普通字符串以及特殊字符進(jìn)行組合完成一組邏輯公式,根據(jù)組合完成的邏輯公式可以對(duì)Qstring類數(shù)據(jù)進(jìn)行分析處理,判斷輸入的字符串?dāng)?shù)據(jù)是否符合預(yù)先設(shè)定的表達(dá)式的特征,然后對(duì)接收字符串?dāng)?shù)據(jù)進(jìn)行查找、匹配、替換、分割等操作。正則表達(dá)式高效的檢索效率非常適合對(duì)已經(jīng)規(guī)范的NC代碼進(jìn)行分析和處理,可在QT平臺(tái)基于正則表達(dá)式類開發(fā)數(shù)控系統(tǒng)的譯碼模塊[4,5]。
正則表達(dá)式的字符分為普通字符和特殊字符,特殊字符又稱為元字符,主要使用元字符對(duì)字符串模板進(jìn)行設(shè)置。
Perl語(yǔ)言是在unix環(huán)境下運(yùn)行的一種編程語(yǔ)言,Perl對(duì)字符有著很強(qiáng)的處理能力,通用表達(dá)式、量詞、斷言等是Perl語(yǔ)言的元字符的主要組成部分,通用表達(dá)式的作用是對(duì)有特殊意義的字符進(jìn)行表達(dá),量詞對(duì)通用表達(dá)式的表達(dá)次數(shù)進(jìn)行記錄,文本的聲明則需要斷言來進(jìn)行。正則表達(dá)式的元字符和其對(duì)應(yīng)的功能如表1所示。
表1 常用正則表達(dá)式元字符功能說明
譯碼模塊開發(fā)環(huán)境選擇QT5.7社區(qū)版,此版本封裝的QregularExpression類以Perl語(yǔ)言的正則表達(dá)為基礎(chǔ),優(yōu)化且兼容Perl的正則表達(dá)式。
定義的QregularExpression類包括模式選項(xiàng)和模式字符串,兩者構(gòu)成它的正則表達(dá)式。模式字符串通過給構(gòu)造函數(shù)賦值定義正則表達(dá)式的格式,配合模式選項(xiàng)可以進(jìn)一步更改模式字符串的代表含義。
完成正則表達(dá)式的類定義后,QregularExpression內(nèi)的匹配函數(shù)match()返回?cái)?shù)據(jù)類型仍然為QregularExpression類。反回類內(nèi)封裝了hasMatch()函數(shù)可以判斷正則表達(dá)式的匹配情況,hasMatch()函數(shù)反回?cái)?shù)據(jù)類型內(nèi)封裝了capture()函數(shù),capture()反回的數(shù)據(jù)類型最終為QString字符串。例如若捕捉字符X即函數(shù)可賦值capture(”X”),即為按照定義的正則表達(dá)式匹配后捕獲的字符串。
以此為根據(jù),可以根據(jù)設(shè)定的正則表達(dá)式來匹配捕獲NC代碼中的坐標(biāo)信息,可以通過正則表達(dá)式來對(duì)坐標(biāo)字符串X?Y??jī)?nèi)的坐標(biāo)信息進(jìn)行提取且匹配到X以及Y軸方向。編寫的捕獲實(shí)驗(yàn)程序如圖1所示:
圖1 正則表達(dá)式示例程序
譯碼模塊需要從標(biāo)準(zhǔn)的NC代碼中提取加工信息,包括加工軌跡線段類型、主軸轉(zhuǎn)速、進(jìn)給速度、加工坐標(biāo)等[6~8]。NC代碼預(yù)先寫到txt的文本中,通過編寫的上位機(jī)對(duì)txt文件進(jìn)行訪問,經(jīng)過正則表達(dá)式對(duì)文件內(nèi)容中的有用加工信息匹配和提取,譯碼流程如圖2所示:
圖2 譯碼模塊流程圖
NC代碼主要包括標(biāo)準(zhǔn)G代碼和M代碼,同時(shí)較為常用的有刀具功能T、進(jìn)給速度F、以及主軸轉(zhuǎn)速S和坐標(biāo)XYZ[9,10]。譯碼模塊將對(duì)以上的字母和數(shù)字組合而成的NC代碼進(jìn)行處理分析并且提取信息,定義的NC代碼編寫以FANUC數(shù)控系統(tǒng)的代碼格式為標(biāo)準(zhǔn)。
當(dāng)上位機(jī)載入NC代碼文件后,開始逐行對(duì)內(nèi)容進(jìn)行讀取,去除文件中的無(wú)用信息,調(diào)用正則類中的preprocess()函數(shù),此函數(shù)的形參為Qstring類,可對(duì)應(yīng)上位機(jī)識(shí)別代碼文件后創(chuàng)建生成的字符串類。
對(duì)于空格以及換行符的去除,調(diào)用Qsting::remove()函數(shù)可直接完成。正則表達(dá)式QregularExpression類則用來去除注釋,由于注釋一般用“\”來與代碼內(nèi)容進(jìn)行分隔,因此用來匹配的正則表達(dá)式為QregularExpression char_reg(“\.*”)。
“.”作為正則表達(dá)式中的元字符可匹配任意字符,“*”表示可多次匹配前導(dǎo)字符,通過此正則表達(dá)式可以完成對(duì)注釋內(nèi)容的過濾。
完成NC代碼的預(yù)處理后,接下來的詞法分析的作用是對(duì)NC代碼的指令字母與坐標(biāo)字母后的參數(shù)組合進(jìn)行分析,判斷加工代碼中的組合是否符合規(guī)范標(biāo)準(zhǔn),然后在操作界面上做出反饋。舉例與代碼行數(shù)字母N匹配的正則表達(dá)式如下所示,可對(duì)NC代碼行數(shù)N進(jìn)行詞法分析匹配。
其它參數(shù)字母的正則表達(dá)式可按此方法定義。
當(dāng)NC代碼中的字母全部為合法字符后,下一步需要匹配其語(yǔ)法是否符合規(guī)范。NC代碼的語(yǔ)法匹配就是確保指令G代碼以及功能M代碼不重復(fù)或者錯(cuò)序出現(xiàn),防止加工順序產(chǎn)生沖突[11~13],當(dāng)檢測(cè)出錯(cuò)誤時(shí)也可以產(chǎn)生反饋,語(yǔ)法匹配的流程圖如圖3所示:
圖3 語(yǔ)法匹配流程圖
本課題在應(yīng)對(duì)語(yǔ)法匹配時(shí)對(duì)每一行代碼通過正則表達(dá)式進(jìn)行匹配,保證單行代碼中的指令代碼和輔助代碼只出現(xiàn)一次,提取代碼數(shù)據(jù)采用匹配刪除法,以G代碼為例利用G代碼的正則表達(dá)式對(duì)指令代碼進(jìn)行提取儲(chǔ)存后刪除匹配過的代碼,同時(shí)對(duì)創(chuàng)建的全局變量賦值,防止數(shù)據(jù)的重復(fù)定義。
譯碼模塊和整個(gè)數(shù)控系統(tǒng)的開發(fā)平臺(tái)都為QT5,譯碼模塊編寫完成后檢測(cè)其是否可以正確識(shí)別NC代碼,在開發(fā)的上位機(jī)中加入了圖形仿真模塊可以直接顯示譯碼后的加工路徑,通過對(duì)加工路徑的模擬判斷譯碼是否成功。NC代碼和模擬加工路徑仿真結(jié)果如圖4所示。
圖4 上位機(jī)界面仿真
將PC機(jī)作為上位機(jī),下位機(jī)的控制板選擇基于ARM架構(gòu)的STM32F4系列單片機(jī)。運(yùn)行通過POWERMILL軟件生成的組合線段的加工代碼來進(jìn)行測(cè)試實(shí)驗(yàn)。加工軌跡是直線和圓、雙曲線、拋物線的組合線段,加工效果如圖5所示。
圖5 加工測(cè)試
在加工過程中,雕刻機(jī)運(yùn)行較為平穩(wěn),沒有明顯的震動(dòng),雕刻加工軌跡平滑,實(shí)驗(yàn)表明,本文提出的基于正則表達(dá)式的譯碼方式在QT平臺(tái)上可行。
本課題實(shí)現(xiàn)了基于正則表達(dá)式的譯碼模塊在QT5平臺(tái)上的開發(fā),同時(shí)在QT5平臺(tái)開發(fā)了數(shù)控系統(tǒng)進(jìn)行實(shí)際的加工測(cè)試,實(shí)驗(yàn)結(jié)果表明,QT5的正則表達(dá)式QregularExpression類開發(fā)的譯碼模塊效率和精度較好,可以用作譯碼模塊的開發(fā)。