在某汽车焊装车间的柔性生产线中,汇川AM600 PLC通过CANopen总线挂载了6个远程IO站(GL10系列)。近期出现偶发性第3号站掉线,且故障复位后能自动恢复,但每天发生2-3次,严重影响生产节拍。初始排查更换了终端电阻和站地址拨码,问题依旧。本文从协议栈底层出发,提供一套系统性的根治思路。
首要排查维度是心跳(Heartbeat)超时参数与扫描周期的匹配性。AM600作为NMT主站,其默认心跳超时设置为300ms,而第3号站因为所处位置靠近大功率变频器,导致其CAN收发器供电电压在变频器启动瞬间跌落至4.2V(正常需4.75V以上)。此时从站CAN控制器虽未完全断电,但已无法在300ms内正确发出心跳报文,主站判定为掉线。解决措施:将心跳超时放宽至800ms,同时为该从站的DC/DC电源模块并联一个470uF/50V的电解电容以增强瞬态保持能力。注意,超时时间并非越大越好,过大会掩盖真实的通信中断,需结合设备安全等级权衡。
第二个深坑在于CANopen的节点守护(Node Guarding)与心跳的互斥关系。若AM600程序中同时启用了SDO请求的节点守护,且守护轮询周期(如50ms)与心跳产生竞争,在总线负载率超过60%时(本案例总线波特率500kbps,报文约2000帧/秒),低优先级的心跳帧会被延迟发送。实测发现,主站侧收到的心跳时间戳波动从原始的±5ms扩大至±250ms,从而触发误判。通过AM600的PDO映射表,将第3号站的COB-ID 0x717(心跳)从默认的异步模式改为同步模式,并绑定到SYNC报文后,竞争现象消失。
最后是拓扑层面的检查。CANopen规范要求总线为直线型,但现场为了布线方便,在第2号和第3号站之间加装了一个T型分支器,分支长度达1.2米。在500kbps下,这个分支相当于一个阻抗不连续点,会产生信号反射,导致第3号站接收到的CAN_H/CAN_L差分幅值从标准的2.0V降至1.5V左右,接近接收阈值下限。移除T型分支器,改用带有IP67防护的T型分线盒(内置终端电阻切换功能)后,误码率从10E-6降至10E-9,掉线故障彻底消失。
根治此类顽疾,需摒弃“换模块、调地址”的侥幸心理,建立从电源完整性、协议参数到物理层阻抗的三维排查矩阵。建议在项目调试阶段就使用CAN分析仪记录正常工况下的心跳基线,以便故障再现时快速比对。