王賢虎,郭 微 (安徽水利水電職業技術學院機械工程系,安徽 合肥231603)
近十幾年來,數控技術的發展非常迅猛。利用計算機完成從產品設計、工藝設計、數控代碼 (NC代碼)仿真到加工裝配等所有環節,不僅可以大大縮短產品研發周期,還大大降低了生產成本[1]。為此,筆者對數控仿真系統中NC代碼的處理問題進行了研究,以便實現數控代碼的快速、高效翻譯過程。
數控代碼翻譯模塊包括NC代碼讀入、分析和執行3個子模塊。首先,將編輯好的數控程序讀入到仿真系統中,然后對代碼進行分析,包括詞法分析、語義分析等,如果沒有發現代碼錯誤,則數控程序可以進入實施階段。
機床加工過程中主要運動形式包括直線運動和圓弧運動[2]。如果能得到刀具軌跡上各斷點的坐標值,就能實現直線運動或圓弧運動。其中起始點的坐標值在語義分析完成后就能夠得到,軌跡上其他點坐標值需要通過插補運算來得到。對于上述坐標值可采用隊列的形式存儲。當產生新的坐標值時,在隊列尾部增加節點來存儲這些數據。當然不是將整個程序所得到的坐標值一起存儲在一個隊列中,而是按照程序段進行存儲,一個程序段對應一個隊列,若隊列中為空,意味著機床在此沒有產生運動,可以繼續執行后續的程序段,直至整個程序執行完成。
在完成NC代碼的翻譯之后,將獲得的機床運行相關信息輸出到運動仿真模塊,從而驅動模型進行數控加工過程的仿真。數控代碼處理過程如圖1所示。

圖1 數控代碼處理流程圖
數控程序采取逐行執行的方式,也就是執行完一行程序段再去執行下行程序段,直至整個數控程序結束。為此選擇一個單向鏈表結構來存儲數控代碼的各個程序段,鏈表中的一個節點對應一行程序段。下面為一個列表的具體結構:

通過NC代碼讀入子模塊,可以將數控程序文件中的內容存儲在一個單向鏈表中。其中,鏈表中的每一個字符串對應數控程序的一行程序段。然后分析每個字符中的內容,也就是要將每行程序段指令字后的數值單獨取出后為程序執行階段所用。具體可以通過以下方式完成:

考慮到上述數據在程序執行階段會被經常使用,可以選擇雙向鏈表來存儲取出的指令字后的數值,具體內容如下:

其中tool_center_x、tool_center_y、tool_center_z存儲每個程序段刀具中心位置坐標。
利用NC代碼分析子模塊可以得到存儲各指令字后數值的雙向鏈表line_data,但鏈表中并沒有存儲刀具軌跡路徑上其他斷點的坐標值。要獲得相應坐標值,需要通過插補運算的方法來獲得,具體過程如下:數控程序經過讀入階段和分析階段后,可以得到每個程序段指令字、起始點坐標值、刀具中心坐標值等相關信息,從而能夠做出象限的判斷、終點判別等操作,并為后續的插補運算提供所需信息。插補運算的算法較多,筆者選擇了逐點比較法[3],其具體內容如下:

以上定義的單向鏈表是用來存儲各個節點的插補指令、各節點的坐標平面代碼值、當前節點的象限值。其中2個聯合是為了實現終點判別和象限轉換。因為在數控加工過程中,各軸的進給方向是根據后一點相對于當前點所處的象限來確定的。由于空間中有很多象限,這樣在每個象限都需要進行插補運算判別,這樣較為繁瑣,同時效率不高。為此采用直線插補的方式建立如下函數,并將函數值賦予變量quad[4]:

圖2 正在加工的數控仿真車床圖

其中x_start,y_start,x_end,y_end分別為前后程序段中的刀心的插補起、終點坐標值。
以VC6.0編程軟件為基礎,探討了數控仿真系統中NC代碼的處理問題并實現了數控加工過程的仿真 (見圖2)。由于數控仿真系統的應用可以大大降低產品試制次數,從而縮短產品上市周期。因此,對于數控仿真系統中的數控代碼翻譯模塊的研究具有重要的現實意義。
[1]王太勇 .基于動態四叉樹的數控銑削加工仿真的研究 [J].機床與液壓,2006(9):21-23.
[2]嚴蔚敏,吳偉民 .數據結構 [M].北京:清華大學出版社,1997.
[3]王賢虎 .數控車削仿真系統的研究 [D].合肥:合肥工業大學,2006.
[4]張幸兒 .計算機編譯原理 [M].北京:科學出版社,1999.