之前正运动技术与大家分享了,运动控制器的固件升级、ZBasic程序开发、ZPLC程序开发、与触摸屏通讯和输入/输出IO的应用、运动控制器数据与存储的应用以及运动控制器ZCAN总线扩展模块的使用等。

  今天,我们来讲解一下正运动技术运动控制器EtherCAT总线的基础使用。

  

  教学视频地址:《快速入门丨篇八:如何进行运动控制器EtherCAT总线的基础使用?》

  

   1、材料准备与控制器接线参考

  

  材料准备:

  1)电脑1台,安装ZDevelop3.01以上版本软件。

  2)控制器1个。

  3)24V直流电源2个(主电源,IO电源)。

  4)总线驱动器+电机(或步进驱动器+电机)若干。

  5)控制器接线端子若干。

  6)网线若干。

  7)连接线若干。

  8)不同类型扩展模块多个(扩展模块接线参考参见下文)。

  

  

   控制器接线参考

   2、扩展模块的作用

  

  当控制器自身的轴资源、IO资源不够用时,可采用扩展模块来扩展,可以扩展脉冲轴、数字量输入输出、模拟量输入输出这三种类型。只有带脉冲轴接口的扩展模块才支持扩展脉冲轴数,总线轴不可扩展。

  扩展模块按连接方式可分为ZCAN总线扩展模块和EtherCAT扩展模块两类。

  按产品系列划分,可分为ZCAN扩展模块,EtherCAT扩展模块、ZMIO300扩展模块三大类。

  IO数字量扩展:ZMC控制器4系列及以上的型号IO点数可扩展至4096点。

  AIO模拟量扩展:ZMC控制器4系列及以上的型号AIO点数可扩展至520点。

  轴扩展:只能扩展脉冲轴,鉴于成本和使用方面,不建议使用过多轴扩展板,可选用支持脉冲轴数较多的控制器型号。

  控制器可扩展的IO点数可在硬件手册或“命令与输出”窗口输入?*max打印查看。

  

  

  

   3、EtherCAT总线扩展模块

  

  EtherCAT总线扩展模块包含两个系列:可分为EIO扩展模块、ZMIO300-ECAT扩展模块。

  EIO1616MT支持扩展数字量IO,包含16路输入和16路输出。

  EIO24088可扩展数字量IO和脉冲轴,支持扩展8个脉冲轴,包含24路输入和8路输出。

  ZMIO300-ECAT扩展模块为立式组合模块,可扩展数字量IO和模拟量。

  EtherCAT通讯建议采用带屏蔽层的双绞线进行网络数据传输。

  

  

  

  EIO1616MT

  

  

  

  EIO24088

  

  

  

  ZMIO300-ECAT+16DO+16DI+4DA+4AD

  

  

  

   1)EIO扩展模块

  A、EIO扩展模块使用EtherCAT总线扩展,可选型号如下表:

  

  

  

  EIO1616双电源供电(除了主电源,IO也需要单独供电),EIO24088为单电源供电。

  扩展模块数字量IO接口默认支持NPN型。

  EtherCAT扩展模块接线只需将各个模块的EtherCAT口相互连接即可,EIO扩展板带两个EtherCAT接口,EtherCAT IN口接主控制器,EtherCAT OUT口接下级扩展板或驱动设备,不可混用。

  B、EIO扩展模块使用接线

  EIO扩展接线参考如下:

  

  

  

 ZMC432+EIO24088+EIO1616 

  2)ZMIO300-ECAT扩展模块

  A、ZMIO300-ECAT扩展模块可搭配子模块如下表:

  

  

  

  模拟量精度为16位,有NPN和PNP两种输入方式可选,数字量输入输出口带信号状态指示灯。

  ZMIO300-16DO/ZMIO300-16DOP数字量输出需要一路电源单独供电。

  B、ZMIO300-ECAT扩展模块使用接线

  

  

  

  ZMIO300-ECAT扩展模块接线参考如下,与EIO扩展模块接线方法相同。

  EtherCAT IN口与EtherCAT OUT口不可混用。

  

  4、EtherCAT总线使用

  

  EtherCAT总线上连接的电机则需要编写一段程序来进行使能。使能之后的应用与脉冲电机一致,运动指令都是相同的。初始化程序参见文章末尾。

  初始化过程主要包含以下几个步骤:

  1、总线扫描SLOT_SCAN (slot)

  2、轴映射AXIS_ADDRESS,扩展模块IO映射NODE_IO

  3、总线开启SLOT_START (slot)

  4、清除驱动器错误DRIVE_CLEAR(0)

  5、轴使能AXIS_ENABLE(单轴使能),WDOG(总使能)

  初始化成功后,便可以使用运动控制指令控制总线轴运转。

  扩展的资源必须映射到控制器本地资源才可使用。

  不同的EtherCAT扩展模块,IO映射、轴映射方法相同。

  IO映射采用NODE_IO指令(数字量)、NODE_AIO指令(模拟量)设置,轴映射采用AXIS_ADDRESS指令映射轴号。

  IO映射时先查看控制器自身的最大IO编号(包括外部IO接口和脉冲轴内的接口),再使用指令设置。

  若扩展的 IO与控制器自身IO编号重合,二者将同时起作用,所以IO映射的映射的编号在整个控制系统中均不得重复。

  

  5、EtherCAT总线相关概念

  

  总线相关指令参数会用到如下编号:

  槽位号(slot)

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

  

  

  

  运动控制器支持单总线时,槽位号为0。

  支持双总线时,EtherCAT总线槽位号为0,RTEX总线槽位号为1。

  设备号(node)

  设备号是指一个槽位上连接的所有设备的编号,从0开始,按设备在总线上的连接顺序自动编号,可以通过NODE_COUNT(slot)指令查看。

  驱动器编号

  控制器会自动识别出槽位上的驱动器,编号从0开始,按驱动器在总线上的连接顺序自动编号。

  驱动器编号与设备号不同,只给槽位上的驱动器设备编号,其他设备忽略。

  

  6、IO映射

  

  1)数字量IO

  NODE_IO指令设置设备的数字量IO起始编号,单个设备的输入输出的起始编号一样。必须总线扫描后才能设置。

  

