時間:2021-07-07 17:19:30來æºï¼šæ·±åœ³å¸‚æ£é‹å‹•技術有é™å…¬å¸
  今天,æ£é‹å‹•å°åŠ©æ‰‹çµ¦å¤§å®¶åˆ†äº«ä¸€ä¸‹é‹å‹•æŽ§åˆ¶å¡æ‡‰ç”¨é–‹ç™¼æ•™ç¨‹ä¹‹MATLAB。
  一ECI2828硬件介紹
  ECI2828系列é‹å‹•æŽ§åˆ¶å¡æ”¯æŒå¤šé”16 軸直線æ’補ã€ä»»æ„圓弧æ’補ã€ç©ºé–“圓弧ã€èžºæ—‹æ’補ã€é›»å凸輪ã€é›»å齒輪ã€åŒæ¥è·Ÿéš¨ã€è™›æ“¬è»¸å’Œæ©Ÿæ¢°æ‰‹æŒ‡ä»¤ç‰;采用優化的網絡通訊å”è°å¯ä»¥å¯¦ç¾å¯¦æ™‚çš„é‹å‹•控制。
  ECI2828系列é‹å‹•é‹å‹•æŽ§åˆ¶å¡æ”¯æŒä»¥å¤ªç¶²ï¼Œ232 通訊接å£å’Œé›»è…¦ç›¸é€£ï¼ŒæŽ¥æ”¶é›»è…¦çš„æŒ‡ä»¤é‹è¡Œï¼Œå¯ä»¥é€šéŽEtherCAT總線和CAN總線去連接å„個擴展模塊,從而擴展輸入輸出點數或é‹å‹•軸。
  ECI2828系列é‹å‹•控制å¡çš„æ‡‰ç”¨ç¨‹åºå¯ä»¥ä½¿ç”¨ VCã€VBã€VSã€C++以åŠC#ç‰è»Ÿä»¶ä¾†é–‹ç™¼ï¼Œç¨‹åºé‹è¡Œæ™‚需è¦å‹•態庫 zmotion.dll。調試時å¯ä»¥æŠŠZDevelopè»Ÿä»¶åŒæ™‚連接到控制器,從而方便調試,方便觀察。
  ECI2828系列典型連接é…置圖
  二MATLAB進行é‹å‹•控制開發
ã€€ã€€â… æ–°å»ºå·¥ç¨‹å¹¶æ·»åŠ å‡½æ•¸
  1.在MATLAB R2019aèœå–®â€œä¸»é â€â†’“新建â€â†’ “工程â€â†’ â€œç©ºç™½å·¥ç¨‹â€ ï¼Œå•Ÿå‹•å‰µå»ºé …ç›®å‘導。
  2.新建GUI。(命令行輸入guide 新建GUI)
  3.æ‰¾åˆ°å» å®¶æä¾›çš„光盤資料里é¢çš„MATLAB函數庫,路徑如下(64ä½åº«ç‚ºä¾‹)。
  A.é€²å…¥å» å•†æä¾›çš„光盤資料找到“8.PCå‡½æ•¸â€æ–‡ä»¶å¤¾ï¼Œå¹¶é»žæ“Šé€²å…¥ã€‚
  B.鏿“‡â€œå‡½æ•¸åº«2.1â€æ–‡ä»¶å¤¾ã€‚
  C.鏿“‡â€œWindowså¹³è‡ºâ€æ–‡ä»¶å¤¾ã€‚
  D.æ ¹æ“šéœ€è¦é¸æ“‡å°æ‡‰çš„å‡½æ•¸åº«é€™é‡Œé¸æ“‡64ä½åº«ã€‚
  E.解壓MATLABå£“ç¸®åŒ…ï¼Œé‡Œé¢æœ‰å°æ‡‰çš„函數庫。
  4.å°‡å» å•†æä¾›çš„庫文件以åŠç›¸é—œæ–‡ä»¶å¾©åˆ¶åˆ°MATLAB工作目錄下。
  A.“zauxdll.dllâ€ã€â€œzmotion.dllâ€ã€â€œzauxdll2.hâ€ã€â€œzmotion.hâ€å››å€‹æ–‡ä»¶æ‹·è²åˆ°matlab工作目錄下。
  如:C:\...\....\R2019a\bin
  B.將“zauxdll2.hâ€ã€â€œzmotion.hâ€å…©å€‹æ–‡ä»¶æ‹·è²åˆ°include目錄。
  如:C:\...\....\R2019a\extern\include
  C.æ‹·è²â€œzauxdll.dllâ€æ–‡ä»¶åˆ°æ–°å»ºçš„工程目錄ä¸ã€‚
