8轴EtherCAT轴扩展模块EIO24088的使用

供稿:深圳市正运动技术有限公司

  • 关键词:正运动技术,EtherCAT,EIO24088
  • 摘要:EIO系列带轴的扩展模块的使用方法相同,仅是扩展资源数量的区别。本文以EIO24088扩展模块为例,来对EIO系列扩展模块进行使用说明。

EIO系列带轴的扩展模块的使用方法相同,仅是扩展资源数量的区别。本文以EIO24088扩展模块为例,来对EIO系列扩展模块进行使用说明。


一扩展模块简介


EIO24088扩展模块是EtherCAT总线控制器使用的扩展模块,可扩展数字量IO和脉冲轴这两类资源,通过EtherCAT总线连接控制器与EIO24088扩展模块。


image.png


当控制器的IO或轴资源不够的时候,需要增加扩展模块,控制器可以同时连接多个扩展模块,EIO系列扩展模块通过EtherCAT总线连接,每个扩展模块有唯一的地址,从0开始。


EIO24088轴扩展时,为总线转脉冲,将脉冲型驱动器接入到EIO24088扩展模块上的脉冲轴接口上。


EIO24088带两个EtherCAT总线接口,接线时注意EtherCAT IN 连接主控制器或上级模块,EtherCAT OUT连接驱动设备或下一级扩展板,IN和OUT口不可混用。


image.png

二材料准备


(一)硬件

A.ZMC432控制器一台,任意带EtherCAT总线接口的控制器均可。

B.EtherCAT伺服驱动器+电机一套,脉冲型伺服驱动器+电机一套

C.EIO24088扩展模块一个

D.电脑一台。

E.带屏蔽层网线两根。

F.24V直流电源一个。

G.接线端子与连接线若干。


(二)软件

ZDevelop V3.10版本控制器编程软件。


image.png


从正运动官网www.zmotion.com.cn下载压缩包,解压后直接运行应用程序,无需安装。


需要配置驱动器参数时下载驱动器调试软件。


三硬件接线


ZMC432总线控制器支持EtherCAT总线连接,支持最快250us的刷新周期(16轴以内),支持多达32轴运动控制,支持直线插补、任意圆弧插补、空间圆弧、螺旋插补、电子凸轮、电子齿轮、同步跟随、虚拟轴设置等;同时还支持位置锁存、硬件比较输出、运动中精准输出等,功能齐全,配置高。采用优化的网络通讯协议可以实现实时的运动控制。


image.png


总线接线参考:


控制器、EIO扩展模块和驱动器的接线参考如下图:


image.png


EIO24088扩展模块接线规则:EIO24088可接到EtherCAT总线上的任意节点。

EIO24088为总线上的一个设备节点,可接入8个脉冲型驱动器,驱动器按照AXIS 0到AXIS 7的顺序依次编号,并且遵从总线上的驱动器编号规则。

驱动器的使能信号为脉冲接口内的通用输出口,直接通过主控制器的OP指令来使能。或使用SDO指令配置数据字典为自动使能后,主控制器无法直接控制对应的输出口来使能。

涉及的编号概念如下:总线相关指令参数会用到如下编号。


1.槽位号(slot)


槽位号是指控制器上总线接口的编号,缺省为0。当控制器上有多个总线接口时,在线命令发送?*SLOT查看。


image.png


运动控制器支持单总线时,槽位号为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.使能完成设置相关轴参数,再发送运动指令便可驱动电机。


软件操作如下:


image.png


在初始化操作成功后,总线上能识别该扩展模块,可查看扩展模块上的轴接口数,IO映射后输入输出的编号范围。


起始编号映射为32,该扩展模块上的输入编号为外部自带的24点+轴接口通用输入8点,一共32点,范围32-63,输出编号为外部的8点+轴接口通用输出8点,共16点,范围32-47。


image.png


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,其他参数同理)。


image.png


数据字典读取语法:


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映射。


image.png


六脉冲轴与总线轴混合使用


驱动器在使用之前,先配置常用驱动器参数,例如电子齿轮比、一圈脉冲数、电机转向、控制器模式等,配置方法可参考公众号历史文章,关于脉冲型驱动器和EtherCAT/RTEX总线驱动器的配置方法都有详细说明。


不同类型的轴混合使用时,主要是初始化过程和与驱动器通讯方式不同。


脉冲轴是通过给OP信号使能,总线轴通过一段初始化程序使能,使能成功后均可设置轴参数后执行运动。


驱动器通讯方式的区别:总线驱动器有对应的驱动器读写指令或驱动器软件修改参数,脉冲型驱动器只能通过驱动器软件修改参数。


演示配置:


本例子采用两种不同类型的的驱动器,脉冲型驱动器和EtherCAT总线驱动器混合使用,将一个脉冲驱动器接在控制器的脉冲轴接口AXIS 0上;将另一个EtherCAT总线驱动器接在控制器的EtherCAT口上,设备号和驱动器编号均为0。


总线初始化完成,在“控制器状态”能看到总线上的节点。


image.png


混合使用步骤:


脉冲轴的轴号按所接的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.驱动器使能完成,后续两种不同的轴的使用方法基本一致,设置相关轴参数,再发送运动指令便可驱动电机。


控制器支持不同类型的轴混合插补。


image.png


总线初始化模板程序:


'****************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。


本文由正运动技术原创,欢迎大家转载,共同学习,一起提高中国智能制造水平。文章版权归正运动技术所有,如有转载请注明文章来源。

发布时间:2021年12月28日 13:26  人气:   审核编辑(王静 )
更多内容请访问(深圳市正运动技术有限公司
相关链接

我有需求