羅海據,吳永明
(1.廣州數控設備有限公司,廣東 廣州 510530;2.廣東工業大學 機電學院,廣東 廣州 510006)
在數控加工,運動控制卡,機器人的應用領域,用戶通過編寫帶有G指令的數控加工文件來控制機床,運動部件,機器人的運動.即使是數控機床領域,在JB3208-1999里規定50多個的G代碼功能,某些廠家如FANUC系列,SIEMENS等的數控系統也各自定義了40多個的基本G代碼,這些廠家的數控系統出了一些基本功能的G代碼相同以外,其余的G代碼都代表不同的意義.而且由于用戶的使用習慣,可能對相同的G代碼會有不同理解.另外,對于用戶需要增加一些特殊應用,需要增加新的G代碼.如果針對每一種系統都開發一套G代碼,那就相當消耗時間,所以譯碼系統應該解決這些問題.目前文獻[1,2,3]論述了譯碼的解釋系統通用實現過程,以及G代碼分組、實現過程等作了詳細的論述.文獻[4]分析數控加工指令與特征的對應關系,對加工指令進行分類,利用這種分類將功能函數子模塊的計算結果以數據集合的方式輸出,促進了功能函數子模塊的獨立.
每個G代碼有各自要實現的功能和特性,它們之間的存在一定的關系如模態、排斥、替代等.數控的譯碼系統要對用戶輸入的G代碼文件進行翻譯、檢測,防止出現功能相互沖突的G代碼而導致加工異常.另外,當數控系統推出市場往往要順應用戶的要求增加特定功能的G代碼,隨著G代碼的增加,譯碼系統的規模也將增加,新的模塊增加到原來的系統,往往帶來不穩定的因素.文章嘗試將G代碼看作數據,用E-R表描述G代碼之間的關系,G代碼解釋系統只實現這些關系的運算便可以了.如果開發新的G代碼系統,或者增加新的G代碼,只需要改變或者添加G代碼的關系表便可以完成,減少加入原來系統的代碼量.
數控的譯碼功能主要完成對CNC程序文件的讀寫,對程序進行譯碼,最終得到機床移動的目標點送給插補器.它一般包括了詞法分析,語法分析和語義分析這三部分.
詞法分析先一段NC程序從CNC文件讀進內存、然后按照CNC的詞法規則檢測和檢查空格、段結束符等.而語法分析要檢查G指令表示是否合法和完整、或者存在與語法規則不相符的表達式等.語義分析最終的目的是根據G代碼的功能確定機床的運動方式和計算機床的移動終點.然而在計算終點坐標值前需要來檢測G代碼功能是否存在執行時邏輯沖突,這需要要對每個G代碼特性和G代碼之間的關系進行分析.另外,對于一段CNC程序,可能要實現多個G指令的功能,就涉及到它們之間的執行順序問題,所以譯碼系統要把G代碼的功能按一定的邏輯順序排序.筆者認為整個譯碼功能的結構如下圖1,除了基本的詞法分析、語法分析,語義分析包括了計算目標點模塊,和一個G代碼關系分析模塊.經過邏輯分析后,得到本段CNC程序需要執行的G代碼,根據這些G代碼表示的功能計算機床目標點.

圖1
詞法、語法分析將CNC程序讀入內存以后,就要開始檢測G代碼所表示的功能之間的關系.一般而言,為了方便用戶使用G代碼包含一個模態的屬性,和所屬于哪一組的特性.所謂模態G指令就是當該指令被指令后,此后的每一段程序都需要執行該指令,直到該G指令被其他G指令替代為止.非模態G指令就是只在指令了該G指令的程序段里生效,當該段執行完畢后下一段程序不再執行此功能,例如G04X10.執行暫停功能.基本來講,同組的G代碼執行相同的功能,如移動G代碼組包括了,G0快速移動,G1切屑,G2順時針圓弧加工,G3逆時針圓弧加工,G04執行暫停等.而分組屬性方便用戶使用.
另外,G代碼之間的關系包括了功能上相互間的排斥、替代、轉折等關系.當前段的有一個G代碼被指令,如果和模態G指令或者同段其他G代碼的同時執行使加工出現質量下降,或者機床異常情況,例如出現過切,或者撞刀等情況,認為這些G代碼是排斥的,不能同時生效的.例如在CNC程序里指令了鉆孔加工的G代碼,該代碼具有模態性,將該段執行完畢后,在執行下一段CNC程序時,某些信息會被繼承下來,例如鉆孔軸,回退平面等.如果下一段指令了與該段不同的平面選擇G指令,鉆孔的進給軸就發生改變,雖然CNC程序在語法上沒有錯誤,然而在實際加工過程中往往出現撞刀的情形,這時候譯碼系統就要發出報警,或者其他提示的畫面來通知用戶.
替代是指某些模態指令被指令后,某些模態從屬于某一組,可以被同一組的G代碼替換執行同組的其他功能.轉折是當指令某一G代碼,令之前的G代碼的功能發生了改變,變成了另一種功能,如極坐標系編程,相對或絕對指令都可以使其算法發生了改變.為了更清晰描述這些關系,這里引用數據庫關系描述工具,E-R關系圖表,如圖2.

