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