技術(shù)頻道

娓娓工業(yè)
您現(xiàn)在的位置: 中國(guó)傳動(dòng)網(wǎng) > 技術(shù)頻道 > 技術(shù)百科 > 運(yùn)動(dòng)控制卡應(yīng)用開(kāi)發(fā)教程之激光振鏡控制

運(yùn)動(dòng)控制卡應(yīng)用開(kāi)發(fā)教程之激光振鏡控制

時(shí)間:2020-12-17 17:37:26來(lái)源:正運(yùn)動(dòng)技術(shù)

導(dǎo)語(yǔ):?今天,正運(yùn)動(dòng)技術(shù)為大家分享一下應(yīng)用C++開(kāi)發(fā)一個(gè)激光振鏡的運(yùn)動(dòng)控制例程。我們主要從新建MFC項(xiàng)目,添加函數(shù)庫(kù)講起,最后通過(guò)項(xiàng)目實(shí)戰(zhàn)——激光振鏡打標(biāo)例程講解,來(lái)讓大家熟悉它的項(xiàng)目開(kāi)發(fā)。在正式學(xué)習(xí)之前,我們先了解一下正運(yùn)動(dòng)技術(shù)的運(yùn)動(dòng)控制器ZMC420SCAN。這款產(chǎn)品是20軸運(yùn)動(dòng)控制器。

  今天,正運(yùn)動(dòng)技術(shù)為大家分享一下應(yīng)用C++開(kāi)發(fā)一個(gè)激光振鏡的運(yùn)動(dòng)控制例程。

  我們主要從新建MFC項(xiàng)目,添加函數(shù)庫(kù)講起,最后通過(guò)項(xiàng)目實(shí)戰(zhàn)——激光振鏡打標(biāo)例程講解,來(lái)讓大家熟悉它的項(xiàng)目開(kāi)發(fā)。

  在正式學(xué)習(xí)之前,我們先了解一下正運(yùn)動(dòng)技術(shù)的運(yùn)動(dòng)控制器ZMC420SCAN。這款產(chǎn)品是20軸運(yùn)動(dòng)控制器。

  ZMC420SCAN 總線控制器支持 ECAT/RTEX 總線連接,支持多達(dá)20軸運(yùn)動(dòng)控制,支持直線插補(bǔ)、任意圓弧插補(bǔ)、空間圓弧、螺旋插補(bǔ)、電子凸輪、電子齒輪、同步跟隨、虛擬軸設(shè)置等;采用優(yōu)化的網(wǎng)絡(luò)通訊協(xié)議可以實(shí)現(xiàn)實(shí)時(shí)的運(yùn)動(dòng)控制。

  ZMC420SCAN 總線控制器支持脈沖軸/總線軸/振鏡軸混合插補(bǔ)。

  ZMC420SCAN 支持10路脈沖輸出與編碼器反饋且支持4路振鏡軸,板載24點(diǎn)輸入,12點(diǎn)輸出,2AD,2DA,所有輸出口都支持高速PWM控制。

  接線方式如下圖1所示:

  

  圖片1.png

  

  圖1

  ZMC420SCAN使用一套API函數(shù),支持C、C++、C#、LabVIEW、Python、Delphi等開(kāi)發(fā)語(yǔ)言,支持VC6.0、VB6.0、Qt、.Net等平臺(tái),支持Windows、Linux、WinCE、iMac等操作系統(tǒng)。

  

  1608098425130178.jpg

  

  圖2

  

  圖片2.png

  

  ZMC420SCAN 的PWM 輸出受正常輸出功能的控制,輸出口“ON”狀態(tài)下才能進(jìn)行PWM輸出,便于控制激光能量。

  ZMC420SCAN 的輸出0-7的具有精準(zhǔn)輸出的功能,每個(gè)輸出的精準(zhǔn)輸出功能相互獨(dú)立,通過(guò)MOVEOP_DELAY 與AXIS_ZSET ,來(lái)設(shè)置每個(gè)MOVE_OP 指令是否使用精準(zhǔn)輸出以及精準(zhǔn)輸出的延時(shí),從而實(shí)現(xiàn)激光的PSO 控制。

  ZMC420SCAN 的輸出0-7支持精準(zhǔn)輸出且相互獨(dú)立,通過(guò)指令:MOVE_OP,AXIS_ZSET,MOVEOP_DELAY來(lái)分別控制激光的開(kāi)關(guān),精準(zhǔn)輸出開(kāi)關(guān)及延時(shí),從而實(shí)現(xiàn)激光PSO控制。

  振鏡軸:

  

  圖片3.png

  

  ZMC420SCAN支持XY2-100振鏡協(xié)議,支持運(yùn)動(dòng)控制與振鏡聯(lián)合插補(bǔ)運(yùn)動(dòng)。

  上位機(jī)通過(guò)網(wǎng)口與控制器相連,獲取對(duì)應(yīng)控制器的句柄,通過(guò)XY2-100協(xié)議控制振鏡軸,通過(guò)總線協(xié)議或者脈沖模式控制伺服或步進(jìn)軸。

  

  圖片4.png

  圖片5.png

  

  本地軸號(hào)4/5可以ATYPE=21 配置為第1個(gè)振鏡, 本地軸號(hào)6/7可以ATYPE=21 配置為第2個(gè)振鏡,可通過(guò) AXIS_ADDRESS 配置軸號(hào)。

    以下是激光振鏡
        控制開(kāi)發(fā)流程

     一 新建MFC項(xiàng)目 添加函數(shù)庫(kù)

  1.在VS2017菜單“文件”→“新建”→“項(xiàng)目”,啟動(dòng)創(chuàng)建項(xiàng)目向?qū)А?/p>

  

  圖片6.png

  

  2.選擇開(kāi)發(fā)語(yǔ)言為“Visual C++”和程序類型“MFC/ATL”中的“MFC應(yīng)用程序”。

  

  1608098593727546.png

  

  3.選擇類型為“基于對(duì)話框”,下一步或者完成。下一步則往后繼續(xù)配置,完成就直接完成即可。把類型選好,其他的可以在項(xiàng)目中編輯。

  

  1608098618489736.png

  

  4.找到廠家提供的光盤資料,路徑如下(64位庫(kù)為例):

  A.進(jìn)入光盤資料找到PC函數(shù)文件夾。

  B.選擇函數(shù)庫(kù)2.1。

  C.Windows平臺(tái)。

  

  1608098639283917.png

  

  D.根據(jù)需要選擇對(duì)應(yīng)的函數(shù)庫(kù)這里選擇64位庫(kù)。

  E.解壓C++的壓縮包,里面有C++對(duì)應(yīng)的函數(shù)庫(kù)。

  

  1608098656703033.png

  

  F.函數(shù)庫(kù)具體路徑如下。

  

  圖片14.png

  

  5.將廠商提供的C++的庫(kù)文件和相關(guān)頭文件復(fù)制到新建的項(xiàng)目里面。

  

  1608098694654893.png

  

  6.在項(xiàng)目中添加靜態(tài)庫(kù)和相關(guān)頭文件。

  靜態(tài)庫(kù):zauxdll.lib, zmotion.lib

  相關(guān)頭文件:zauxdll2.h, zmotion.h

  A.先右擊頭文件,接著依次選擇:“添加”→“現(xiàn)有項(xiàng)”。

  

  圖片16.png

  

  B.在彈出的窗口中依次添加靜態(tài)庫(kù)和相關(guān)頭文件。

  

  1608098729792842.png

  

  7.聲明用到的頭文件和定義控制器連接句柄。

  

  圖片18.png

  

  至此項(xiàng)目新建完成。

     二 查看PC函數(shù)手冊(cè) 了解其用法

  1.PC函數(shù)手冊(cè)也在光盤資料里面,具體路徑如下:

  

  1608098772543921.png

  

  2.PC編程,一般先根據(jù)控制器連接方式選擇對(duì)應(yīng)的連接函數(shù)連接控制器,返回控制器句柄。接著用返回的控制器句柄,實(shí)現(xiàn)對(duì)控制器的控制。

  3.比如通過(guò)網(wǎng)口連接控制器,先使用ZAux_OpenEth()鏈接控制器,獲取控制器句柄handle。

  

  圖片20.png

  1608098810856477.png

  4.通過(guò)獲取到的控制器句柄handle,對(duì)控制器進(jìn)行激光振鏡軸類型的設(shè)置。

  

  圖片22.png

  

  第三個(gè)參數(shù)的值有以下的模式選擇,使用振鏡軸需選擇軸類型為21的模式,設(shè)置軸為振鏡軸類型,振鏡軸類型系統(tǒng)周期與刷新周期都要比普通軸快很多。

  

  圖片23.png

  

  5.通過(guò)獲取到的控制器句柄handle,控制控制器的振鏡軸進(jìn)行多軸運(yùn)動(dòng)控制,可以進(jìn)行搭配振鏡軸與普通軸進(jìn)行混合插補(bǔ)運(yùn)動(dòng)。

  

  圖片24.png

  

    三 項(xiàng)目實(shí)操之激光振鏡打標(biāo)例程

  1.例程以建立板卡的連接,并設(shè)置振鏡軸的拐角減速以及速度參數(shù),對(duì)內(nèi)部進(jìn)行設(shè)置的運(yùn)動(dòng)軌跡進(jìn)行處理完成對(duì)圓形的打標(biāo)。

  

  圖片25.png

  

  2.例程簡(jiǎn)易流程圖。

  

  圖片26.png

  

  3.通過(guò)網(wǎng)口連接控制器,獲取控制器連接句柄。

  //ip連接

  void CMarkDemoDlg::OnBnClickedButton2()

  {

      // TODO:             在此添加控件通知處理程序代碼

      char     buffer[256];

      char     item[256] = {0};

      float     ftemp = 0.0;

      char     atemp[256] = {0};         //存放控制器型號(hào)

      uint32     uitemp = 0;

      int32 iresult;

      if(NULL != g_handle)

      {

          ZMC_Close(g_handle);

          g_handle = NULL;

      }

          GetDlgItemText(IDC_IP_COMBO,buffer,255);         //獲取當(dāng)前框內(nèi)的IP地址

          buffer[255] = '\0';

          iresult = ZMC_OpenEth(buffer, &g_handle);         //獲取與控制器建立連接的結(jié)果

          if(ERR_SUCCESS != iresult)

      {

          g_handle = NULL;

          MessageBox(_T("Connect Failed"));

          SetWindowText(_T("ZControlTest-Connect Failed"));

          return;

      }

      SetWindowText("succse");

      //

      CComboBox *m_pEthList;

      m_pEthList = (CComboBox *)GetDlgItem(IDC_IP_COMBO);    //獲取ip地址

      if(NULL == m_pEthList)

      {

          return;

      }

      //

      if(CB_ERR != m_pEthList->FindString(0, buffer))

      {

          return;

      }

      //加入

      m_pEthList->AddString(buffer);     //將ip地址加入框內(nèi)

  }

  4.通過(guò)串口連接控制器,獲取控制器連接句柄。

  void CMarkDemoDlg::OnBnClickedButton4()

  {

      // TODO:         在此添加控件通知處理程序代碼

      int32 iresult;

      uint8 icomid;

      float ftemp = 0.0;

      char atemp[256] = {0};         //存放控制器型號(hào)

      uint32 uitemp = 0;

      int m_icombaud;

      if(NULL != g_handle)

      {

          ZMC_Close(g_handle);

          g_handle = NULL;

      }

      CComboBox         *m_pParityList;

      m_pParityList = (CComboBox *)GetDlgItem(IDC_COMBO_PARITY);

      m_icombaud = GetDlgItemInt(IDC_BAUD_COMBO);

      ZMC_SetComDefaultBaud(m_icombaud, 8, m_pParityList->GetCurSel(), ONESTOPBIT);

      icomid = GetDlgItemInt(IDC_PORT_COMBO);

      iresult = ZMC_OpenCom(icomid, &g_handle);

      if(ERR_SUCCESS != iresult)

      {

          g_handle = NULL;

          MessageBox(_T("Connect Failed"));

          return;

      }

      SetWindowText("success");

      CString Comname;

      CComboBox *m_pComList;

      m_pComList = (CComboBox *)GetDlgItem(IDC_PORT_COMBO);

      if(NULL == m_pComList)

      {

          return;

      }

      Comname.Format("%d",icomid);

      //

      if(CB_ERR != m_pComList->FindString(0, Comname))

      {

          return;

      }

      //加入

      m_pComList->AddString(Comname);

  }

  5.利用生成的句柄進(jìn)行配置軸參數(shù),軸類型等。

  int axislist[2] = {4,5};

      char cbuf[32] = {};

      //設(shè)置主軸

      ZAux_Direct_Base(g_handle, 2, axislist);

      //獲取編輯框內(nèi)要設(shè)置的參數(shù)

      int MachSpeed = GetDlgItemInt(IDC_EDIT_SPEED);

      int MachAddSpeed = GetDlgItemInt(IDC_EDIT_ADDSPEED);

      int MachDecSpeed = GetDlgItemInt(IDC_EDIT_DECSPEED);

      float MachDecAngle = GetDlgItemInt(IDC_EDIT_DECANGLE) * 3.14 / 180;

      float MachStopAngle = GetDlgItemInt(IDC_EDIT_STOPANGLE) * 3.14 / 180;

      //軸初始化

      for (int i = 4; i <= 5; i++)

      {

          //設(shè)置軸類型為振鏡軸類型

          ZAux_Direct_SetAtype(g_handle, i, 21);

          //設(shè)置每圈脈沖數(shù)

          ZAux_Direct_SetUnits(g_handle, i, 300);

          //設(shè)置速度

          ZAux_Direct_SetSpeed(g_handle, i, MachSpeed);

          //設(shè)置加速度

          ZAux_Direct_SetAccel(g_handle, i, MachAddSpeed);

          //設(shè)置減速度

          ZAux_Direct_SetDecel(g_handle, i, MachDecSpeed);

          //打開(kāi)振鏡軸連續(xù)插補(bǔ)

          ZAux_Direct_SetMerge(g_handle, i, 1);

          //設(shè)置拐角減速模式以及自動(dòng)倒角模式

          ZAux_Direct_SetCornerMode(g_handle, i, 32+2);

          //設(shè)置拐角半徑

          ZAux_Direct_SetZsmooth(g_handle, i, 0.1);

          //設(shè)置小圓限速半徑

          ZAux_Direct_SetFullSpRadius(g_handle, i, 20);

          //設(shè)置減速角度

          ZAux_Direct_SetDecelAngle(g_handle, i, MachDecAngle);

          //設(shè)置停止角度

          ZAux_Direct_SetStopAngle(g_handle, i, MachStopAngle);

          //設(shè)置SP速度

          ZAux_Direct_SetForceSpeed(g_handle, i, 5000);

      }

      //打開(kāi)精準(zhǔn)輸出功能

      ZAux_DirectCommand(g_handle, "AXIS_ZSET(4)=2", cbuf, 32);

      ZAux_Direct_SetOp(g_handle, 11, 1);

      ZAux_Direct_Base(g_handle, 2, axislist);

  ZAux_Direct_SetOp(g_handle, 1, 1);

  6.本例程的軌跡移動(dòng)數(shù)據(jù)都是以小線段的模式自己輸入的,運(yùn)行的過(guò)程中利用了多段小線段進(jìn)行圓弧擬合的方式進(jìn)行加快速度的處理操作。

  單個(gè)圓CAD軌跡圖:

  

  圖片27-3.png

  

  對(duì)應(yīng)部分軌跡數(shù)據(jù)以及使用代碼如下:

  //單個(gè)圓相對(duì)

  double x1[] = {-0.038000, -0.113000, -0.184000, -0.250000, -0.308000, -0.357000, -0.395000, -0.421000, -0.434000, -0.434000, -0.421000, -0.395000, -0.357000, -0.308000, -0.250000, -0.184000, -0.113000, -0.038000, 0.038000, 0.113000, 0.184000, 0.250000, 0.308000, 0.357000, 0.395000, 0.421000, 0.434000, 0.434000, 0.421000, 0.395000, 0.357000, 0.308000, 0.250000, 0.184000, 0.113000, 0.038000};

  double yh1[] = {0.434000, 0.421000, 0.395000, 0.357000, 0.308000, 0.250000, 0.184000, 0.113000, 0.038000, -0.038000, -0.113000, -0.184000, -0.250000, -0.308000, -0.357000, -0.395000, -0.421000, -0.434000, -0.434000, -0.421000, -0.395000, -0.357000, -0.308000, -0.250000, -0.184000, -0.113000, -0.038000, 0.038000, 0.113000, 0.184000, 0.250000, 0.308000, 0.357000, 0.395000, 0.421000, 0.434000};

  小線段轉(zhuǎn)圓弧函數(shù)說(shuō)明:

  /*************************************************************

  Description:          //小線段變?yōu)閳A弧

  Input:                    //handle:連接的控制器句柄

                               //pXPos:線段的x坐標(biāo)數(shù)組

                                                          //pYPos:線段的y坐標(biāo)數(shù)組

                                                          //nMaxNum:最大點(diǎn)數(shù)

                                                          //nMaxFitNum:最大擬合段數(shù)(100~1000)

                                                          //nAbs:1=絕對(duì);0=相對(duì);表示傳入的x、y坐標(biāo)數(shù)據(jù)為絕對(duì)還是相對(duì)

                                                          //refDistance:參考精度

  Output:               //

  Return:               //錯(cuò)誤碼

  *************************************************************/

  int __stdcall ZGraphProcess_SegFitArc(ZMC_HANDLE handle, double *pXPos, double *pYPos, int nMaxNum, int nMaxFitNum, int nAbs, double refDistance);

  使用此函數(shù)將多段小線段擬合成圓弧簡(jiǎn)化操作步驟,不用單獨(dú)進(jìn)行每段小線段的插補(bǔ)運(yùn)動(dòng)操作。此函數(shù)為內(nèi)部函數(shù),如有需求聯(lián)系請(qǐng)正運(yùn)動(dòng)技術(shù)工程師給予支持。

  代碼中利用單個(gè)圓擬合進(jìn)行橫縱循環(huán)打標(biāo)陣列圓的方式進(jìn)行打標(biāo)。

  int axislist[2] = {4,5};

  char cbuf[32] = {};

  //設(shè)置主軸

  ZAux_Direct_Base(g_handle, 2, axislist);

  for (int k = 0; k < 1; k++)

      {

          for (int i = 0; i < 5; i++)

          {

              //移動(dòng)到一個(gè)指定位置

              ZAux_DirectCommand(g_handle, "MOVE (0, -15)", cbuf, 32);

              for (int j = 0; j < 5; j++)

              {

                  ZAux_DirectCommand(g_handle, "MOVE (-15, 0)", cbuf, 32);

                  ZAux_Direct_MoveOp(g_handle, 0, 1);

                  //進(jìn)行小線段轉(zhuǎn)圓弧

                  int err_seg = ZGraphProcess_SegFitArc(g_handle, x1, yh1, sizeof(x1)/sizeof(double), 1000, 0, 0.01);

                  ZAux_Direct_MoveOp(g_handle, 0, 0);

          }

          ZAux_DirectCommand(g_handle, "MOVE (75, 0)", cbuf, 32);

      }

      ZAux_DirectCommand(g_handle, "MOVE (0, 75)", cbuf, 32);

  }

  7.編譯運(yùn)行演示。

  (1)編譯運(yùn)行示教例程。

  

  圖片28.png

  

  (2)同時(shí)通過(guò)ZDevelop軟件連接同一個(gè)控制器,對(duì)運(yùn)動(dòng)控制的軸參數(shù)進(jìn)行監(jiān)控。

  

  圖片29.png

  

  標(biāo)刻25個(gè)圓形用時(shí)以及示波器顯示圖形如下:

  

  1608099278325524.png

  

  標(biāo)刻25個(gè)圓形用時(shí)以及示波器顯示圖形

  

  

  

  正運(yùn)動(dòng)技術(shù)激光振鏡演示實(shí)拍

  本次,正運(yùn)動(dòng)技術(shù)的運(yùn)動(dòng)控制卡應(yīng)用開(kāi)發(fā)教程之激光振鏡控制就分享到這里,更多精彩內(nèi)容請(qǐng)關(guān)注“正運(yùn)動(dòng)小助手”公眾號(hào)。

  本文由正運(yùn)動(dòng)技術(shù)原創(chuàng),歡迎大家轉(zhuǎn)載,共同學(xué)習(xí),一起提高中國(guó)智能制造水平。文章版權(quán)歸正運(yùn)動(dòng)技術(shù)所有,如有轉(zhuǎn)載請(qǐng)注明文章來(lái)源。

  

  圖片25.png

  