语法:

NODE_IO(slot, node)=iobase

slot:槽位号,0-缺省

node:设备编号,编号从0开始

iobase:映射IO起始编号,设置结果只会是8的倍数

示例:

SLOT_SCAN(0)         '扫描总线

IF NODE_COUNT(0)>0 THEN '判断槽位0上是否有设备

NODE_IO(0,0)=32   '设置槽位0接口设备0的IO起始编号为32

?NODE_IO(0,0)       '打印出设备0的IO起始编号

ENDIF

  2)模拟量IO

  NODE_AIO指令设置设备的模拟量IO起始编号,单个设备的输入输出的起始编号一样。必须总线扫描后才能读取。

      NODE_AIO(slot, node[,idir])=Aiobase

          slot:槽位号,0-缺省

             node:设备编号,编号从0开始

          idir:AD/DA选择 。0-缺省,同时设置AIN、AOUT,读取时只读AIN;3-AIN;4-AOUT

      示例:

      SLOT_SCAN(0) '扫描总线

      IF NODE_COUNT(0)>0 THEN '判断槽位0上是否有设备

          NODE_AIO(0,0,0)=8 '设置槽位0接口设备0的AIN和AOUT起始编号都为8

          ?NODE_AIO(0,0,0) '打印出设备0的AIO起始编号

      ENDIF

  

  7、EtherCAT总线轴映射

  

  总线轴需要进行轴映射操作,采用AXIS_ADDRESS指令映射,操作方法如下:

  AXIS_ADDRESS(轴号)=(槽位号<<16)+驱动器编号+1

  轴映射写在总线初始化程序中,总线扫描之后,开启总线之前。

  示例:

  AXIS_ADDRESS (0)=(0<<16)+0+1 '第一个ECAT驱动器,驱动器编号0,绑定为轴0

  AXIS_ADDRESS (2)=(0<<16)+1+1 '第二个ECAT驱动器,驱动器编号1,绑定为轴2

  AXIS_ADDRESS (1)=(0<<16)+2+1 '第三个ECAT驱动器,驱动器编号2,绑定为轴1

  ATYPE(0)=65 '设置为ECAT轴类型, 65-位置 66-速度 67-转矩

  ATYPE(1)=65

  ATYPE(2)=65

  

  8、EtherCAT总线状态

  

  使用编程软件成功连接到控制器之后,执行总线扫描之后,在线命令栏输入?*EtherCAT打印出每个NODE节点的状态。

  

  

  

  Slot 0 contain 1 nodes:0槽位口共连接了1个设备

  Lostcount 0-0:丢包数

  Node:设备连接NODE编号

  Status:设备连接状态,参考NODE_STATUS

  Mainid:厂商ID

  Productid:设备ID

  Axises:设备总轴数

  Alstate:设备OP状态

  Node_profile:设备Profile设置

  Bindaxis:映射到控制器的轴号,-1表示未映射

  Drive_profile:设备收发PDO配置

  Controlword:控制字

  Drive_status:设备当前状态,参考DRIVE_STATUS

  Drive_mode:设备控制模式

  Target:电机位置

  Encode:编码器位置

  

  9、EtherCAT扩展模块参考配置

  

  控制模块接线完成,使用ZDevelop软件连接上控制器,运行总线初始化程序,打开“控制器”-“控制器状态”窗口,查看槽位0节点信息,可以看到EtherCAT总线连接的全部设备的信息。

  1)EIO扩展模块

  控制模块配置:

  1个ZMC432+1个EIO1616MT。

  EIO1616MT的节点号为0,扩展的数字量输入IO编号为1024-1039共16个,扩展的数字量输出IO编号为1024-1039共16个。

  NODE_IO(0,0)=1024

  

  

  

  2)ZMIO300-ECAT扩展模块

  控制模块配置:

  1个ZMC432+1个ZMIO300-ECAT通讯模块+4个ZMIO300-16DI输入+2个ZMIO300-16DO输出+1个ZMIO300-4AD+1个ZMIO300-4DA。

  NODE_IO(0,0)=32 'IO映射,起始编号从32开始,扩展了64个输入和32个输出

  NODE_AIO(0,0,0)=4 'AIO映射,起始编号从4开始,扩展4个输入和4个输出

  

  

  

  10、EtherCAT总线参考配置1

  控制模块配置:

  1个ZMC432+2个总线驱动器。

  使用ZDevelop软件连接上控制器,执行完总线初始化程序后,打开“控制器”-“控制器状态”窗口,可查看槽位0节点信息,或在线命令栏输入?*EtherCAT打印出每个NODE节点的状态。

  

  

  

  此时总线上可以扫描到两个节点,这两个节点均为总线驱动器,每个驱动器各带一个电机,将节点0的轴映射到轴6,将节点1的轴映射到轴7。

  AXIS_ADDRESS(6)= (0<<16)+0+1 '映射轴号

  AXIS_ADDRESS(7)=(0<<16)+1+1

  ATYPE(6)=65 '设置控制模式,65-位置 66-速度 67-转矩

  ATYPE(7)=65

  在线命令栏输入?*EtherCAT打印信息如下:

  

  

  

  11、EtherCAT总线参考配置2

  

  控制模块配置:

  1个ZMC432+1个EIO1616MT+2个总线驱动器。

  使用ZDevelop软件连接上控制器,执行完总线初始化程序后,打开“控制器”-“控制器状态”窗口,可查看槽位0节点信息,或在线命令栏输入?*EtherCAT打印出每个NODE节点的状态。

  

  此时总线上可以扫描到3个节点,0节点为EIO1616MT数字量IO扩展模块,带16进16出,IO映射编号范围为32-47,NODE_IO(0,0)=32

  节点1和2均为总线驱动器,每个驱动器各带一个电机,将这两个轴的轴号分别映射为轴6、轴7。

  在线命令栏输入?*EtherCAT打印信息如下:

  

  

  

  12、EtherCAT总线初始化程序

  

  此初始化程序为通用版本,以上几种配置均适用,使用时只需更改个别全局定义的参数即可。

  运动控制模块根据实际使用情况编写。

  