圖2
分析所有的G代碼之后,將這些G代碼關系作成表的形式存放起來,如下表1所示:

表1
為了方便關系數據的讀取,定義了如下的數據 結構以常數的形式存放.

}GCODEATTRIgCodeAttri[G_CODE_MAX]={{0,1,{1,2,3,4,-1},{-1},{-1}},…};為了方便處理,用-1表示沒有與之有關系的G代碼,當程序掃描該組的G代碼,遇到-1便返回,節約處理時間.
由上面的分析可以知道,譯碼系統先將一段CNC文件讀入內存,直接對文件格式的內存并不方便,文章將這些數據轉換成中間數據,然后將坐標移動量和控制量輸送插補器.文章設計的中間數據的數據結構如下:

詞法分析逐個字母進行分析,并將字母后面的數字字符串轉化為數值賦值到相對應于字母對應的地址里.由于中間數據預留了所有組的G代碼,按照G代碼的組號分別填到G代碼數組里.在CNC程序段出現G代碼,按照G代碼關系表,將后面出現的代替前面的就可以,實現G代碼的替代關系.另外,在轉化過程中要檢測空格,不合法的地址表達式,注釋等,如果出錯就退出并給出報警信息.
語法分析直接對中間數據進行處理,先按照分析的G代碼邏輯表,對G代碼進行排斥檢查,如果有排斥的G代碼則報警并退出,遇到轉折關系的G代碼則在condition[]設置該G代碼的在執行條件,并將計算方法填入CaculateWay[]的函數指針的數組里.另外,得到本段程序需要執行的G代碼后,根據要執行的G代碼類型,來判斷其他的地址,如F、P、Q、X、Y、Z等是否合理,因為這了地址會因為G代碼的不同而有不同的含義和取值范圍,如果這些地址取值不合理,則報警.
語法分析后得到了中間數據的最終結果,根據參數入口condition[]和計算方法CaculateWay里面的函數指針一一調用相應的參數和函數計算目標點.目前的數控系統一般都包括對了極坐標轉換、鏡像、縮放、旋轉的計算和刀具半徑補償和長度補償.如果程序指令了固定循環的G代碼還要分解刀具移動的路徑.這些算法的順序是固定的,如果用戶按照實際應用提出新的要求,那么只需要添加G代碼關系和相應的算法就可以.另外,在計算過程中檢測是否有溢出、除零、坐標是否有超出軟限位等判斷,如果有錯誤則報警退出譯碼模塊.經過計算最終得到機床的移動目標位置,放到與插補接口的數據緩沖區.
文章對數控譯碼系統進行分析,并根據G指令的特點將G代碼的關系以數據表的方式確定,對于開發新的運動控制產品,或者增加的G代碼只需要改變數據表就可以,縮短開發時間.該譯碼系統已經應用到實際的數控系統,實踐證明可以滿足不同的用戶需求,加快產品的研發.
〔1〕張承瑞,單誠,王恒,等.數控G代碼解釋器的設計與實現[J].山東大學學報(工學版),2002,32(6):564~568.
〔2〕吉華,李彥,肖世廣.Linux下G代碼解釋器的設計與實現[J].計算機應用研究,2006,12:201~202.
〔3〕王心光,傅建中,等.虛擬數控加工中G代碼編譯器的研究.組合機床和自動化加工技術[J].2005,6:80~81,84.
〔4〕王琦魁,李偉,陳有東,王田苗,等.新型的數控譯碼模塊結構的研究與實現[J].北京航空航天大學學報,2009,35(1):122~125.