今天,正運動小助手給大家分享一下全國產EtherCAT運動控制邊緣控制器ZMC432H的軸參數(shù)配置和單軸運動控制。
01
功能簡介
全國產EtherCAT運動控制邊緣控制器ZMC432H是正運動的一款軟硬件全國產自主可控,運動控制接口兼容EtherCAT總線和脈沖型的獨立式運動控制器,最多支持32軸運動控制,同時支持正運動遠程HMI功能,能提供網絡組態(tài)顯示,可實時監(jiān)控和調整參數(shù)配置。

ZMC432H具備豐富的硬件接口和控制功能模塊,能實現(xiàn)高效穩(wěn)定的運動控制和實時數(shù)據采集,以滿足工業(yè)控制協(xié)同工業(yè)互聯(lián)網的應用需求。
ZMC432H內置了Linux系統(tǒng),可以使用本地的LOCAL接口進行連接,可以做到更快速的指令交互,單條指令與多條指令一次性交互時間為40us左右。
02
C++進行運動控制開發(fā)
1.新建MFC項目并添加函數(shù)庫
(1)在VS2022菜單“文件”→“新建”→ “項目”,啟動創(chuàng)建項目向導。

(2)選擇開發(fā)語言為“Visual C++”和程序類型“MFC應用程序”。

(3)點擊下一步即可。

(4)選擇類型為“基于對話框”,下一步或者完成。

(5)找到廠家提供的光盤資料,路徑如下(64位庫為例)。
A.進入廠商提供的光盤資料找到“8.PC函數(shù)”文件夾,并點擊進入。

B.選擇“函數(shù)庫2.1.1”文件夾。

C.選擇“Windows平臺”文件夾。

D.根據需要選擇對應的函數(shù)庫這里選擇64位庫。

E.解壓C++的壓縮包,里面有C++對應的函數(shù)庫。

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

(6)將廠商提供的C++的庫文件和相關頭文件復制到新建的項目里面。

(7)在項目中添加靜態(tài)庫和相關頭文件。
A.先右擊項目文件,接著依次選擇:“添加”→“現(xiàn)有項”。

B.在彈出的窗口中依次添加靜態(tài)庫和相關頭文件。
(8)聲明用到的頭文件和定義控制器連接句柄。

至此項目新建完成,可進行MFC項目開發(fā)。
2.查看PC函數(shù)手冊,熟悉相關函數(shù)接口
(1)PC函數(shù)手冊也在光盤資料里面,具體路徑如下:“光盤資料3.編程手冊Motion函數(shù)庫編程手冊 V2.1.1Motion函數(shù)庫編程手冊 V2.1.1.pdf”。