5.é…ç½®MATLAB開發環境。
  A.在matlab命令行輸入“mbuild -setupâ€ä»¥åŠâ€œmex -setupâ€ï¼Œé¸æ“‡å®‰è£çš„c語言編è¯å™¨ã€‚
  B.使用loadlibrary('zauxdll.dll','zauxdll2.h');åŠ è¼‰å‡½æ•¸åº«ã€‚
  C.libfunctions zauxdll -full;或 libfunctionsview zauxdll;顯示共享庫函數簽å。
  6.使用“calllibâ€èª¿ç”¨zauxdll函數庫ä¸å‡½æ•¸ï¼Œè©³ç´°å¯æŸ¥çœ‹MATLAB幫助。
ã€€ã€€â—æœ‰é—œåƒæ•¸å‚³éžï¼Œåœ¨calllib幫助→傳éžåƒæ•¸ã€‚
  â—至æ¤å‡½æ•¸åº«æ·»åŠ å®Œæˆï¼Œå¯é€²è¡ŒMATLABé …ç›®é–‹ç™¼ã€‚
  Ⅱ查看PC函數手冊
  1.PC函數手冊也在光盤資料里é¢ï¼Œå…·é«”路徑如下:“光盤資料\8.PC函數\函數庫2.1\ZMotion函數庫編程手冊 V2.1.pdfâ€ã€‚
  2.PC編程,一般如果網å£å°æŽ§åˆ¶å™¨å’Œå·¥æŽ§æ©Ÿé€²è¡ŒéˆæŽ¥ã€‚ç¶²å£éˆæŽ¥å‡½æ•¸æŽ¥å£æ˜¯ZAux_OpenEth();å¦‚æžœéˆæŽ¥æˆåŠŸï¼Œè©²æŽ¥å£æœƒè¿”å›žä¸€å€‹éˆæŽ¥å¥æŸ„ã€‚é€šéŽæ“ä½œé€™å€‹éˆæŽ¥å¥æŸ„å¯ä»¥å¯¦ç¾å°æŽ§åˆ¶å™¨çš„æŽ§åˆ¶ã€‚
  ZAux_OpenEth()接å£èªªæ˜Žï¼š
ã€€ã€€é …ç›®æ‡‰ç”¨æˆªåœ–ï¼š
  命令行應用截圖:
  3ã€ä½¿ç”¨å–®è»¸é‹å‹•相關的指令æ“ä½œéˆæŽ¥å¥æŸ„“g_handleâ€ï¼Œå°æŽ§åˆ¶å™¨é€²è¡Œå–®è»¸é‹å‹•控制,單軸é‹å‹•相關的指令如下。
  單軸相å°é‹å‹•指令:
  單軸絕å°é‹å‹•指令:
  單軸æŒçºŒé‹å‹•:
