ZMC408CE硬件介紹
ZMC408CE是正運動推出的一款多軸高性能EtherCAT總線運動控制器,具有EtherCAT、EtherNET、RS232、CAN和U盤等通訊接口,ZMC系列運動控制器可應用于各種需要脫機或聯(lián)機運行的場合。

ZMC408CE支持8軸運動控制,最多可擴展至32軸,支持直線插補、任意圓弧插補、空間圓弧、螺旋插補、電子凸輪、電子齒輪、同步跟隨等功能。 ZMC408CE支持PLC、Basic、HMI組態(tài)三種編程方式。PC上位機API編程支持C#、C++、LabVIEW、Matlab、Qt、Linux、VB.Net、Python等接口。

ZMC408CE支持8軸運動控制,可采用脈沖軸(帶編碼器反饋)或EtherCAT總線軸,通用IO包含24路輸入口和16路輸出口,部分IO為高速IO,模擬量AD/DA各兩路,EtherCAT最快125us的刷新周期。 ZMC408CE支持8個通道的硬件比較輸出、硬件定時器、運動中精準輸出,還支持8通道PWM輸出,對應的輸出口為OUT0-7,支持8個通道同時觸發(fā)硬件比較輸出。
ZMC408CE視頻介紹
?01
MATLAB進行運動控制開發(fā)
1.在MATLAB R2019a菜單“主頁”→“新建”→“工程”→“空白工程”,啟動創(chuàng)建項目向導。


2.新建GUI。命令行輸入guide,新建GUI。


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

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

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

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

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

4.將廠商提供的庫文件以及相關文件復制到MATLAB工作目錄下。 (1)“zauxdll.dll”、“zmotion.dll”、“zauxdll2.h”、“zmotion.h”四個文件拷貝到matlab工作目錄下。 如:C:.......R2019ain
(2)將“zauxdll2.h”、“zmotion.h”兩個文件拷貝到include目錄。
如:C:.......R2019aexterninclude
(3)拷貝“zauxdll.dll”文件到新建的工程目錄中。

5.配置MATLAB開發(fā)環(huán)境。
(1)在matlab命令行輸入“mbuild -setup”以及“mex -setup”,選擇安裝的c語言編譯器。

(2)使用loadlibrary('zauxdll.dll','zauxdll2.h');加載函數(shù)庫。

(3)libfunctions zauxdll -full;或 libfunctionsview zauxdll;顯示共享庫函數(shù)簽名。

6.使用“calllib”調用zauxdll函數(shù)庫中函數(shù),詳細可查看MATLAB幫助。
有關參數(shù)傳遞,在calllib幫助→傳遞參數(shù)。



至此函數(shù)庫添加完成,可進行MATLAB項目開發(fā)。
?02
相關PC函數(shù)介紹
1.PC函數(shù)手冊在光盤資料查看,具體路徑如下:“光盤資料8.PC函數(shù)函數(shù)庫2.1Motion函數(shù)庫編程手冊 V2.1.pdf”。

2.PC編程,一般如果網口對控制器和工控機進行鏈接。網口鏈接函數(shù)接口是ZAux_OpenEth();如果鏈接成功,該接口會返回一個鏈接句柄。通過操作這個鏈接句柄可以實現(xiàn)對控制器的控制。
(1)ZAux_OpenEth()接口說明
?
| 指令3 | ZAux_OpenEth | ||||
| 指令原型 | int32 ?__stdcall ?ZAux_OpenEth(char ?*ipaddr, ZMC_HANDLE * phandle) | ||||
| 指令說明 | 以太網連接控制器。 | ||||
| 輸入?yún)?shù) |
|
||||
| 輸出參數(shù) |
|
||||
| 返回值 | 成功返回值為0,非0詳見錯誤碼說明。 | ||||
| 指令示例 | 網口連接控制器 | ||||
| 詳細說明 |
1.網口采用RJ45標準網線接口,通訊速率為100Mbit/s。 2.控制器出廠的IP地址為192.168.0.11,端口號為502。對端通訊設備需與控制器處于同一網段,才可進行連接。 3.最常用的控制器連接方式。 4.ZMC_HANDLE 類型:Zmotion庫中,專門用于控制卡連接數(shù)據(jù)定義類型; |
?
(2)項目應用截圖

(3)命令行應用截圖

