時間:2024-04-22 13:29:12來æºï¼šæ·±åœ³å¸‚æ£é‹å‹•技術(shù)有é™å…¬å¸
  ZMC408CE是æ£é‹å‹•推出的一款多軸高性能EtherCAT總線é‹å‹•控制器,具有EtherCATã€EtherNETã€RS232ã€CANå’ŒU盤ç‰é€šè¨ŠæŽ¥å£ï¼ŒZMC系列é‹å‹•æŽ§åˆ¶å™¨å¯æ‡‰(yÄ«ng)用于å„種需è¦è„«æ©Ÿæˆ–è¯(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個通é“的硬件比較輸出ã€ç¡¬ä»¶å®šæ™‚器ã€é‹å‹•ä¸ç²¾æº–(zhÇ”n)輸出,還支æŒ8通é“PWMè¼¸å‡ºï¼Œå°æ‡‰(yÄ«ng)的輸出å£ç‚ºOUT0-7,支æŒ8個通é“åŒæ™‚觸發(fÄ)硬件比較輸出。
  ZMC408CEè¦–é »ä»‹ç´¹
  01ã€MATLAB進行é‹å‹•控制開發(fÄ)
  1.在MATLAB R2019aèœå–®â€œä¸»é â€â†’“新建â€â†’“工程â€â†’“空白工程â€ï¼Œå•Ÿå‹•創(chuà ng)å»ºé …ç›®å‘?qÅ«)Ð?/p>
  2.新建GUI。命令行輸入guide,新建GUI。
  3. æ‰¾åˆ°å» å®¶æä¾›çš„光盤資料里é¢çš„MATLAB函數(shù)庫,路徑如下(64ä½åº«ç‚ºä¾‹)。
  A.é€²å…¥å» å•†æä¾›çš„光盤資料找到“8.PC函數(shù)â€æ–‡ä»¶å¤¾ï¼Œå¹¶é»žæ“Šé€²å…¥ã€‚