ã€€ã€€å–®è»¸åœæ¢é‹å‹•:
  ⅢMATLAB進行單軸é‹å‹•開發
  1.單軸é‹å‹•控制人機交互界é¢å¦‚下。
  2.例程簡易æµç¨‹åœ–。
  3.在MATLABçš„GUI界é¢ä¸æ–°å»ºæŽ§ä»¶é€²è¡Œç¨‹åºç·¨å¯«ã€‚
  A.在工具欄新建“普通按鈕â€å’Œå¯ç·¨è¼¯æ–‡æœ¬ï¼Œå¹¶é›™æ“Šä¿®æ”¹å±¬æ€§ã€‚
  B.控件å³éµï¼ŒæŸ¥çœ‹å›žèª¿ï¼Œâ€œCallBackâ€å‰µå»ºå›žèª¿éŸ¿æ‡‰å‡½æ•¸ï¼Œæ¤æ™‚自動新建.mæ ¼å¼æ–‡ä»¶ï¼Œåœ¨é€™é‡Œé€²è¡Œç•Œé¢éŸ¿æ‡‰ç¨‹åºç·¨å¯«ã€‚
  C.å°‡è‡ªå‹•å‰µå»ºçš„æ–‡ä»¶æ·»åŠ åˆ°é …ç›®ä¸ã€‚
  D.在“XXX_OpeningFcnâ€å‡½æ•¸ä¸åŠ è¼‰å‡½æ•¸åº«ï¼Œå¹¶å®šç¾©å…¨å±€è®Šé‡ã€‚
  % --- 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'))%åŠ è¼‰å‡½æ•¸åº« loadlibrary('zauxdll.dll','zauxdll2.h'); end disp("åŠ è¼‰å‡½æ•¸åº«");%å‘½ä»¤è¡Œæ‰“å° 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('連接控制器æˆåŠŸ\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.主界é¢å³éµæ·»åŠ éŠ·æ¯€å‡½æ•¸ï¼Œèª¿ç”¨â€œ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.通éŽå®šæ™‚器更新控制器軸狀態:當å‰å標ã€ç•¶å‰é€Ÿåº¦ç‰ã€‚
  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',"ç•¶å‰é‹å‹•狀態:é‹è¡Œ"); else set(handles.edit_runstate,'String',"ç•¶å‰é‹å‹•狀態:åœæ¢"); end set(handles.edit_curpos,'String',"ç•¶å‰è»¸å標:" +str_curpos); set(handles.edit_curspeed,'String',"ç•¶å‰è»¸é€Ÿåº¦ï¼š" +str_curspeed);
  7.通éŽå•Ÿå‹•按鈕的事件處ç†å‡½æ•¸ä¾†è¨ç½®è»¸åƒæ•¸å¹¶é–‹å§‹é‹å‹•。
  % --- 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) %//連續é‹å‹• 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.通éŽåœæ¢æŒ‰éˆ•的事件處ç†å‡½æ•¸ä¾†åœæ¢æ’補é‹å‹•。
  % --- 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);
  Ⅳ調試與監控
  1.ç·¨è¯é‹è¡Œä¾‹ç¨‹ï¼ŒåŒæ™‚連接ZDevelop軟件進行調試,å°é‹å‹•æŽ§åˆ¶çš„è»¸åƒæ•¸å’Œé‹å‹•情æ³é€²è¡Œç›£æŽ§ã€‚
  (1)連接ZDevelop軟件,并點擊“視圖â€â†’â€œç¤ºæ³¢å™¨â€æ‰“開示波器å°è»¸é‹å‹•情æ³é€²è¡Œç›£æŽ§ã€‚
  (2)é‹è¡Œä¸Šä½æ©Ÿè»Ÿä»¶é€²è¡Œèª¿è©¦ç›£æŽ§ã€‚
  2.è¦–é »æ¼”ç¤ºã€‚
  本次,æ£é‹å‹•技術EtherCATé‹å‹•æŽ§åˆ¶å¡æ‡‰ç”¨é–‹ç™¼æ•™ç¨‹ä¹‹MATLAB,就分享到這里。
  本文由æ£é‹å‹•技術原創,æ¡è¿Žå¤§å®¶è½‰è¼‰ï¼Œå…±åŒå¸ç¿’,一起æé«˜ä¸åœ‹æ™ºèƒ½åˆ¶é€ æ°´å¹³ã€‚æ–‡ç« ç‰ˆæ¬Šæ¸æ£é‹å‹•æŠ€è¡“æ‰€æœ‰ï¼Œå¦‚æœ‰è½‰è¼‰è«‹æ³¨æ˜Žæ–‡ç« ä¾†æºã€‚
上一篇:å”作機器人在工æ¥ç”Ÿç”¢ä¸çš„優勢
下一篇:硅光電å€å¢žç®¡å‚³æ„Ÿå™¨å¦‚何實ç¾...
ä¸åœ‹å‚³å‹•網版權與å…è²¬è²æ˜Žï¼šå‡¡æœ¬ç¶²æ³¨æ˜Ž[來æºï¼šä¸åœ‹å‚³å‹•ç¶²]的所有文å—ã€åœ–片ã€éŸ³è¦–å’Œè¦–é »æ–‡ä»¶ï¼Œç‰ˆæ¬Šå‡ç‚ºä¸åœ‹å‚³å‹•ç¶²(www.siyutn.com)ç¨å®¶æ‰€æœ‰ã€‚如需轉載請與0755-82949061è¯ç³»ã€‚任何媒體ã€ç¶²ç«™æˆ–å€‹äººè½‰è¼‰ä½¿ç”¨æ™‚é ˆæ³¨æ˜Žä¾†æºâ€œä¸åœ‹å‚³å‹•ç¶²â€ï¼Œé•å者本網將追究其法律責任。
本網轉載并注明其他來æºçš„稿件,å‡ä¾†è‡ªäº’è¯ç¶²æˆ–æ¥å…§æŠ•稿人士,版權屬于原版權人。轉載請ä¿ç•™ç¨¿ä»¶ä¾†æºåŠä½œè€…ï¼Œç¦æ¢æ“…自篡改,é•è€…è‡ªè² ç‰ˆæ¬Šæ³•å¾‹è²¬ä»»ã€‚
相關資訊