王賢虎,郭 微 (安徽水利水電職業(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]。為此,筆者對數(shù)控仿真系統(tǒng)中NC代碼的處理問題進(jìn)行了研究,以便實(shí)現(xiàn)數(shù)控代碼的快速、高效翻譯過程。
數(shù)控代碼翻譯模塊包括NC代碼讀入、分析和執(zhí)行3個子模塊。首先,將編輯好的數(shù)控程序讀入到仿真系統(tǒng)中,然后對代碼進(jìn)行分析,包括詞法分析、語義分析等,如果沒有發(fā)現(xiàn)代碼錯誤,則數(shù)控程序可以進(jìn)入實(shí)施階段。
機(jī)床加工過程中主要運(yùn)動形式包括直線運(yùn)動和圓弧運(yùn)動[2]。如果能得到刀具軌跡上各斷點(diǎn)的坐標(biāo)值,就能實(shí)現(xiàn)直線運(yùn)動或圓弧運(yùn)動。其中起始點(diǎn)的坐標(biāo)值在語義分析完成后就能夠得到,軌跡上其他點(diǎn)坐標(biāo)值需要通過插補(bǔ)運(yùn)算來得到。對于上述坐標(biāo)值可采用隊(duì)列的形式存儲。當(dāng)產(chǎn)生新的坐標(biāo)值時,在隊(duì)列尾部增加節(jié)點(diǎn)來存儲這些數(shù)據(jù)。當(dāng)然不是將整個程序所得到的坐標(biāo)值一起存儲在一個隊(duì)列中,而是按照程序段進(jìn)行存儲,一個程序段對應(yīng)一個隊(duì)列,若隊(duì)列中為空,意味著機(jī)床在此沒有產(chǎn)生運(yùn)動,可以繼續(xù)執(zhí)行后續(xù)的程序段,直至整個程序執(zhí)行完成。
在完成NC代碼的翻譯之后,將獲得的機(jī)床運(yùn)行相關(guān)信息輸出到運(yùn)動仿真模塊,從而驅(qū)動模型進(jìn)行數(shù)控加工過程的仿真。數(shù)控代碼處理過程如圖1所示。
圖1 數(shù)控代碼處理流程圖
數(shù)控程序采取逐行執(zhí)行的方式,也就是執(zhí)行完一行程序段再去執(zhí)行下行程序段,直至整個數(shù)控程序結(jié)束。為此選擇一個單向鏈表結(jié)構(gòu)來存儲數(shù)控代碼的各個程序段,鏈表中的一個節(jié)點(diǎn)對應(yīng)一行程序段。下面為一個列表的具體結(jié)構(gòu):
通過NC代碼讀入子模塊,可以將數(shù)控程序文件中的內(nèi)容存儲在一個單向鏈表中。其中,鏈表中的每一個字符串對應(yīng)數(shù)控程序的一行程序段。然后分析每個字符中的內(nèi)容,也就是要將每行程序段指令字后的數(shù)值單獨(dú)取出后為程序執(zhí)行階段所用。具體可以通過以下方式完成:
考慮到上述數(shù)據(jù)在程序執(zhí)行階段會被經(jīng)常使用,可以選擇雙向鏈表來存儲取出的指令字后的數(shù)值,具體內(nèi)容如下:
其中tool_center_x、tool_center_y、tool_center_z存儲每個程序段刀具中心位置坐標(biāo)。
利用NC代碼分析子模塊可以得到存儲各指令字后數(shù)值的雙向鏈表line_data,但鏈表中并沒有存儲刀具軌跡路徑上其他斷點(diǎn)的坐標(biāo)值。要獲得相應(yīng)坐標(biāo)值,需要通過插補(bǔ)運(yùn)算的方法來獲得,具體過程如下:數(shù)控程序經(jīng)過讀入階段和分析階段后,可以得到每個程序段指令字、起始點(diǎn)坐標(biāo)值、刀具中心坐標(biāo)值等相關(guān)信息,從而能夠做出象限的判斷、終點(diǎn)判別等操作,并為后續(xù)的插補(bǔ)運(yùn)算提供所需信息。插補(bǔ)運(yùn)算的算法較多,筆者選擇了逐點(diǎn)比較法[3],其具體內(nèi)容如下:
以上定義的單向鏈表是用來存儲各個節(jié)點(diǎn)的插補(bǔ)指令、各節(jié)點(diǎn)的坐標(biāo)平面代碼值、當(dāng)前節(jié)點(diǎn)的象限值。其中2個聯(lián)合是為了實(shí)現(xiàn)終點(diǎn)判別和象限轉(zhuǎn)換。因?yàn)樵跀?shù)控加工過程中,各軸的進(jìn)給方向是根據(jù)后一點(diǎn)相對于當(dāng)前點(diǎn)所處的象限來確定的。由于空間中有很多象限,這樣在每個象限都需要進(jìn)行插補(bǔ)運(yùn)算判別,這樣較為繁瑣,同時效率不高。為此采用直線插補(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)品上市周期。因此,對于數(shù)控仿真系統(tǒng)中的數(shù)控代碼翻譯模塊的研究具有重要的現(xiàn)實(shí)意義。
[1]王太勇 .基于動態(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.