正运动技术
正运动技术
精准24码全年无错版
EN
精准24码全年无错版
精准24码全年无错版

协助伙伴成功,是我们的价值所在

The value of Zmotion is to bring customers more success!

首页 / 支持与服务 / 技术分享

Technical support

技术分享

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

  《视频教程:8轴EtherCAT轴扩展模块EIO24088的使用》

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

   一 扩展模块简介

  

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

  

  1.jpg

  

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

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

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

  

  2.jpg

  

   二  材料准备

  

  (一)硬件

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

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

  C.EIO24088扩展模块一个

  D.电脑一台。

  E.带屏蔽层网线两根。

  F.24V直流电源一个。

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

  (二)软件

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

  

  3.jpg

  

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

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

   三 硬件接线

  

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

  

  4.jpg

  

  总线接线参考:

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

  

  5.jpg

  

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

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

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

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

  1.槽位号(slot)

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

  

  6.jpg

  

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

  软件操作如下:

  

  7.jpg

  

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

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

  

  8.jpg

  

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

  

  9.jpg

  

  数据字典读取语法:

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

  

  10.jpg

  

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

  

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

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

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

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

  演示配置:

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

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

  

  11.jpg

  

  混合使用步骤:

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

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

  

  12.jpg

  

  

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

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

  

  13.jpg

邮箱留言

Copyright © 2013 精准24码全年无错版 Design by Zmotion 版权所有   粤ICP备13037187号    Powered by 运动控制器-运动控制卡

在线咨询