**********ECAT总线初始化主程序***********

global CONST PUL_AxisStart   = 0    '本地脉冲轴起始轴号

global CONST PUL_AxisNum   = 0    '本地脉冲轴轴数量

global CONST Bus_AxisStart   = 6      '总线轴起始轴号

global CONST Bus_NodeNum   = 1      '总线配置节点数量,用于判断实际检测到的从站数量是否一致

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总线

while (Bus_InitStatus = 0)

Ecat_Init()

wend

if Bus_InitStatus  = 1 then     '总线初始化是否完成

main()    '运动控制模块

endif

END

'************ECAT总线初始化**********

'初始流程:  slot_scan(扫描总线) ->   从站节点映射轴/io  ->  SLOT_START(启动总线) -> 初始化成功

'***********************************

global sub Ecat_Init()

LOCAL  Node_Num          '节点设备编号

LOCAL  Temp_Axis           '当前总线轴的轴号

LOCAL  Drive_Vender        '当前设备厂商编号

LOCAL  Drive_Device        '设备编号

LOCAL  Drive_Alias         '设备拨码ID

RAPIDSTOP(2)

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    '将扫描的总线总轴数置0

SLOT_STOP(0)

delay(200)

slot_scan(0)                      '扫描总线

if return then

?"总线扫描成功","连接从站设备数:"NODE_COUNT(0)

