摘要:分析了
數(shù)控系統(tǒng)加工代碼譯碼方法的優(yōu)缺點,在此基礎(chǔ)上,提出了一種新的數(shù)控加工虛擬仿真系統(tǒng)NC代碼編譯器的實現(xiàn)算法——解釋—編譯方法,并對如何在VisualC++環(huán)境中運用計算機編譯原理和面向?qū)ο蠹夹g(shù)來開發(fā)數(shù)控加工虛擬仿真系統(tǒng)NC代碼編譯器進行了探討。
1 引言
隨著數(shù)控技術(shù)在機械制造業(yè)中的廣泛應(yīng)用,數(shù)控加工虛擬仿真系統(tǒng)也得到迅速發(fā)展,廣泛應(yīng)用于數(shù)控編程操作的教學(xué)和培訓(xùn),對減少高等院校和培訓(xùn)機構(gòu)的資金投資,縮短企業(yè)的生產(chǎn)準備周期、減少生產(chǎn)成本、提高企業(yè)生產(chǎn)效率具有重要意義。而作為數(shù)控加工虛擬仿真系統(tǒng)的前置處理部分——NC代碼編譯器,是溝通和傳遞數(shù)控加工虛擬仿真系統(tǒng)與CAD/CAM系統(tǒng)其它部分之間信息的橋梁,也得到了迅速發(fā)展。 在數(shù)控加工虛擬仿真過程中,正確且快速有效地從所輸入的加工程序中提取加工信息以及將它們有效地組織仿真系統(tǒng)內(nèi)部默認的表示形式,是進行動態(tài)仿真的前提和仿真過程得以順利進行的保證。綜觀國內(nèi)外數(shù)控加工虛擬仿真系統(tǒng)NC代碼編譯技術(shù)的發(fā)展情況,國外在這方面的研究比較成熟,而國內(nèi)盡管已有很大發(fā)展并達到相當水平,但存在一些不足之處:
(1)通用性不夠,如某些
數(shù)控系統(tǒng)的NC代碼編譯器只適用于某一系統(tǒng)的代碼編譯;
(2)在如何處理計算機內(nèi)存資源利用率和運行速度兩者的關(guān)系上有待于進一步研究;
(3)所處理的NC代碼有限,尤其是國內(nèi)大多數(shù)NC代碼編譯器只能實現(xiàn)對部分常用C代碼(如GOO—G04等)、M代碼等基本代碼進行翻譯處理,而對一些重要的代碼(如刀具補償代碼)、固定循環(huán)和子程序的處理卻很少;
(4)對NC代碼程序的語言錯誤檢查力度不夠,多數(shù)NC代碼編譯器只是顯示錯誤出現(xiàn)的行號而已。
在NC代碼翻譯器的研究與實現(xiàn)過程中,如果能改善上述缺陷,即提高通用性、完善代碼處理功能,真正實現(xiàn)數(shù)控加工虛擬仿真對加工信息的優(yōu)化,則能進一步提高虛擬仿真的真實性,并為提高數(shù)控加工的生產(chǎn)效率、縮短生產(chǎn)準備周期、減少生產(chǎn)成本、企業(yè)實現(xiàn)以生產(chǎn)時間、加工成本、資源最優(yōu)化配置利用來生產(chǎn)出高質(zhì)量的產(chǎn)品奠定堅實的基礎(chǔ)。因此,本文作者將致力于實現(xiàn)具有一定通用性的NC代碼翻譯器的關(guān)鍵技術(shù)的研究,使數(shù)控加工虛擬仿真系統(tǒng)能夠滿足CAD/CAM系統(tǒng)向集成化、智能化、網(wǎng)絡(luò)化發(fā)展的需要。
2 編譯系統(tǒng)采用的譯碼方法
傳統(tǒng)的
數(shù)控系統(tǒng)代碼編譯方法有解釋、編譯和目標碼編譯等三種方法。這三種編譯方法各有其優(yōu)缺點,前兩種的缺點是浪費計算機內(nèi)存資源,執(zhí)行程序時程序段與程序段之間可能存在停頓,影響零件加工精度;而且這兩種譯碼方式都存在一個缺點,即在加工同一種類的不同零件時,程序每運行一次都需要重新對程序進行編譯,都要占用一定的加工時間。而采用目標碼進行編譯時,雖然加工同類零件時只需運行一次譯碼程序,提高了數(shù)控加工程序運行速度,且目標碼形式單一,讀取速度快,可大大提高加工程序反復(fù)運行的效率;但是當數(shù)控加工程序較長時,編譯產(chǎn)生的目標碼所占據(jù)的內(nèi)存是比較大的,而且用戶如果要在此基礎(chǔ)上擴展其功能,則必須完全了解其代碼的設(shè)計原則;所以這種譯碼方法的通用性和移植性較差。筆者在此基礎(chǔ)上,根據(jù)時間重疊流水處理原理,提出了采用解釋—編譯方式對數(shù)控加工代碼進行譯碼的方法,其工作流程如圖1所示。
圖1 解釋-編譯的譯碼方法的流程圖
該解釋-編譯的譯碼方法的運行過程是編譯程序要進行兩次掃描,且掃描的對象不同,第一次掃描的對象是數(shù)控加工程序中的各種地址符,此過程進行詞法、語法和簡單的語義分析,并累計程序的程序段個數(shù);掃描的同時提取數(shù)控加工程序中主要加工信息,如G00、G01、G02、G03等,并按先后順序?qū)⒓庸ば畔⒋娣诺骄幾g結(jié)果緩沖區(qū)m_CurveList尺寸鏈表,且設(shè)置插補類型標志位:enum locustype{point,line,cwarc,anticwarc} locustp,以供第二次掃描時使用。若存在錯誤則退出編譯系統(tǒng)并提示出錯信息,同時清空緩沖區(qū)m_Cu~eHst尺寸鏈表。若第一次掃描檢查無錯則進行第二次掃描。此時,第二次掃描的對象是編譯結(jié)果緩沖區(qū)中各插補標志位,通過識別各個插補標志位從編譯結(jié)果緩沖區(qū)m_CurveList尺寸鏈表中讀取刀位數(shù)據(jù)信息,并由此刀位數(shù)據(jù)信息來驅(qū)動相應(yīng)插補模塊完成數(shù)控加工過程的動態(tài)仿真;很顯然,第二次掃描的時間會比第一次掃描時間短,且需要的存儲空間比第一次掃描時需要的存儲空間少。
這種分次對不同對象進行掃描的解釋—編譯的譯碼方法,一方面克服了解釋方式和編譯方式浪費計算機內(nèi)存資源的缺點;另一方面又克服了時間順序處理方式由于在兩個程序段的輸出之間存在的時間間隔,導(dǎo)致電機的時轉(zhuǎn)時停,而造成工件的加工質(zhì)量下降的缺點。同時該解釋—編譯方式由于兩次掃描的對象不同,且第二次掃描的內(nèi)容沒有第一次掃描的復(fù)雜。很顯然,這種方法一方面提高了計算機內(nèi)存資源的利用率,另一方面縮短了編譯的時間,大大提高了編譯軟件的工作效率。
3 數(shù)控加工程序譯碼算法的實現(xiàn)
數(shù)控加工虛擬仿真系統(tǒng)承擔著兩大任務(wù):一是對數(shù)控加工程序進行掃描并作出詞法、語法和語義識別,并將識別結(jié)果輸出告知用戶;二是經(jīng)過掃描識別確定加工程序無誤后,提取驅(qū)動
機床移動部件的加工信息進行加工仿真。而數(shù)控加工虛擬仿真系統(tǒng)編譯器主要用于數(shù)控加工程序正確性的檢驗和提取驅(qū)動加工的刀位信息。因此,在Visual C++環(huán)境下開發(fā)數(shù)控加工程序編譯器,其主要任務(wù)是完成對零件程序的掃描,并對詞法、語法進行識別,將識別結(jié)果以鏈表的形式存人緩存區(qū)。圖2所示為筆者所采用的譯碼方法對NC代碼程序進行詞法、語法識別的流程圖。
圖2 NC代碼詞法、語法識別算法流程圖
3.1 數(shù)控加工程序的讀取
數(shù)控加工虛擬仿真系統(tǒng)讀取軟盤或硬盤中以*.txt格式存放的數(shù)控加工程序。為此,仿真系統(tǒng)首先調(diào)用open函數(shù)打開一個文本格式的加工程序文件,由Read函數(shù)按照先后順序?qū)C程序逐段讀人CString類的m_strFileAll對象中;再將相應(yīng)的地址存人CStringList類的m_FileLineList鏈表中。循環(huán)進行這個過程,直到文件結(jié)束。這樣,CStringList類型的m_FileLineList鏈表中將按先后順序逐行記錄整個NC程序的信息。
3.2 NC代碼詞法檢查
詞法檢查所要完成的主要任務(wù)是對零件的加工程序中的各地址符進行檢查,尤其是G功能字和M功能字的檢查;鑒別它們是否符合數(shù)控系統(tǒng)的G、M功能庫。若發(fā)現(xiàn)不合詞法規(guī)則時,則指出錯誤所在;若詞法檢查無誤,則進入下一步語法分析檢查。否則,退出編譯系統(tǒng)。為此,該編譯器主要按照下面步驟進行:
(1)建立G、M功能庫。在CSkDoc類中定義G、M功能宇規(guī)則鏈表CStringListm_WrodRuleList;//存放數(shù)控系統(tǒng)G、M功能規(guī)則庫。
(2)建立BOOL CSkDoc::IsThereChar(CStringstrLine,TCHAR c)函數(shù),用于識別N、G、M、X、Y、Z、I、J、K、R、U、V、W、S、T、F等地址符。
(3)建立LexicalParser(const CStringList & LineWdLs,int nlinenumber)函數(shù)用于進行詞法檢查。
3.3 NC代碼語法檢查
數(shù)控加工程序經(jīng)過編譯系統(tǒng)詞法檢查無誤后,接下來就是要對其進行語法格式檢查,以判斷NC程序是否符合數(shù)控系統(tǒng)的語法規(guī)則;如:G90和G91兩個功能字在同一文件中不能同時存在;同一模態(tài)組的功能字不能在同一程序段中同時出現(xiàn);G00功能字和F功能字不能在同一程序段中同時出現(xiàn);G00、G01、G02/G03等G功能字是否缺少正確匹配的尺寸字等等。為此,編譯系統(tǒng)建立以下函數(shù):
首先,在SkDoc類中定義獲得程序段中各字順序的處理函數(shù)GetWordOrder(const CStringList & 1wlist)。
然后,在SkDoc類中定義語法檢查函數(shù)SyntaxParser()。
若零件的數(shù)控加工程序語法檢查無誤,則編譯系統(tǒng)同時從NC代碼程序段鏈表m_FileLineList緩沖區(qū)及時提取主功能信息如G00、G01、G02、G03等的刀位信息并存人驅(qū)動仿真系統(tǒng)的軌跡鏈表m_CurveList緩沖區(qū);若存在語法錯誤時,則退出編譯系統(tǒng)同時清空軌跡鏈表m_CurveList緩沖區(qū)。
4 結(jié)論
數(shù)控加工虛擬仿真系統(tǒng)主要用于高等院校和培訓(xùn)機構(gòu)進行數(shù)控編程與
機床操作的教學(xué)環(huán)節(jié)。其目的一方面是為了加深加固學(xué)員對數(shù)控編程知識的理解,另一方面是為了減少昂貴設(shè)備的投資。因此,數(shù)控加工虛擬仿真系統(tǒng)除了能真實地模擬數(shù)控加工過程,一方面要考慮識別盡可能多的數(shù)控系統(tǒng)代碼,另一方面還必須考慮仿真系統(tǒng)編譯代碼的速度,提高計算機內(nèi)存資源的利用率,這對于提高數(shù)控加工仿真系統(tǒng)的真實性和計算機資源利用率具有非常重要意義。本文作者通過對目前數(shù)控仿真系統(tǒng)編譯器技術(shù)的發(fā)展現(xiàn)狀和各種譯碼方法的優(yōu)缺點進行分析,提出了一種新的數(shù)控加工虛擬仿真系統(tǒng)NC代碼譯碼方法——解釋—編譯方法。這種方法不但減少了系統(tǒng)資源的浪費,而且縮短了編譯的時間,提高了整個編譯系統(tǒng)的運行效率。在本文中,只解決了數(shù)控加工虛擬仿真系統(tǒng)的一個基礎(chǔ)問題——編譯問題,為數(shù)控加工虛擬仿真系統(tǒng)的進一步研制奠定堅實基礎(chǔ)。