B.鏿“‡â€œå‡½æ•¸(shù)庫2.1â€æ–‡ä»¶å¤¾ã€‚
  C.鏿“‡â€œWindowså¹³è‡ºâ€æ–‡ä»¶å¤¾ã€‚
  D.æ ¹æ“š(jù)需è¦é¸æ“‡å°æ‡‰(yÄ«ng)的函數(shù)åº«é€™é‡Œé¸æ“‡64ä½åº«ã€‚
  E.解壓MATLABå£“ç¸®åŒ…ï¼Œé‡Œé¢æœ‰å°æ‡‰(yÄ«ng)的函數(shù)庫。
  4.å°‡å» å•†æä¾›çš„庫文件以åŠç›¸é—œ(guÄn)文件復(fù)制到MATLAB工作目錄下。(1)“zauxdll.dllâ€ã€â€œzmotion.dllâ€ã€â€œzauxdll2.hâ€ã€â€œzmotion.hâ€å››å€‹æ–‡ä»¶æ‹·è²åˆ°matlab工作目錄下。如:C:\...\....\R2019a\bin
  (2)將“zauxdll2.hâ€ã€â€œzmotion.hâ€å…©å€‹æ–‡ä»¶æ‹·è²åˆ°include目錄。
  如:C:\...\....\R2019a\extern\include
  (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â€èª¿(dià o)用zauxdll函數(shù)庫ä¸å‡½æ•¸(shù)ï¼Œè©³ç´°å¯æŸ¥çœ‹MATLAB幫助。有關(guÄn)åƒæ•¸(shù)傳éžï¼Œåœ¨calllib幫助→傳éžåƒæ•¸(shù)。
  至æ¤å‡½æ•¸(shù)åº«æ·»åŠ å®Œæˆï¼Œå¯é€²è¡ŒMATLABé …ç›®é–‹ç™¼(fÄ)。
  02ã€ç›¸é—œ(guÄn)PC函數(shù)介紹
  1.PC函數(shù)手冊在光盤資料查看,具體路徑如下:“光盤資料\8.PC函數(shù)\函數(shù)庫2.1\ZMotion函數(shù)庫編程手冊 V2.1.pdfâ€ã€‚
  2.PC編程,一般如果網(wÇŽng)å£å°æŽ§åˆ¶å™¨å’Œå·¥æŽ§æ©Ÿé€²è¡ŒéˆæŽ¥ã€‚ç¶²(wÇŽng)å£éˆæŽ¥å‡½æ•¸(shù)æŽ¥å£æ˜¯ZAux_OpenEth();å¦‚æžœéˆæŽ¥æˆåŠŸï¼Œè©²æŽ¥å£æœƒè¿”å›žä¸€å€‹éˆæŽ¥å¥æŸ„ã€‚é€šéŽæ“ä½œé€™å€‹éˆæŽ¥å¥æŸ„å¯ä»¥å¯¦ç¾(xià n)å°æŽ§åˆ¶å™¨çš„æŽ§åˆ¶ã€‚
  (1)ZAux_OpenEth()接å£èªªæ˜Ž
  (2)é …ç›®æ‡‰(yÄ«ng)用截圖
  (3)命令行應(yīng)用截圖
  3ã€ä½¿ç”¨å–®è»¸é‹å‹•相關(guÄn)的指令æ“ä½œéˆæŽ¥å¥æŸ„“g_handleâ€ï¼Œå°æŽ§åˆ¶å™¨é€²è¡Œå–®è»¸é‹å‹•控制,單軸é‹å‹•相關(guÄn)的指令如下。
  (1)單軸相å°é‹å‹•指令
  (2)單軸絕å°é‹å‹•指令
  (3)單軸æŒçºŒ(xù)é‹å‹•
  (4)å–®è»¸åœæ¢é‹å‹•
  03ã€MATLAB進行單軸é‹å‹•開發(fÄ)
  1. 單軸é‹å‹•控制人機交互界é¢å¦‚下。
  2. 例程簡易æµç¨‹åœ–。
  3. 在MATLABçš„GUI界é¢ä¸æ–°å»ºæŽ§ä»¶é€²è¡Œç¨‹åºç·¨å¯«ã€‚
  A.在工具欄新建“普通按鈕â€å’Œå¯ç·¨è¼¯æ–‡æœ¬ï¼Œå¹¶é›™æ“Šä¿®æ”¹å±¬æ€§ã€‚
  B.控件å³éµï¼ŒæŸ¥çœ‹å›žèª¿(dià o),“CallBackâ€å‰µ(chuà ng)建回調(dià o)響應(yÄ«ng)函數(shù)ï¼Œæ¤æ™‚自動新建.mæ ¼å¼æ–‡ä»¶ï¼Œåœ¨é€™é‡Œé€²è¡Œç•Œé¢éŸ¿æ‡‰(yÄ«ng)程åºç·¨å¯«ã€‚
  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 untitledhandles.output = hObject;% Update handles structureguidata(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.ç·¨å¯«â€œé€£æŽ¥æŽ§åˆ¶å™¨â€æŒ‰éˆ•程åºï¼Œèª¿(dià o)用接å£â€œ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('連接控制器æˆåŠŸ\n'); set(gcf,'NumberTitle', 'off', 'Name', '連接æˆåŠŸ'); %msgbox('Connection successful'); start( handles.timer );%啟動定時器 else fprintf('連接控制器失敗,錯誤碼%d\n',res); set(gcf,'NumberTitle', 'off', 'Name', '連接失敗'); msgbox('Connection failure,Please check the IP!');%連接控制器失敗,請檢查IPåœ°å€ return;end
  5.主界é¢å³éµæ·»åŠ éŠ·æ¯€å‡½æ•¸(shù),調(dià o)用“ZAux_Close()â€é—œ(guÄn)閉連接。
  ·
  % --- Executes during object deletion, before destroying properties.é—œ(guÄn)閉連接function figure1_DeleteFcn(hObject, eventdata, handles) global g_handleptr;%å®šç¾©é€£æŽ¥å¥æŸ„ calllib('zauxdll','ZAux_Close',g_handleptr);disp("é—œ(guÄn)閉與控制器連接");%打å°
  6.通éŽå®šæ™‚器更新控制器軸狀態(tà i):當(dÄng)å‰å標(biÄo)ã€ç•¶(dÄng)å‰é€Ÿåº¦ç‰ã€‚·
  ·
  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',"ç•¶(dÄng)å‰é‹å‹•狀態(tà i):é‹è¡Œ"); else set(handles.edit_runstate,'String',"ç•¶(dÄng)å‰é‹å‹•狀態(tà i):åœæ¢"); end set(handles.edit_curpos,'String',"ç•¶(dÄng)å‰è»¸å標(biÄo):" +str_curpos);set(handles.edit_curspeed,'String',"ç•¶(dÄng)å‰è»¸é€Ÿåº¦ï¼š" +str_curspeed);
  7.通éŽå•Ÿå‹•按鈕的事件處ç†å‡½æ•¸(shù)來è¨(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ã€èª¿(dià o)試與監(jiÄn)控
  編è¯é‹è¡Œä¾‹ç¨‹ï¼ŒåŒæ™‚連接ZDevelop軟件進行調(dià o)試,å°é‹å‹•æŽ§åˆ¶çš„è»¸åƒæ•¸(shù)å’Œé‹å‹•情æ³é€²è¡Œç›£(jiÄn)控。
  1.連接ZDevelop軟件,并點擊“視圖â€â†’â€œç¤ºæ³¢å™¨â€æ‰“開示波器å°è»¸é‹å‹•情æ³é€²è¡Œç›£(jiÄn)控。
  2.é‹è¡Œä¸Šä½æ©Ÿè»Ÿä»¶é€²è¡Œèª¿(dià o)試監(jiÄn)控。
  本次,æ£é‹å‹•技術(shù)EtherCATé‹å‹•控制器的MATLAB開發(fÄ),就分享到這里。
  更多精彩內(nèi)容請關(guÄn)注“æ£é‹å‹•å°åŠ©æ‰‹â€å…¬çœ¾è™Ÿï¼Œéœ€è¦ç›¸é—œ(guÄn)開發(fÄ)ç’°(huán)境與例程代碼,請咨詢æ£é‹å‹•技術(shù)銷售工程師:400-089-8936。
  本文由æ£é‹å‹•技術(shù)原創(chuà ng),æ¡è¿Žå¤§å®¶è½‰(zhuÇŽn)載,共åŒå¸(xué)ç¿’(xÃ),一起æé«˜ä¸åœ‹æ™ºèƒ½åˆ¶é€ æ°´å¹³ã€‚æ–‡ç« ç‰ˆæ¬Š(quán)æ¸æ£é‹å‹•技術(shù)所有,如有轉(zhuÇŽn)è¼‰è«‹æ³¨æ˜Žæ–‡ç« ä¾†æºã€‚
ä¸åœ‹å‚³å‹•ç¶²(wÇŽng)版權(quán)與å…責(zé)è²æ˜Žï¼šå‡¡æœ¬ç¶²(wÇŽng)注明[來æºï¼šä¸åœ‹å‚³å‹•ç¶²(wÇŽng)]的所有文å—ã€åœ–片ã€éŸ³è¦–å’Œè¦–é »æ–‡ä»¶ï¼Œç‰ˆæ¬Š(quán)å‡ç‚ºä¸åœ‹å‚³å‹•ç¶²(wÇŽng)(www.hysjfh.com)ç¨å®¶æ‰€æœ‰ã€‚如需轉(zhuÇŽn)載請與0755-82949061è¯(lián)系。任何媒體ã€ç¶²(wÇŽng)站或個人轉(zhuÇŽn)è¼‰ä½¿ç”¨æ™‚é ˆæ³¨æ˜Žä¾†æºâ€œä¸åœ‹å‚³å‹•ç¶²(wÇŽng)â€ï¼Œé•å者本網(wÇŽng)將追究其法律責(zé)任。
本網(wÇŽng)轉(zhuÇŽn)載并注明其他來æºçš„稿件,å‡ä¾†è‡ªäº’è¯(lián)ç¶²(wÇŽng)或æ¥(yè)å…§(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuÇŽn)載請ä¿ç•™ç¨¿ä»¶ä¾†æºåŠä½œè€…ï¼Œç¦æ¢æ“…自篡改,é•è€…è‡ªè² (fù)版權(quán)法律責(zé)任。
相關(guÄn)資訊