各位工程师,最近机房动环调试,碰到一个非常经典、也很容易卡很久的问题:盛世宏博 H-THRJ45 网口温湿度传感器,IP能ping通,灯正常,但是Modbus TCP一直超时、读不出温湿度寄存器。网上很多排错思路只说了皮毛,这次把完整排查链路、踩过的坑和最终根因整理出来,给做动环、PLC采集、Zabbix/组态采集的同行参考。
一、现场现象
设备:H-THRJ45 RJ45网口温湿度传感器,静态IP接入工业交换机,准备Modbus TCP采集温湿度。 现象汇总:
电脑同网段直接ping传感器IP,丢包0,延迟稳定;
网口LINK灯、ACT灯闪烁正常,供电正常(PoE供电款);
Modbus Slave、ModScan、PLC、Zabbix Modbus轮询全部超时,无返回报文;
没有返回Modbus异常码,单纯连接超时/无应答;
换同型号别的传感器,同样组网方式可以正常读取,初步排除上位机软件问题。
很多人到这里会陷入误区:ping通=网络没问题,反复核对寄存器地址、倍率,来回改从站ID,折腾很久找不到问题。这里核心一句话:ICMP(ping)和TCP 502是两套东西,ping通只代表IP层可达,不代表传输层、应用层Modbus服务正常。
二、按层级排查过程(由简到繁,推荐固定顺序)
Step1:确认TCP 502端口是否开放(重中之重)
ping正常,优先测端口连通性,而不是直接去调寄存器。 Windows可以用tcping,Linux用nc:
nc -zv 192.168.1.100 502
tcping 192.168.1.100 502
这里我当时测出来:502端口连接被拒绝,直接锁定问题不在寄存器,在TCP链路/设备网络配置。
常见导致502不通的前置坑:
Windows防火墙、工控机系统防火墙拦截出站502;
交换机ACL、端口安全、VLAN隔离,放行ICMP但拒绝TCP 502;
传感器内置Web后台,是否有开关:启用/关闭Modbus TCP服务(部分版本固件支持关闭Modbus只保留SNMP);
H-THRJ45支持Modbus TCP+SNMP双协议,很多新手只知道它能ping、能进网页,不知道可以单独关闭Modbus服务。
Step2:直连测试,排除交换机侧隐藏坑
把电脑网线直接插传感器,不经过交换机,电脑设置同网段静态IP,再次测试ModScan。
这一步非常关键,很多现场元凶是交换机EEE绿色以太网节能机制。 低流量传感器几秒才发一包Modbus报文,交换机EEE空闲降速休眠,ICMP小包唤醒没问题,但TCP长连接/502握手直接卡住,表现就是ping通、Modbus不通,抓包看到大量RST、重传。
排查到这里补充两个交换机高频坑:
交换机端口风暴抑制、端口隔离;
PoE功率不足:ping只需要很小电流,Modbus收发报文瞬时电流不够,传感器网络栈异常,能响应ping,Modbus服务卡死;H-THRJ45有DC供电和PoE版本,PoE供电现场优先换DC单独供电验证。
Step3:Web后台核对传感器本身参数(H-THRJ45专属)
浏览器打开传感器IP登录Web配置页,逐项核对:
Modbus TCP功能是否勾选开启;
Modbus端口:默认502,是否被改成其他端口;
从站Unit ID:很多人混淆IP和从站ID,Modbus TCP MBAP头里的Unit ID必须和传感器配置一致,不是IP;
子网掩码、网关:同网段采集虽然不需要网关,但掩码错误会出现ARP异常,ping侥幸通、TCP不稳定;
是否存在IP冲突:arp -a查看MAC,看该IP是否对应传感器本身MAC,IP冲突时经常出现ping时通时通,Modbus完全无应答。
踩坑点:我这台传感器是之前别人调试留下的,Web里Modbus TCP选项被关闭,只开启SNMP,所以ping、网页访问正常,502无服务,所有Modbus客户端全部超时。
Step4:抓包确认请求报文(Wireshark)
交换机做端口镜像或者电脑直连抓包,看两类情况:
只有SYN,没有SYN+ACK:设备侧Modbus服务没监听502;
握手成功,发送Modbus请求之后没有应答:寄存器地址、功能码、Unit ID不匹配;
收到Exception异常码:功能码不支持、寄存器越界,这个和“完全无返回”是两种故障。
H-THRJ45标准寄存器简单提一下,避免后续踩寄存器的坑:
温度寄存器、湿度寄存器,有原始值,需要乘以对应系数(比如0.1);
区分保持寄存器/输入寄存器,选错功能码也会返回异常。
Step5:固件层面(少见但存在)
长时间不间断运行后,部分老固件版本存在网络栈内存泄漏,Modbus服务僵死,ping、Web还能跑。现象就是断电重启立刻恢复,跑几天又复现。这种情况联系厂商升级固件即可。
三、本次故障根因总结
本次这个H-THRJ45,Web管理页面内Modbus TCP协议被手动关闭,仅开启SNMP。 设备网络栈正常、ICMP响应正常、Web页面正常访问,所以ping完全没问题,但TCP 502端口没有服务监听,Modbus客户端握手失败,表现就是ping通读不到数据。
这个坑隐蔽性极强,很多默认思维:网口温湿度传感器=一定开502 Modbus,忽略它是双协议可独立开关的机型。
四、通用排查速查表(以后同类网口Modbus设备直接套用)
✅ ping通 → 只是IP层可达,不等于502端口可用
✅ tcping/nc测502端口,先确认端口通不通
✅ 电脑直连传感器,剥离交换机EEE、VLAN、ACL干扰
✅ 登录设备Web后台,确认Modbus TCP服务启用、端口、从站ID
✅ 排查IP冲突、PoE供电不稳、网线劣质(近端串扰,小包ping能过,大数据包/TCP丢包)
✅ Wireshark抓包,区分“连不上502”和“连上了但寄存器不返回”
✅ 核对寄存器类型、地址偏移、缩放系数、字节序
五、写在最后
工控现场很多故障不是玄学,就是分层模型没记牢:OSI分层,ping工作在网络层,Modbus TCP是应用层跑在TCP传输层之上,中间随便一层拦截就会出现这种割裂现象。 H-THRJ45这款传感器本身稳定性不错,适合机房、库房动环、Zabbix、组态王、PLC采集,但是它的Web里协议开关这个设计,很容易给后续调试人员埋坑。
大家平时调试Modbus TCP有没有遇到过类似“ping通但是502不通”的奇葩现场?欢迎在评论区交流补充,一起避坑。
63