if NODE_COUNT(0) <> Bus_NodeNum then    '判断总线检测数量是否为实际接线数量

?""

?"扫描节点数量与程序配置数量不一致!" ,"配置数量:"Bus_NodeNum,"检测数量:"NODE_COUNT(0)

Bus_InitStatus = 0    '初始化失败。报警提示

'return

endif

'"开始映射轴号"

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      '判断当前节点是否有电机

for j=0 to NODE_AXIS_COUNT(0,Node_Num)-1      '根据节点带的电机数量循环配置轴参数(针对一拖多驱动器)

Temp_Axis = Bus_AxisStart + Bus_TotalAxisnum    '轴号按NODE顺序分配,总线开始轴号+总线扫描轴号

'Temp_Axis = Drive_Alias              '轴号按驱动器设定的拨码分配(一拖多需要特殊处理)

base(Temp_Axis)

AXIS_ADDRESS(Temp_Axis)= (0<<16)+ Bus_TotalAxisnum + 1  '映射轴号

ATYPE=65    '设置控制模式 65-位置 66-速度 67-转矩

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

?"扩展IO映射完成"

endif

next

?"轴号映射完成","连接总轴数:"Bus_TotalAxisnum

wa 200

SLOT_START(0)        '启动总线

if return then

wdog=1              '使能总开关

'?"开始清除驱动器错误"

for i= Bus_AxisStart to Bus_AxisStart + Bus_TotalAxisnum - 1

BASE(i)

DRIVE_CLEAR(0)

DELAY 50

'?"驱动器错误清除完成"

datum(0)            '清除控制器轴状态错误"

wa 100

'"轴使能"

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

'********总线IO模块映射********

'通过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) = 4*(iNode+1)

?"IO映射成功"

endif

end sub

'**********运动控制模块********

'初始化完成后,使用运动控制指令控制ECAT总线轴运动

'*****************************

global sub main()

RAPIDSTOP(2)

WAIT IDLE

BASE(6,7)          '选择总线轴轴号

ATYPE=65,65

UNITS=100,100      '脉冲当量设置

SPEED=100,100

ACCEL=1000,1000

DECEL=1000,1000

DPOS=0,0

MPOS=0,0

TRIGGER              '自动触发示波器

MOVE(100,100)             '先运动100,100位置

MOVECIRC(200,0,100,0,1)  '半径100顺时针画半圆,终点坐标(300,100)

end sub

  正运动技术运动控制器EtherCAT总线的基础使用就分享到这里,更多精彩内容,请关注我们的公众号。

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

