农业面源污染治理平台收不到数据:先查MN再查报文

“数采仪上显示连接成功,平台那边一条数据都没有。”华东一个面源治理项目的运维工程师这么描述。站设在农田退水口,太阳能供电、4G 上传,人到了现场,屏幕上的状态灯是绿的。

先说结论:这类故障里最常见的原因在平台侧,不在现场——设备的 MN 没在农业面源污染治理平台建档,或者建档了但没绑点位,报文到了平台被直接丢弃。TCP 建链是通的,所以现场看到的是“连接成功”。先别急着换卡、换天线、换数采仪。

连接成功说的是链路,不是数据入库

HJ212 的流程分两段。第一段是建链:设备发 CN=9011 请求连接,平台回 9012 确认;之后靠 9013 心跳、9014 心跳应答保活。第二段才是数据:CN=2011 实时数据、2051 小时数据、2061 日数据,报文体里带 MN、PW、ST=32、Flag 和 CP=...DataTime=...因子编码=值。

前一段通了,只证明 4G 卡能上网、平台端口开着。建链成功和数据入库之间,还隔着 MN 校验、因子字典、时间窗口、校验和四道关。

四层原因,从平台往下捋

平台层

  • MN 未建档:设备用的是自编编号,平台按站点表比对,匹配不上直接丢包,也不回错误。
  • 建档了但没绑点位,或绑到了别的行政区,数据落在空站点下。
  • 进了审核池:面源平台对超标值、负值、突变值默认标为疑义数据,前台不展示,看着就像没传。
  • 因子字典缺项:农田退水站常见的流量、雨量、液位,很多平台用自定义编码,不在字典里时整条报文解析失败。

协议层

  • DataTime 必须是 14 位 yyyyMMddHHmmss,写成 12 位或带分隔符,平台解析不动。
  • Flag 位用错:分钟数据 Flag=4、小时 Flag=2、日数据 Flag=1,混着发容易被判为重复或非法。
  • 校验和算错:报文头 ## 后四位是数据段累加和取低 16 位的十六进制,多一个分号、少一个 && 就过不去,平台静默丢弃。
  • CP 段里字段之间用分号、因子之间用逗号,用反了同样解析失败。

网络层

  • 4G 私网 NAT 老化,连接挂着但发不出去,设备日志里有 9013、没有 9014。
  • 心跳间隔长于运营商保活时间,建议收到 60 到 120 秒。
  • 定向卡只放通了特定 IP 和端口。

设备层

  • 传感器无输出,数采仪照发,但值全是 0 或 -9999,被判无效。
  • 太阳能欠压,发一条就重启,时间回到出厂默认。
  • 本地缓存满,2051 补传队列被覆盖,历史数据补不回来。

排查顺序:先平台,再报文,再心跳,最后才去现场

顺序本身就是效率。现场跑一趟成本最高,而“连接成功”已经排掉了物理链路,所以第一步应该坐在电脑前查平台有没有收到这个 MN 的任何报文;第二步抓设备原始报文,核对因子编码、DataTime 和校验和;第三步看心跳往返;实在不行再去现场量电压、查传感器。

每步的判断标准和处置

  • 平台查不到该 MN 的任何报文 → 建档或绑定问题 → 补建档,逐个字符核对 MN 的大小写和位数。
  • 有报文但数据表为空 → 因子编码或校验和 → 拿原始报文对平台字典,重算累加和。
  • 数据入库但前端不显示 → 审核标记 → 去疑义数据列表看阈值设置。
  • 日志有 9013 无 9014 → 链路保活 → 缩短心跳、开 TCP KeepAlive。
  • DataTime 与实际差十分钟以上 → 校时 → 平台下发校时命令(1000–1999 段)或换 RTC 电池。

三个容易误判的坑

  • 看见“连接成功”就派人去换卡换天线。链路通不代表业务通,白跑一趟的情况很多。
  • 拿一台能正常上报的表去替换,结果还是没数据。因为病根在 MN 和因子字典,不在设备。
  • 把补传当实时。缓存里堆了几千条 2051,一连上就猛发,平台限流去重,看着像“时有时无”,其实一直在补历史。

FAQ

我这个站到底要不要用平台给的 MN?我自己编的行不行?

不行。MN 是平台认设备的唯一凭据,自编的进不了站点表,报文照发、数据照丢。要自编也得先在平台上登记一致。

平台上能看到连接记录,就是没数据,是不是数采仪坏了?

先别怀疑设备。连接记录只能说明 9011、9012 走通了,重点查 MN 是否绑定、因子编码在不在字典里。

下大雨那几天数据特别少,是设备被淹了吗?

面源站多是降雨触发采样,雨量大时供电紧张、信号也差,先看设备日志里的掉电记录和心跳中断时间,再判断是不是硬件问题。

换了一块新数采仪,数据还是上不去,是不是新设备也是坏的?

两块表同时坏的概率很低。更可能是新表沿用了旧配置里的 MN 或者因子编码,把旧问题一起搬过去了。