王 選,趙慶志
(山東理工大學(xué) 機械工程學(xué)院,淄博 255049)
數(shù)控機床加工各種形狀的零件輪廓時,必須控制刀具相對于工件以給定的速度沿指定的路徑運動,這一功能稱為插補。絕大多數(shù)機床數(shù)控系統(tǒng)都具有平面直線和圓弧插補功能,很少具有三維空間插補功能。但在實際生產(chǎn)中,特別是在銑床、鏜床等三坐標(biāo)機床的加工中,經(jīng)常要求加工空間圖形,特別是空間直線,所以經(jīng)濟型數(shù)控機床的插補系統(tǒng)應(yīng)具有空間直線插補等功能。
傳統(tǒng)的逐點比較空間直線插補包括偏差判別、坐標(biāo)進給、新點偏差計算和終點判別4個步驟,該算法在坐標(biāo)進給時不考慮進給后插補誤差的大小而直接決定進給坐標(biāo),致使插補誤差比較大[1~4]。在前人研究的基礎(chǔ)上,引進基礎(chǔ)坐標(biāo)[5]的概念,提出了一種基于基礎(chǔ)坐標(biāo)的逐點比較空間直線插補算法,以實現(xiàn)機床X、Y、Z三軸聯(lián)動功能且有效地提高了空間直線插補速度與精度。
在三維空間中,第一象限劃分為三個區(qū)域的方法[6]如下:利用過原點O的平面AOE,BOE,COE將第一象限空間為三個正四錐型的區(qū)域,即X≥Y、X≥Z區(qū)域1,Y>X、Y≥Z區(qū)域2,Z>X、Z>Y區(qū)域3,如圖1所示。這三個平面中AOE垂直平面XOY并且與X軸、Y軸的夾角為45°,BOE垂直平面YOZ并且與Y軸、Z軸的夾角為45°,COE垂直平面XOZ并且與X軸、Z軸的夾角為45°。其他每個象限劃分區(qū)域方法同第一象限相同,三維空間總共分割為24個區(qū)域。
圖1 第一象限劃分為三個區(qū)域
如圖2(a)所示,設(shè)要加工區(qū)域1以O(shè)(0,0,0)為原點,以E(Xe,Ye,Ze)為終點的OE空間直線段,Xe≥Ye,Xe≥Ze,且Xe,Ye,Ze均為正值,X坐標(biāo)為基礎(chǔ)坐標(biāo)。
通過文獻[7]得知,每次單獨進給X坐標(biāo)、Y坐標(biāo)或Z坐標(biāo)叫做基礎(chǔ)坐標(biāo)進給,同時進給兩個坐標(biāo)或三個坐標(biāo)及以上叫做聯(lián)合坐標(biāo)進給。圖2(b)中的直線為OE在XOY坐標(biāo)平面內(nèi)的投影,當(dāng)基礎(chǔ)坐標(biāo)+X進給時,得出新偏差值為:
圖2 三維空間坐標(biāo)系
當(dāng)聯(lián)合坐標(biāo)+X、+Y進給時,得出新偏差值為:
空間直線OE在XOZ坐標(biāo)平面內(nèi)投影如圖2(c)所示,同樣當(dāng)基礎(chǔ)坐標(biāo)+X進給時,得出新偏差值為:
當(dāng)聯(lián)合坐標(biāo)+X、+Z進給時,得出新偏差值為:
有了上述4個平面偏差計算公式,現(xiàn)在關(guān)鍵是如何將其運用到空間直線的偏差判別和計算,以決定下一步進給的走向。下面規(guī)定:
1)若|Fy|>|Fxy|,|Fz|>|Fxz|,則沿X軸、Y軸和Z軸方向進給脈沖,令Fxy值賦給Fv,F(xiàn)xz值賦給Fz;
2)若|Fy|>|Fxy|,|Fz|≤|Fxz|,則沿X軸和Y軸方向進給脈沖,令Fxy值賦給Fy,F(xiàn)z值賦給Fxz;
3)若|Fy|≤|Fxy|,|Fz|>|Fxz,則沿X軸和Z軸方向進給脈沖,令Fy值賦給Fxy,F(xiàn)xy的值賦給Fz;
4)若|Fy|≤|Fxy|,|Fz|≤|Fxz|,則沿X軸方向進給脈沖,令Fy值賦給Fxy,F(xiàn)z值賦給Fxz。
以上規(guī)定適用于xe≥ye且xe≥ze區(qū)域,三維空間插補偏差判別與計算如表1所示。
空間直線插補程序設(shè)計的基本思想是:程序開始時,根據(jù)向量的坐標(biāo)運算法[8]判斷空間直線所在的象限,然后根據(jù)基礎(chǔ)坐標(biāo)判別進入各自的區(qū)域進行插補運算,最后進行判終處理及返回到相應(yīng)的象限??臻g直線插補程序中直線所在象限判別與基礎(chǔ)坐標(biāo)判別方法比較簡單。下面對空間直線插補過程[9]進行詳細介紹,以第一象限區(qū)域1為例,X為基礎(chǔ)坐標(biāo),初始插補偏差均為0。插補流程圖如圖3所示,其他區(qū)域與此相似。
圖3 區(qū)域1插補流程
VC++6.0軟件采用面向?qū)ο蟮臋C理設(shè)計程序,適用于開發(fā)各類應(yīng)用系統(tǒng)。現(xiàn)在以VC++6.0軟件為程序開發(fā)平臺,對空間直線插補進行仿真[10]。
界面設(shè)計如圖4所示。繪圖區(qū)域尺寸為300×300,操作者可以在編輯框中設(shè)置直線坐標(biāo)和步長的任意大小,單擊繪制空間直線等按鈕可實現(xiàn)相應(yīng)功能。
圖4 界面設(shè)計
VC++6.0軟件設(shè)計程序需要大量映射函數(shù),下面介紹實現(xiàn)各功能的函數(shù)。
void CBaseLineDlg::OnBtnDrawzuobiao(),該函數(shù)實現(xiàn)繪制空間坐標(biāo)系功能。
void CBaseLineDlg::OnBtnDrawline(),該函數(shù)實現(xiàn)繪制空間直線功能。因為空間直線有X、Y、Z三個坐標(biāo)值,但是該空間直線在VC++中要以二維平面的形式繪制出來,所以設(shè)計編寫程序時運用到正等軸側(cè)變換矩陣T=[0.7071,0,-0.4082,0;-0.7071,0,-0.4082,0;0,0,0.8165,0;0,0,0,1]。插補過程程序也運用正等軸測變換矩陣,下文不再詳述。
void CBaseLineDlg::OnBtnClear(),該函數(shù)實現(xiàn)清屏功能。
void CBaseLineDlg::OnBtnClose(),該函數(shù)實現(xiàn)退出功能。
void CBaseLineDlg::OnBtnChabuline()
{ UpdateData();
if(m_originx==m_endx && m_originy==m_endy
&& m_originz==m_endz)
AfxMessageBox(“請輸入坐標(biāo)不同的兩點!”);
if(m_step==0)
AfxMessageBox(“請輸入插補步長!”);
//判斷空間直線所在象限
chax=m_endx-m_originx;
chay=m_endy-m_originy;
chaz=m_endz-m_originz;
if(chax>=0)
{ if(chay>=0)
{if(chaz>=0) Chabu1();
else Chabu5();}
else
{if(chaz>=0) Chabu2();
Else Chabu6();}}
else
{if(chay>=0)
{if(chaz>=0) Chabu4();
else Chabu8();}
else
{if(chaz>=0) Chabu3();
else Chabu7();}}}
該函數(shù)實現(xiàn)判別空間直線所在象限的功能,插補過程功能需調(diào)用Chabu1()等函數(shù)。
void CBaseLineDlg::Chabu1()
{//定義插補過程中變量
float drawx,drawy;
float Fx,Fy,Fz,Fxy,Fxz,Fyx,Fyz,Fzx,Fzy;
int Nx,Ny,Nz;
//運用正等軸側(cè)變換矩陣求得X、Y繪制坐標(biāo)
drawx=7.071*m_originx-7.071*m_originy;
drawy=-4.082*m_originx-4.082*m_originy
+8.165*m_originz;
pDC->MoveTo(drawx,drawy);
//第一象限X坐標(biāo)為基礎(chǔ)坐標(biāo)
if(abs(chax)>=abs(chay) &&
abs(chax)>=abs(chaz))
{ Fy=0;Fz=0;Fxy=0;Fxz=0;Nx=abs(chax);
while(Nx>=m_step)
{Fy=Fy-abs(chay)*m_step;
Fz=Fz-abs(chaz)*m_step;
Fxy=Fxy-(abs(chay)-abs(chax))*m_step;
Fxz=Fxz-(abs(chaz)-abs(chax))*m_step;
if(abs(Fxy)<=abs(Fy) && abs(Fxz)<=abs(Fz))
{ Fy=Fxy; Fz=Fxz;
m_originx=m_originx+m_step;
m_originy=m_originy+m_step;
m_originz=m_originz+m_step;}
else if(abs(Fxy)<=abs(Fy) &&abs(Fxz)>abs(Fz))
{ Fy=Fxy;Fxz=Fz;
m_originx=m_originx+m_step;
m_originy=m_originy+m_step;}
else if(abs(Fxy)>abs(Fy) &&abs(Fxz)>abs(Fz))
{ Fxy=Fy;Fxz=Fz;
m_originx=m_originx+m_step;}
else
{ Fxy=Fy;Fz=Fxz;
m_originx=m_originx+m_step;
m_originz=m_originz+m_step; }
drawx=7.071*m_originx-7.071*m_originy;
drawy=-4.082*m_originx-4.082*m_originy
+8.165*m_originz;
pDC->LineTo(drawx,drawy);
Nx=Nx-m_step;Sleep(100);}
//第一象限Y坐標(biāo)為基礎(chǔ)坐標(biāo)和第一象限Z坐標(biāo)為//基礎(chǔ)坐標(biāo)插補程序省略}
現(xiàn)加工區(qū)域1內(nèi)以坐標(biāo)原點O(0,0,0),E(6,5,3)為終點的空間直線段OE。利用改進后的插補算法進行插補計算如表2所示。
表2 空間直線插補過程
通過上述實例數(shù)據(jù)可以看出:優(yōu)化后的逐點比較法空間直線插補的總步長插補次數(shù)為6,大大提高了插補速度;優(yōu)化后的逐點比較法空間直線插補的最大偏差|F|=3,有效地提高了插補精度。
為了驗證上述算法的正確性,利用VC++6.0軟件編寫插補程序源代碼,模擬仿真空間直線插補過程,以實現(xiàn)空間直線插補功能如圖5所示。
圖5 插補實例仿真
基于基礎(chǔ)坐標(biāo)概念的逐點比較空間直線插補方法運用了新的插補公式,插補思路更加清晰,插補信息清晰明了;該方法中避免了有關(guān)文獻所述方法中涉及的導(dǎo)數(shù)計算、有可能出現(xiàn)斜率無窮大、計算麻煩等缺點;空間直線的插補步數(shù)等于其基礎(chǔ)坐標(biāo)的絕對值,終點判別一目了然且提高了插補速度;插補過程中的最大偏差大大減小了,有效地提高了逐點比較空間直線插補精度。該算法可以實現(xiàn)串聯(lián)機床三軸聯(lián)動、六軸并聯(lián)機床六軸聯(lián)動功能,進一步提高了數(shù)控系統(tǒng)的插補速度,有效地提高了逐點比較空間直線插補精度和刀具半徑補償精度。
[1] 席港港,趙慶志,王軍,田曉文.傳統(tǒng)逐點比較法直線插補方法的改進[J].山東理工大學(xué)學(xué)報,2012,(1):67-69.
[2] 李占斌,萬長慶.實現(xiàn)數(shù)控機床三軸聯(lián)動的逐點比較法[J].機床與液壓,2004,(7):64-65,22.
[3] 高有行.對逐點比較法的改進算法[J].西安電子科技大學(xué)學(xué)報,1998,25(3):299-303.
[4] 范希營,郭永環(huán).提高數(shù)控系統(tǒng)基準(zhǔn)脈沖直線插補速度及精度的研究[J].制造技術(shù)與機床,2010,(3):89-91.
[5] 王敏.差分插補方法及其在數(shù)控線切割機中的應(yīng)用(一)[J].電加工與模具,1981,(4):16-22.
[6] 趙慶志,席港港.基于基礎(chǔ)坐標(biāo)概念的逐點比較法圓弧插補原理及其應(yīng)用[J].制造業(yè)自動化,2012,34(21):69-71,84.
[7] 逄啟壽,馮羽生.基于C語言的數(shù)控直線逐點比較法的程序?qū)崿F(xiàn)[J].制造業(yè)自動化,2009,31(6):54-56.
[8] 聶建成,吳竹溪,肖潔,吳鐵軍.基于直線插補的進給方向判斷新算法[J].組合機床與自動化加工技術(shù),2009,(10):12-14.
[9] 葉秀云,朱文,田剛.一種簡捷的快速直線插補新算法[J].組合機床與自動化加工技術(shù),2005,(7):28-30.
[10] 楊代華,陳志輝.基于實時操作系統(tǒng)μC/OS—II的數(shù)控系統(tǒng)研制[J].制造技術(shù)與機床,2007,(12):20-23.