(2)鏈接控制器,獲取鏈接句柄。
| 指令 | 說明 |
| ZAux_OpenCom | 串口連接控制器 |
| ZAux_OpenEth | 以太網連接控制器 |
| ZAux_OpenPci | PCI 卡連接 |
| ZAux_FastOpen | 與控制器建立連接,指定連接的等待時間. |
(3)軸參數(shù)配置相關接口。
| 指令 | 說明 |
| ZAux_Direct_SetAtype | 設置軸類型 |
| ZAux_Direct_SetUnits | 設置軸脈沖當量 |
| ZAux_Direct_SetInvertStep | 設置脈沖輸出模式 |
| ZAux_Direct_SetSpeed | 設置軸速度 |
| ZAux_Direct_SetAccel | 設置軸加速度 |
| ZAux_Direct_SetDecel | 設置軸減速度 |
| ZAux_Direct_SetSramp | 設置軸S曲線 |
| ZAux_Direct_GetAtype | 讀取軸類型 |
| ZAux_Direct_GetUnits | 讀取軸脈沖當量 |
| ZAux_Direct_GetInvertStep | 讀取脈沖輸出模式 |
| ZAux_Direct_GetSpeed | 讀取軸速度 |
| ZAux_Direct_GetAccel | 讀取軸加速度 |
| ZAux_Direct_GetDecel | 讀取軸減速度 |
| ZAux_Direct_GetSramp | 讀取軸S曲線設置 |
(4)單軸運動接口。
| 指令 | 說明 |
| ZAux_Direct_Single_Vmove | 單軸連續(xù)運動。 |
| ZAux_Direct_Single_Move | 單軸相對距離運動。 |
| ZAux_Direct_Single_MoveAbs | 單軸絕對距離運動。 |
| ZAux_Direct_Single_Cancel | 單軸停止。 |
(5)軸狀態(tài)監(jiān)控。
| 指令113 | ZAux_Direct_GetAxisStatus |
| 指令原型 | int32 __stdcall ZAux_Direct_GetAxisStatus(ZMC_HANDLE handle, int iaxis, int *piValue) |
| 指令說明 | 讀取當前軸的狀態(tài)。 |
| 輸入參數(shù) | 共有2個輸入參數(shù),見下方說明。 |
| handle | 鏈接標識。 |
| iaxis | 軸號。 |
| 輸出參數(shù) | 共有1個輸出參數(shù),見下方說明。 |
| piValue |
返回狀態(tài)值,對應的位表示不同狀態(tài)。![]() |
| 返回值 | 見錯誤碼詳細說明。 |
3.MFC進行軸參數(shù)配置和單軸運動控制
(1)例程界面如下。

(2)鏈接按鈕的事件處理函數(shù)中調用鏈接控制器的接口函數(shù)ZAux_OpenEth,與控制器進行鏈接,鏈接成功后啟動定時器1監(jiān)控控制器狀態(tài)。
//網口鏈接控制器 void CSingle_move_Dlg::OnOpen() //網口鏈接控制器 { char buffer[256]; int32iresult; if(NULL != g_handle) { ZAux_Close(g_handle); g_handle = NULL; } GetDlgItemText(IDC_IPLIST,buffer,255); buffer[255] = '?'; iresult = ZAux_OpenEth(buffer, &g_handle); if(ERR_SUCCESS != iresult) { g_handle = NULL; MessageBox(_T("鏈接失敗")); SetWindowText("未鏈接"); return; } SetWindowText("已鏈接"); SetTimer( 1, 100, NULL ); }
(3)通過定時器1對控制器信息進行監(jiān)控。
void CSingle_move_Dlg::OnTimer(UINT_PTR nIDEvent)
{
if(NULL == g_handle)
{
MessageBox(_T("鏈接斷開"));
return ;
}
if(1 == nIDEvent)
{
CString string;
float position = 0;
ZAux_Direct_GetDpos( g_handle,m_nAxis,&position); //獲取當前軸位置
string.Format("當前位置:%.2f", position );
GetDlgItem( IDC_CURPOS )->SetWindowText( string );
float NowSp = 0;
ZAux_Direct_GetVpSpeed( g_handle,m_nAxis,&NowSp); //獲取當前軸速度
string.Format("當前速度:%.2f", NowSp );
GetDlgItem( IDC_CURSPEED)->SetWindowText( string );
int status = 0;
ZAux_Direct_GetIfIdle(g_handle, m_nAxis,&status); //判斷當前軸狀態(tài)
if (status == -1)
{
GetDlgItem( IDC_CURSTATE )->SetWindowText("當前狀態(tài):停止");
}
else
{
GetDlgItem( IDC_CURSTATE )->SetWindowText("當前狀態(tài):運動中");
}
}
CDialog::OnTimer(nIDEvent);
}
(4)通過設置按鈕的事件處理函數(shù)對控制器的軸參數(shù)進行配置。
void CSingle_move_Dlg::OnBnClickedSetpara()
{
UpdateData(true);//刷新參數(shù)
//m_nAxis表示當前程序選定的軸,x為軸0,以此類推
//設置脈沖當量 1表示以一個脈沖為單位 ,設置為1MM的脈沖個數(shù),這度量單位為MM
ZAux_Direct_SetUnits(g_handle, m_nAxis, m_units);
//設定速度,加減速
ZAux_Direct_SetLspeed(g_handle, m_nAxis, m_lspeed);
ZAux_Direct_SetSpeed(g_handle, m_nAxis, m_speed);
ZAux_Direct_SetAccel(g_handle, m_nAxis, m_acc);
ZAux_Direct_SetDecel(g_handle, m_nAxis, m_dec);
//設定S曲線時間 設置為0表示梯形加減速
ZAux_Direct_SetSramp(g_handle, m_nAxis, m_sramp);
}
(5)通過啟動按鈕的事件處理函數(shù)來進行單軸運動。
void CSingle_move_Dlg::OnStart() //啟動運動
{
if(NULL == g_handle)
{
MessageBox(_T("鏈接斷開狀態(tài)"));
return ;
}
UpdateData(true);//刷新參數(shù)
int status = 0;
ZAux_Direct_GetIfIdle(g_handle, m_nAxis,&status); //判斷當前軸狀態(tài)
if (status == 0) //已經在運動中
return;
//設定軸類型 1-脈沖軸類型
ZAux_Direct_SetAtype(g_handle, m_nAxis, 1);
//設定脈沖模式及邏輯方向(脈沖+方向)
ZAux_Direct_SetInvertStep(g_handle, m_nAxis, 0);
if( m_mode == 0 )
{//寸動(位置模式)
ZAux_Direct_Single_Vmove(g_handle, m_nAxis, m_bLogic?1:0);
}
else
{
//持續(xù)驅動(速度模式)
ZAux_Direct_Single_Move(g_handle, m_nAxis, m_step*(m_bLogic?1:-1));
}
UpdateData(false);
}
(6)通過停止按鈕的事件處理函數(shù)來停止軸的運動。
void CSingle_move_Dlg::OnStop() //停止運動
{
if(NULL == g_handle)
{
MessageBox(_T("鏈接斷開狀態(tài)"));
return ;
}
ZAux_Direct_Single_Cancel(g_handle,m_nAxis,2); //
}
03
調試與監(jiān)控
編譯運行例程,同時通過ZDevelop軟件連接控制器對控制器狀態(tài)進行監(jiān)控。
1.RtSys軟件連接控制器監(jiān)控控制器的基本參數(shù)

