EtherCAT是自动化控制最好的实时环形控制总线之一,本文以最简单的方式带你实际操作ZMC300E的EtherCAT总线,让你的EtherCAT电机转起来。
前言
当一个鼠标插入到电脑时,发生了什么?
首先电脑会检测到有USB插入;然后,电脑会提示安装驱动;最后,就可以通过鼠标来移动光标、单击、双击等操作了。
这有问题么?当前没有问题,但作为程序猿,有两个地方值得深挖一下。
1、电脑安装的驱动,是什么驱动?当然是鼠标驱动,因为我们接入的是鼠标。但电脑是如何知道呢?原来USB规范中,要求每个USB设备都要有自己的设备描述符,电脑通过分析该描述符,才知道接入的是什么设备。
2、为什么能通过鼠标来移动光标?这是双方共同合作的结果。首先鼠标提供光标位置的数据,然后电脑收到鼠标的数据后,将数据作用到光标的位置上产生移动效果。这需要有个前提,即鼠标数据的格式,电脑需要先知道其格式,才能解释这份数据。这份数据格式的定义,在USB的接口描述符规范中进行了定义。
说了这么多,这和EtherCAT有关系么?当然有,对于EtherCAT或者任意一个总线来说,都需要知道接入设备的类型及数据格式,否则是无法解释数据的,通常有两种方式:
事先约定:通过事先约定的来确定工作如何进行。这就像发个信息说“我们晚上8点一起看电影吧“一样简单,这是小编喜欢它的原因。但这个约定有时就像友谊的小船说翻就翻,对方招呼也不打,只剩你一个人还傻傻地站在的电影院门口;
协议规范:定义一套完整的规范,大家一起遵循它。规范通常都很多很杂,学习成本较高,按规范开发就像是你去做的基金定投,短期收益低,但稳定可靠。
EhterCAT和USB一样都采用了协议规范这种方式,这里简单介绍一下EtherCAT的相关规范及用途:
ESI(EtherCAT Slave Information):这个是从站提供的标准描述规范文件,该文件描述了设备的类型、数据格式及一些“特殊癖好”,这就相当于USB的设备描述符+接口描述符。
ENI(EtherCAT Network Information):这个是用于给主站启动时,加载的标准配置规范文件,用于初始化所有的从站。这个文件描述了从站的数量、每个从站的类型及数据格式、DC等配置信息。
ESI还理解,为啥还多了个ENI呢?EtherCAT规范为了满足工业控制的复杂性,ESI中提供了非常强大的可配置功能,相对的使用起来也变得困难了。因此EtherCAT采用静态化配置,即由PC使用可视化工具进行对应的配置工作,配置完成后导出不可变的ENI配置,给到具体的主站设备来执行。所谓静态化配置,即EtherCAT网络设备发生变化时,需要重新执行配置工作,相比于USB的全自动配置,功能强大了,但使用也麻烦了。有得必有失,这是EtherCAT的选择。简单总结一下EtherCAT开发,可分三步走:生成ENI,加载ENI,解释输入输出数据。
准备工作
开始EtherCAT测试前,需要准备以下硬件:一台电脑、一台 ZMC300E运动控制器、一台EtherCAT伺服驱动器、2根网线,然后使用网线将设备按如下示意图进行连接。
生成ENI文件
1. 启动EtherCAT服务
打开putty.exe软件,输入运动控制器NET1的默认IP地址:192.168.1.136,账号和密码为root。
2. 连接设备
启动ZlgEtherCatStudio上位机配置软件,输入运动控制器NET1的默认IP地址:192.168.1.136,点击回车。
3. 扫描网络
通过扫描EtherCAT总线,来识别接入了多少个设备,并将其网络拓扑添加到本地主站树节点。
4. 导入ESI
如果该从站无法正确识别,可手动导入从站ESI(EtherCAT Slave Information)文件。
5. 配置FMMU
一般应用不需配置从站FMMU/SM,使用从站默认配置即可。当需要改变输入输出变量时,可通过本配置项配置。
6. 生成ENI文件
导出ENI,取名为text_eni。
加载ENI文件
1. 将上一步生成的test_eni.xml文件,通过WinSCP工具上传到运动控制器的目录/opt中。
2. 使用控制器加载ENI配置/文件在putty.exe工具,先输入ctrl+c结束当前主站程序,输入以下命令启动主站并加载ENI配置文件:/opt/ecat_test/master /opt/test_eni.xml,看到输出ethercat start success即代表成功。
解释输入输出数据
在CiA402规范中,定义了伺服类设备的数据格式,这里给大家介绍一下最常用的位置控制模式的数据格式。
1. 输出数据
Controlword:控制字,16Bit,主要用于控制电机上下电,抱闸等;
Target Position:目标位置,32Bit,用于控制电机转到指定的位置。
2. 输入数据(相对于设备)
Statusword:控制字,16Bit,主要用于控制电机上电、下电、抱闸等操作;
Position Actual Value:实际位置,用于反馈电机当前所在位置。我们要做的就是周期性解释以上4个数据,然后执行对应的操作即可,可参考如下代码:
电机测试
在putty.exe工具中,可使用以下命令,对电机进行简易测试,这些命令是基于CiA402规范进行实现的。
1. move_test <angle>命令
angle表示电机转动角度,输入该命令后,电机会一直重复执行输出:先正转angle度,然后反转angle度。
输入move_test 90,仔细观察电机的转动,如果发现转动的角度比90度小,则说明脉冲当量偏小,应适当增加。推荐10倍住上递增进行测试,该值默认为1。
2、units <unit>命令unit表示脉冲当量,units 1000命令用于将轴0的脉冲当量设置成1000。使用units?查看所有轴的脉冲当量。
其它补充
1. 关于脉冲当量
在实际应用中,脉冲当量的准备值,是如何计算出来的?这个应根据实际的场景及所需要单位来确定,这里给出一个常见的,以角度为单位的脉冲当量计算公式。
编码器的分辨率,可以从伺服驱动器的手册得到。
2. 关于EtherCAT主站
ZMC300E提供的EtherCAT主站,采用的是KPA master主站,商业授权,其主要特点是高效、稳定、支持通过硬件来消除帧抖动(ZMC300E可做到±15us的抖动),我司已购买其版权,用户可免费自由使用。