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