時(shí)間:2021-11-23 16:44:15來(lái)源:深圳市正運(yùn)動(dòng)技術(shù)有限公司
今天,正運(yùn)動(dòng)小助手給大家分享一下EtherCAT運(yùn)動(dòng)控制器之ZMIO300模塊的使用。
01、材料準(zhǔn)備與控制器接線(xiàn)參考
一、材料準(zhǔn)備
1.電腦1臺(tái),安裝ZDevelop軟件。2.控制器1個(gè),ZMC432(帶Ethercat接口即可)。3.24V直流電源1個(gè)(給控制器和ZMIO模塊供電)。4.ZMIO擴(kuò)展模塊一套+EtherCAT總線(xiàn)驅(qū)動(dòng)器。5.控制器接線(xiàn)端子若干,導(dǎo)線(xiàn)若干。6.網(wǎng)線(xiàn)若干。
二、接線(xiàn)參考
02、實(shí)驗(yàn)思路
1.我們先將 ZMC432控制器、ZMIO 300擴(kuò)展模塊、Ethercat總線(xiàn)驅(qū)動(dòng)進(jìn)行組合成一個(gè)小系統(tǒng)。然后通過(guò)Basic編程實(shí)現(xiàn)EtherCAT總線(xiàn)初始化,從而實(shí)現(xiàn)控制器對(duì)ZMIO 300擴(kuò)展模塊和總線(xiàn)驅(qū)動(dòng)器控制。
2.如果采用上位機(jī)開(kāi)發(fā),可以通過(guò)接口ZAux_Execute()來(lái)調(diào)用下載到控制器里面的總線(xiàn)初始化的Basic函數(shù),來(lái)實(shí)現(xiàn)總線(xiàn)設(shè)備的初始化。
03、ZMIO 300擴(kuò)展模塊的介紹和接線(xiàn)
1.ZMIO擴(kuò)展模塊的組成。
通訊模塊:該模塊有ZMIO300-ECAT 通訊模塊和ZMIO300-CAN 通訊模塊兩種,ZMIO300-ECAT 通訊模塊的使用需要通過(guò)一段Basic代碼進(jìn)行總線(xiàn)初始化才能通訊上。
ZMIO300-CAN 通訊模塊使用簡(jiǎn)單,只要預(yù)先設(shè)置好撥碼開(kāi)關(guān),然后上電即可實(shí)現(xiàn)通訊。但是ZMIO300-CAN 通訊模塊不能設(shè)置AD/DA擴(kuò)展子模塊的量程和模式。
2.硬件接線(xiàn)。
ECAT耦合器+擴(kuò)展子模塊接線(xiàn)參考:
注意:通訊模塊和擴(kuò)展子模塊都需要24V電源供電。
04、ECAT總線(xiàn)初始化的Basic代碼編寫(xiě)
1.EtherCAT總線(xiàn)掃描的Basic代碼。
'/************************************************************'任務(wù)編號(hào):無(wú)'函數(shù)功能:總線(xiàn)掃描'Input:無(wú)'Output:無(wú) '返回值:無(wú)'備注:無(wú) '*************************************************************/GLOBAL SUB Ecat_ScanSlot() LOCAL i '初始化還原軸類(lèi)型 RAPIDSTOP(2) For i=0 to gv_MaxAxisNum - 1 AXIS_ENABLE(i) = 0 '關(guān)軸使能 atype(i)=0 '設(shè)置為虛擬軸 AXIS_ADDRESS(i) =0 DELAY(10) '防止所有驅(qū)動(dòng)器全部同時(shí)切換使能導(dǎo)致瞬間電流過(guò)大 next '掃描總線(xiàn) SLOT_STOP(0) DELAY(200) SLOT_SCAN(0) '判斷總線(xiàn)掃描結(jié)果 IF RETURN THEN if NODE_COUNT(0) <> (Gc_BusAxisNodeNum + Gc_BusIoNodeNum) then gv_BusScanState = 2 '總線(xiàn)掃描失敗,實(shí)際數(shù)量不一致 ?"總線(xiàn)掃描失敗,節(jié)點(diǎn)實(shí)際數(shù)量不一致" ELSE TRACE "總線(xiàn)掃描成功,連接設(shè)備數(shù):", NODE_COUNT(0) gv_BusScanState = 1 '總線(xiàn)掃描成功 endif ELSEIF gv_BusScanState = -1 '總線(xiàn)掃描失敗 ?"總線(xiàn)掃描失敗" ENDIFENDSUB
2.設(shè)置總線(xiàn)IO擴(kuò)展板起始IO編號(hào)。
'/************************************************************'任務(wù)編號(hào):無(wú)'函數(shù)功能:IO擴(kuò)展板初始化'Input:無(wú)'Output:無(wú) '返回值:無(wú)'備注:無(wú) '*************************************************************/GLOBAL SUB Ecat_IO_Init() gv_BusIoNodeNum = 0 '初始化總線(xiàn)IO擴(kuò)展板數(shù)量 '如果總線(xiàn)掃描失敗 IF gv_BusScanState <> 1 THEN '總線(xiàn)掃描失敗,io擴(kuò)展板也掃描失敗 gv_NodeIoInitFlag=-1 RETURN ENDIF LOCAL Node_Num '節(jié)點(diǎn)設(shè)備編號(hào) LOCAL Drive_Vender '當(dāng)前設(shè)備廠(chǎng)商編號(hào) LOCAL Drive_Device '設(shè)備編號(hào) LOCAL Drive_Alias '設(shè)備撥碼ID Dealy(200) '啟動(dòng)總線(xiàn) SLOT_START(0) if return =0 then TRACE "IO擴(kuò)展板初始化,啟動(dòng)總線(xiàn)失敗" gv_NodeIoInitFlag=-1 return endif '開(kāi)始映射總線(xiàn)IO for Node_Num= 0 to NODE_COUNT(0) - 1 '遍歷掃描到的所有從站節(jié)點(diǎn) Drive_Vender = NODE_INFO(0,Node_Num,0) '讀取設(shè)備廠(chǎng)商 Drive_Device = NODE_INFO(0,Node_Num,1) '讀取設(shè)備編號(hào) Drive_Alias= NODE_INFO(0,Node_Num,3) '讀取設(shè)備撥碼ID if NODE_AXIS_COUNT(0,Node_Num) = 0 then '判斷當(dāng)前節(jié)點(diǎn)是否有電機(jī) Sub_SetNodeIo(Node_Num,Drive_Vender,Drive_Device,Gc_EcatIoStartId+(16* gv_BusIoNodeNum)) '映射擴(kuò)展模塊IO gv_BusIoNodeNum = gv_BusIoNodeNum + 1 endif next gv_NodeIoInitFlag=1 '判斷IO擴(kuò)展板數(shù)目是否正確 if gv_BusIoNodeNum <> Gc_BusIoNodeNum then ?"掃描到的IO擴(kuò)展板數(shù)目不正確" gv_NodeIoInitFlag=2 endif ENDSUB
'/************************************************************'任務(wù)編號(hào):無(wú)'函數(shù)功能:總線(xiàn)IO模塊映射'Input:無(wú)'Output:無(wú) '返回值:無(wú)'備注:通過(guò)NODE_IO(0,Node_Num)分配模塊IO起始地址,不使用擴(kuò)展模塊的時(shí)候刪掉此段'*************************************************************/GLOBAL SUB Sub_SetNodeIo(iNode,iVender,iDevice,i_IoNum) if iVender = $41B then '正運(yùn)動(dòng)IO擴(kuò)展模塊 NODE_IO(0,iNode) = i_IoNum NODE_AIO(0,iNode) = Gc_EcatAIoStartId '設(shè)置zmio的ad模式為0~20mA電流模式 SDO_WRITE(0,iNode,$5003,1,6,5) SDO_WRITE(0,iNode,$5004,1,6,13) endifENDSUB
3.總線(xiàn)驅(qū)動(dòng)器軸號(hào)映射。
'/************************************************************'任務(wù)編號(hào): 無(wú)'函數(shù)功能: 總線(xiàn)軸初始化'Input: 無(wú)'Output: 無(wú) '返回值: 無(wú)'備注: 通過(guò)NODE_IO(0,Node_Num)分配模塊IO起始地址,不使用擴(kuò)展模塊的時(shí)候刪掉此段'*************************************************************/GLOBAL SUB Ecat_Axis_Init() LOCAL NodeSum_Num ,BusAxis_Num ,NodeAxis_Num '設(shè)備總數(shù)、總線(xiàn)軸總數(shù)、每個(gè)節(jié)點(diǎn)上的電機(jī)數(shù) LOCAL Drive_Vender,Drive_Device,Drive_Alias '驅(qū)動(dòng)廠(chǎng)商編號(hào)、驅(qū)動(dòng)設(shè)備編號(hào)、驅(qū)動(dòng)設(shè)備撥碼ID LOCAL j,i '如果總線(xiàn)掃描失敗 IF gv_BusScanState <> 1 THEN gv_EcatAxisInitFlag=-1 RETURN ENDIF '總線(xiàn)軸總數(shù),從0開(kāi)始計(jì)數(shù) BusAxis_Num = 0 FOR i = 0 TO NODE_COUNT(0) - 1 NodeAxis_Num = NODE_AXIS_COUNT(0,i) '讀取設(shè)備電機(jī)數(shù) Drive_Vender = NODE_INFO(0,i,0) '讀取驅(qū)動(dòng)器廠(chǎng)商 Drive_Device = NODE_INFO(0,i,1) '讀取設(shè)備編號(hào) Drive_Alias = NODE_INFO(0,i,3) '讀取設(shè)備撥碼ID FOR j = 0 TO NodeAxis_Num - 1 AXIS_ADDRESS(BusAxis_Num+Gc_BusAxisStartId) = BusAxis_Num + 1 '映射軸號(hào) ATYPE(BusAxis_Num+Gc_BusAxisStartId) = 65 '設(shè)置控制模式 65-位置 66-速度 67-轉(zhuǎn)矩 詳細(xì)參照AXISSTATUS DRIVE_PROFILE(BusAxis_Num+Gc_BusAxisStartId) = 0 'PDO類(lèi)型 DISABLE_GROUP(BusAxis_Num+Gc_BusAxisStartId) '每軸單獨(dú)分組 'Sub_SetNodePara(i,Drive_Vender,Drive_Device) '設(shè)置特殊總線(xiàn)參數(shù) BusAxis_Num = BusAxis_Num + 1 '總線(xiàn)軸計(jì)數(shù)+1 NEXT NEXT if BusAxis_Num = Gc_BusAxisNodeNum then TRACE "軸掃描映射完成,連接總線(xiàn)軸數(shù):",BusAxis_Num else ?"掃描到的總線(xiàn)軸數(shù)目不正確" gv_EcatAxisInitFlag =2 RETURN endif DELAY(100) SLOT_START(0) IF RETURN THEN TRACE "開(kāi)始清除驅(qū)動(dòng)器報(bào)警" FOR i = Gc_BusAxisStartId TO Gc_BusAxisStartId + BusAxis_Num - 1 BASE(i) DRIVE_CLEAR(0) WA(10) DRIVE_CONTROLWORD(i) = 128 WA(10) DRIVE_CONTROLWORD(i)=6 WA(10) DRIVE_CONTROLWORD(i)=15 WA(10) NEXT DELAY(100) TRACE "控制器報(bào)警清除完成" DATUM(0) DELAY(1000) TRACE"開(kāi)始伺服使能" WDOG = 1 FOR i = Gc_BusAxisStartId TO Gc_BusAxisStartId + BusAxis_Num - 1 AXIS_ENABLE(i) = 1 NEXT TRACE"伺服使能完成" gv_EcatAxisInitFlag =1 ELSE TRACE"總線(xiàn)開(kāi)啟失敗" gv_EcatAxisInitFlag=-1 ENDIF ENDSUB
05、設(shè)置ZMIO模擬量擴(kuò)展模塊的量程和模式
可通過(guò)SDO_Write指令對(duì)ZMIO模擬量擴(kuò)展模塊的量程和模式進(jìn)行設(shè)置。(需要是ECAT 耦合器才支持修改模擬量模塊的模式和量程)。
06、上位機(jī)開(kāi)發(fā)進(jìn)行總線(xiàn)軸和模塊的初始化
1.通過(guò)ZDevelop軟件將該Basic程序下載到控制器中。
2.通過(guò)ZAux_Execute()來(lái)調(diào)用控制器里面的Basic函數(shù),進(jìn)行EtherCAT總線(xiàn)初始化。
示例:ZAux_Execute(g_handle, "Runtask 0,EcatInit_Para()", NULL, 0)
3.通過(guò)ZAux_Direct_GerVariableInt()指令來(lái)讀取Basic文件定義的全局整形變量,比如讀取EcatAxisInitFlag和NodeIoInitFlag這兩個(gè)變量來(lái)獲取Basic程序那邊總線(xiàn)初始化的情況。
示例:
ZAux_Direct_GetVariableInt(g_handle,"EcatAxisInitFlag",&AxisInitFlag)
ZAux_Direct_GetVariableInt(g_handle,"NodeIoInitFlag",&IoInitFlag)
完整代碼獲取地址
▼
本次,正運(yùn)動(dòng)技術(shù)EtherCAT運(yùn)動(dòng)控制器之ZMIO300模塊的使用,就分享到這里。
更多精彩內(nèi)容請(qǐng)關(guān)注“正運(yùn)動(dòng)小助手”公眾號(hào),需要相關(guān)開(kāi)發(fā)環(huán)境與例程代碼,請(qǐng)咨詢(xún)正運(yùn)動(dòng)技術(shù)銷(xiāo)售工程師:400-089-8936。
本文由正運(yùn)動(dòng)技術(shù)原創(chuàng),歡迎大家轉(zhuǎn)載,共同學(xué)習(xí),一起提高中國(guó)智能制造水平。文章版權(quán)歸正運(yùn)動(dòng)技術(shù)所有,如有轉(zhuǎn)載請(qǐng)注明文章來(lái)源。
中國(guó)傳動(dòng)網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來(lái)源:中國(guó)傳動(dòng)網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國(guó)傳動(dòng)網(wǎng)(www.wangxinlc.cn)獨(dú)家所有。如需轉(zhuǎn)載請(qǐng)與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個(gè)人轉(zhuǎn)載使用時(shí)須注明來(lái)源“中國(guó)傳動(dòng)網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明其他來(lái)源的稿件,均來(lái)自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請(qǐng)保留稿件來(lái)源及作者,禁止擅自篡改,違者自負(fù)版權(quán)法律責(zé)任。
產(chǎn)品新聞
更多>2025-06-09
從外觀到內(nèi)核的「超進(jìn)化」!NK550M五軸...
2025-06-06
2025-05-19
B1系列脈沖型伺服工藝段功能上線(xiàn),讓機(jī)...
2025-04-30
性能躍升20%!維宏NK300CX Plus數(shù)控系統(tǒng)...
2025-04-11
rpi-image-gen:樹(shù)莓派軟件鏡像構(gòu)建的終...
2025-04-08
推薦專(zhuān)題
更多>