EtherCAT 协议凭借其良好的开源性以及低延时的通信效率,吸引了众多 PLC 厂家纷纷选择对其提供支持。由于各品牌 PLC 所支持的 EtherCAT 主站大部分采用自研方式,在这样的背景下,不同品牌的主站难免会在性能与行为上存在差异,对从站不同特性的支持程度也各不相同(如 PDO 配置、邮箱通信长度调整及 SM 分配等)。
因此,行业内常常会出现一个完全符合 EtherCAT 从站标准的设备,却无法与所有品牌的 PLC 都完美适配的问题。在 EtherCAT 从站设备的 ESI 文件中包含许多关键字,本次我们将直接通过一个具体实例,来谈一谈 CompleteAccess 关键字对通信产生的影响。
最近我司的 Anybus CompactCom 40 系列的 EtherCAT 从站模块在终端用户现场与欧姆龙 PLC 适配多次出现了欧姆龙 NX 系列(NX501、NX701)PLC 诊断信息提示 Anybus CompactCom 40 模块状态由 PRE-OP 切换到 SAFE-OP 切换失败。

图1 EtherCAT状态机
参考倍福《EtherCAT_Device_Protocol_Poster》
出现问题之后我们第一时间通过倍福的 TwinCAT EtherCAT 主站以及欧姆龙的 NJ501 PLC 测试客户手上的 Anybus CompactCom 40 EtherCAT 模块,测试通信完全正常,由于 TwinCAT 的 EtherCAT 主站开发得较为完善,因此我们认为 Anybus CompactCom 40 EtherCAT 模块是没有问题的。
欧姆龙 NJ501 PLC 与模块的通信也是正常的,这不禁让人费解,问题会出在哪里。从 PLC 诊断信息上我们已经获取不到任何帮助了,只能通过分析欧姆龙 PLC 与 Anybus CompactCom 40 EtherCAT 模块之间的通信报文,获取一些线索了。

图2 Anybus CompactCom EtherCAT PCIE/SPI/UART板卡
我们通过 Anybus EtherTAP 1G 网络抓包工具抓取了 EtherCAT 从站模块与欧姆龙 PLC 之间的通信报文。EtherTAP 是通过采样复制流经该模块 A/B 口之间的网络报文电信号并传输到 WireShark 报文分析软件中,不参与也不影响实际的通信网络,可以抓取十分干净原始的报文,方便诊断分析。

图3 Anybus EtherTAP抓包工具
通过 PLC 提示的模块是由 PRE-OP 切换到 SAFE-OP 切换失败,基于从站状态机切换所需的工作流程,我们将问题初步定位在 PDO 配置上,大部分的 EtherCAT 主站在与从站建立通信的过程中都会依据从站的 ESI(XML)文件提供的信息在初始化时向从站写入 PDO 配置。
问题分析:由报文可以看出,NX701 PLC 在重启后与 Anybus CompactCom 40 EtherCAT 建立通信的过程中未对 0x1600、0x1601,0x1a00、0x1a01 等 PDO 对象进行初始化写入,仅初始化了 0x1c12、0x1c13(见下图 4),而在另一款欧姆龙 NJ501 PLC 与从站 Anybus CompactCom 40 EtherCAT 建立通信过程中对其 0x1600、0x1601,0x1a00、0x1a01 等 PDO 对象进行了初始化写入(见下图 5)。

图4 NX701与从站异常报文

图5 NJ501与从站正常报文
由于报文中没有发现主站对 PDO 的编辑配置报文,且主站不主动切换从站的状态机,而 ESI 文件中 PDOAssign 与 PDOconfig 关键字都已置 1,这是必须使能的功能,而 CompleteAccess 关键字是有可能影响主站配置从站 PDO 的行为的,CompleteAccess 关键字打开意味着主站会通过一次邮箱通信将 PDO 配置信息全部写入从站,此次从站的每个 PDO 中都包含多个 PDO Entry,CompleteAccess PDO 配置需要较长字节的邮箱通信。但是一般情况下主站可以通过分段下载解决邮箱长度不足的问题,在之前 NX701 和从站通信的报文中也没有看到邮箱通信 Segment download 的关键字,因此 CompleteAccess 关键字使能有可能影响了通信。

图6 邮箱分段通信协议报文示例
为了排除这一可能,通过修改 Anybus CompactCom 40 EtherCAT 模块的 ESI 文件,将 Anybus CompactCom 40 EtherCAT ESI 文件中的 CompleteAccess 置 0,关闭该功能,NX701 PLC 与 Anybus CompactCom 40 EtherCAT 在 EtherCAT 通信恢复正常,问题终于得到解决。报文中可看到,在关闭 CompleteAccess 功能后,NX701 PLC 通过单个对象写入的方式对 Anybus CompactCom 40 EtherCAT 0x1600、0x1601,0x1a00、0x1a01 等 PDO 对象进行了正常的初始化写入操作,见下方部分报文截图(图 7)。


由此可见确实是 CompleteAccess 关键字影响了 PLC 对从站的通信的初始化流程。
到这里问题终于得到了解决,由于问题出现在现场,一时也找不到 NX701 PLC 做测试,一开始仅通过 NJ501 PLC 做测试,却没有发现任何问题,而现场终端的保密策略,更给问题分析带来了不小的阻力,最终通过与终端客户反复沟通,终于得到抓取报文的允许,得到允许后,在现场人员的帮助下,很快就获取了报文,并定位出问题,在此也十分感谢现场的人员配合与帮助。