今天,正運動小助手給大家分享一下ZMC432-V2運動控制器在EtherCAT總線下通過PDO指令實現(xiàn)PDO數(shù)據(jù)字典交互,并以SMC總線電缸為例進行控制的快速入門教程。
0 1 ZMC432-V2運動控制器介紹
ZMC432-V2高性能多軸運動控制器是一款兼容EtherCAT總線和脈沖型的獨立式運動控制器,自帶6軸本地差分脈沖軸,最多可擴展至32軸,能實現(xiàn)總線軸+脈沖軸混合插補的多軸運動控制場合。同時支持正運動遠程顯示功能,能提供網(wǎng)絡組態(tài)顯示,可實時監(jiān)控和調(diào)整參數(shù)配置。
ZMC432-V2硬件功能特性
(1)支持32軸運動控制(脈沖+EtherCAT總線),EtherCAT最小通訊周期可達125us。
(2)24路通用輸入、12路通用輸出,2路模擬量輸出(DA),其中包括2路高速輸入和2路高速輸出。
(3)6路差分脈沖軸輸出,總線軸、脈沖軸可混合插補。
(4)內(nèi)置多項實時性運動控制功能,例如視覺飛拍、多維PSO、高速位置鎖存,多軸同步運行等。
(5)可通過EtherCAT擴展模塊進行IO硬件資源擴展,可擴展至4096個隔離輸入口和4096個隔離輸出口。
(6)具備豐富的運動控制功能,如點位運動、電子凸輪、直線插補、圓弧插補、連續(xù)軌跡加工。
(7)支持掉電檢測、掉電存儲,多種程序加密方式,能夠有效防止系統(tǒng)故障,保護項目工程文件數(shù)據(jù),并提高系統(tǒng)的可靠性。
(8)通過純國產(chǎn)IDE開發(fā)環(huán)境RTSys進行項目開發(fā),可實時仿真、在線跟蹤以及診斷與調(diào)試,簡便易用,支持多種高級上位機語言聯(lián)合編程進行二次開發(fā)。
0 2 ZMC432-V2控制器接口介紹
0 3 ZMC432-V2控制器接線參考
1.數(shù)字量輸入口IN接線
圖1 輸入口通用接線圖
圖2 輸入口單端編碼器接線圖
2.數(shù)字量輸出口接線
圖3 輸出口通用接線圖
圖4 輸出口單端脈沖軸接線圖
0 4
控制器開發(fā)
1.PC開發(fā)
支持以下語言進行開發(fā),我們所有的開發(fā)語言和所有控制器提供的都是同一套API接口。
2.脫機開發(fā)
使用自主自研的IDE RTSys進行開發(fā),支持Basic、梯形圖開發(fā)。
0 5
PDO的基本概念介紹
EtherCAT總線簡介:
EtherCAT為倍福公司開發(fā)的一種基于以太網(wǎng)的開放式架構(gòu)的實時工業(yè)現(xiàn)場總線通訊協(xié)議,現(xiàn)已發(fā)展為一種標準協(xié)議,目前是最快的工業(yè)以太網(wǎng)技術(shù)之一,具有高性能、拓撲結(jié)構(gòu)靈活,低成本、高精度、應用簡單等優(yōu)點。
EtherCAT充分利用了以太網(wǎng)的全雙工特性,使用主從模式介質(zhì)訪問控制。
控制器EtherCAT通訊口和EtherCAT從站之間通過COE(CANopen over EtherCAT)協(xié)議進行數(shù)據(jù)交換。
控制器和從站之間數(shù)據(jù)傳輸?shù)膬煞N方式:
①按指定時間周期性交換數(shù)據(jù),稱為PDO。
②請求應答式交換數(shù)據(jù),稱為SDO。
EtherCAT總線通信過程如下:
PDO是什么?在EtherCAT總線中起到什么作用?
PDO全名為Process Data Object,指在EtherCAT總線網(wǎng)絡中周期的進行主站與從站的數(shù)據(jù)交互的功能。
PDO數(shù)據(jù)用于周期性數(shù)據(jù)讀取和控制,讀寫速度快。
主站和從站通過PDO進行數(shù)據(jù)交換時,一方發(fā)送數(shù)據(jù)后,另一方不需要應答。
控制器通過指令控制EtherCAT從站時,控制器和從站之間通過PDO方式進行數(shù)據(jù)交換。
PDO列表可以看作一個數(shù)組空間,每個數(shù)組元素存放了不同的功能碼,PDO在一個周期中執(zhí)行這些功能碼對應的操作,這些功能碼就叫做數(shù)據(jù)字典,數(shù)據(jù)字典用4位16進制數(shù)來表示。
PDO分為兩種:從站傳送數(shù)據(jù)給主站用的TxPDO和主站傳送數(shù)據(jù)給從站用的RxPDO。
其中EtherCAT總線上控制器為主站,伺服驅(qū)動器或其他總線模塊為從站。
一個節(jié)點的TxPDO是將數(shù)據(jù)由此節(jié)點傳輸?shù)狡渌?jié)點,而RxPDO則是接收由其他節(jié)點傳輸?shù)臄?shù)據(jù)。
PDO報文數(shù)據(jù)域中每個字節(jié)都用作數(shù)據(jù)傳輸,因此報文利用率高。
0 6
PDO相關(guān)指令說明
1.NODE_PDOBUFF--特殊設備PDO設置
2.NODE_PDO_WRBUFF--偏移修改PDO
3.NODE_PDO_RDBUFF--偏移讀取PDO
0 7
如何導入總線電缸設備的配置文件并查詢PDO信息
從站設備描述文件ESI是EtherCAT從站設備的配置文件,文件為XML格式。它由從站設備制造商提供,主要包含該設備所有能被主站識別、配置和控制的必要信息,其核心作用是讓主站能認識從站,控制器可以通過配置文件識別電缸設備信息并完成對應的過程數(shù)據(jù)對象PDO的映射與配置。
添加SMC總線電缸的配置文件
方式一:在RTSys軟件配置文件中添加xml文件。
①將對應電缸設備的xml文件復制到工程路徑的文件夾里。
②打開RTSys【工程視圖】→【配置文件】→【增加到配置文件】。
③選擇目標xml文件→【打開】。
④這樣xml文件就添加到配置文件中了。(注:xml文件添加會自動轉(zhuǎn)為zml文件)
方式二:通過XMLParsingTools工具將XML文件轉(zhuǎn)換成ZML文件再添加進配置文件。(此軟件可以在正運動技術(shù)官網(wǎng)-技術(shù)與支持-下載中心-工具軟件中下載)
①打開XMLParsingTools工具,點擊左上角文件夾位置-【Open xml】。
②選擇想要轉(zhuǎn)換的xml文件-【打開】。
③打開后選擇對應的從站型號、從站類型為特殊設備。
④點擊左上角文件夾位置-【Export zml】導出。
⑤選擇對應路徑-設置文件名(不超過20個字符)-【保存】。
⑥打開RTSys【工程視圖】→【配置文件】→【增加到配置文件】。
⑦選擇要添加的zml文件-【打開】即可完成zml文件的添加。
下載basic程序執(zhí)行總線初始化
添加配置文件后,點擊【下載到RAM/ROM】即可把配置文件的信息導入到控制器,使控制器識別該設備,然后執(zhí)行總線初始化,讓控制器作為主站和EtherCAT總線電缸從站設備建立正常通訊。
查詢當前設備PDO映射信息
總線初始化完成、控制器和總線電缸設備通訊上后,可以通過RTSys在線命令功能,輸入ZTEST(30,10,nodeid)指令即可查詢對應節(jié)點編號設備的PDO映射與關(guān)鍵數(shù)據(jù)字典信息。
如下圖為總線驅(qū)動器查詢示例:在線命令執(zhí)行ZTEST(30,10,0)后,打印輸出該節(jié)點0的總線驅(qū)動器的當前PDO信息。
0 8
使用NODE_PDOBUFF指令對總線電缸實現(xiàn)控制和狀態(tài)檢測
以SMC EtherCAT總線電缸為例
電缸,也稱電動缸,是將伺服電機與絲杠一體化設計的模塊化產(chǎn)品,將伺服電機的旋轉(zhuǎn)運動轉(zhuǎn)換成直線運動。
SMC EtherCAT總線電缸通過EtherCAT總線接收控制指令,實現(xiàn)位置等模式控制,并能反饋實時的位置、狀態(tài)及故障等信息。
EtherCAT總線電缸的控制,與EtherCAT總線變頻器等從站類似,主要區(qū)別在于各廠家數(shù)據(jù)字典的定義不同,需查閱電缸說明手冊或聯(lián)系廠家技術(shù)支持,明確動作所需要的參數(shù)地址及寫入順序,使用NODE_PDOBUFF指令即可實現(xiàn)控制。
下面通過Basic編程實現(xiàn)電缸定位控制及報警檢測。SMC電缸設備的PDO映射列表如下圖所示,按照該參數(shù)地址操作即可實現(xiàn)控制,更多參數(shù)說明可見電缸手冊對應章節(jié)詳細內(nèi)容。
總線電缸進行參數(shù)初始化
在進行定位控制之前,要對電缸進行必要的參數(shù)初始化設置,根據(jù)手冊7011h詳細說明可見,當bit4-15置ON時才可修改對應參數(shù)數(shù)值,因此在參數(shù)初始化時先通過node_pdobuff指令將7011h的bit4-15置位后再設置各數(shù)據(jù)的初始化數(shù)值。
'iNode - 電缸節(jié)點號,有多個電缸時由iNode區(qū)分不同電缸
'*****************************SMC電缸初始化 **************************
global sub sub_SMC_Init(iNode)
'初始化SMC電缸的相關(guān)參數(shù)
node_pdobuff(0,iNode,$7011,0,6) = (node_pdobuff(0,iNode,$7011,0,6) Or $FFF0) '數(shù)據(jù)字典7011h bit4-15 置1,開放參數(shù)修改限制
node_pdobuff(0,iNode,$7020,0,5) = SET_BIT(0,node_pdobuff(0,iNode,$7020,0,5)) '數(shù)據(jù)字典7020h bit0 置1,設置絕對值模式
'扭矩模式參數(shù)
node_pdobuff(0,iNode,$7025,0,6) = 0'推壓力(設0為定位運行),對應數(shù)據(jù)字典7025h
node_pdobuff(0,iNode,$7026,0,6) = 0 '閥值,對應數(shù)據(jù)字典7026h
node_pdobuff(0,iNode,$7027,0,6) = 0'推動速度,對應數(shù)據(jù)字典7027h
'扭矩/位置模式通用參數(shù)
node_pdobuff(0,iNode,$7028,0,6) = 100'決定位置推力,對應數(shù)據(jù)字典7028h
node_pdobuff(0,iNode,$7029,0,7) = 0 '區(qū)域1,對應數(shù)據(jù)字典7029h
node_pdobuff(0,iNode,$702A,0,7) = 0'區(qū)域2,對應數(shù)據(jù)字典702Ah
node_pdobuff(0,iNode,$702B,0,7) = 50 '決定位置寬度,對應數(shù)據(jù)字典702Bh
end sub
總線電缸上使能并執(zhí)行回零動作
執(zhí)行定位動作之前需要進行伺服使能和原點回零的準備工作,根據(jù)手冊說明將7010h的bit9和bit12置1即可執(zhí)行上使能和執(zhí)行回零動作。
①總線電缸打開/關(guān)閉使能。
'iNode - 電缸節(jié)點號 Istatus -使能狀態(tài) 0/1
'*****************************SMC電缸使能 **************************
global sub SMC_AxisEnAble(iNode,Istatus)
if(Istatus = 0) then
'關(guān)閉使能,對應數(shù)據(jù)字典7010h
node_pdobuff(0,iNode,$7010,0,6) = CLEAR_BIT(9,node_pdobuff(0,iNode,$7010,0,6))
else
'打開使能,對應數(shù)據(jù)字典7010h
node_pdobuff(0,iNode,$7010,0,6) = SET_BIT(9,node_pdobuff(0,iNode,$7010,0,6))
endif
end sub
②總線電缸執(zhí)行回零動作,并判斷回零是否完成。
'iNode - 電缸節(jié)點號
'*****************************SMC電缸回零 **************************
global sub SMC_AxisHome(iNode)
'回零標志置1,對應數(shù)據(jù)字典7010h
node_pdobuff(0,iNode,$7010,0,6) = SET_BIT(12,node_pdobuff(0,iNode,$7010,0,6))
delay(500)
'回零標志復位,對應數(shù)據(jù)字典7010h
node_pdobuff(0,iNode,$7010,0,6) = CLEAR_BIT(12,node_pdobuff(0,iNode,$7010,0,6))
LOCAL TimeOut '超時時間60s
TimeOut=60000
'等待回零完成
WHILE TimeOut>0
'根據(jù)6010h的各bit位的狀態(tài)來判斷回零是否完成---具體判斷查閱電缸手冊
IF READ_BIT2(10,node_pdobuff(0,0,$6010,0,6))=1 THEN
IF READ_BIT2(11,node_pdobuff(0,0,$6010,0,6))=1 THEN
PRINT "回零完成,回零動作正常"
RETURN
ELSE
PRINT "回零結(jié)束,回零動作異常"
RETURN
ENDIF
ENDIF
DELAY(10)
TimeOut = TimeOut-10
WEND
IF TimeOut <=0 THEN
PRINT "回零超時"
ENDIF
end sub
總線電缸執(zhí)行定位運動
先向電缸寫入目標位置、速度、加減速度參數(shù),再將啟動標志(7012h)bit0置ON,執(zhí)行定位運動。
'iNode - 電缸節(jié)點號'
iPos - 目標位置的絕對坐標,單位0.01mm,寫100就是1mm'
iSpeed - 運動速度,單位1mm/s'
iAcc - 運動加速度,單位1mm/s/s
'iDec - 運動減速度,單位1mm/s/s
'*****************************SMC電缸定位運動 **************************
global sub SMC_AxisMove(iNode,ipos,iSpeed,iAcc,iDec)
node_pdobuff(0,iNode,$7021,0,6) = iSpeed '速度,對應數(shù)據(jù)字典7021h
node_pdobuff(0,iNode,$7023,0,6) = iAcc '加速度,對應數(shù)據(jù)字典7023h
node_pdobuff(0,iNode,$7024,0,6) = iDec '減速度,對應數(shù)據(jù)字典7024h
node_pdobuff(0,iNode,$7022,0,7) = ipos '目標位置,對應數(shù)據(jù)字典7022h
'啟動標志置1,對應數(shù)據(jù)字典7012h
node_pdobuff(0,iNode,$7012,0,5) = SET_BIT(0,node_pdobuff(0,iNode,$7012,0,5))
delay(100)
'啟動標志復位,對應數(shù)據(jù)字典7012h
node_pdobuff(0,iNode,$7012,0,5) = CLEAR_BIT(0,node_pdobuff(0,iNode,$7012,0,5))
end sub
檢測總線電缸是否報警
讀取6010h的Bit15 ALARM信號,若ALARM信號為ON,說明電缸發(fā)生報警。
對應的報警代碼輸出到6030h數(shù)據(jù)字典上,最新觸發(fā)的報警代碼會固定輸出到6030h子索引1(報警1)上,歷史報警依次推送到報警2\3\4。
通過PDO指令讀取6030h子索引為1的數(shù)據(jù)字典,如果該值非0,即可根據(jù)具體報警代碼對照手冊排查故障。
'iNode - 電缸節(jié)點號
'***************************** SMC電缸報警檢測 **************************
global sub SMC_GetAxisAlm(iNode)
local alm_code '定義局部變量
'判斷6010h的bit15 ALARM 是否報警
if read_bit2(15,node_pdobuff(0,iNode,$6010,0,6)) = 1 then
alm_code = node_pdobuff(0,iNode,$6030,1,5) '讀取PDO數(shù)據(jù)賦值給變量
?"觸發(fā)報警,當前報警1具體報警代碼:",alm_code
endif
end sub
0 9
如何通過偏移指令去讀寫PDO的使用說明
當遇到一些特殊設備無法使用node_pdobuff指令去讀寫數(shù)據(jù)字典時,可以通過PDO偏移指令實現(xiàn)讀寫功能。讀寫指令分別是NODE_PDO_WRBUFF(偏移修改PDO)和NODE_PDO_RDBUFF(偏移讀取PDO)。
下面以總線電缸設備舉例說明該偏移指令的具體用法。
獲取PDO配置信息
查看設備zml文件中PDO配置選項,獲取目標數(shù)據(jù)字典在PDO列表中的字節(jié)偏移量和數(shù)據(jù)字節(jié)大小。
其中RxPDO對應的PDO字典內(nèi)容可以通過NODE_PDO_WRBUFF指令修改;
而TxPDO對應的PDO字典內(nèi)容可以通過NODE_PDO_RDBUFF指令讀取。
PDO偏移寫入示例:修改電缸速度
若需要修改電缸的速度(對應數(shù)據(jù)字典7021h),根據(jù)索引列表信息可知,7021h在PDO中的字節(jié)偏移為6,數(shù)據(jù)字典大小為2字節(jié)。
我們先將要修改的值按小端序字節(jié)拆分后依次存入TABLE數(shù)組,再通過偏移指令寫入從站PDO即可。
舉個例子:假設要向節(jié)點1的電缸寫入的速度值是1500,那么對應的十六進制數(shù)據(jù)是0x05DC,按小端序拆分為2字節(jié)后將其寫入TABLE(100)、TABLE(101)后再調(diào)用PDO偏移修改指令:NODE_PDO_WRBUFF(0,1,6,100,2)。
指令參數(shù)對應含義:槽位號0,從站節(jié)點為1,將TABLE數(shù)組TABLE(100)、TABLE(101)的2字節(jié)數(shù)據(jù)(每個TABLE存儲1字節(jié)),寫入從站PDO偏移6字節(jié)的位置。
PDO偏移讀取示例:讀取電缸當前位置
若需要讀取電缸的當前位置(對應數(shù)據(jù)字典6020h),根據(jù)索引列表信息可知,6020h在PDO中的字節(jié)偏移為4,數(shù)據(jù)字典大小為4字節(jié)。
調(diào)用偏移讀取指令即可直接從PDO對應偏移位置讀取位置數(shù)據(jù),按小端序字節(jié)拆分后依次存入TABLE數(shù)組,后續(xù)可拼接還原為完整的位置值。
舉個例子:假設節(jié)點1的電缸當前位置值為80000,那么對應十六進制數(shù)據(jù)是0x00013880,調(diào)用PDO偏移讀取指令:NODE_PDO_RDBUFF(0,1,4,100,4)。指令讀取后將數(shù)據(jù)按小端序拆分為4字節(jié),存入對應TABLE(100)~TABLE(103),將TABLE各字節(jié)數(shù)據(jù)并將數(shù)據(jù)合并的結(jié)果如下。
指令參數(shù)對應含義: 槽位號0,從站節(jié)點為1,從從站PDO偏移4字節(jié)處讀取4字節(jié),數(shù)據(jù)依次存入TABLE數(shù)組TABLE(100)~TABLE(103)位置(每個TABLE存儲1字節(jié))。
10
Basic測試程序使用步驟
RTSys軟件添加工程項目
①打開RTSys軟件,點擊菜單欄【文件】→【打開工程】。
②選擇對應文件目錄下的zpj文件。
下載basic程序執(zhí)行總線初始化
點擊【下載到RAM/ROM】把程序下載進控制器,執(zhí)行總線初始化完成即可讓控制器和電缸通訊上。
實現(xiàn)電缸功能控制
總線初始化成功之后,會執(zhí)行電缸控制流程,對電缸進行參數(shù)初始化后會循環(huán)檢測SMC_Cmd的值,通過修改SMC_Cmd參數(shù)實現(xiàn)對應功能控制。
Basic電缸控制流程主體代碼:
'****************電缸控制流程****************
global SMC_Cmd '控制指令
SMC_Cmd = 0
global Const SMC_AxisNode = 0
'定義節(jié)點號為0
sub_SMC_Init(SMC_AxisNode) '初始化節(jié)點0的SMC電缸參數(shù)
while 1
if SMC_Cmd = 1 THEN
SMC_Cmd = 0
SMC_AxisEnAble(SMC_AxisNode,on) '電缸0 使能
?"電缸節(jié)點"SMC_AxisNode, "Enable" elseif SMC_Cmd = 2 THEN
SMC_Cmd = 0 SMC_AxisEnAble(SMC_AxisNode,off) '電缸0 關(guān)閉使能
?"電缸節(jié)點"SMC_AxisNode, "disable"
elseif SMC_Cmd = 3 THEN
SMC_Cmd = 0
SMC_AxisHome(SMC_AxisNode) '電缸0 回零
?"電缸節(jié)點"SMC_AxisNode, "Datum"
elseif SMC_Cmd = 4 THEN
SMC_Cmd = 0
SMC_AxisRes(SMC_AxisNode) '電缸0 復位
?"電缸節(jié)點"SMC_AxisNode, "RESET"
elseif SMC_Cmd = 5 THEN
SMC_Cmd = 0
?SMC_GetAxisPos(SMC_AxisNode) '電缸0 讀取位置
?SMC_AxisNode, "Current Postion is"
elseif SMC_Cmd = 6 THEN
SMC_Cmd = 0
?"enable",SMC_GetIfServo(SMC_AxisNode) '電缸0 是否使能
?"idle",SMC_GetIfIdle(SMC_AxisNode) '電缸0 是否靜止
?"inp",SMC_GetIfInp(SMC_AxisNode) '電缸0 是否到位
?"home",SMC_GetHomeStatus(SMC_AxisNode) '電缸0 是否回零
?"alm",SMC_GetIfAlm(SMC_AxisNode) '電缸0 是否報警
?"almreason",SMC_GetStopReason(SMC_AxisNode) '電缸0 當前報警原因
?"pos",SMC_GetAxisPos(SMC_AxisNode) '電缸0 當前位置 JOG不計位置
?SMC_AxisNode, "Current Status"
elseif SMC_Cmd = 7 THEN
SMC_Cmd = 0
SMC_AxisMove(SMC_AxisNode,100,50,1000,1000) '電缸0 定位 絕對位置100 速度50 加速度1000 減速度1000
SMC_AxisMove(SMC_AxisNode,0,50,1000,1000) '電缸0 定位 絕對位置0 速度50 加速度1000 減速度1000
endif
wend
教學視頻請點擊→EtherCAT運動控制器與EtherCAT總線電缸的自定義PDO控制
正運動技術(shù)專注于運動控制技術(shù)研究和通用運動控制軟硬件產(chǎn)品的研發(fā),是國家級高新技術(shù)企業(yè)。正運動技術(shù)匯集了來自華為、中興等公司的優(yōu)秀人才,在堅持自主創(chuàng)新的同時,積極聯(lián)合各大高校協(xié)同運動控制基礎技術(shù)的研究。主要業(yè)務有:運動控制卡_運動控制器_EtherCAT運動控制卡_EtherCAT控制器_運動控制系統(tǒng)_視覺控制器__運動控制PLC_運動控制_機器人控制器_視覺定位_XPCIe/XPCI系列運動控制卡等等。