硬件配置:
CPU: S7-1200 G2,初始固件 V1.0,已升级至官方最新固件,问题依旧
通讯模块:CB1241 (RS485)
从站设备:多台第三方仪表(温控表、液位计)
通讯参数:波特率 9600,8N1
问题现象:
使用 Modbus_Comm_Load 组态通讯端口,搭配轮询逻辑循环读取多个 RTU 从站。系统运行数小时后,会随机卡在某一台从站,后续所有站点通讯全部中断。
在线监控状态:
Modbus_Master 指令 Status = 16#7000(指令空闲),Busy、Done、Error 均为 0,指令停止发起新通讯,进入假死状态。
故障触发前会偶报 16#81E9(从站响应超时)。
已做排查:
已更新 TIA Portal、HSP 硬件支持包,并将 CPU 升级至最新固件,故障未消除;
单独点对点测试故障从站,通讯运行稳定,排除从站硬件及单点线路故障;
轮询逻辑以 Done / Error 作为站号切换条件,Modbus 指令内部超时参数已按规范配置;
RS485 总线两端已接入 120Ω 终端电阻,通讯线缆屏蔽层已按单点接地处理,线路侧问题基本排除。
疑问:
查阅相关技术资料,发现 S7-1200 G2 搭配 CB1241 存在 RTU 轮询死锁的反馈。请问通过周期性复位 Modbus_Comm_Load 指令,或是优化轮询时序,能否有效规避该问题?
针对指令常驻 16#7000 的通讯假死状态,除手动复位 REQ 之外,是否有成熟、可靠的自动看门狗恢复方案?
麻烦各位前辈指点排查方向与程序优化思路,感谢!