羅海據(jù),吳永明
(1.廣州數(shù)控設(shè)備有限公司,廣東 廣州 510530;2.廣東工業(yè)大學(xué) 機(jī)電學(xué)院,廣東 廣州 510006)
在數(shù)控加工,運(yùn)動(dòng)控制卡,機(jī)器人的應(yīng)用領(lǐng)域,用戶通過編寫帶有G指令的數(shù)控加工文件來控制機(jī)床,運(yùn)動(dòng)部件,機(jī)器人的運(yùn)動(dòng).即使是數(shù)控機(jī)床領(lǐng)域,在JB3208-1999里規(guī)定50多個(gè)的G代碼功能,某些廠家如FANUC系列,SIEMENS等的數(shù)控系統(tǒng)也各自定義了40多個(gè)的基本G代碼,這些廠家的數(shù)控系統(tǒng)出了一些基本功能的G代碼相同以外,其余的G代碼都代表不同的意義.而且由于用戶的使用習(xí)慣,可能對(duì)相同的G代碼會(huì)有不同理解.另外,對(duì)于用戶需要增加一些特殊應(yīng)用,需要增加新的G代碼.如果針對(duì)每一種系統(tǒng)都開發(fā)一套G代碼,那就相當(dāng)消耗時(shí)間,所以譯碼系統(tǒng)應(yīng)該解決這些問題.目前文獻(xiàn)[1,2,3]論述了譯碼的解釋系統(tǒng)通用實(shí)現(xiàn)過程,以及G代碼分組、實(shí)現(xiàn)過程等作了詳細(xì)的論述.文獻(xiàn)[4]分析數(shù)控加工指令與特征的對(duì)應(yīng)關(guān)系,對(duì)加工指令進(jìn)行分類,利用這種分類將功能函數(shù)子模塊的計(jì)算結(jié)果以數(shù)據(jù)集合的方式輸出,促進(jìn)了功能函數(shù)子模塊的獨(dú)立.
每個(gè)G代碼有各自要實(shí)現(xiàn)的功能和特性,它們之間的存在一定的關(guān)系如模態(tài)、排斥、替代等.數(shù)控的譯碼系統(tǒng)要對(duì)用戶輸入的G代碼文件進(jìn)行翻譯、檢測(cè),防止出現(xiàn)功能相互沖突的G代碼而導(dǎo)致加工異常.另外,當(dāng)數(shù)控系統(tǒng)推出市場(chǎng)往往要順應(yīng)用戶的要求增加特定功能的G代碼,隨著G代碼的增加,譯碼系統(tǒng)的規(guī)模也將增加,新的模塊增加到原來的系統(tǒng),往往帶來不穩(wěn)定的因素.文章嘗試將G代碼看作數(shù)據(jù),用E-R表描述G代碼之間的關(guān)系,G代碼解釋系統(tǒng)只實(shí)現(xiàn)這些關(guān)系的運(yùn)算便可以了.如果開發(fā)新的G代碼系統(tǒng),或者增加新的G代碼,只需要改變或者添加G代碼的關(guān)系表便可以完成,減少加入原來系統(tǒng)的代碼量.
數(shù)控的譯碼功能主要完成對(duì)CNC程序文件的讀寫,對(duì)程序進(jìn)行譯碼,最終得到機(jī)床移動(dòng)的目標(biāo)點(diǎn)送給插補(bǔ)器.它一般包括了詞法分析,語法分析和語義分析這三部分.
詞法分析先一段NC程序從CNC文件讀進(jìn)內(nèi)存、然后按照CNC的詞法規(guī)則檢測(cè)和檢查空格、段結(jié)束符等.而語法分析要檢查G指令表示是否合法和完整、或者存在與語法規(guī)則不相符的表達(dá)式等.語義分析最終的目的是根據(jù)G代碼的功能確定機(jī)床的運(yùn)動(dòng)方式和計(jì)算機(jī)床的移動(dòng)終點(diǎn).然而在計(jì)算終點(diǎn)坐標(biāo)值前需要來檢測(cè)G代碼功能是否存在執(zhí)行時(shí)邏輯沖突,這需要要對(duì)每個(gè)G代碼特性和G代碼之間的關(guān)系進(jìn)行分析.另外,對(duì)于一段CNC程序,可能要實(shí)現(xiàn)多個(gè)G指令的功能,就涉及到它們之間的執(zhí)行順序問題,所以譯碼系統(tǒng)要把G代碼的功能按一定的邏輯順序排序.筆者認(rèn)為整個(gè)譯碼功能的結(jié)構(gòu)如下圖1,除了基本的詞法分析、語法分析,語義分析包括了計(jì)算目標(biāo)點(diǎn)模塊,和一個(gè)G代碼關(guān)系分析模塊.經(jīng)過邏輯分析后,得到本段CNC程序需要執(zhí)行的G代碼,根據(jù)這些G代碼表示的功能計(jì)算機(jī)床目標(biāo)點(diǎn).
圖1
詞法、語法分析將CNC程序讀入內(nèi)存以后,就要開始檢測(cè)G代碼所表示的功能之間的關(guān)系.一般而言,為了方便用戶使用G代碼包含一個(gè)模態(tài)的屬性,和所屬于哪一組的特性.所謂模態(tài)G指令就是當(dāng)該指令被指令后,此后的每一段程序都需要執(zhí)行該指令,直到該G指令被其他G指令替代為止.非模態(tài)G指令就是只在指令了該G指令的程序段里生效,當(dāng)該段執(zhí)行完畢后下一段程序不再執(zhí)行此功能,例如G04X10.執(zhí)行暫停功能.基本來講,同組的G代碼執(zhí)行相同的功能,如移動(dòng)G代碼組包括了,G0快速移動(dòng),G1切屑,G2順時(shí)針圓弧加工,G3逆時(shí)針圓弧加工,G04執(zhí)行暫停等.而分組屬性方便用戶使用.
另外,G代碼之間的關(guān)系包括了功能上相互間的排斥、替代、轉(zhuǎn)折等關(guān)系.當(dāng)前段的有一個(gè)G代碼被指令,如果和模態(tài)G指令或者同段其他G代碼的同時(shí)執(zhí)行使加工出現(xiàn)質(zhì)量下降,或者機(jī)床異常情況,例如出現(xiàn)過切,或者撞刀等情況,認(rèn)為這些G代碼是排斥的,不能同時(shí)生效的.例如在CNC程序里指令了鉆孔加工的G代碼,該代碼具有模態(tài)性,將該段執(zhí)行完畢后,在執(zhí)行下一段CNC程序時(shí),某些信息會(huì)被繼承下來,例如鉆孔軸,回退平面等.如果下一段指令了與該段不同的平面選擇G指令,鉆孔的進(jìn)給軸就發(fā)生改變,雖然CNC程序在語法上沒有錯(cuò)誤,然而在實(shí)際加工過程中往往出現(xiàn)撞刀的情形,這時(shí)候譯碼系統(tǒng)就要發(fā)出報(bào)警,或者其他提示的畫面來通知用戶.
替代是指某些模態(tài)指令被指令后,某些模態(tài)從屬于某一組,可以被同一組的G代碼替換執(zhí)行同組的其他功能.轉(zhuǎn)折是當(dāng)指令某一G代碼,令之前的G代碼的功能發(fā)生了改變,變成了另一種功能,如極坐標(biāo)系編程,相對(duì)或絕對(duì)指令都可以使其算法發(fā)生了改變.為了更清晰描述這些關(guān)系,這里引用數(shù)據(jù)庫關(guān)系描述工具,E-R關(guān)系圖表,如圖2.
圖2
分析所有的G代碼之后,將這些G代碼關(guān)系作成表的形式存放起來,如下表1所示:
表1
為了方便關(guān)系數(shù)據(jù)的讀取,定義了如下的數(shù)據(jù) 結(jié)構(gòu)以常數(shù)的形式存放.
}GCODEATTRIgCodeAttri[G_CODE_MAX]={{0,1,{1,2,3,4,-1},{-1},{-1}},…};為了方便處理,用-1表示沒有與之有關(guān)系的G代碼,當(dāng)程序掃描該組的G代碼,遇到-1便返回,節(jié)約處理時(shí)間.
由上面的分析可以知道,譯碼系統(tǒng)先將一段CNC文件讀入內(nèi)存,直接對(duì)文件格式的內(nèi)存并不方便,文章將這些數(shù)據(jù)轉(zhuǎn)換成中間數(shù)據(jù),然后將坐標(biāo)移動(dòng)量和控制量輸送插補(bǔ)器.文章設(shè)計(jì)的中間數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)如下:
詞法分析逐個(gè)字母進(jìn)行分析,并將字母后面的數(shù)字字符串轉(zhuǎn)化為數(shù)值賦值到相對(duì)應(yīng)于字母對(duì)應(yīng)的地址里.由于中間數(shù)據(jù)預(yù)留了所有組的G代碼,按照G代碼的組號(hào)分別填到G代碼數(shù)組里.在CNC程序段出現(xiàn)G代碼,按照G代碼關(guān)系表,將后面出現(xiàn)的代替前面的就可以,實(shí)現(xiàn)G代碼的替代關(guān)系.另外,在轉(zhuǎn)化過程中要檢測(cè)空格,不合法的地址表達(dá)式,注釋等,如果出錯(cuò)就退出并給出報(bào)警信息.
語法分析直接對(duì)中間數(shù)據(jù)進(jìn)行處理,先按照分析的G代碼邏輯表,對(duì)G代碼進(jìn)行排斥檢查,如果有排斥的G代碼則報(bào)警并退出,遇到轉(zhuǎn)折關(guān)系的G代碼則在condition[]設(shè)置該G代碼的在執(zhí)行條件,并將計(jì)算方法填入CaculateWay[]的函數(shù)指針的數(shù)組里.另外,得到本段程序需要執(zhí)行的G代碼后,根據(jù)要執(zhí)行的G代碼類型,來判斷其他的地址,如F、P、Q、X、Y、Z等是否合理,因?yàn)檫@了地址會(huì)因?yàn)镚代碼的不同而有不同的含義和取值范圍,如果這些地址取值不合理,則報(bào)警.
語法分析后得到了中間數(shù)據(jù)的最終結(jié)果,根據(jù)參數(shù)入口condition[]和計(jì)算方法CaculateWay里面的函數(shù)指針一一調(diào)用相應(yīng)的參數(shù)和函數(shù)計(jì)算目標(biāo)點(diǎn).目前的數(shù)控系統(tǒng)一般都包括對(duì)了極坐標(biāo)轉(zhuǎn)換、鏡像、縮放、旋轉(zhuǎn)的計(jì)算和刀具半徑補(bǔ)償和長(zhǎng)度補(bǔ)償.如果程序指令了固定循環(huán)的G代碼還要分解刀具移動(dòng)的路徑.這些算法的順序是固定的,如果用戶按照實(shí)際應(yīng)用提出新的要求,那么只需要添加G代碼關(guān)系和相應(yīng)的算法就可以.另外,在計(jì)算過程中檢測(cè)是否有溢出、除零、坐標(biāo)是否有超出軟限位等判斷,如果有錯(cuò)誤則報(bào)警退出譯碼模塊.經(jīng)過計(jì)算最終得到機(jī)床的移動(dòng)目標(biāo)位置,放到與插補(bǔ)接口的數(shù)據(jù)緩沖區(qū).
文章對(duì)數(shù)控譯碼系統(tǒng)進(jìn)行分析,并根據(jù)G指令的特點(diǎn)將G代碼的關(guān)系以數(shù)據(jù)表的方式確定,對(duì)于開發(fā)新的運(yùn)動(dòng)控制產(chǎn)品,或者增加的G代碼只需要改變數(shù)據(jù)表就可以,縮短開發(fā)時(shí)間.該譯碼系統(tǒng)已經(jīng)應(yīng)用到實(shí)際的數(shù)控系統(tǒng),實(shí)踐證明可以滿足不同的用戶需求,加快產(chǎn)品的研發(fā).
〔1〕張承瑞,單誠(chéng),王恒,等.數(shù)控G代碼解釋器的設(shè)計(jì)與實(shí)現(xiàn)[J].山東大學(xué)學(xué)報(bào)(工學(xué)版),2002,32(6):564~568.
〔2〕吉華,李彥,肖世廣.Linux下G代碼解釋器的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用研究,2006,12:201~202.
〔3〕王心光,傅建中,等.虛擬數(shù)控加工中G代碼編譯器的研究.組合機(jī)床和自動(dòng)化加工技術(shù)[J].2005,6:80~81,84.
〔4〕王琦魁,李偉,陳有東,王田苗,等.新型的數(shù)控譯碼模塊結(jié)構(gòu)的研究與實(shí)現(xiàn)[J].北京航空航天大學(xué)學(xué)報(bào),2009,35(1):122~125.