標(biāo)簽: 運(yùn)動(dòng)控制

點(diǎn)贊

分享到:

上一篇:倍福虛擬學(xué)院 | TwinCAT 3 多...

下一篇:快速入門 | 篇十九:正運(yùn)動(dòng)技...

中國(guó)傳動(dòng)網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來(lái)源:中國(guó)傳動(dòng)網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國(guó)傳動(dòng)網(wǎng)(www.treenowplaneincome.com)獨(dú)家所有。如需轉(zhuǎn)載請(qǐng)與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個(gè)人轉(zhuǎn)載使用時(shí)須注明來(lái)源“中國(guó)傳動(dòng)網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明其他來(lái)源的稿件,均來(lái)自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請(qǐng)保留稿件來(lái)源及作者,禁止擅自篡改,違者自負(fù)版權(quán)法律責(zé)任。

網(wǎng)站簡(jiǎn)介|會(huì)員服務(wù)|聯(lián)系方式|幫助信息|版權(quán)信息|網(wǎng)站地圖|友情鏈接|法律支持|意見(jiàn)反饋|sitemap

中國(guó)傳動(dòng)網(wǎng)-工業(yè)自動(dòng)化與智能制造的全媒體“互聯(lián)網(wǎng)+”創(chuàng)新服務(wù)平臺(tái)

網(wǎng)站客服服務(wù)咨詢采購(gòu)咨詢媒體合作

Chuandong.com Copyright ?2005 - 2024 ,All Rights Reserved 版權(quán)所有 粵ICP備 14004826號(hào) | 營(yíng)業(yè)執(zhí)照證書(shū) | 不良信息舉報(bào)中心 | 粵公網(wǎng)安備 44030402000946號(hào)