今天跟大家分享客户使用Anybus EtherCAT主站网关ABC3113将HORIBA流量计接入西门子PLC时遇到的问题和解决过程这既是一个典型的应用案例又让我们在解决问题的过程中加深了对EtherCAT协议的理解。1.客户需求客户使用EtherCAT主站网关ABC3113将HORIBA流量计EtherCAT接口接入西门子PLC中这是一个非常常见的应用通过网关实现不同网络协议的设备与PLC之间的数据交互。2.客户遇到的问题客户反馈整个网络可以通讯但是在PLC中读到的流量计的数据变化很慢大概2分钟或者更长时间才改变一次但实际上流量计的数据变化基本上是实时的。同时客户也测试了将流量计直接接入倍福PLC中在TwinCAT中看到数据变化是实时的。3.初步分析根据客户的描述我觉得非常奇怪这个网关很多客户已经用在将伺服驱动器接入西门子PLC的现场应用中没有反馈有数据更新慢的问题。我的第一反应这个流量计有问题但是客户测试了接在倍福PLC中没问题数据的变化是实时的。这就很让人费解并且我跟客户进行了远程测试确实如客户所说数据变化非常慢。至此仅从表面现象很难确定问题在哪只能抓取EtherCAT网络数据报文来进行分析。上图是流量计接入网关ABC3113中EtherCAT网络报文可以看到已经进入OP状态但是逻辑读写LRW报文只有网关发出的报文红色方框标记没有流量计回复的逻辑读写LRW报文这样就解释了为什么读取到的数据几乎没有变化因为流量计基本不回复输入数据当然不会变化了。同时我们也抓取了流量计接入倍福PLC中的报文流量计正确的回复逻辑读写LRW报文数据在实时变化。4.深入探究现在有了报文也从报文上解释了通过网关读取到的数据变化非常慢从抓取到的报文看到流量计大部分时间不回复逻辑读写LRW报文偶有回复也很随机有时两三分钟有时半个小时毫无规律。那么为什么会出现这种问题呢为什么网关发送的报文流量计不回复倍福PLC发送的报文它就回复呢带着这个问题我们对网关和倍福发送的初始化报文进行了梳理和对比分析发现了2处不同之处FMMU的起始地址不同在网关中FMMU起始地址是从0x0开始倍福PLC使用的0x01000000。I/O mapping方式不同网关使用的是Legacy mode倍福PLC使用的Overlapping mode。解释一下这两种模式我们把数据看做是一个高速行驶的列车列车头是前面的报文头数据部分是一节节车厢。如下图所示主站发送输出数据数据经过每一从站设备时设备从输出区取走数据并把输入数据填入输入区。这两种映射方式都是协议规范支持的只是Overlapping mode更紧凑一些。5.问题解决有了这2个方向的猜测后我们修改了网关底层固件分别修改了FMMU起始地址和I/O映射方式。经测试后发现将网关的I/O映射方式改为Overlapping mode流量计就可以正确的回复报文了。从下方的报文中我们可以看到流量计都正确的响应了网关发送的LRW报文红色方框标记。最后我们又仔细查看了流量计手册发现它使用的是TI AM335x ESC芯片,从该芯片手册中看到“TI EtherCAT 从站不支持non-overlapping映射模式”同时也不对该bug进行修复。鉴于别的厂家产品也可能会用到TI的这款ESC芯片我们对网关的固件进行了正式升级使用Overlapping mode取代Legacy mode的I/O映射方式。纸上得来终觉浅绝知此事要躬行。最后大家如果有关于EtherCAT通讯的相关问题欢迎留言与我们讨论。