|

技術支持小組 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軸的參數需要完善的管理(工面位置,工作高度,板材厚度等其它)
|