劉 俊 唐善斌 劉 潔 肖 文
(三一重工攪拌設(shè)備研究院,湖南長(zhǎng)沙410100)
目前,市場(chǎng)上出現(xiàn)的嵌入式數(shù)控系統(tǒng)大都采用二維畫圖來實(shí)現(xiàn)加工軌跡仿真,實(shí)現(xiàn)三維加工軌跡仿真的很少。主要原因在于嵌入式處理器對(duì)OpenGL ES的支持不夠。隨著嵌入式技術(shù)和制造工藝的發(fā)展,ARM處理器的主頻不斷提升,對(duì)3D加速也提供了足夠的支持,使得嵌入式數(shù)控系統(tǒng)軌跡加工的三維仿真成為可能。
本文介紹了一種嵌入式數(shù)控雕刻系統(tǒng)軌跡加工三維仿真的實(shí)現(xiàn)方法。嵌入式數(shù)控雕刻系統(tǒng)以WinCE6.0作為嵌入式操作系統(tǒng),VS2005作為應(yīng)用程序開發(fā)環(huán)境,采用三星公司的ARM處理器S3C6410作為CPU、NOVA公司的MCX314芯片作為運(yùn)動(dòng)控制芯片。通過本仿真軟件,可以實(shí)現(xiàn)NC加工代碼編譯、雕刻圖形的三維建模、以及加工軌跡的動(dòng)態(tài)仿真。
OpenGL ES是針對(duì)嵌入式系統(tǒng)專門設(shè)計(jì)的跨平臺(tái)的、功能完善的2D和3D圖形應(yīng)用程序接口API,它由桌面OpenGL子集組成[1]。針對(duì)硬件資源相對(duì)緊缺的嵌入式系統(tǒng),OpenGL ES具有統(tǒng)一標(biāo)準(zhǔn)的操作系統(tǒng)平臺(tái)接口層EGL,保留OpenGL最常用的API,并增加了新的特性:定點(diǎn)運(yùn)算、字節(jié)匹配、調(diào)色板紋理[2]。目前OpenGL ES已經(jīng)發(fā)展到2.0版本,其可編程流水線示意圖如圖1所示。
根據(jù)2.0版本的可編程流水線,OpenGL ES的初始化過程如圖2所示,分六個(gè)步驟,分別是:獲取Display、初始化 EGL、選擇 Config、構(gòu)造 Surface、創(chuàng)建 Context、顯示。各個(gè)步驟對(duì)應(yīng)的調(diào)用函數(shù)為:eglGetDisplay、eglInitialize、eglChooseConfig、eglCreateWindowSurface、eglCreateContext、eglSwapBuffers。OpenGL ES 簡(jiǎn)化了模型描述,取消了通過在glBegin/glEnd之間使用大量glVertex之類的調(diào)用來逐點(diǎn)描述模型[3],統(tǒng)一使用VertexArray(頂點(diǎn)數(shù)組)來繪圖。
仿真程序首先要對(duì)NC文件進(jìn)行編譯,才能獲得雕刻圖形的加工信息,然后通過數(shù)學(xué)運(yùn)算得到待仿真模型的像素點(diǎn)和灰度信息,進(jìn)而才能進(jìn)行三維建模。NC代碼的編譯流程包括:語法和詞法檢查、語義分析、生成可識(shí)別的中間數(shù)據(jù)。首先根據(jù)數(shù)控機(jī)床標(biāo)準(zhǔn)G代碼(JB3208-83)設(shè)定規(guī)則庫,根據(jù)規(guī)則進(jìn)行詞法、語法檢查和語義分析,并設(shè)立出錯(cuò)信息表,方便用戶查找錯(cuò)誤和分析錯(cuò)誤原因以及進(jìn)行出錯(cuò)處理。詞法語法檢查包括:去除無效字符如注釋信息、程序段中的空格、N指令等;根據(jù)NC代碼的組詞規(guī)則進(jìn)行逐個(gè)檢查,包括代碼中的字符是否合法、代碼的參數(shù)是否合理等[4]。語義分析主要的規(guī)則有:NC代碼功能指令代碼和坐標(biāo)代碼在每一行中只能出現(xiàn)一次;X、Y、Z、F 等代碼的取值不能超過機(jī)床的設(shè)定范圍;圓弧運(yùn)動(dòng)指令 G02、G03必須指定圓心坐標(biāo)及半徑;F指令只對(duì) G01、G02、G03 有效,對(duì)G00無效等。
通過如圖3所示的編譯流程,得到中間代碼,并將其保存到一個(gè)數(shù)據(jù)結(jié)構(gòu)體中。定義如下:
}*pNCCodeData;根據(jù)NCCodeData結(jié)構(gòu)體中的坐標(biāo)信息和脈沖當(dāng)量信息可以計(jì)算雕刻圖形的像素和灰度(即加工深度),從而為三維建模和仿真提供數(shù)據(jù)源。
根據(jù)CCodeData提供的數(shù)據(jù)源,通過逐點(diǎn)比較的方法獲得X軸和Y軸方向的最大最小值,從而確定待加工幅面的大小。通過坐標(biāo)變換和比例變換將工件坐標(biāo)轉(zhuǎn)換為圖形的像素點(diǎn)坐標(biāo)。CAD/CAM軟件處理圖形時(shí),需要設(shè)定加工深度h?;叶戎礸ray可以根據(jù)加工深度和Z軸工件坐標(biāo)計(jì)算得到。設(shè)g(x,y,z)表示工件坐標(biāo)(x,y,z)處的像素點(diǎn)灰度值,圖形灰度值為256時(shí)可由如下公式得到:
根據(jù)公式(1)得到的像素點(diǎn)坐標(biāo)和灰度值以向量的形式保存,然后調(diào)用OpenGL ES的相關(guān)畫圖API函數(shù)(如glDrawArrays)構(gòu)建雕刻圖形的三維模型,再結(jié)合加工初始信息可以實(shí)現(xiàn)加工軌跡仿真(如圖4所示)。
加工軌跡實(shí)時(shí)仿真有兩種方式:逐行掃描和輪廓跟蹤掃描。本系統(tǒng)支持這兩種掃描方式。當(dāng)前加工的坐標(biāo)數(shù)據(jù)的刷新由WINDOW的多線程技術(shù)實(shí)現(xiàn),在自動(dòng)加工過程中,建立一個(gè)加工監(jiān)控線程,由其實(shí)時(shí)讀取運(yùn)動(dòng)控制芯片MCX314返回的當(dāng)前加工點(diǎn)的坐標(biāo)數(shù)據(jù)。然后根據(jù)公式(1)獲得當(dāng)前加工點(diǎn)的像素點(diǎn)坐標(biāo)和灰度值,在OpenGL ES平臺(tái)中完成當(dāng)前加工點(diǎn)的重繪。三維建模以及實(shí)際加工的效果圖如圖5所示。
本仿真軟件主要可以實(shí)現(xiàn)以下功能:(1)對(duì)NC文件進(jìn)行詞法語法檢查以及語義分析;(2)對(duì)雕刻圖形進(jìn)行三維建模;(3)三維仿真雕刻圖形的加工過程,并得到加工結(jié)果;(4)同步顯示機(jī)床狀態(tài)和加工時(shí)間;(5)在實(shí)際雕刻過程中實(shí)現(xiàn)與加工過程同步的動(dòng)畫效果,從而方便用戶監(jiān)控和觀察雕刻加工過程。通過VS2005開發(fā)平臺(tái),本仿真軟件已成功移植到嵌入式雕刻機(jī)的操作系統(tǒng)WinCE6.0中,目前已成功應(yīng)用于中國(guó)地質(zhì)大學(xué)機(jī)械與電子工程研究所研制的嵌入式數(shù)控木雕機(jī)系統(tǒng)。利用OpenGL ES技術(shù)在嵌入式數(shù)控系統(tǒng)中進(jìn)行三維仿真,具有十分廣闊的應(yīng)用前景。
[1]史揚(yáng),吳金平.OpenGL ES圖形標(biāo)準(zhǔn)在嵌入式系統(tǒng)中的應(yīng)用[J].工業(yè)控制計(jì)算機(jī),2008,21(3):27-29.
[2]Aaftab Munshi,Dan Ginsburg,Dave Shreiner.OpenGL ES 2.0 programming guide[M].New Jersey:Addison Wesloy,2008.
[3]Kari Pulli,Tomi Aarnio,Ville Miettinen,et al.Mobile 3D graphics with OpenGL ES and M3G[M].Amsterdan:Morgan Kaufmann Publishes,2007:170-193.
[4]劉沖,楊代華,張曉婷.基于工控機(jī)的G代碼編譯程序設(shè)計(jì)[J].機(jī)械設(shè)計(jì)與制造,2007(5):60-62.
[5]吳濤,楊代華,章文獻(xiàn),等.用 VC實(shí)現(xiàn)數(shù)控雕刻機(jī)加工過程仿真[J].機(jī)床與液壓,2003(5):130-131.