HOT NEWS
Modbus通讯故障的排查需要结合协议特性、网络拓扑和设备状态进行系统性分析。以下是分步骤的排查方法及常见问题解决方案:

RTU模式(串口):
检查波特率、数据位、停止位、校验位(如9600-8-N-1)是否与设备配置一致。
验证串口线序(如RS-485需确认A/B线是否接反)。
TCP模式(以太网):
确认IP地址、端口号(默认502)是否正确配置。
检查子网掩码和网关设置,确保设备在同一网段。
从站地址范围:RTU模式为1-247,TCP模式为1-65535。
使用Modbus Poll等工具扫描从站地址,确认设备是否在线(如发送功能码0x03读取保持寄存器,观察响应)。
线缆检查:
使用万用表测量RS-485的A/B线间电压(正常应为2-5V差分信号)。
检查终端电阻(120Ω)是否在总线两端正确连接(长距离或多点通讯时必需)。
端口状态:
在Windows设备管理器中确认串口未被占用,且无冲突(如COM3与COM4冲突)。
尝试更换USB转串口适配器或PC端口,排除硬件故障。
网络连通性:
使用ping命令测试从站IP是否可达(如ping 192.168.1.100)。
通过arp -a查看MAC地址是否匹配,排除IP冲突。
端口监听:
使用telnet 192.168.1.100 502测试端口是否开放(若连接失败,可能是防火墙拦截或服务未启动)。
抓包分析:用Wireshark捕获Modbus TCP报文,确认是否有SYN/ACK握手失败。
RTU模式:
检查报文长度是否符合规范(如功能码0x03读取10个寄存器,请求报文应为8字节:地址+功能码+起始地址+寄存器数量+CRC)。
使用Modbus Slave软件模拟从站,对比主站发送的原始报文是否正确。
TCP模式:
确认MBAP头字段(事务标识符、协议标识符、长度、单元标识符)是否完整。
示例:读取保持寄存器的TCP请求报文应为12字节(含MBAP头和PDU)。
常见错误码:
0x01(非法功能码):从站不支持该功能(如尝试对只读寄存器写入)。
0x02(非法数据地址):寄存器地址超出范围(如从站仅支持0-999,主站请求1000)。
0x03(非法数据值):写入值超出寄存器允许范围(如温度寄存器只能接受-40~125℃)。
0x04(从站故障):从站设备异常(如传感器断线、存储器损坏)。
解决方案:
参考设备手册确认寄存器映射表,修正请求地址或数据范围。
重启从站设备,观察是否恢复(临时性故障)。
Modbus Poll(主站模拟):
发送自定义请求报文,观察从站响应。
启用“Auto Poll”功能持续读取寄存器,监控数据稳定性。
Modbus Slave(从站模拟):
模拟从站响应,验证主站报文格式是否正确。
设置超时时间(如1000ms),测试主站重发机制。
串口调试助手(如SSCom):
发送十六进制报文(如01 03 00 00 00 0A C4 0B),观察从站返回数据。
对比正常设备与故障设备的响应差异。
Wireshark(网络抓包):
过滤modbus协议,分析TCP握手、请求/响应时延。
检查是否有重传报文(RTT>500ms可能存在网络拥塞)。
现象:主站偶尔能读取数据,但频繁超时。
排查步骤:
用万用表测量RS-485总线电压,发现波动较大(正常应为稳定差分信号)。
检查终端电阻,发现仅在一端连接,补充另一端120Ω电阻后故障消失。
缩短总线长度或增加中继器,消除信号衰减。
现象:主站能连接从站,但读取的寄存器值全为0。
排查步骤:
使用Modbus Slave模拟从站,发现主站发送的起始地址为0(部分设备地址从1开始)。
修改主站配置,将起始地址改为1后数据正常显示。
现象:主站发送写入指令后,从站返回错误码0x04。
排查步骤:
检查从站日志,发现传感器断线导致设备自检失败。
更换传感器并重启从站,通讯恢复正常。
标准化配置:
制定Modbus设备配置模板,统一波特率、地址、寄存器映射等参数。
冗余设计:
对关键从站采用双网口或双电源,避免单点故障。
定期维护:
每季度检查串口线缆氧化情况、终端电阻连接状态。
更新设备固件,修复已知协议漏洞(如CRC校验错误)。
PREV:以太网通讯的优缺点