最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Zmotion快速入門之EtherCAT通信

2021-05-20 11:43 作者:付工上位機實戰(zhàn)  | 我要投稿

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

硬件連接

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

將PC通過Ethernet連接至運動控制卡,然后運動控制卡的EtherCAT接至伺服驅(qū)動器,伺服驅(qū)動器與伺服電機之間通過配套電纜進行連接【文章末尾有視頻介紹】。

快速上手

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

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

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


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

  • 案例中提供的ECAT初始化.bas文件,最大軸數(shù)是32,需要根據(jù)實際情況修改,否則會報錯,我這里改成16。


  • 如果伺服沒有接限位開關,軸狀態(tài)應該是30H,表示正負限位報警,需要將正負限位禁用掉,具體操作是通過ZDevelop將FWD_IN和REV_IN設置為-1,當然后續(xù)可以通過代碼實現(xiàn)。


這兩點注意,伺服電機就應該可以動起來了。

軟件開發(fā)

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

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

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

建立連接: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);
//任務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ù)軸號、速度、加速度、脈沖當量進行正轉(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ù)運動、伺服使能等基本控制功能。



Zmotion快速入門之EtherCAT通信的評論 (共 條)

分享到微博請遵守國家法律
阿瓦提县| 苗栗市| 门源| 望都县| 洛阳市| 井冈山市| 永新县| 云和县| 灵寿县| 太仆寺旗| 渑池县| 舒城县| 富川| 页游| 清苑县| 太谷县| 呼和浩特市| 拜泉县| 志丹县| 陕西省| 黔西县| 左贡县| 台江县| 延津县| 久治县| 姚安县| 邳州市| 若尔盖县| 睢宁县| 阆中市| 永兴县| 旌德县| 潜山县| 策勒县| 凌源市| 乌拉特前旗| 利津县| 金阳县| 巴马| 峨眉山市| 晋州市|