王賢虎,郭 微 (安徽水利水電職業(yè)技術(shù)學(xué)院機(jī)械工程系,安徽 合肥231603)
近十幾年來,數(shù)控技術(shù)的發(fā)展非常迅猛。利用計(jì)算機(jī)完成從產(chǎn)品設(shè)計(jì)、工藝設(shè)計(jì)、數(shù)控代碼 (NC代碼)仿真到加工裝配等所有環(huán)節(jié),不僅可以大大縮短產(chǎn)品研發(fā)周期,還大大降低了生產(chǎn)成本[1]。為此,筆者對(duì)數(shù)控仿真系統(tǒng)中NC代碼的處理問題進(jìn)行了研究,以便實(shí)現(xiàn)數(shù)控代碼的快速、高效翻譯過程。
數(shù)控代碼翻譯模塊包括NC代碼讀入、分析和執(zhí)行3個(gè)子模塊。首先,將編輯好的數(shù)控程序讀入到仿真系統(tǒng)中,然后對(duì)代碼進(jìn)行分析,包括詞法分析、語義分析等,如果沒有發(fā)現(xiàn)代碼錯(cuò)誤,則數(shù)控程序可以進(jìn)入實(shí)施階段。
機(jī)床加工過程中主要運(yùn)動(dòng)形式包括直線運(yùn)動(dòng)和圓弧運(yùn)動(dòng)[2]。如果能得到刀具軌跡上各斷點(diǎn)的坐標(biāo)值,就能實(shí)現(xiàn)直線運(yùn)動(dòng)或圓弧運(yùn)動(dòng)。其中起始點(diǎn)的坐標(biāo)值在語義分析完成后就能夠得到,軌跡上其他點(diǎn)坐標(biāo)值需要通過插補(bǔ)運(yùn)算來得到。對(duì)于上述坐標(biāo)值可采用隊(duì)列的形式存儲(chǔ)。當(dāng)產(chǎn)生新的坐標(biāo)值時(shí),在隊(duì)列尾部增加節(jié)點(diǎn)來存儲(chǔ)這些數(shù)據(jù)。當(dāng)然不是將整個(gè)程序所得到的坐標(biāo)值一起存儲(chǔ)在一個(gè)隊(duì)列中,而是按照程序段進(jìn)行存儲(chǔ),一個(gè)程序段對(duì)應(yīng)一個(gè)隊(duì)列,若隊(duì)列中為空,意味著機(jī)床在此沒有產(chǎn)生運(yùn)動(dòng),可以繼續(xù)執(zhí)行后續(xù)的程序段,直至整個(gè)程序執(zhí)行完成。
在完成NC代碼的翻譯之后,將獲得的機(jī)床運(yùn)行相關(guān)信息輸出到運(yùn)動(dòng)仿真模塊,從而驅(qū)動(dòng)模型進(jìn)行數(shù)控加工過程的仿真。數(shù)控代碼處理過程如圖1所示。
圖1 數(shù)控代碼處理流程圖
數(shù)控程序采取逐行執(zhí)行的方式,也就是執(zhí)行完一行程序段再去執(zhí)行下行程序段,直至整個(gè)數(shù)控程序結(jié)束。為此選擇一個(gè)單向鏈表結(jié)構(gòu)來存儲(chǔ)數(shù)控代碼的各個(gè)程序段,鏈表中的一個(gè)節(jié)點(diǎn)對(duì)應(yīng)一行程序段。下面為一個(gè)列表的具體結(jié)構(gòu):
通過NC代碼讀入子模塊,可以將數(shù)控程序文件中的內(nèi)容存儲(chǔ)在一個(gè)單向鏈表中。其中,鏈表中的每一個(gè)字符串對(duì)應(yīng)數(shù)控程序的一行程序段。然后分析每個(gè)字符中的內(nèi)容,也就是要將每行程序段指令字后的數(shù)值單獨(dú)取出后為程序執(zhí)行階段所用。具體可以通過以下方式完成:
考慮到上述數(shù)據(jù)在程序執(zhí)行階段會(huì)被經(jīng)常使用,可以選擇雙向鏈表來存儲(chǔ)取出的指令字后的數(shù)值,具體內(nèi)容如下:
其中tool_center_x、tool_center_y、tool_center_z存儲(chǔ)每個(gè)程序段刀具中心位置坐標(biāo)。
利用NC代碼分析子模塊可以得到存儲(chǔ)各指令字后數(shù)值的雙向鏈表line_data,但鏈表中并沒有存儲(chǔ)刀具軌跡路徑上其他斷點(diǎn)的坐標(biāo)值。要獲得相應(yīng)坐標(biāo)值,需要通過插補(bǔ)運(yùn)算的方法來獲得,具體過程如下:數(shù)控程序經(jīng)過讀入階段和分析階段后,可以得到每個(gè)程序段指令字、起始點(diǎn)坐標(biāo)值、刀具中心坐標(biāo)值等相關(guān)信息,從而能夠做出象限的判斷、終點(diǎn)判別等操作,并為后續(xù)的插補(bǔ)運(yùn)算提供所需信息。插補(bǔ)運(yùn)算的算法較多,筆者選擇了逐點(diǎn)比較法[3],其具體內(nèi)容如下:
以上定義的單向鏈表是用來存儲(chǔ)各個(gè)節(jié)點(diǎn)的插補(bǔ)指令、各節(jié)點(diǎn)的坐標(biāo)平面代碼值、當(dāng)前節(jié)點(diǎn)的象限值。其中2個(gè)聯(lián)合是為了實(shí)現(xiàn)終點(diǎn)判別和象限轉(zhuǎn)換。因?yàn)樵跀?shù)控加工過程中,各軸的進(jìn)給方向是根據(jù)后一點(diǎn)相對(duì)于當(dāng)前點(diǎn)所處的象限來確定的。由于空間中有很多象限,這樣在每個(gè)象限都需要進(jìn)行插補(bǔ)運(yùn)算判別,這樣較為繁瑣,同時(shí)效率不高。為此采用直線插補(bǔ)的方式建立如下函數(shù),并將函數(shù)值賦予變量quad[4]:
圖2 正在加工的數(shù)控仿真車床圖
其中x_start,y_start,x_end,y_end分別為前后程序段中的刀心的插補(bǔ)起、終點(diǎn)坐標(biāo)值。
以VC6.0編程軟件為基礎(chǔ),探討了數(shù)控仿真系統(tǒng)中NC代碼的處理問題并實(shí)現(xiàn)了數(shù)控加工過程的仿真 (見圖2)。由于數(shù)控仿真系統(tǒng)的應(yīng)用可以大大降低產(chǎn)品試制次數(shù),從而縮短產(chǎn)品上市周期。因此,對(duì)于數(shù)控仿真系統(tǒng)中的數(shù)控代碼翻譯模塊的研究具有重要的現(xiàn)實(shí)意義。
[1]王太勇 .基于動(dòng)態(tài)四叉樹的數(shù)控銑削加工仿真的研究 [J].機(jī)床與液壓,2006(9):21-23.
[2]嚴(yán)蔚敏,吳偉民 .數(shù)據(jù)結(jié)構(gòu) [M].北京:清華大學(xué)出版社,1997.
[3]王賢虎 .數(shù)控車削仿真系統(tǒng)的研究 [D].合肥:合肥工業(yè)大學(xué),2006.
[4]張幸兒 .計(jì)算機(jī)編譯原理 [M].北京:科學(xué)出版社,1999.