技術支持小組 2003.09.23         &">

      技術頻道

      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 &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所有,未經許可不得轉載。

      主站蜘蛛池模板: 亚洲va乱码一区二区三区| 国产在线视频一区| 国产成人精品一区二区三在线观看| 国产精品亚洲综合一区在线观看 | 无码人妻精品一区二区三区9厂| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 国内自拍视频一区二区三区| 一区二区无码免费视频网站| 亚洲AV无码国产一区二区三区| 亚洲综合av一区二区三区| 无码毛片视频一区二区本码| 久久久老熟女一区二区三区| 亚洲一区二区三区免费观看| 国产精品一区二区av| 亚洲愉拍一区二区三区| 中文字幕精品一区二区日本| 色噜噜狠狠一区二区三区| 色狠狠AV一区二区三区| 亚洲熟女少妇一区二区| 黑人大战亚洲人精品一区| 亚欧成人中文字幕一区| 国偷自产一区二区免费视频| 午夜无码视频一区二区三区| 亚洲一区二区三区影院 | 国产一区二区三区不卡AV| 久久久久人妻精品一区三寸蜜桃 | 亚洲AV日韩综合一区尤物| 激情内射亚洲一区二区三区爱妻| 亚洲一区在线观看视频| 国产欧美一区二区精品仙草咪| 麻豆精品人妻一区二区三区蜜桃| 无码日本电影一区二区网站 | 国产日韩一区二区三免费高清| 成人区人妻精品一区二区不卡视频| 成人区人妻精品一区二区不卡视频| 一区二区三区电影在线观看| 国产成人精品无码一区二区三区| 国产精品高清一区二区三区| 精品国产一区二区三区麻豆| 无码人妻aⅴ一区二区三区| 四虎一区二区成人免费影院网址|