PCB鉆銑軟件的開發(fā)參考資料
技術(shù)支持小組 2003.09.23 (以下控制以DMC1000控制卡為例)
一、功能和工藝要求
1.對(duì)PCB電路徑鉆孔,精度小于0.01
2.能銑出電路板塊,精度小于0.1
3.支持鉆孔文件TXT,ROT,DRL,GBR
4.支持多刀具補(bǔ)償,多刀加工換刀操作
5.接受NC,CNC的平面坐標(biāo)數(shù)據(jù)
6.處理圖形加工的順序,及圖形加工方向
7.能簡(jiǎn)單編輯圖形,如選擇,旋轉(zhuǎn),平移,鏡像,復(fù)制,排列等。
8.加工控制能中斷,并可從中斷繼續(xù)加工,或指定加工
9.設(shè)定工作原點(diǎn),控制高速主軸馬達(dá),可手動(dòng)調(diào)試設(shè)備
二、系統(tǒng)流程
三、使用函數(shù)
手動(dòng)調(diào)試需要完成的功能:輸入輸出測(cè)試,手動(dòng)驅(qū)動(dòng)脈沖,檢測(cè)運(yùn)行狀態(tài),停止動(dòng)作,找機(jī)械原點(diǎn):
對(duì)應(yīng)的函數(shù)調(diào)為:
d1000_out_bit 數(shù)字輸出函數(shù),可以控制高速馬達(dá)的開啟或關(guān)閉
d1000_get_in_bit 讀輸入口狀態(tài)
d1000_start_tr_move 手動(dòng)發(fā)脈沖,可使用單軸點(diǎn)位運(yùn)行
d1000_check_done 檢測(cè)運(yùn)動(dòng)狀態(tài)函數(shù)
d1000_decel_stop 停止脈沖輸出(減速停較好)
d1000_home_move 單軸找原點(diǎn)函數(shù)
d1000_home_move_all 多軸找原點(diǎn)函數(shù)
d1000_board_init 控制卡初始化
d1000_board_close 控制卡釋放
位置顯示及清除需要的函數(shù):
d1000_get_abs_position 取得絕對(duì)位置
d1000_set_position 設(shè)定位置函數(shù),當(dāng)值為0時(shí)位置清除
加工控制需要的函數(shù):
d1000_start_ta_line2 兩軸插補(bǔ)函數(shù)
d1000_set_vector_profile 設(shè)定矢量插補(bǔ)速度
d1000_change_speed 速度改變速度
四、核心部分的編程
該控制部分編程相對(duì)于激光控制難度較大,其加工控制部分及斷點(diǎn),事件處理可參見激光編輯核心部分。此處介紹銑邊及鉆孔在加工控制編程當(dāng)中,需考慮的主要因素是刀具的參數(shù)及操作(如下刀,抬刀,換刀)。
其刀具需要一個(gè)數(shù)據(jù)結(jié)構(gòu)定義如下:
class Cknife
{
public:
Cknife();
~Cknife();
double fDR; //刀徑
double fDownSpeed; //下刀速度
double fUpSpeed; //抬刀速度
const static int MAXLAYLE=0x10; //支持最大的 下刀次數(shù)(16次)
int nDups; //需要下刀次數(shù)(此值不參大于MAXLAYLE
double fLayle[MAXLAYE];//每次下刀深度不一樣
int nLife; //壽命長(zhǎng)度
int nFinish; //完成多少次孔操作
BOOL bDiWei; //是否只用來作定位孔處理
COLORREF color; //顏色標(biāo)識(shí)
//…其它用戶自定義屬性
}
有了單一刀具的數(shù)據(jù),還需要一個(gè)刀具管理類:
class CProcessknife
{
public:
CProcessKnife()
~CProcessKnife()
int Drill_Hold( int nKnife, PARA ¶); //專用于單孔鉆處理
//此函數(shù),需要區(qū)別定位孔,處理多次鉆孔,不同抬刀高度(停止時(shí)抬刀高度與作業(yè)抬刀高度是不一樣的,此處編程有一小小技巧)
int Drill_Mark(int nKnife, BOOL bUpDown, PARA ¶ );//用于銑邊的下刀或抬刀處理,此函數(shù),只管下刀到位,然后抬刀即可,需要取消定位孔的影響
int ReplaceKnife( int nKnife, PARA ¶);//換刀函數(shù)
// 此函數(shù)需要完成,達(dá)到指定位置進(jìn)行換刀操作,需要考慮其操作被中斷的情況
CArray knifeArray; //建立一個(gè)動(dòng)態(tài)的刀具數(shù)組
Int m_nCurrKnife; //當(dāng)前被操作的刀具索引
Struct TAG_SPEEDSC
{
double fDR; //刀具
double fSC; //速度比
}
TAG_SPEED m_speedSC[20]; //建立一個(gè)速度比,最多20即可
Int ComplieSpeed( … ); //速度比計(jì)算函數(shù)
// … 其它用戶函數(shù),如增加刀具,刪除刀具,取指定刀具參數(shù),查找刀具
}
從純編程技術(shù)手段來處理,以上的CprocessKnife類,可以處理成這樣:
class CprocessKnife : public Carray
{//…用戶函數(shù)
};
如此以來,動(dòng)態(tài)數(shù)組所有特性功能CprocessKnife都具備,不必上述方法,要增加一個(gè)刀具對(duì)象需要如下函數(shù):
設(shè)有CprocessKnife 對(duì)象有proknife;
int Add( Cknife &knife ){
knifeArray.Add( knife );
return knifeArray.GetSize();
}
則調(diào)用為: proknife.Add( knife );
或者通過外部調(diào)來增加:
proknife.knifeArray.Add( knife );
需要使下新的方法,則無須寫Add函數(shù),如直接添加代碼如下:
proknife.Add( knife );
諸如此類,可以節(jié)省大量編寫代碼時(shí)間,而其它用戶定義函數(shù)照定義不誤。
如此以來,鉆孔或銑邊時(shí),編程基本思路如下:
鉆孔為例:
void Chold::OnMark( PARA ¶ ){
proknife.Replace( holdKnife, para ); //先處理是否要換刀
int step(0); //為了說明問題,使用步進(jìn)式編程較易明白
while( m_nWorkStatus == RUNNING && step < 2){
doEvent()
switch( step ){
case 0:
if( ismove() ) break;
fast_moveto( X, Y ); //快速移到孔的XY位置
step ++;
case 1:
if( ismove() ) break;
m_nWorkStatus = proknife.Drill_Hold( holdKnife, para ); //作一次鉆孔操作
step ++;
break;
}
//其它處理
銑邊處理為(以多邊形圖形為例):
void PolyLine::OnMark( PARA ¶ )
{
const int nSize = runData.GetSize();
for( int I(0); I
{
if( I == 0 || bBreak ){// 第一點(diǎn),或有斷點(diǎn)時(shí)(當(dāng)中恐刀具有變動(dòng))
bBreak ?
moveto( break.x, break.y):
moveto( runData[I].x, runData[I].y );
while( ismove() ) ::doevent();
m_nWorkStatus = proknife.ReplaceKnife(polyKinife, para );//換刀
if( m_nWorkStatus != RUNNING ) break;
proknife.Drill_Mark( polyKnife, TRUE , para );//只下刀
continue;
}
conline(rundata[I].x, rundata[I].y,runSpeed); //加工路徑
//…其它處理
}// end for i
proknife.Drill_Mark( polyKnife, FALSE, para ); //只抬刀
}// end on mark function
五、注意事項(xiàng)
其注意事項(xiàng),部分可參見激光的參考資料,在此列出鉆孔銑邊細(xì)節(jié)上的注意事項(xiàng):
1.鉆孔,需要支持鉆槽鉆圓操作
2.當(dāng)鉆的孔徑較大,需要銑出來時(shí),則要有鉆孔轉(zhuǎn)成銑邊處理
3.鉆孔與銑邊都需要定位孔操作,需要提供其相應(yīng)的處理方案
4.鉆孔的路徑,需要有優(yōu)化處理,通常文件輸出圖形已有優(yōu)化
5.銑邊的圖形,需要考慮如何根據(jù)不同的刀徑作補(bǔ)償處理
6.銑邊時(shí),需要考慮內(nèi)補(bǔ)償,外補(bǔ)償,無補(bǔ)償?shù)奶幚?
7.銑邊時(shí),需要考慮單元圖形排列時(shí),其加工的開始點(diǎn)可選擇處理
8.Z軸的參數(shù)需要完善的管理(工面位置,工作高度,板材厚度等其它)
文章版權(quán)歸西部工控xbgk所有,未經(jīng)許可不得轉(zhuǎn)載。