环境如下:
CPU:1217 DC/DC/DC
远程IO:ET200SP PtP模块
软件:TIA Portal V19
外设:两台ModbusSlave从站外设(一主二从)
现象:在外设重启过程中,或485链路有较大噪声的时候,PLC通信功能挂死,接收缓冲区数据不刷新并上报通信错误(接收缓冲区前四个字节01 01 81 E2);但通过示波器、USB转485等工具抓取485链路上的通信报文没有异常(PLC正常发送、设备正常回复);此时断开一个外设与PTP模块连接、或模块重新上下电并初始化端口,PLC将恢复通信功能;
PS:实测该问题与从站相应时间相关,当两台从站响应时间为3-5ms时问题出现,当两台从站响应时间为50ms左右时问题不出现;
分析过程:
1)拆解PtP模块外壳,发现有两枚485电平转换芯片(485通信只使用一枚);
2)485电平转换芯片实现功能:将PtP模块MCU的UART-TX信号(电平转换芯片引脚DI)转换成485信号(A\B)发送,将接收到的485信号(A\B)差分运算按照+-200mV判别阈值输出标准电平给到PtP模块MCU的UART-RX信号(电平转换芯片引脚RO);
3)PLC感知外部485链路状态只能通过RO信号;
4)PtP模块单板飞线引出RO信号,连接示波器,发现在设备重启、485链路噪声较大时,RO链路上将解码出乱码字节(非设备回复报文字节),此时会触发模块挂死,即使485链路恢复正常后,PLC通信模块也处于挂死状态(链路报文收发正常,接收缓冲区数据不刷新并上报通信错误);
5)通过使用外置信号源对RO信号进行注扰测试,也会复现问题;
PLC的BUG:欢迎大家复现、讨论
解析RO信号异常上报通信错误没毛病,但当链路恢复正常却依然无法恢复通信功能不合理;从测试结果来看可以通过拉高RO总线的形式恢复故障(掉站外设不回复总线默认状态拉高、外部程控电源强行拉高总线)