小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Zmotion快速入門之EtherCAT通信

 付工上位機(jī) 2021-04-23

本案例采用Zmotion運動控制卡與伺服驅(qū)動器進(jìn)行EtherCAT通信,從而實現(xiàn)對伺服電機(jī)的相關(guān)控制。

硬件連接

因為采用總線的原因,所以基本上不用接線,硬件原理圖如下所示:

圖片

將PC通過Ethernet連接至運動控制卡,然后運動控制卡的EtherCAT接至伺服驅(qū)動器,伺服驅(qū)動器與伺服電機(jī)之間通過配套電纜進(jìn)行連接。

快速上手

第一次使用時,最好的方式就是看編程手冊,并結(jié)合官方提供的案例來學(xué)習(xí)使用。

Zmotion廠家提供的配套資料,我會傳到公眾號里,需要的小伙伴,可以后臺回復(fù) Zmotion 獲取

在保證硬件沒有問題的前提下(這里主要是指伺服驅(qū)動器,至少能夠手動轉(zhuǎn)起來),打開 ZMC光盤資料\8.PC編程相關(guān)\函數(shù)庫2.1\windows平臺\64位庫\C#\例程\例程8-總線控制運動 中的源程序,運行起來如下所示:

圖片

這里有兩個地方要注意,不然是運行不起來的。

  • 案例中提供的ECAT初始化.bas文件,最大軸數(shù)是32,需要根據(jù)實際情況修改,否則會報錯,我這里改成16。
圖片
  • 如果伺服沒有接限位開關(guān),軸狀態(tài)應(yīng)該是30H,表示正負(fù)限位報警,需要將正負(fù)限位禁用掉,具體操作是通過ZDevelop將FWD_IN和REV_IN設(shè)置為-1,當(dāng)然后續(xù)可以通過代碼實現(xiàn)。
圖片

這兩點注意,伺服電機(jī)就應(yīng)該可以動起來了。

軟件開發(fā)

后續(xù)的軟件開發(fā)主要就是封裝應(yīng)用,Zmotion的使用會涉及到兩個dll庫(zauxdll.dll和zmotion.dll)和一個Zmcaux.cs類文件,提前將這兩個dll庫復(fù)制到根目錄下,然后手動將Zmcaux.cs類添加到你的項目中。

創(chuàng)建一個新的Zmotion.cs類,對Zmcaux.cs中的一些方法進(jìn)行二次封裝,便于后續(xù)項目的應(yīng)用。

二次封裝的方式每個人都會根據(jù)自己的編碼習(xí)慣,進(jìn)行不同程度的封裝,下面我僅列舉部分我的封裝方法,僅供參考:

建立連接:EtherCAT連接之前需要執(zhí)行一個bas文件,根據(jù)案例中的代碼封裝如下:

  /// <summary>
  /// 初始化卡
  /// </summary>
  /// <param name="ipAddress">IP地址</param>
  /// <param name="file">BAS文件</param>
  /// <param name="tempstatus">總線初始化完成狀態(tài)</param>
  /// <param name="m_BusNodeNum">節(jié)點數(shù)</param>
  /// <returns>操作結(jié)果</returns>
  public OperationResult InitCard(string ipAddress, string file, ref float tempstatus, ref int m_BusNodeNum)
  {
   int error = 0;
   error = zmcaux.ZAux_OpenEth(ipAddress, out zhandle);
   if (error == 0)
   {
 error = zmcaux.ZAux_BasDown(zhandle, file, 1);
 if (error == 0)
 {
  //執(zhí)行初始化
  StringBuilder buffer = new StringBuilder(10240);
  //任務(wù)1重新運行BAS中的初始化函數(shù)
  error = zmcaux.ZAux_Execute(zhandle, "RUNTASK 1,Ecat_Init", buffer, 0);
  if (error != 0)
  {
   return new OperationResult()
   {
 IsSuccess = true,
 ErrorMsg = "初始化失敗"
   };
  }
  IEC_Timer_TON ton = new IEC_Timer_TON(5000);
  ton.Input = true;
  while (true)
  {
   int ret = 0;
   float Bus_type = 0.0f;
   float m_BusAxisNum = 0.0f;
   //讀取BAS文件中的變量判斷總線類型
   ret += zmcaux.ZAux_Direct_GetUserVar(zhandle, "BUS_TYPE", ref Bus_type);
   // 讀取BAS文件中的變量判斷總線初始化完成狀態(tài)
   ret += zmcaux.ZAux_Direct_GetUserVar(zhandle, "Bus_InitStatus", ref tempstatus);
   ret += zmcaux.ZAux_BusCmd_GetNodeNum(zhandle, 0, ref m_BusNodeNum);
   ret += zmcaux.ZAux_Direct_GetUserVar(zhandle, "Bus_TotalAxisnum", ref m_BusAxisNum);
   bool completed = ret == 0;
   completed &= tempstatus == 1;
   completed &= m_BusNodeNum > 0;
   bool output = ton.Output;
   if (completed)
   {
 break;
   }
   else if (!output)
   {
 continue;
   }
   else
   {
 if (tempstatus == -1)
 {
  return new OperationResult()
  {
   IsSuccess = false,
   ErrorMsg = "正在初始化"
  };
 }
 else
 {
  return new OperationResult()
  {
   IsSuccess = false,
   ErrorMsg = "初始化失敗"
  };
 }
   }
  }
  initedOK = true;
  return OperationResult.CreateSuccessResult();
 }
 return new OperationResult()
 {
  IsSuccess = true,
  ErrorMsg = "文件下載失敗"
 };
   }
   return new OperationResult()
   {
 IsSuccess = true,
 ErrorMsg = "以太網(wǎng)連接失敗"
   };
  }

  

點位運動:點位運動主要就是根據(jù)軸號、速度、加速度、脈沖當(dāng)量進(jìn)行正轉(zhuǎn)或反轉(zhuǎn),代碼如下:

 public OperationResult Move(int axisNo, float scale, float vel, float acc, bool dir)
 {
  int error = 0;
  error += zmcaux.ZAux_Direct_SetUnits(zhandle, axisNo, scale);
  error += zmcaux.ZAux_Direct_SetSpeed(zhandle, axisNo, vel);
  error += zmcaux.ZAux_Direct_SetAccel(zhandle, axisNo, acc);
  error += zmcaux.ZAux_Direct_Single_Vmove(zhandle, axisNo, dir ? 1 : -1);

  if (error > 0)
  {
   return OperationResult.CreateFailResult();
  }
  else
  {
   return OperationResult.CreateSuccessResult();
  }
 }

停止運動:停止運動比較簡單,調(diào)用ZAux_Direct_Single_Cancel指令即可。


 public OperationResult Stop(int axisNo)
 {
  int error = 0;
  error = zmcaux.ZAux_Direct_Single_Cancel(zhandle, axisNo, 2);

  if (error > 0)
  {
   return OperationResult.CreateFailResult();
  }
  else
  {
   return OperationResult.CreateSuccessResult();
  }
 }

開發(fā)界面

這里做了一個簡單的控制界面,實現(xiàn)了基本的板卡連接、點動、連續(xù)運動、伺服使能等基本控制功能。

圖片

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多