2.通過RtSys軟件的示波器功能對軸運動的波形進行抓取。
(1)軸0寸動運動模式,加速度=100,S曲線時間=0。

(2)軸1寸動運動模式,加速度=100,S曲線時間=250。

(3)軸2寸動運動模式,加速度=1000,S曲線時間=0。

(4)軸2寸動運動模式,加速度=1000,S曲線時間=500。

審核編輯:劉清
-
控制器
+關注
關注
114文章
17787瀏覽量
193086 -
運動控制
+關注
關注
5文章
821瀏覽量
34534 -
C++語言
+關注
關注
0文章
147瀏覽量
7682 -
ethercat
+關注
關注
19文章
1507瀏覽量
45173 -
EtherCAT總線
+關注
關注
5文章
93瀏覽量
5943
原文標題:全國產EtherCAT運動控制邊緣控制器(四):軸參數(shù)配置與單軸運動PC上位機C++控制
文章出處:【微信號:伺服與運動控制,微信公眾號:伺服與運動控制】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
【正運動】全國產EtherCAT運動控制器 | ZMC432H
正運動激光振鏡運動控制器ZMC408SCAN用戶手冊
脈沖+總線運動控制器ZMC432H用戶手冊
全國產EtherCAT運動控制邊緣控制器ZMC432H如何使用Python+QT實現(xiàn)連續(xù)軌跡加工
多軸高性能EtherCAT總線運動控制器ZMC408CE硬件介紹
EtherCAT運動控制邊緣控制器ZMC432H的軸參數(shù)配置和單軸運動控制

評論