快速入门丨篇八:如何进行运动控制器EtherCAT总线的基础使用?相关推荐

  1. 快速入门丨篇一 如何进行运动控制器固件升级

    zfm文件为控制器固件升级包,根据对应的控制器型号选择对应的固件(不同型号的固件包不一样,确保选择正确的固件包,如需固件升级,请联系厂家).可以使用ZDevelop软件或者zfirmdown工具软件下 ...

  2. 快速入门丨篇五:如何进行运动控制器输入/输出IO的应用?

        此前,正运动技术给大家讲了,运动控制器的"固件升级".ZBasic程序开发.ZPLC程序开发以及运动控制器与触摸屏的通讯等,今天我们来学习一下如何进行运动控制器输入/输出I ...

  3. 快速入门丨篇九:如何进行运动控制器示波器的应用?

    之前正运动技术与大家分享了,运动控制器的固件升级.ZBasic程序开发.ZPLC程序开发.与触摸屏通讯和输入/输出IO的应用.运动控制器数据与存储的应用.运动控制器ZCAN.EtherCAT总线的使用 ...

  4. 快速入门丨篇七:如何进行运动控制器ZCAN总线扩展模块的使用?

    之前正运动技术与大家分享了,运动控制器的固件升级.ZBasic程序开发.ZPLC程序开发.与触摸屏通讯和输入/输出IO的应用以及运动控制器数据与存储的应用等. 今天,我们来讲解一下正运动技术运动控制器 ...

  5. 快速入门丨篇十:运动控制器多任务运行特点

    之前正运动技术与大家分享了,运动控制器的固件升级.ZBasic程序开发.ZPLC程序开发.与触摸屏通讯和输入/输出IO的应用.运动控制器数据与存储的应用.运动控制器ZCAN.EtherCAT总线的使用 ...

  6. 快速入门丨篇三:如何进行运动控制器ZPLC程序开发?

    此前,正运动技术给大家讲了,运动控制器的"固件升级"以及"ZBasic程序开发",今天我们来学习一下运动控制器ZPLC程序开发. ZPLC是Zmotion运动控 ...

  7. 使用Cloud DB构建APP 快速入门 - Android篇

    概述 此示例应用演示了如何快速的使用Cloud DB构建简单的图书管理服务.通过快速入门和示例应用,您将会了解到如下信息: 如何使用Cloud DB进行应用开发. 应用数据如何写入到Cloud DB. ...

  8. 新手必备pr 2021快速入门教程「八」关键帧的认识及使用

    PR2021快速入门教程,学完之后,制作抖音视频,vlog,电影混剪,日常记录等不在话下!零基础,欢迎入坑! 本节内容 上节内容我们重点介绍了效果控件的一些知识,多多少少提到了些关键帧,其实关键帧是一 ...

  9. HTML入门练习篇(一)(二):基础功能

      这篇blog整理了自己学习HTML练习的两个简单网页,主要练习了一些简单的功能标签.   第一篇HTML练习主要练习了文字的显示.绑定了简单事件的按钮.显示简单的表格.各种类型的输入项等. < ...

  10. IntelliJ IDEA快速入门 | 第二十八篇:详述IntelliJ IDEA(或者Eclipse)中一些常用的快捷键(下)

    由于IntelliJ IDEA(或者Eclipse)中常用的快捷键比较多,所以这里我就分两篇文章来给大家进行讲述了,这是第二篇. F2:查看文档说明 如果咱们现在想查看一下System类的文档说明,那 ...

最新文章

  1. sap business one 笑谈
  2. Linux入门(9)——Ubuntu16.04安装flash player
  3. VTK:小部件之TexturedButtonWidget
  4. Python函数式编程-map()、zip()、filter()、reduce()、lambda()
  5. laydate 周_宝来屋:5天168万!海盐周大生新店如何赢过竞品实现可持续化客流-广告随意贴...
  6. 美图欣赏,转载[原文链接http://toutiao.com/a4001258776/]
  7. 公司中生存奥秘诙谐解说[ZT]
  8. 一级计算机字处理步骤,计算机一级B文字处理操作步骤
  9. echarts 图例翻页+图例自定义样式
  10. 《图像超分辨率研究综述》笔记
  11. c语言syslog日志记录
  12. 2021高考成绩省排名查询,【重磅整理】2021全国各地高考预测分数线出炉,这样估分可以估算全省排名...
  13. 全国计算机软考网络管理员考试大纲(2012)
  14. Windows Server 2008 防火墙开放 Oracle 的1521端口
  15. Kubernetes 2岁了,这个 Party 你一定要来!
  16. Qt(mingw)+GDAL位图转矢量图写入shp或json文件
  17. 数美科技荣获《银行家》“十佳智能风控管理创新奖”
  18. java opencv surf_opencv python SURF
  19. 求生之路2升级补丁及完整版下载
  20. java玫瑰花代码_给爱人的玫瑰花表白程序代码--Java版-Go语言中文社区

热门文章

  1. Java求100以内素数和
  2. React组件Input输入拼音时触发搜索的解决方案
  3. sosoapi初次接触
  4. 整体资产评估需要资料清单
  5. 计算机专业课考研八月份复习,2016考研:计算机专业暑期复习攻略
  6. python 气泡图 聚类_用SPSS制作气泡图
  7. Arduino资源下载
  8. 软件项目管理(学习笔记)
  9. OpenLayers实例:打开ArcGIS Rest服务
  10. java jsp 乱码_JSP中文乱码常见3个例子及其解决方法