8轴EtherCAT轴扩展模块EIO24088的使用
供稿:深圳市正运动技术有限公司
- 关键词:正运动技术,EtherCAT,EIO24088
- 摘要:EIO系列带轴的扩展模块的使用方法相同,仅是扩展资源数量的区别。本文以EIO24088扩展模块为例,来对EIO系列扩展模块进行使用说明。
EIO系列带轴的扩展模块的使用方法相同,仅是扩展资源数量的区别。本文以EIO24088扩展模块为例,来对EIO系列扩展模块进行使用说明。
一扩展模块简介
EIO24088扩展模块是EtherCAT总线控制器使用的扩展模块,可扩展数字量IO和脉冲轴这两类资源,通过EtherCAT总线连接控制器与EIO24088扩展模块。
当控制器的IO或轴资源不够的时候,需要增加扩展模块,控制器可以同时连接多个扩展模块,EIO系列扩展模块通过EtherCAT总线连接,每个扩展模块有唯一的地址,从0开始。
EIO24088轴扩展时,为总线转脉冲,将脉冲型驱动器接入到EIO24088扩展模块上的脉冲轴接口上。
EIO24088带两个EtherCAT总线接口,接线时注意EtherCAT IN 连接主控制器或上级模块,EtherCAT OUT连接驱动设备或下一级扩展板,IN和OUT口不可混用。
二材料准备
(一)硬件
A.ZMC432控制器一台,任意带EtherCAT总线接口的控制器均可。
B.EtherCAT伺服驱动器+电机一套,脉冲型伺服驱动器+电机一套
C.EIO24088扩展模块一个
D.电脑一台。
E.带屏蔽层网线两根。
F.24V直流电源一个。
G.接线端子与连接线若干。
(二)软件
ZDevelop V3.10版本控制器编程软件。
从正运动官网www.zmotion.com.cn下载压缩包,解压后直接运行应用程序,无需安装。
需要配置驱动器参数时下载驱动器调试软件。
三硬件接线
ZMC432总线控制器支持EtherCAT总线连接,支持最快250us的刷新周期(16轴以内),支持多达32轴运动控制,支持直线插补、任意圆弧插补、空间圆弧、螺旋插补、电子凸轮、电子齿轮、同步跟随、虚拟轴设置等;同时还支持位置锁存、硬件比较输出、运动中精准输出等,功能齐全,配置高。采用优化的网络通讯协议可以实现实时的运动控制。
总线接线参考:
控制器、EIO扩展模块和驱动器的接线参考如下图:
EIO24088扩展模块接线规则:EIO24088可接到EtherCAT总线上的任意节点。
EIO24088为总线上的一个设备节点,可接入8个脉冲型驱动器,驱动器按照AXIS 0到AXIS 7的顺序依次编号,并且遵从总线上的驱动器编号规则。
驱动器的使能信号为脉冲接口内的通用输出口,直接通过主控制器的OP指令来使能。或使用SDO指令配置数据字典为自动使能后,主控制器无法直接控制对应的输出口来使能。
涉及的编号概念如下:总线相关指令参数会用到如下编号。
1.槽位号(slot)
槽位号是指控制器上总线接口的编号,缺省为0。当控制器上有多个总线接口时,在线命令发送?*SLOT查看。
运动控制器支持单总线时,槽位号为0。
支持双总线时,EtherCAT总线槽位号为0,RTEX总线槽位号为1。
2.设备号(node)
设备号是指一个槽位上连接的所有设备的编号,从0开始,按设备在总线上的连接顺序自动编号,可以通过NODE_COUNT(slot)指令查看总线上连接的设备总数。
3.驱动器编号
控制器会自动识别出槽位上的驱动器,编号从0开始,按驱动器在总线上的连接顺序自动编号。
驱动器编号与设备号不同,只给槽位上的驱动器设备编号,其他设备忽略。
四扩展资源映射方法
EIO24088扩展模块上有两类资源需要映射,轴资源和IO资源。
控制器上程序只需通过IO编号就可以访问到扩展模块上的IO资源,EtherCAT总线扩展模块的IO编号通过总线指令NODE_IO来设置。
IO映射时先查看控制器自身的最大IO编号(包括外部IO接口和脉冲轴内的通用接口),再使用指令设置。
若扩展的IO与控制器自身IO编号重合,二者将同时起作用,所以IO映射的编号在整个控制系统中均不得重复。
扩展模块的轴使用前需要使用AXIS_ADDRESS指令映射轴号,轴映射也需要注意轴号不得重复。
IO映射语法:NODE_IO(slot,node)=iobase
slot:槽位号,0-缺省
node:设备编号,编号从0开始
iobase:映射IO起始编号,设置结果只会是8的倍数
示例:NODE_IO(0,0)=32 '设置槽位0接口设备0的IO起始编号为32
轴映射语法:AXIS_ADDRESS(轴号)=(槽位号<<16)+驱动器编号+1
示例:AXIS_ADDRESS(0)=(0<<16)+0+1 'EtherCAT总线上的第一个驱动器,驱动器编号0,绑定为轴0
若第一个节点是EIO24088,那么这里的驱动器编号0对应连接在EIO24088上的第一个脉冲型驱动器,否则便是EtherCAT总线驱动器。
五扩展模块上驱动器使用方法
EIO24088扩展模块需要经过总线初始化之后才能使用,我们这里把一个脉冲型驱动器接到EIO24088扩展模块上的AXIS 0接口上,使用步骤如下:
1.执行总线初始化程序,初始化过程中识别EIO扩展模块的设备编号和连接的驱动器编号,根据驱动器编号操作轴映射,根据设备号操作扩展模块的IO映射,设置DRIVE_PROFILE和ATYPE。
2.初始化成功后,使能EIO24088扩展模块上的脉冲驱动器,同样也是操作脉冲轴接口内的OP信号使能驱动器,由于扩展模块映射的起始IO编号是32,这里的轴接口AXIS 0-AXIS 7内的通用输出口编号是40-47。在输出口窗口内按下OP(40)或在程序中执行指令OP(40,ON)均可使能AXIS 0上的脉冲型驱动器。
3.使能完成设置相关轴参数,再发送运动指令便可驱动电机。
软件操作如下:
在初始化操作成功后,总线上能识别该扩展模块,可查看扩展模块上的轴接口数,IO映射后输入输出的编号范围。
起始编号映射为32,该扩展模块上的输入编号为外部自带的24点+轴接口通用输入8点,一共32点,范围32-63,输出编号为外部的8点+轴接口通用输出8点,共16点,范围32-47。
EIO24088使用注意事项:
扩展模块上的IO不管有没有使用,都需要使用NODE_IO指令映射EIO24088的输入输出编号。扩展模块的DRIVE_PROFILE需要配置为0,ATYPE设为65,但实际由于是脉冲型驱动器,轴类型并不是65,真实轴类型的配置使用SDO指令配置数据字典6011h设置。
初始化过程中若产生硬限位报警,可在轴参数窗口将硬限位的映射编号号指向-1,表示不映射,需要接入限位开关时再去修改FWD_IN和REV_IN。
EIO24088扩展模块设置:
通过SDO指令读写数据字典设置,只开放了部分数据字典供设置,详情参见EIO24088硬件手册,更多驱动器参数使用驱动器调试软件修改。
例如:扩展的脉冲轴的真实轴类型ATYPE设置通过数据字典6011h设置,(按轴号依次设置,第一个驱动器设置数据字典编号为6011h+0*800h,第二个驱动器设置6011h+1*800h,以此类推,每个驱动器加800h,其他参数同理)。
数据字典读取语法:
SDO_READ (槽位号, 设备编号, 数据字典编号, 数据字典子编号, 数据类型, 读取数据存储TABLE位置)
SDO_READ_AXIS (轴号, 数据字典编号, 数据字典子编号, 数据类型, 读取数据存储TABLE位置)
数据字典写入语法:
SDO_WRITE (槽位号, 设备编号, 数据字典编号, 数据字典子编号, 数据类型, 写入数据值)
SDO_WRITE_AXIS (轴号, 数据字典编号, 数据字典子编号, 数据类型, 写入数据值)
数据字典读写示例:
global sub Sub_SetNodePara(iNode,iVender,iDevice,Iaxis)
if iVender = $41B and iDevice = $1ab0 then '正运动24088脉冲扩展轴
SDO_WRITE(Bus_Slot,iNode,$6011+Iaxis*$800,0,5,4) '设置扩展脉冲轴ATYPE类型,值为4表示脉冲和编码器信号在同一个轴号上
SDO_WRITE(Bus_Slot,iNode,$6012+Iaxis*$800,0,6,0) '设置扩展脉冲轴INVERT_STEP脉冲输出模式,模式0脉冲+方向
NODE_IO(Bus_Slot,iNode) = 32 + 32*iNode '设置240808上IO的起始映射地址
endif
end sub
如果EIO扩展模块之后还连接了EtherCAT驱动器,使用时注意总线扫描设备数量的设置,EtherCAT驱动器在初始化程序执行完便使能成功,后续设置轴参数便能运行,注意初始化过程中使用DRIVE_PROFILE指令配置合适的PDO列表,需要用到驱动器IO时,还需操作DRIVE_IO映射。
六脉冲轴与总线轴混合使用
驱动器在使用之前,先配置常用驱动器参数,例如电子齿轮比、一圈脉冲数、电机转向、控制器模式等,配置方法可参考公众号历史文章,关于脉冲型驱动器和EtherCAT/RTEX总线驱动器的配置方法都有详细说明。
不同类型的轴混合使用时,主要是初始化过程和与驱动器通讯方式不同。
脉冲轴是通过给OP信号使能,总线轴通过一段初始化程序使能,使能成功后均可设置轴参数后执行运动。
驱动器通讯方式的区别:总线驱动器有对应的驱动器读写指令或驱动器软件修改参数,脉冲型驱动器只能通过驱动器软件修改参数。
演示配置:
本例子采用两种不同类型的的驱动器,脉冲型驱动器和EtherCAT总线驱动器混合使用,将一个脉冲驱动器接在控制器的脉冲轴接口AXIS 0上;将另一个EtherCAT总线驱动器接在控制器的EtherCAT口上,设备号和驱动器编号均为0。
总线初始化完成,在“控制器状态”能看到总线上的节点。
混合使用步骤:
脉冲轴的轴号按所接的AXIS 0口默认是轴0,总线轴的轴号使用AXIS_ADDRESS指令映射为轴1。
1.使能EtherCAT总线驱动器:执行总线初始化程序,设置EtherCAT总线轴的AXIS_ADDRESS、DRIVE_PROFILE和ATYPE等。
2.使能脉冲型驱动器:总线初始化成功后,使能控制器脉冲轴接口上的脉冲驱动器,操作脉冲轴接口内的OP信号使能驱动器,这里的AXIS 0-AXIS 5口内的通用输出口编号是12-17。在输出口窗口内按下OP(12)或在程序中执行指令OP(12,ON)均可使能。
3.驱动器使能完成,后续两种不同的轴的使用方法基本一致,设置相关轴参数,再发送运动指令便可驱动电机。
控制器支持不同类型的轴混合插补。
总线初始化模板程序:
'****************ECAT总线初始化
global CONST PUL_AxisStart = 0 '本地脉冲轴起始轴号
global CONST PUL_AxisNum = 1 '本地脉冲轴轴数量
global CONST Bus_AxisStart = 1 '总线轴起始轴号
global CONST Bus_NodeNum = 1 '总线配置节点数量,用于判断实际检测到的从站数量是否一致
global CONST BUS_TYPE = 0 '总线类型。可用于上位机区分当前总线类型
global CONST Bus_Slot = 0 '槽位号0(单总线控制器缺省0)
global MAX_AXISNUM '最大轴数
MAX_AXISNUM = SYS_ZFEATURE(0)
global Bus_InitStatus '总线初始化完成状态
Bus_InitStatus = -1
global Bus_TotalAxisnum '检查扫描的总轴数
delay(3000) '延时3S等待驱动器上电,不同驱动器自身上电时间不同,具体根据驱动器调整延时
?"总线通讯周期:",SERVO_PERIOD,"us"
Ecat_Init() '初始化ECAT总线
END
'************************ECAT总线初始化****************************************
'初始流程: slot_scan(扫描总线) -> 从站节点映射轴/io -> SLOT_START(启动总线) -> 初始化成功
'****************************************************************************
global sub Ecat_Init()
local Node_Num,Temp_Axis,Drive_Vender,Drive_Device,Drive_Alias
RAPIDSTOP(2)
WAIT IDLE(0)
for i=0 to MAX_AXISNUM - 1 '初始化还原轴类型
AXIS_ENABLE(i) = 0
atype(i)=0
AXIS_ADDRESS(i) =0
DELAY(10) '防止所有驱动器全部同时切换使能导致瞬间电流过大
next
Bus_InitStatus = -1
' Bus_TotalAxisnum = 0
SLOT_STOP(Bus_Slot)
delay(200) '延时时间可以按需调整,确保驱动器已上电可以等待EtherCAT到位
slot_scan(Bus_Slot) '扫描总线
if return then
?"总线扫描成功","连接从站设备数:"NODE_COUNT(Bus_Slot)
if NODE_COUNT(Bus_Slot) <> Bus_NodeNum then '判断总线检测数量是否为实际接线数量
?""
?"扫描节点数量与程序配置数量不一致!" ,"配置数量:"Bus_NodeNum,"检测数量:"NODE_COUNT(Bus_Slot)
Bus_InitStatus = 0 '初始化失败。报警提示
'return
endif
'"开始映射轴号"
for Node_Num=0 to NODE_COUNT(Bus_Slot)-1 '遍历扫描到的所有从站节点
Drive_Vender = NODE_INFO(Bus_Slot,Node_Num,0) '读取驱动器厂商
Drive_Device = NODE_INFO(Bus_Slot,Node_Num,1) '读取设备编号
Drive_Alias = NODE_INFO(Bus_Slot,Node_Num,3) '读取设备拨码ID
if NODE_AXIS_COUNT(Bus_Slot,Node_Num) <> 0 then '判断当前节点是否有电机
for j=0 to NODE_AXIS_COUNT(Bus_Slot,Node_Num)-1 '根据节点带的电机数量循环配置轴参数(针对一拖多驱动器)
Temp_Axis = Bus_AxisStart + Bus_TotalAxisnum '轴号按NODE顺序分配
'Temp_Axis = Drive_Alias '轴号按驱动器设定的拨码分配(一拖多需要特殊处理)
base(Temp_Axis)
AXIS_ADDRESS(Temp_Axis)= (Bus_Slot<<16)+ Bus_TotalAxisnum + 1 '映射轴号
ATYPE=65 '设置控制模式 65-位置 66-速度 67-转矩
DRIVE_PROFILE=0 '配置为驱动器内置PDO列表,可改为1,-1,等参数 '配置为驱动器内置PDO列表
' Sub_SetDriverIo(Drive_Vender,Temp_Axis,128 + 32*Temp_Axis) '映射驱动器IO IO映射到控制器IO32-以后每个驱动器间隔32点 '
Sub_SetNodePara(Node_Num,Drive_Vender,Drive_Device,j) '设置特殊总线参数,EIO24088配置
disable_group(Temp_Axis) '每轴单独分组
Bus_TotalAxisnum=Bus_TotalAxisnum+1 '总轴数+1
next
else 'IO扩展模块
' Sub_SetNodeIo(Node_Num,Drive_Vender,Drive_Device,1024 + 32*Node_Num) '映射扩展模块IO
endif
next
?"轴号映射完成","连接总轴数:"Bus_TotalAxisnum
delay(200)
SLOT_START(Bus_Slot) '启动总线
if return then
'?"开始清除驱动器错误"
for i= Bus_AxisStart to Bus_AxisStart + Bus_TotalAxisnum - 1
BASE(i)
DRIVE_CLEAR(0)
DELAY 50
'?"驱动器错误清除完成"
datum(0) '清除控制器轴状态错误"
wa 100
wdog=1 '使能总开关
'"轴使能"
AXIS_ENABLE=1
next
Bus_InitStatus = 1
?"轴使能完成"
'本地脉冲轴配置
for i = 0 to PUL_AxisNum - 1
base(PUL_AxisStart + i)
AXIS_ADDRESS = (-1<<16) + i
ATYPE = 4
next
?"总线开启成功"
else
?"总线开启失败"
Bus_InitStatus = 0
endif
else
?"总线扫描失败"
Bus_InitStatus = 0
endif
end sub
'***********************EIO24088扩展模块设置*****************************
'通过NODE_IO(Bus_Slot,Node_Num)分配模块IO起始地址
'************************************************************************
global sub Sub_SetNodePara(iNode,iVender,iDevice,Iaxis)
if iVender = $41B and iDevice = $1ab0 then '正运动24088脉冲扩展轴
SDO_WRITE(Bus_Slot,iNode,$6011+Iaxis*$800,0,5,4) '设置扩展脉冲轴ATYPE类型
SDO_WRITE(Bus_Slot,iNode,$6012+Iaxis*$800,0,6,0) '设置扩展脉冲轴INVERT_STEP脉冲输出模式
NODE_IO(Bus_Slot,iNode) = 32 + 32*iNode '设置240808上IO的起始映射地址
endif
end sub
'***********************总线IO扩展模块映射********************************
'通过NODE_IO(Bus_Slot,Node_Num)分配模块IO起始地址
'**************************************************************************
global sub Sub_SetNodeIo(iNode,iVender,iDevice,i_IoNum)
if iVender = $41B and iDevice = $130 then '正运动EIO1616MT
NODE_IO(Bus_Slot,iNode) = i_IoNum
endif
end sub
《8轴EtherCAT轴扩展模块EIO24088的使用》就讲到这里。
更多精彩内容请关注“正运动小助手”公众号,需要相关开发环境与例程代码,请咨询正运动技术销售工程师:400-089-8936。
本文由正运动技术原创,欢迎大家转载,共同学习,一起提高中国智能制造水平。文章版权归正运动技术所有,如有转载请注明文章来源。