技術(shù)支持小組 2003.09.23         &">

      技術(shù)頻道

      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 &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)載。

      主站蜘蛛池模板: 无码少妇一区二区| 好吊视频一区二区三区| 亚洲一本一道一区二区三区| 国产精品美女一区二区视频| 日韩爆乳一区二区无码| 亚洲av日韩综合一区久热 | 精品成人一区二区三区免费视频 | 国产成人一区二区三区电影网站| 色综合视频一区中文字幕| 国产伦理一区二区三区| 香蕉视频一区二区| 亚洲福利视频一区| 国产精品无码一区二区在线| 精品视频午夜一区二区| 亚洲一区二区三区香蕉| 91精品一区二区三区久久久久| 日韩精品人妻一区二区三区四区 | 在线日韩麻豆一区| 国产精品成人国产乱一区| 日本一区精品久久久久影院| 中文字幕乱码亚洲精品一区| 精品女同一区二区三区在线 | 国产日韩一区二区三区在线观看| 一区高清大胆人体| 日韩a无吗一区二区三区| 一区国严二区亚洲三区| 日韩精品无码中文字幕一区二区 | 波多野结衣中文字幕一区二区三区 | 成人免费视频一区二区| 91精品一区二区| 国产美女露脸口爆吞精一区二区 | 精品国产一区二区三区不卡| 视频一区视频二区制服丝袜 | 精品无码成人片一区二区98| 视频一区二区三区人妻系列| 日韩毛片基地一区二区三区| 久久国产香蕉一区精品| 无码一区二区三区免费视频| 日韩一区二区久久久久久| 国产在线精品观看一区| 99在线精品一区二区三区|