3、使用單軸運動相關的指令操作鏈接句柄“g_handle”,對控制器進行單軸運動控制,單軸運動相關的指令如下。
(1)單軸相對運動指令
?
| 指令92 | ZAux_Direct_Single_Move | ||||||||
| 指令原型 | int32 __stdcall ?ZAux_Direct_Single_Move(ZMC_HANDLE ?handle, int ?iaxis, float ?fdistance) | ||||||||
| 指令說明 | 單軸相對運動。 | ||||||||
| 輸入?yún)?shù) |
|
||||||||
| 輸出參數(shù) | / | ||||||||
| 返回值 | 成功返回值為0,非0詳見錯誤碼說明。 | ||||||||
| 指令示例 | 單軸點位運動 | ||||||||
| 詳細說明 | / |
?
(2)單軸絕對運動指令
?
| 指令93 | ZAux_Direct_Single_MoveAbs | ||||||||
| 指令原型 | int32 ?__stdcall ?ZAux_Direct_Single_MoveAbs(ZMC_HANDLE handle, int ?iaxis, float ?fdistance) | ||||||||
| 指令說明 | 單軸絕對運動。 | ||||||||
| 輸入?yún)?shù) |
|
||||||||
| 輸出參數(shù) | / | ||||||||
| 返回值 | 成功返回值為0,非0詳見錯誤碼說明。 | ||||||||
| 指令示例 | 單軸點位運動 | ||||||||
| 詳細說明 | / |
?
(3)單軸持續(xù)運動
?
| 指令94 | ZAux_Direct_Single_Vmove | ||||||||
| 指令原型 | int32 ?__stdcall ?ZAux_Direct_Single_Vmove(ZMC_HANDLE handle, int ?iaxis, int ?idir) | ||||||||
| 指令說明 | 單軸連續(xù)運動指令,連續(xù)往一個方向運動。 | ||||||||
| 輸入?yún)?shù) |
|
||||||||
| 輸出參數(shù) | / | ||||||||
| 返回值 | 成功返回值為0,非0詳見錯誤碼說明。 | ||||||||
| 指令示例 | 單軸持續(xù)運動 | ||||||||
| 詳細說明 | 當前面的VMOVE運動沒有停止時,此VMOVE指令會自動替換前面的VMOVE指令并修改方向,因此無需CANCEL前面的VMOVE指令。 |
?
(4)單軸停止運動
?
| 指令189 | ZAux_Direct_Single_Cancel | ||||||||
| 指令原型 | int32 __stdcall ZAux_Direct_Single_Cancel (ZMC_HANDLE handle, int iaxis, int imode); | ||||||||
| 指令說明 | 單軸運動停止。 | ||||||||
| 輸入?yún)?shù) |
|
||||||||
| 輸出參數(shù) | / | ||||||||
| 返回值 | 成功返回值為0,非0詳見錯誤碼說明。 | ||||||||
| 指令示例 | 單軸持續(xù)運動 | ||||||||
| 詳細說明 |
如果指定軸在插補運動軸列表中,無論主軸或者其他軸,都停止軸組的插補運動 MODE0~2減速度按FASTDEC和DECEL中最大的值。 CANCEL后要調用絕對位置運動,必須先等待停止完成。 |
?
?03
MATLAB進行單軸運動開發(fā)
1.單軸運動控制人機交互界面如下。

2.例程簡易流程圖。

3.在MATLAB的GUI界面中新建控件進行程序編寫。
A.在工具欄新建“普通按鈕”和可編輯文本,并雙擊修改屬性。

B.控件右鍵,查看回調,“CallBack”創(chuàng)建回調響應函數(shù),此時自動新建.m格式文件,在這里進行界面響應程序編寫。

C.將自動創(chuàng)建的文件添加到項目中。

