先给结论:连上了不等于传上去了
客户的原话是「数采仪显示连接成功,智慧水务管理平台就是没数据」。这类报修我们接得不少,最常见的根因不是网线、不是 4G 信号弱,而是报文已经到了平台侧,却被平台丢掉:TCP 连接确实建起来了,但 HJ212 报文里的 ST(系统编码)、PW(访问密码)、CN(命令码)跟平台侧对不上,平台解析失败就静默丢包,设备端只看到「发送成功」。
所以顺序永远应该是:先确认平台到底有没有收到包,再确认收到的包对不对,最后才去查网络。
四层原因,一层一层往下剥
协议层,占比最高。
- CN 用错。实时数据是 2011,历史补传是 2051。有的平台只入库 2011,收到 2051 直接丢弃,设备日志上却全是发送成功。
- 包长度字段算错。HJ212 的包是「## + 四位数据段长度 + 数据段 + 四位 CRC 校验 + 回车换行」,长度字段只算数据段,不含 ##、不含 CRC,多算两位或少算两位,平台按长度截断,后面全部解析失败。
- CP 里的污染物编码不在平台字典里。COD 用 w01018、氨氮用 w21003,编码对不上平台认为「无此因子」,静默丢弃。
- Flag 位没设对。需要应答、需要拆分包的场景没置位,小包能过、大包被截断。
网络层。
- NAT 或防火墙把空闲长连接静默回收,设备端 socket 还显示已连接,对端其实早不认了。
- 专网或 VPDN 白名单只放了域名没放 IP,平台换 IP 没同步。
- DNS 解析异常后被本地缓存,设备一直往旧地址发。
设备层。
- 时钟没同步。DataTime 比平台时间超前或滞后太多,平台判为无效数据。
- 1013(超时时间与重发次数)设得太小,线路一抖动就断链重连,重连期间的数据没进缓存。
- 断电重启后补传开关没打开,缺的那段数据补不上,需要平台下发 3020 触发历史数据上传。
平台层。
- 设备没在平台建档,或建档时 ST 与现场机不一致。
- 平台前端只做展示、没做入库,页面看不到不等于没收到。
排查顺序本身就是经验
为什么先查平台再查设备?因为平台收包日志是唯一能证明「包到没到」的地方。先看平台有没有收到这个 ST 的报文,再看解析日志里报的是什么错,然后才回头比对设备发出的报文长度、CRC、CN 和 CP 字段,最后才用 telnet 测端口、抓包看有没有 RST。反过来,一上来就拔网线、换流量卡,八成白折腾。
三个最容易踩的坑
- 坑一:把「连接成功」当成「通讯正常」。TCP 握手成功只说明链路通,报文合不合规是两件事。
- 坑二:只改设备不改平台。现场调好了 ST 和 PW,平台侧档案没同步,照样一包不入库。
- 坑三:把时间不同步当成网络丢包。DataTime 超前是时钟问题,换卡换线解决不了,先把 NTP 对上。
技术问答
问:我这个情况到底要不要传?答:只要在排污许可和联网范围内、平台已经建了档,就得传,而且要能回溯。
问:平台说连上了,是不是我设备没问题?答:只能说明链路没问题,字段对不对得看平台解析日志。
问:换个端口能不能好?答:端口不通是连不上,你现在是连上了没数据,换端口基本没用。
问:数据补传能补多久的?答:看现场机缓存容量和补传策略,先确认 2051 有没有开启。