NC代碼編譯器的技術(shù)基礎(chǔ)、結(jié)構(gòu)、研究與設(shè)計
0 引言精工 NC代碼驅(qū)動機床運動實現(xiàn)加工的自動化 ,能夠大大提高加工性能。但不正確的 NC代碼會造成過切或欠切加工出廢品 ,也可能發(fā)生零件與刀具、 刀具與夾具、 刀具與工作臺之間的干涉碰撞 ,這顯然十分危險。因此 ,迫切需要一種虛擬的仿真加工平臺來檢驗 NC代碼的正確性 ,NC代碼編譯器是組成精工虛擬仿真平臺的核心部分之一。國內(nèi)外的 NC代碼翻譯技術(shù)已經(jīng)比較成熟[ 1, 2 ]。針對精工代碼標(biāo)準(zhǔn)的多樣性 ,文獻 [ 3 ]中提出獨立的“NC代碼規(guī)則庫 ” 和“處理引擎 ” 的概念 ,并通過 TCL ( Tool CommandLanguage)來實現(xiàn) EBNF定義的 NC程序語法規(guī)則 ,提高了 NC代碼編譯器的通用性[ 4 ]。本系統(tǒng)采用高級語言 Java開發(fā) ,具有良好的平臺無關(guān)性 ,通過 EBNF定義 NC程序語法規(guī)則 ,并以 ANT LR為底層分析工具 ,開發(fā)出一個通用性、 開放性強 ,效率高的 NC代碼編譯器。1 NC代碼編譯器的技術(shù)基礎(chǔ)1 . 1 精工程序的組成及特點一個完整的精工加工程序由若干程序段組成 ,而精工程序段又由若干條精工指令按照一定的結(jié)構(gòu)構(gòu)成。精工程序結(jié)構(gòu)如圖 1所示。圖 1中各個標(biāo)號的含義如下: 1— 起始符; 2— 程序名; 3—程序主體; 4— 程序結(jié)束語; 5— 功能字; 6— 程序段。目前精工程序段常采用字地址程序段格式 ,上述功能代碼 G、 M、 S即為“ 字地址 ” 。每個“ 字 ” 由“ 字地址 ” 和其后面的數(shù)字 (有的帶有符號 )組成。G、 M及 F、 S、 T指令描述精工機床的運動方式、 加工類型、 主軸狀態(tài)、 冷卻液的開關(guān)、 進給速率、 主軸轉(zhuǎn)速的設(shè)置和刀具的選擇等。X、 Y、 Z、I、 J、 K為坐標(biāo)指令字 ,分別描述刀心位置及加工軌跡中圓弧的圓心坐標(biāo)等。精工程序段為典型的上下文無關(guān)文法 ,而且語法規(guī)則簡單、 數(shù)量較少 ,可以通過 EBNF定義其語法規(guī)則。1 . 2 ANT LR技術(shù)簡介ANT LR[ 5 ]能夠簡化編譯器的構(gòu)建。ANT LR是 LL ( k)文法的語法分析器生成器 ,其生成的目標(biāo)程序非常直觀且易于調(diào)試 ,文法表述能力相對強于 LEX/YACC。ANT LR通過讓用戶自定義詞法分析器和語法分析器的規(guī)則 ,來生成相應(yīng)詞法分析器和語法分析器的程序。利用生成的詞法分析器 ,先將輸入的字符流轉(zhuǎn)換成由短語組成的流 ,再作為語法分析器的輸入 ,從而得出最終的結(jié)果 — — — 語法樹。有了語法樹便可以根據(jù)實際的應(yīng)用要求求得執(zhí)行結(jié)果。生成的分析器是以類的形式出現(xiàn) (一個分析器就是一個類 ,所有功能都封裝在類中 ) ,能方便地嵌入到應(yīng)用程序中。ANT LR總體框架如圖 2所示。在使用 Antlr時 ,要先創(chuàng)建一個稱為語法文件的文本文件 (. g文件 ) , 將自定義的詞法分析器和語法分析器的規(guī)則全部寫在里面。Antlr就是通過讀取分析語法文件中的規(guī)則來生成詞法分析器與語法分析器的。Antlr語法文件的工作過程如下:首先 ,定義詞法分析器 Lexer類 ,在類中定義各種 Token;然后 ,定義語法分析器Parser類 ,在類中使用 EBNF語法 ,遞歸定義各種句子 , Parser類負(fù)責(zé)把讀入的 Token串匹配成句子 ,翻譯出 AST(抽象語法樹 ) ;最后 ,定義用于處理 AST的 TreeParser類 ,根據(jù) Parser類分析出來的 AST(抽象語法樹 )進行動作。Antlr語法文件具體組成部分及規(guī)則解析參見文獻 [ 6 ]。2 NC代碼編譯器體系結(jié)構(gòu)NC代碼編譯器的首要作業(yè)歸納起來有兩個:檢錯和翻譯。檢錯,即依照該精工系統(tǒng)的編程規(guī)則和有關(guān)精工加工的知識,對NC代碼進行詞法剖析、 語法剖析、 語義剖析,然后檢查出該NC代碼的詞法過錯、 語法過錯、 邏輯過錯(其間包含數(shù)據(jù)不合理,加工狀況不合理等)。通過檢錯期間,若NC代碼未被查出過錯,則進入翻譯期間。翻譯,即從NC代碼中提取操控機床部件運動的有關(guān)指令動作和狀況信息,將運動的數(shù)據(jù)依照位移和速度的改變劃分紅一系列時刻片段[ 7 ],計算出各時刻片段的機床各坐標(biāo)的位移,如:各種零件輪廓信息(起點、 結(jié)尾、 直線或圓弧等)、 加工速度信息( F代碼)和其他輔助信息(M, S, T代碼等)等,然后驅(qū)動機床模型的運動,完成NC代碼驅(qū)動的加工進程仿真。根據(jù)以上對 NC代碼編譯器主要工作的分析 ,設(shè)計本系統(tǒng)體系結(jié)構(gòu)如圖 2所示。3 NC代碼編譯器的研究與設(shè)計根據(jù)面向?qū)ο蟮能浖O(shè)計方法 ,該編譯器可細(xì)分為詞法分析、 語法與語義分析、 信息提取三個模塊。3 . 1 詞法分析模塊詞法分析的主要功能是將輸入的 NC程序由字符串序列分解為單詞序列[8 ]。詞法分析的任務(wù)包括兩個方面:檢查精工程序內(nèi)是否有非法字符;對精工程序的源代碼進行格式整理。精工程序中出現(xiàn)非法字符主要指以下兩種情況:第一種情況為含有系統(tǒng)無法識別的字符。在本編譯系統(tǒng)中 ,系統(tǒng)可識別的字符集為 { G, X, Y, Z, H, D, F, O, N, I , J, K,M, S, T,R. , ; , % } ,阿拉伯?dāng)?shù)字 0~99,若精工程序內(nèi)出現(xiàn)“A” 等字符集所不包含的字符時 ,則認(rèn)為精工程序含有非法字符。第二種情況是由系統(tǒng)可識別字符集組成的系統(tǒng)無法識別的字符串。這種錯誤一般是由于用戶的誤操作造成的 ,包括以下兩種: 1)沒有相應(yīng)的精工功能與字符串相匹配 ,如“7100” ,“M890” ,“MFO 1” 等均屬于這種情況; 2)數(shù)值格式輸入有誤 ,如 150正確的表達應(yīng)為“150 . ” ,但若用戶在中間輸入空格則變成“1 5 0 . ” ,這種情況在本編譯系統(tǒng)中也被視為是數(shù)值格式輸入錯誤的一種。對精工程序的源代碼進行格式整理的主要任務(wù)是刪除精工程序中的空白字符、 回車符、 程序注釋等非加工信息字符 ,并將精工程序轉(zhuǎn)換成便于代碼編譯程序進行處理的內(nèi)部格式。在 ANT LR定義的. g語法文件中通過下面的代碼來實現(xiàn)詞法分析器的功能。ANT LR中 的 規(guī) 則 分 為 公 有 型 ( public ) 和 保 護 型(p r otected)兩類。上述 D IGIT規(guī)則定義了一個數(shù)字 ,其為p r otected類型 ,該規(guī)則不能單獨使用 ,只能嵌套到其他規(guī)則中。該規(guī)則被 NUMER I C規(guī)則調(diào)用 ,定義任意整數(shù)。WS規(guī)則中的“ $setType ( Token . SKIP) ” 是代碼調(diào)用一個 ANT LR的內(nèi)置函數(shù) ,告訴詞法分析器 ,前面定義的這四種字符都一律跳過。完成該文件后 ,運行 ANT LR便可以生成相應(yīng)的詞法分析器 ,然后通過以下的循環(huán)可以依次將 NC文件的短語讀出來。3 . 2 語法分析和語義分析模塊精工語法分析模塊的任務(wù)是在詞法分析基礎(chǔ)上將精工加通過線程及 Java 3D 對動畫效果、 交互式操作、 形體組合、復(fù)雜的應(yīng)用程序的支持等來實現(xiàn)仿真 (模型顯示于界面右部 ) ,并可通過按鈕和菜單對仿真的過程進行控制。圖 6為系統(tǒng)運行實例。本文由海天精工文章整理發(fā)表,文章來自網(wǎng)絡(luò)僅參考學(xué)習(xí),本站不承擔(dān)任何法律責(zé)任。http://m.himslangfull.com加工中心專業(yè)制造