趙萬軍,鄧正華
ZHAO Wan-jun, DENG Zheng-hua
(重慶三峽學院 機械工程學院,萬州 404000)
數控插補軌跡仿真研究的目的是提高對插補算法、數控原理、數控系統軟件的認識和理解,為從事數控系統維護及數控系統開發奠定基礎。因此,數控插補軌跡仿真的研究方法與思路不論是對于高校學生學習數控技術課程,還是對準備進行數控系統軟件開發的工程技術人員而言都具有積極意義。目前,也有學者進行了這方面的研究工作[1~3],但他們的研究主要是以直線插補為主,由于圓弧插補存在過象限問題,相較直線插補而言要復雜許多,因此上述研究文獻甚少涉及圓弧插補,即使有所提及也語焉不詳。有鑒于此,本文以VC++為工具,以數字積分插補法(DDA法)為例來討論圓弧插補軌跡仿真的實現過程。
DDA法即數字積分法,它利用數字積分思想確定刀具沿各坐標軸的位移,使刀具沿著所加工的曲線進給。如圖1所示的第一象限逆時針圓弧AB為例說明DDA圓弧插補原理。

圖1 DDA圓弧插補
圖1所示圓弧以原點為圓心,圓的方程為:

將(1)式兩邊對時間t求導,可得動點P沿兩個坐標軸的速度分量:

由(2)式可得坐標軸方向的微小位移增量:

據(3)式可寫出第一象限逆圓加工時DDA插補表達式:

式中:Δt為插補周期,可取單位時間間隔1;n為插補次數。

圖2 DDA第一象限逆圓插補原理圖
由此,可得DDA圓弧插補的原理如圖2所示。DDA圓弧插補的基本原理可描述為:每經過一個插補周期,數控系統發出一個控制脈沖,x、y坐標被積函數寄存器的內容被送入積分累加器中累加一次,如果有溢出,則相應坐標軸方向產生一個溢出脈沖,經伺服系統驅動進給機構走過一個脈沖當量;同時更新一次x或y被積函數寄存器的值(加1或減1)。
為方便地查看DDA圓弧軌跡插補的過程,在VC++中采用了單文檔結構建立插補仿真軟件工程,插補過程的主要程序是在該工程視類的繪圖函數OnDraw()中實現的,其VC++程序的主要流程如圖3所示。

圖3 圓弧軌跡插補主要流程
程序流程中一些主要問題說明如下:
圓弧的起、終點及圓心坐標等是通過一個對話框類采用編輯框控件變量由用戶輸入內存的,為了便于這些變量在各函數間的使用,將它們設置成全局變量,在需要用到的函數中通過外部變量extern方式引入。
定義畫筆并將畫筆選入設備描述表中的目的是為軌跡插補繪圖準備繪線工具。
比例因子的引入和計算插補步長是為了實現插補圖形的實時縮放。其基本思路是:通過設置函數OnMouseWheel()來捕捉鼠標滾輪的滾動情況,滾輪每順或逆時針滾動一次時比例因子被賦值為2或0.5,然后用該比例因子乘以圓弧的起、終點及圓心坐標并把它們作為外部變量引入OnDraw()繪圖函數,當使用者滾動鼠標滾輪時實現圖形的自動縮放;將已放大或縮小的圓弧坐標值除以圓弧坐標原值可得插補步長,這樣就可以使插補步長匹配縮放之后的圖形。
為簡化起見,插補軌跡的VC++程序是按照圓弧的圓心都在坐標原點來編寫的。因此,不論待插補的圓弧圓心是否在坐標原點,都通過坐標變換的方法使圓心位于坐標原點上。坐標變換的具體方法是:將圓弧的起終點、圓心坐標均減去圓心相應方向坐標。需要注意的是:每一步插補計算完畢后在窗口中繪制插補軌跡時,需要將相應方向的圓心坐標加回來,這樣才能顯示出插補軌跡的正確位置。
計算圓弧起、終點與坐標軸夾角的正余旋值(sinαq、cosαq、sinαz、cosαz)是為了后續判斷圓弧起終點象限之用,因為不同象限插補的方法有所差異。
插補變量的初始化主要包括:定義插補所需被積函數寄存器、積分累加器等變量,對被積函數寄存器變量賦初值和對積分累加器變量清零等。計算插補寄存器容量是為了判斷積分累加器在累加過程中是否有溢出,當積分累加器中的值大于等于插補寄存器容量時會在某一坐標方向上進給一步。
圖3中主要列出的是DDA圓弧插補VC++程序的前期準備部分,當判斷是順圓或逆圓插補后才轉入具體的圓弧插補程序,其程序流程如圖4所示。
這里以逆圓,經坐標變換后的起點在第一象限、終點在第二象限的單步插補為例說明程序編制方法,其VC++主要程序代碼如下:


DDA圓弧插補程序中的四點說明:
1)上面只給出了逆圓第一象限為起點,第二象限為終點的VC++程序,順圓插補和其它象限的情況類似處理。圖4中第n、n+1、n+2…象限的數量由圓弧起終點是否跨象限和跨象限的數量決定。
2)圓弧插補中跨象限問題的處理是采用拆分圓弧的方法,程序中體現在作為for循環結束判據的x、y坐標的變化上。當跨象限時,一個坐標為0,另一個坐標的絕對值為圓弧半徑。
3)在圖4的程序流程和上面的程序代碼中可以看到:不論x、y坐標是否等于第n象限的終點坐標,不論累加是否有溢出均執行了插補一步的“dc.LineTo((x+oyxx),(y+oyxy))”程序段。這是因為當x、y坐標等于第n象限的終點坐標或累加沒有溢出時,插補這一步的起終點坐標相同,不會有實際的畫筆移動,因此不會出現插補錯誤。
4)上面給出的是單步插補軌跡顯示程序,對于連續插補的情況與上述程序基本相同,不同的是:去掉“if(i==mmm) break;”等語句。
當圓弧起、終點和圓心坐標(單位:象素)分別為(4,5)、(-12,-3)、(-2,-3)時的插補軌跡如圖5所示。為了明確插補過程,在插補軌跡的右邊還通過一個彈出式列表框顯示出了每一步的坐標值和進給方向等信息。

圖4 DDA圓弧插補流程

圖5 DDA圓弧插補實例
采用開發的DDA圓弧插補軌跡仿真軟件可以方便地實現圓弧插補的單步或連續軌跡顯示,增強了插補的直觀性。同時,VC++編程實現插補仿真的過程與數控系統實現插補的過程在原理、方法上有相通之處,這有利于更好地理解數控插補原理,對維護、開發數控系統軟件也有一定的借鑒意義。
[1]鐘建琳,陳秀梅,馬振,等.教學用數控插補仿真系統[J].機械設計與制造,2003,(03):62-64.
[2]凡進軍,劉讓賢,郭紫貴,等.基于VC++數控插補仿真的研究[J].機械工程師,2010,(5):88-90.
[3]侯運鑫,張桂香,高玉龍等.基于C++ Builder的數控插補動態仿真[J].山東理工大學學報(自然科學版),2009,23(03):51-54.
[4]龔仲華.數控技術[M].北京:機械工業出版社,2005:185-187.