趙萬(wàn)軍,鄧正華
ZHAO Wan-jun, DENG Zheng-hua
(重慶三峽學(xué)院 機(jī)械工程學(xué)院,萬(wàn)州 404000)
數(shù)控插補(bǔ)軌跡仿真研究的目的是提高對(duì)插補(bǔ)算法、數(shù)控原理、數(shù)控系統(tǒng)軟件的認(rèn)識(shí)和理解,為從事數(shù)控系統(tǒng)維護(hù)及數(shù)控系統(tǒng)開(kāi)發(fā)奠定基礎(chǔ)。因此,數(shù)控插補(bǔ)軌跡仿真的研究方法與思路不論是對(duì)于高校學(xué)生學(xué)習(xí)數(shù)控技術(shù)課程,還是對(duì)準(zhǔn)備進(jìn)行數(shù)控系統(tǒng)軟件開(kāi)發(fā)的工程技術(shù)人員而言都具有積極意義。目前,也有學(xué)者進(jìn)行了這方面的研究工作[1~3],但他們的研究主要是以直線插補(bǔ)為主,由于圓弧插補(bǔ)存在過(guò)象限問(wèn)題,相較直線插補(bǔ)而言要復(fù)雜許多,因此上述研究文獻(xiàn)甚少涉及圓弧插補(bǔ),即使有所提及也語(yǔ)焉不詳。有鑒于此,本文以VC++為工具,以數(shù)字積分插補(bǔ)法(DDA法)為例來(lái)討論圓弧插補(bǔ)軌跡仿真的實(shí)現(xiàn)過(guò)程。
DDA法即數(shù)字積分法,它利用數(shù)字積分思想確定刀具沿各坐標(biāo)軸的位移,使刀具沿著所加工的曲線進(jìn)給。如圖1所示的第一象限逆時(shí)針圓弧AB為例說(shuō)明DDA圓弧插補(bǔ)原理。
圖1 DDA圓弧插補(bǔ)
圖1所示圓弧以原點(diǎn)為圓心,圓的方程為:
將(1)式兩邊對(duì)時(shí)間t求導(dǎo),可得動(dòng)點(diǎn)P沿兩個(gè)坐標(biāo)軸的速度分量:
由(2)式可得坐標(biāo)軸方向的微小位移增量:
據(jù)(3)式可寫(xiě)出第一象限逆圓加工時(shí)DDA插補(bǔ)表達(dá)式:
式中:Δt為插補(bǔ)周期,可取單位時(shí)間間隔1;n為插補(bǔ)次數(shù)。
圖2 DDA第一象限逆圓插補(bǔ)原理圖
由此,可得DDA圓弧插補(bǔ)的原理如圖2所示。DDA圓弧插補(bǔ)的基本原理可描述為:每經(jīng)過(guò)一個(gè)插補(bǔ)周期,數(shù)控系統(tǒng)發(fā)出一個(gè)控制脈沖,x、y坐標(biāo)被積函數(shù)寄存器的內(nèi)容被送入積分累加器中累加一次,如果有溢出,則相應(yīng)坐標(biāo)軸方向產(chǎn)生一個(gè)溢出脈沖,經(jīng)伺服系統(tǒng)驅(qū)動(dòng)進(jìn)給機(jī)構(gòu)走過(guò)一個(gè)脈沖當(dāng)量;同時(shí)更新一次x或y被積函數(shù)寄存器的值(加1或減1)。
為方便地查看DDA圓弧軌跡插補(bǔ)的過(guò)程,在VC++中采用了單文檔結(jié)構(gòu)建立插補(bǔ)仿真軟件工程,插補(bǔ)過(guò)程的主要程序是在該工程視類的繪圖函數(shù)OnDraw()中實(shí)現(xiàn)的,其VC++程序的主要流程如圖3所示。
圖3 圓弧軌跡插補(bǔ)主要流程
程序流程中一些主要問(wèn)題說(shuō)明如下:
圓弧的起、終點(diǎn)及圓心坐標(biāo)等是通過(guò)一個(gè)對(duì)話框類采用編輯框控件變量由用戶輸入內(nèi)存的,為了便于這些變量在各函數(shù)間的使用,將它們?cè)O(shè)置成全局變量,在需要用到的函數(shù)中通過(guò)外部變量extern方式引入。
定義畫(huà)筆并將畫(huà)筆選入設(shè)備描述表中的目的是為軌跡插補(bǔ)繪圖準(zhǔn)備繪線工具。
比例因子的引入和計(jì)算插補(bǔ)步長(zhǎng)是為了實(shí)現(xiàn)插補(bǔ)圖形的實(shí)時(shí)縮放。其基本思路是:通過(guò)設(shè)置函數(shù)OnMouseWheel()來(lái)捕捉鼠標(biāo)滾輪的滾動(dòng)情況,滾輪每順或逆時(shí)針滾動(dòng)一次時(shí)比例因子被賦值為2或0.5,然后用該比例因子乘以圓弧的起、終點(diǎn)及圓心坐標(biāo)并把它們作為外部變量引入OnDraw()繪圖函數(shù),當(dāng)使用者滾動(dòng)鼠標(biāo)滾輪時(shí)實(shí)現(xiàn)圖形的自動(dòng)縮放;將已放大或縮小的圓弧坐標(biāo)值除以圓弧坐標(biāo)原值可得插補(bǔ)步長(zhǎng),這樣就可以使插補(bǔ)步長(zhǎng)匹配縮放之后的圖形。
為簡(jiǎn)化起見(jiàn),插補(bǔ)軌跡的VC++程序是按照?qǐng)A弧的圓心都在坐標(biāo)原點(diǎn)來(lái)編寫(xiě)的。因此,不論待插補(bǔ)的圓弧圓心是否在坐標(biāo)原點(diǎn),都通過(guò)坐標(biāo)變換的方法使圓心位于坐標(biāo)原點(diǎn)上。坐標(biāo)變換的具體方法是:將圓弧的起終點(diǎn)、圓心坐標(biāo)均減去圓心相應(yīng)方向坐標(biāo)。需要注意的是:每一步插補(bǔ)計(jì)算完畢后在窗口中繪制插補(bǔ)軌跡時(shí),需要將相應(yīng)方向的圓心坐標(biāo)加回來(lái),這樣才能顯示出插補(bǔ)軌跡的正確位置。
計(jì)算圓弧起、終點(diǎn)與坐標(biāo)軸夾角的正余旋值(sinαq、cosαq、sinαz、cosαz)是為了后續(xù)判斷圓弧起終點(diǎn)象限之用,因?yàn)椴煌笙薏逖a(bǔ)的方法有所差異。
插補(bǔ)變量的初始化主要包括:定義插補(bǔ)所需被積函數(shù)寄存器、積分累加器等變量,對(duì)被積函數(shù)寄存器變量賦初值和對(duì)積分累加器變量清零等。計(jì)算插補(bǔ)寄存器容量是為了判斷積分累加器在累加過(guò)程中是否有溢出,當(dāng)積分累加器中的值大于等于插補(bǔ)寄存器容量時(shí)會(huì)在某一坐標(biāo)方向上進(jìn)給一步。
圖3中主要列出的是DDA圓弧插補(bǔ)VC++程序的前期準(zhǔn)備部分,當(dāng)判斷是順圓或逆圓插補(bǔ)后才轉(zhuǎn)入具體的圓弧插補(bǔ)程序,其程序流程如圖4所示。
這里以逆圓,經(jīng)坐標(biāo)變換后的起點(diǎn)在第一象限、終點(diǎn)在第二象限的單步插補(bǔ)為例說(shuō)明程序編制方法,其VC++主要程序代碼如下:
DDA圓弧插補(bǔ)程序中的四點(diǎn)說(shuō)明:
1)上面只給出了逆圓第一象限為起點(diǎn),第二象限為終點(diǎn)的VC++程序,順圓插補(bǔ)和其它象限的情況類似處理。圖4中第n、n+1、n+2…象限的數(shù)量由圓弧起終點(diǎn)是否跨象限和跨象限的數(shù)量決定。
2)圓弧插補(bǔ)中跨象限問(wèn)題的處理是采用拆分圓弧的方法,程序中體現(xiàn)在作為for循環(huán)結(jié)束判據(jù)的x、y坐標(biāo)的變化上。當(dāng)跨象限時(shí),一個(gè)坐標(biāo)為0,另一個(gè)坐標(biāo)的絕對(duì)值為圓弧半徑。
3)在圖4的程序流程和上面的程序代碼中可以看到:不論x、y坐標(biāo)是否等于第n象限的終點(diǎn)坐標(biāo),不論累加是否有溢出均執(zhí)行了插補(bǔ)一步的“dc.LineTo((x+oyxx),(y+oyxy))”程序段。這是因?yàn)楫?dāng)x、y坐標(biāo)等于第n象限的終點(diǎn)坐標(biāo)或累加沒(méi)有溢出時(shí),插補(bǔ)這一步的起終點(diǎn)坐標(biāo)相同,不會(huì)有實(shí)際的畫(huà)筆移動(dòng),因此不會(huì)出現(xiàn)插補(bǔ)錯(cuò)誤。
4)上面給出的是單步插補(bǔ)軌跡顯示程序,對(duì)于連續(xù)插補(bǔ)的情況與上述程序基本相同,不同的是:去掉“if(i==mmm) break;”等語(yǔ)句。
當(dāng)圓弧起、終點(diǎn)和圓心坐標(biāo)(單位:象素)分別為(4,5)、(-12,-3)、(-2,-3)時(shí)的插補(bǔ)軌跡如圖5所示。為了明確插補(bǔ)過(guò)程,在插補(bǔ)軌跡的右邊還通過(guò)一個(gè)彈出式列表框顯示出了每一步的坐標(biāo)值和進(jìn)給方向等信息。
圖4 DDA圓弧插補(bǔ)流程
圖5 DDA圓弧插補(bǔ)實(shí)例
采用開(kāi)發(fā)的DDA圓弧插補(bǔ)軌跡仿真軟件可以方便地實(shí)現(xiàn)圓弧插補(bǔ)的單步或連續(xù)軌跡顯示,增強(qiáng)了插補(bǔ)的直觀性。同時(shí),VC++編程實(shí)現(xiàn)插補(bǔ)仿真的過(guò)程與數(shù)控系統(tǒng)實(shí)現(xiàn)插補(bǔ)的過(guò)程在原理、方法上有相通之處,這有利于更好地理解數(shù)控插補(bǔ)原理,對(duì)維護(hù)、開(kāi)發(fā)數(shù)控系統(tǒng)軟件也有一定的借鑒意義。
[1]鐘建琳,陳秀梅,馬振,等.教學(xué)用數(shù)控插補(bǔ)仿真系統(tǒng)[J].機(jī)械設(shè)計(jì)與制造,2003,(03):62-64.
[2]凡進(jìn)軍,劉讓賢,郭紫貴,等.基于VC++數(shù)控插補(bǔ)仿真的研究[J].機(jī)械工程師,2010,(5):88-90.
[3]侯運(yùn)鑫,張桂香,高玉龍等.基于C++ Builder的數(shù)控插補(bǔ)動(dòng)態(tài)仿真[J].山東理工大學(xué)學(xué)報(bào)(自然科學(xué)版),2009,23(03):51-54.
[4]龔仲華.數(shù)控技術(shù)[M].北京:機(jī)械工業(yè)出版社,2005:185-187.