基于Windows CE的數(shù)控軟件開發(fā)與實(shí)現(xiàn)
點(diǎn)擊:1831
A+ A-
所屬頻道:新聞中心
0 引言
傳統(tǒng)的數(shù)控系統(tǒng)是一種專用的、封閉體系結(jié)構(gòu)的CNC系統(tǒng)。各數(shù)控廠家出于商業(yè)利益的需要,在數(shù)控系統(tǒng)的設(shè)計(jì)上形成各自獨(dú)立的標(biāo)準(zhǔn)和體系,造成數(shù)控系統(tǒng)硬件平臺(tái)的專用性,軟件結(jié)構(gòu)的不可移植性。這種封閉型和單一性嚴(yán)重影響了數(shù)控技術(shù)的發(fā)展和普及。嵌入式設(shè)備及其操作系統(tǒng)的出現(xiàn),有利于打破現(xiàn)有數(shù)控系統(tǒng)的封閉性,形成開放式數(shù)控
系統(tǒng)設(shè)計(jì)模式。嵌入式系統(tǒng)的種類有很多,應(yīng)用較廣的有Windows CE、Linux等。WinCE 是一種為多種嵌入式系統(tǒng)和產(chǎn)品設(shè)計(jì)的緊湊、高效、可升級(jí)的操作系統(tǒng)。WinCE 采用標(biāo)準(zhǔn)模式,其最主要的特征是為有限的硬件資源提供了多線程、多任務(wù)和完全優(yōu)先級(jí)的計(jì)算環(huán)境 [1]。本文探討了在Windows CE系統(tǒng)下,如何開發(fā)高效穩(wěn)定的嵌入式數(shù)控系統(tǒng)。
1 Windows CE系統(tǒng)內(nèi)核的定制
嵌入式系統(tǒng)上應(yīng)用軟件的開發(fā)離不開底層系統(tǒng)的支持,Windows CE 系統(tǒng)下應(yīng)用程序架構(gòu)如圖1 所示。
圖1 Windows CE系統(tǒng)下應(yīng)用程序架構(gòu)
由于應(yīng)用環(huán)境的多樣性,需要對(duì)Windows CE 系統(tǒng)做不同的內(nèi)核定制??刹捎梦④浌镜腜latform. Builder 集成開發(fā)環(huán)境,針對(duì)數(shù)控加工應(yīng)用的特點(diǎn),添加、刪除和修改某些系統(tǒng)模塊,包括添加串口通信支持,F(xiàn)AT 文件支持(以支持U 盤快速傳送G 代碼文件),ActiveSync 支持(與PC 宿主機(jī)的通信支持)等。此外,還應(yīng)將注冊(cè)表模式修改為HIVE 模式,以備掉電后將數(shù)據(jù)存放到FLASH 中保存。
2 嵌入式數(shù)控系統(tǒng)軟件結(jié)構(gòu)
采用模塊化設(shè)計(jì)有助于構(gòu)建清晰的程序框架,提高協(xié)同開發(fā)能力和編程效率,增強(qiáng)代碼的復(fù)用率。嵌入式數(shù)控系統(tǒng)軟件模塊劃分如圖2所示。
圖2 上/下位機(jī)軟件模塊劃分
數(shù)控系統(tǒng)使用者首先在PC 機(jī)上完成零件模型建立和編輯,生成加工代碼文件。然后將NC 代碼文件傳輸至嵌入式數(shù)控平臺(tái)。在嵌入式平臺(tái)上完成對(duì)NC 代碼的數(shù)據(jù)挖掘,提取數(shù)控加工信息并傳送至下位機(jī)處理器。下位控制器利用其高速運(yùn)算的能力,完成插補(bǔ)運(yùn)算和伺服電機(jī)控制。
Windows CE 系統(tǒng)在上位機(jī)運(yùn)行。Windows CE 系統(tǒng)非強(qiáng)實(shí)時(shí)性系統(tǒng),因此實(shí)時(shí)性要求較高的任務(wù)(如刀補(bǔ)運(yùn)算,插補(bǔ)運(yùn)算),均放在下位機(jī)運(yùn)行。而像人機(jī)交互這種實(shí)時(shí)性要求不高,但事件機(jī)制較復(fù)雜的任務(wù),則放在上位機(jī)實(shí)現(xiàn),以Windows CE 系統(tǒng)的內(nèi)核支持來(lái)降低交互式操作開發(fā)的難度。
3 主要功能模塊及其關(guān)鍵實(shí)現(xiàn)技術(shù)
3.1 人機(jī)界面模塊
人機(jī)界面模塊是用戶與數(shù)控加工平臺(tái)交互的接口。人機(jī)界面包括如下操作:加工代碼的編輯和保存;各種系統(tǒng)參數(shù)的設(shè)定;加工過程的同步動(dòng)態(tài)仿真;獲取數(shù)控設(shè)備的位置,速度,故障信息,反饋給用戶;文件操作等。
Windows CE出于精簡(jiǎn)內(nèi)核的需要,對(duì)傳統(tǒng)的WIN32 圖形庫(kù)改動(dòng)較大,較多圖形類API被移除。在實(shí)際開發(fā)中為滿足圖形顯示需要,需要自寫繪圖函數(shù)。數(shù)控仿真用到的繪圖函數(shù)主要有:曲線繪圖類(圓弧,拋物線繪制)、繪圖區(qū)動(dòng)態(tài)縮放、圖形的保存與重繪??蓪⒁陨虾瘮?shù)通過測(cè)試后封裝成庫(kù),在主程序中調(diào)用。
3.2 加工指令編譯模塊
數(shù)控加工指令主要是由完成各種準(zhǔn)備功能的G 代碼和輔助功能的M 代碼組成。譯碼器的作用是讀入已編輯好的數(shù)控代碼,對(duì)指令進(jìn)行詞法和語(yǔ)法檢查,提取刀位特征,生成刀位文件,最終轉(zhuǎn)換為驅(qū)動(dòng)加工模型運(yùn)動(dòng)的數(shù)據(jù)。譯碼的方式可分為兩類:解釋模式和編譯模式。
解釋模式:將G 代碼分割為若干小段,每段包括3-4行。以段為單位,解釋完本段G代碼后,隨即調(diào)用刀具補(bǔ)償模塊,完成刀具補(bǔ)償。之后把這段經(jīng)過處理的代碼發(fā)送下位機(jī),進(jìn)行插補(bǔ)控制。解釋模式具有簡(jiǎn)單、易行的特點(diǎn),能夠方便地在加工過程中動(dòng)態(tài)插入指定代碼。其不足之處在于譯碼效率較低,代碼的串行發(fā)送又極大地限制了加工效率,而且人為地分割G 代碼也破壞了代碼原有的統(tǒng)一性。
編譯模式:預(yù)先對(duì)整個(gè)G代碼文件進(jìn)行編譯,生成臨時(shí)代碼文件。之后將整個(gè)代碼文件發(fā)送到下位機(jī)。在下位機(jī)上調(diào)用刀具補(bǔ)償模塊,對(duì)代碼進(jìn)行刀具補(bǔ)償。編譯模式能夠較好地解決固定循環(huán)指令,子程序以及各種跳轉(zhuǎn)指令的問題,維護(hù)代碼自身的統(tǒng)一性[2]。由于是統(tǒng)一編譯,統(tǒng)一執(zhí)行,加工效率也比解釋模式高,故譯碼器的設(shè)計(jì)上采用編譯模式。
(1)詞法分析:掃描NC 程序,判別是否有不可識(shí)別字符。如果有,則給出錯(cuò)誤信息。
?。?)語(yǔ)法分析:規(guī)則與匹配的問題。針對(duì)數(shù)控程序特點(diǎn),檢查輸入代碼合理性。若檢查出錯(cuò)誤組合,則給出錯(cuò)誤信息。若檢查出無(wú)效組合,則設(shè)定其無(wú)效。例如:F 指令只對(duì)G01,G02,G03有效,對(duì)G00 無(wú)效。
?。?)語(yǔ)義分析和譯碼:設(shè)計(jì)一個(gè)加工信息類CDrawInfo,用于保存譯碼得到的數(shù)據(jù)。為了保存整個(gè)代碼信息,還需要設(shè)計(jì)一個(gè)鏈表類CListInfo。CDrawInfo 類的設(shè)計(jì)如下:
class CDrawInfo: public CObject{ public: CDrawInfo(); virtual ~CDrawInfo(); UINT m_SerialNum; //加工序號(hào) CPoint m_ptPrev; //前一點(diǎn)坐標(biāo) CPoint m_ptNext; //后一點(diǎn)坐標(biāo) CPoint m_ptCenter; //圓心坐標(biāo) UINT m_gcodeFun; //G 代碼類型 CDrawInfo& perator=(CDrawInfo&); //賦值運(yùn)算符重載 };
譯碼程序執(zhí)行時(shí),首先建立一個(gè)CDrawInfo 類的臨時(shí)對(duì)象drawtemp。而后逐行提取代碼的數(shù)據(jù)信息,并將其賦值到drawtemp 對(duì)象中。本行讀取完畢,再把drawtemp保存到鏈表CListInfo。CListInfo 的聲明如下: CList listinfo;
如此循環(huán)操作,直至所有的NC代碼都被提取出來(lái)并添加到鏈表listinfo中。
3.2 刀具補(bǔ)償模塊
單純經(jīng)過譯碼處理之后的加工代碼,并不能直接用作插補(bǔ)加工,還需要經(jīng)過刀具補(bǔ)償計(jì)算。刀具補(bǔ)償包括刀具長(zhǎng)度補(bǔ)償和刀具半徑補(bǔ)償。刀具長(zhǎng)度補(bǔ)償是為了使刀具頂端到達(dá)編程位置而進(jìn)行的刀具位置補(bǔ)償。刀具半徑補(bǔ)償是因?yàn)閿?shù)控加工代碼通常是按照刀具中心軌跡編輯的,但在實(shí)際加工中參與切削的是刀具的外緣,為此需要補(bǔ)償一個(gè)半徑值。
3.3 插補(bǔ)模塊
無(wú)論選用哪種控制芯片做插補(bǔ)器,插補(bǔ)的原理都是相同的。為滿足實(shí)時(shí)、動(dòng)態(tài)輸出控制脈沖的需要,一般都是利用硬件定時(shí)器做定時(shí)中斷,中斷后即輸出控制脈沖。通過修改定時(shí)寄存器數(shù)值,即可改變輸出脈沖頻率,實(shí)現(xiàn)轉(zhuǎn)速控制。再通過對(duì)輸出脈沖個(gè)數(shù)的計(jì)數(shù),實(shí)現(xiàn)位移控制[3]。以橢圓插補(bǔ)為例,采用逐點(diǎn)比較插補(bǔ)法。該方法的核心是通過逐點(diǎn)地比較刀具與所需插補(bǔ)曲線的相對(duì)位置,確定刀具的坐標(biāo)進(jìn)給方向,從而加工出零件的輪廓[4]。插補(bǔ)循環(huán)包括如下四步:偏差判別、進(jìn)給、新偏差計(jì)算和終點(diǎn)判別。
其中,r、t 為開關(guān)變量。r 為正負(fù)進(jìn)給量判斷,只取1 或-1 值;t 為進(jìn)給與否判斷,只取0或1。對(duì)于不同象限,進(jìn)給方向及進(jìn)給軸的選取都不一樣。通過設(shè)定進(jìn)給開關(guān)量,即可控制插補(bǔ)點(diǎn)位置。單一象限內(nèi)插補(bǔ)運(yùn)算較容易實(shí)現(xiàn)。對(duì)于多象限插補(bǔ),需要在過象限時(shí)做特殊處理。相應(yīng)的算法處理如下:
?。?)判斷起始點(diǎn)、終止點(diǎn)所在象限。
?。?)結(jié)合轉(zhuǎn)向(順/逆時(shí)針),規(guī)劃進(jìn)給路徑,即穿越象限編號(hào)。
?。?)結(jié)合路徑中的象限編號(hào),逐象限插補(bǔ)運(yùn)算。
程序?qū)崿F(xiàn)部分源代碼如下:
//路徑規(guī)劃函數(shù) bool CrossQuadrant(int quad_bgn, int quad_end, int direction, int x_s, int y_s, int x_e, int y_e, int* pCrossQuad){ int CrossPart[5]; //穿越象限編號(hào)數(shù)組 ………… for(i=0;i<5;i++){ //初始化為-1 CrossPart[i]= -1; } nCurPart= quad_bgn; //起始象限編號(hào) if(nCurPart== quad_end){ //起始點(diǎn)、終止點(diǎn)在同一象限 if((nCurPart==0) || (nCurPart==2)){ //若在第1,3象限 if(fSlope_bgn>fSlope_end){ //斜率判斷 if(direction== ClkWs){ //這種情況下,只走過本象限 blnCross= FALSE; //置標(biāo)志位 }}} …….. else{ //起始點(diǎn)在不同象限 do{ j++; if(direction== ClkWs){ //順時(shí)針 nCurPart--;} else{ //逆時(shí)針 nCurPart++; } if(nCurPart <0){ //若前一象限為第一象限,且順時(shí)針轉(zhuǎn) nCurPart=3; } //則后一象限換為第四象限 if(nCurPart >3){ //若前一象限為第四象限,且逆時(shí)針轉(zhuǎn) nCurPart=0; } //則后一象限換為第一象限 CrossPart[j]= nCurPart; }while(nCurPart!= quad_end); }}
4 小結(jié)
本文介紹的嵌入式數(shù)控軟件已成功應(yīng)用于數(shù)控玻璃雕刻機(jī)系統(tǒng)中,現(xiàn)場(chǎng)生產(chǎn)試驗(yàn)表明,系統(tǒng)運(yùn)行效果良好。Windows CE嵌入式操作系統(tǒng)的出現(xiàn)為數(shù)控系統(tǒng)的應(yīng)用開辟了新的領(lǐng)域,但由此也帶來(lái)了軟件開發(fā)上的復(fù)雜性。在嵌入式數(shù)控系統(tǒng)軟件的開發(fā)過程中,必須針對(duì)數(shù)控加工的特點(diǎn),對(duì)Windows CE 系統(tǒng)內(nèi)核進(jìn)行裁減定制,同時(shí)結(jié)合嵌入式硬件的具體情況,對(duì)代碼進(jìn)行合理優(yōu)化,減少內(nèi)存開支和不合理的CPU 占用,完成在嵌入式硬件上的編程。本論文在數(shù)控軟件結(jié)構(gòu)的合理構(gòu)建以及開發(fā)的關(guān)鍵實(shí)現(xiàn)技術(shù)上做了有益的探討。
本文作者創(chuàng)新點(diǎn):在對(duì)數(shù)控平臺(tái)應(yīng)用進(jìn)行Windows CE 系統(tǒng)定制的基礎(chǔ)上,提出了嵌入式數(shù)控開發(fā)的軟件架構(gòu)。并對(duì)傳統(tǒng)插補(bǔ)算法加以改進(jìn),解決插補(bǔ)數(shù)據(jù)過象限突變問題。本系統(tǒng)已成功應(yīng)用于作者所在數(shù)控實(shí)驗(yàn)室的玻璃雕刻機(jī)中。與傳統(tǒng)雕刻系統(tǒng)相比,本系統(tǒng)能節(jié)省設(shè)備成本30%-40%,加工時(shí)間縮短20%左右,已累計(jì)產(chǎn)生經(jīng)濟(jì)效益數(shù)十萬(wàn)元。
(審核編輯: 智匯胡妮)
分享