D.在“XXX_OpeningFcn”函數(shù)中加載函數(shù)庫,并定義全局變量。
?
?
% --- Executes just before untitled is made visible. function untitled_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to untitled (see VARARGIN) % Choose default command line output for untitled handles.output = hObject; % Update handles structure guidata(hObject, handles); if not(libisloaded('zauxdll'))%加載函數(shù)庫 loadlibrary('zauxdll.dll','zauxdll2.h'); end disp("加載函數(shù)庫");%命令行打印 global g_handleptr;%定義連接句柄 global g_nAxis;%定義軸號 global g_Dir;%定義運動方向 global g_Moveway;%定義運動方式 g_handleptr= libpointer('voidPtrPtr'); g_Dir=1; g_Moveway=0; g_nAxis=0;
?
?
4.編寫“連接控制器”按鈕程序,調用接口“ZAux_OpenEth()”,使點擊按鈕時鏈接控制器。
?
?
% --- Executes on button press in pushbutton_openZmc.
function pushbutton_openZmc_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton_openZmc (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
handles.timer = timer('Period',0.05,'ExecutionMode','FixedRate',...
'TimerFcn',{@UpdateSliderData, handles});%定時器
global g_handleptr;%定義連接句柄
ip =get(handles.edit_Ip,'String');
disp("連接控制器:"+ip);
zmc_ip = char(ip);
[res,~] = calllib('zauxdll','ZAux_OpenEth',zmc_ip ,g_handleptr);
commandCheckHandler("ZAux_OpenEth",res);
if res==0
fprintf('連接控制器成功
');
set(gcf,'NumberTitle', 'off', 'Name', '連接成功');
%msgbox('Connection successful');
start( handles.timer );%啟動定時器
else
fprintf('連接控制器失敗,錯誤碼%d
',res);
set(gcf,'NumberTitle', 'off', 'Name', '連接失敗');
msgbox('Connection failure,Please check the IP!');%連接控制器失敗,請檢查IP地址
return;
end
?
?
5.主界面右鍵添加銷毀函數(shù),調用“ZAux_Close()”關閉連接。

?
?
% --- Executes during object deletion, before destroying properties.關閉連接
function figure1_DeleteFcn(hObject, eventdata, handles)
global g_handleptr;%定義連接句柄
calllib('zauxdll','ZAux_Close',g_handleptr);
disp("關閉與控制器連接");%打印
?
?
6.通過定時器更新控制器軸狀態(tài):當前坐標、當前速度等。
?
?
function UpdateSliderData(obj, events, handles)
global g_handleptr;%定義連接句柄
global g_nAxis;%定義軸號
[res,~,runstate]=calllib('zauxdll','ZAux_Direct_GetIfIdle',g_handleptr,g_nAxis, 0);
commandCheckHandler("ZAux_Direct_GetIfIdle",res);
[res,~,curpos]=calllib('zauxdll','ZAux_Direct_GetDpos',g_handleptr, g_nAxis, 0);
commandCheckHandler("ZAux_Direct_GetDpos",res);
[res,~,curspeed]=calllib('zauxdll','ZAux_Direct_GetVpSpeed',g_handleptr, g_nAxis, 0);
commandCheckHandler("ZAux_Direct_GetVpSpeed",res);
str_curpos=num2str(curpos);
str_curspeed=num2str(curspeed);
if (runstate==0)
set(handles.edit_runstate,'String',"當前運動狀態(tài):運行");
else
set(handles.edit_runstate,'String',"當前運動狀態(tài):停止");
end
set(handles.edit_curpos,'String',"當前軸坐標:" +str_curpos);
set(handles.edit_curspeed,'String',"當前軸速度:" +str_curspeed);
?
?
7.通過啟動按鈕的事件處理函數(shù)來設置軸參數(shù)并開始運動。
?
?
% --- Executes on button press in pushbutton_runmove.運動
function pushbutton_runmove_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton_runmove (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
global g_handleptr;%定義連接句柄
global g_nAxis;%定義軸號
global g_Dir;%定義運動方向
global g_Moveway;%定義運動方式
calllib('zauxdll','ZAux_Direct_SetAtype',g_handleptr, g_nAxis,0); calllib('zauxdll','ZAux_Direct_SetUnits',g_handleptr,g_nAxis,str2num(get(handles.edit_units,'String')));
calllib('zauxdll','ZAux_Direct_SetLspeed',g_handleptr, g_nAxis, str2num(get(handles.edit_lspeed,'String')));
calllib('zauxdll','ZAux_Direct_SetSpeed',g_handleptr, g_nAxis, str2num(get(handles.edit_speed,'String')));
calllib('zauxdll','ZAux_Direct_SetAccel',g_handleptr, g_nAxis, str2num(get(handles.edit_acc,'String')));
calllib('zauxdll','ZAux_Direct_SetDecel',g_handleptr, g_nAxis, str2num(get(handles.edit_dec,'String')));
calllib('zauxdll','ZAux_Direct_SetSramp',g_handleptr, g_nAxis, str2num(get(handles.edit_sramp,'String')));
if (g_Moveway) %//連續(xù)運動
calllib('zauxdll','ZAux_Direct_Single_Vmove',g_handleptr, g_nAxis,g_Dir);
else % //寸動
calllib('zauxdll','ZAux_Direct_Single_Move',g_handleptr, g_nAxis, g_Dir * str2num(get(handles.edit_step,'String')));
end
?
?
8.通過停止按鈕的事件處理函數(shù)來停止插補運動。
?
?
% --- Executes on button press in pushbutton_stopMove.單軸停止
function pushbutton_stopMove_Callback(hObject, eventdata, handles)
global g_handleptr;%定義連接句柄
global g_nAxis;
calllib('zauxdll','ZAux_Direct_Single_Cancel',g_handleptr,g_nAxis,2);
?
?
?04
調試與監(jiān)控
編譯運行例程,同時連接ZDevelop軟件進行調試,對運動控制的軸參數(shù)和運動情況進行監(jiān)控。
1.連接ZDevelop軟件,并點擊“視圖”→“示波器”打開示波器對軸運動情況進行監(jiān)控。


2.運行上位機軟件進行調試監(jiān)控。


3.教學視頻。
本次,正運動技術EtherCAT運動控制器的MATLAB開發(fā),就分享到這里。 ?
審核編輯:黃飛
?
電子發(fā)燒友App




































評論