总磷总氮在线监测仪上传失败,先查HJ212应答

“数采仪显示连接成功,平台就是没数据。”这是华东某化工园区一位运维工程师发来的原话。现场一台总磷总氮在线监测仪,配我司 PS-S01 数采仪,平台侧设备在线,总磷、总氮两条曲线却一直是空的。我的判断:先别怀疑仪表,八成卡在 HJ212 报文交互层,尤其是上传命令 2011 的应答、MN 地址和平台因子编码对不上。

这个结论不是拍脑袋。在线监测联网里,“连接成功”只说明 TCP 通道通了,不说明平台收下了数据。总磷总氮仪表本身测量正常、数采仪本地也有数,平台仍然可能因为一条 9011 应答缺失而把整包数据丢掉。

故障现象:设备在线,曲线空白

现场表现很典型:数采仪屏幕或调试软件显示“已连接”,平台“设备在线”状态正常,甚至能看到心跳;但总磷、总氮的实时数据、小时数据都不更新。运维人员第一反应是仪表坏了,或者数采仪通讯口坏了,于是重启仪表、换 485 线、换数采仪,折腾一圈,平台还是空白。

这类故障要先分清三种情况:数采仪根本没发上传报文;发了但平台没应答;平台应答了但数据没入库。三种情况的处置动作完全不同。

结论:先查 HJ212 应答,不要先拆仪表

HJ212-2017 报文里,2000–2999 段是数据上传类命令,上传实时数据常用 CN=2011,分钟数据 CN=2012,小时数据 CN=2013;平台收到后应回应答,常见如 9011、9012、9013。数采仪发出 2011,平台没有回 9011,TCP 连接照样显示正常,但数据不会进平台库。这是“连接成功、平台没数据”最常见的一类原因。

再往下拆,MN 现场机地址、ST 系统编码、PW 访问密码、因子编码、数据标记、CRC 校验,任何一项对不上,平台都可能静默丢弃或返回错误。总磷总氮的因子名在数采仪里写的是中文,平台按编码匹配,编码错一位,数据就挂到别的因子下面,看起来像“没上传”。

原因分层:协议层、网络层、设备层、平台层

协议层:报文发出去,平台不认

  • MN 地址重复或未注册。平台按 MN 识别现场机,MN 填错、重复、带空格,平台不会入库。多台设备共用一个 MN 时,平台可能只认其中一条链路。
  • CN 命令码与平台要求不一致。平台只要小时数据,数采仪只发 2012 分钟数据;或者平台要求 2011 实时数据,数采仪上传周期设成了小时级,都会造成“在线但无数据”。
  • 因子编码和单位不匹配。总磷、总氮在平台因子表里有固定编码,数采仪里填的因子名、编码、单位(mg/L)必须与平台一致。单位填成 μg/L,数值放大一千倍,平台按超量程判无效。
  • 数据标记不对。HJ212 数据段带数据标记,N 为正常,D 为故障,M 为维护,C 为校准。总磷总氮仪表消解期间如果数采仪上传的是保持值并打了 M 标记,平台审核时可能不计入有效数据。
  • CRC 校验错。报文长度字段、数据段、校验码任何一处不对,平台直接丢弃。抓包能看到发出,但看不到有效应答。

网络层:TCP 通了,不等于应用层通

  • 平台地址、端口填错,或者域名解析到旧 IP,数采仪连的是另一台服务器。
  • 防火墙、NAT 映射、4G 专网白名单只放行了心跳端口,没有放行数据上传通道;现场表现为“在线”,但上传报文出不去。
  • 数采仪心跳周期正常,上传周期被误设为 0 或关闭,平台有在线记录、没有数据记录。
  • 网络抖动导致 2011 发出后没收到 9011,数采仪重发几次仍失败,本地缓存被新数据覆盖。

设备层:总磷总氮仪表与数采仪之间的取数问题

  • 总磷总氮在线监测仪与数采仪常用 RS232/RS485 连接,Modbus RTU 通讯,涉及从站地址、波特率(常见 9600、8N1)、功能码 03/04、寄存器地址。从站地址错一位,数采仪读不到值。
  • 仪表消解周期长,测量过程中寄存器返回保持值或状态字。数采仪轮询周期太短,读到的可能是上一次测量值,平台曲线看起来“平”。
  • 仪表输出单位、小数点位数、量程与数采仪配置不一致,数采仪本地显示正常,上传值超平台量程。
  • 仪表故障状态位没有映射到 HJ212 数据标记,平台收到的是正常值,但实际是无效保持值。

平台层:数据到了,审核没过

  • 平台因子表里总磷、总氮的编码、单位、量程与现场配置不一致,数据被归到无效因子。
  • 平台只接收小时数据,数采仪上传分钟数据;或者平台要求补传,数采仪历史数据已被覆盖。
  • 数采仪时间与平台时间偏差超出允许窗口,平台按无效数据处理。
  • 平台侧数据审核规则把维护状态、校准状态的数据剔除,现场看到的就是空白曲线。

排查顺序:为什么先看应答,再看连接

顺序本身就是经验。第一步不是去现场拆仪表,而是让平台侧或数采仪抓一段报文,确认 2011 有没有发出去、有没有 9011 回来。因为“连接成功”是最容易骗人的现象:TCP 三次握手成功,只证明网络可达,不证明平台接受数据。先看应用层应答,能直接把问题分成“没发”“发了不收”“收了不入库”三类。

第二步核对 MN、ST、PW、因子编码、单位、数据标记。这些参数在数采仪和平台两边都要看,只改一边等于没改。第三步才查网络链路和端口,最后才查仪表与数采仪之间的 485 通讯。顺序反过来,容易在仪表上白花半天,最后发现是平台因子编码错了一位。

每步的判断标准和处置动作

现象判断动作
数采仪显示已连接,抓包只有心跳,没有 2011上传命令未触发或上传周期配置错检查数采仪上传使能、上传周期、平台地址和端口
抓到 2011 发出,没有 9011 返回平台未接受报文,或应答通道不通核对 MN、ST、PW、因子编码、CRC;看平台日志是否收到整包
平台返回 9011,但数据为空或无效数据标记、单位、量程、时间戳有问题核对总磷总氮因子编码、mg/L、量程、数据标记 N、数采仪时间
数采仪读不到仪表值仪表通讯参数或测量周期不匹配查 RS485 接线、从站地址、波特率、功能码、寄存器地址
平台在线,曲线长期平直数采仪上传保持值或旧值查仪表消解状态、数据更新标志、数采仪轮询周期
补传命令发下去没反应历史数据缺失或时间超窗查本地历史缓存、时间戳、平台补传窗口

三个容易误判的坑

第一个坑:把“连接成功”当成“数据通了”。这是最常见的误判。TCP 连接成功只说明链路层和传输层通了,HJ212 是应用层协议,平台不收、不应答、不入库,界面上仍然可能显示在线。判断标准不是看连接状态,而是看有没有 2011 发出、有没有 9011 回来、平台有没有入库记录。

第二个坑:总磷总氮仪表测量周期长,被当成死机。总磷总氮仪表需要消解、显色、测量,周期比常规 pH、COD 长。数采仪轮询时读不到新值,不代表仪表坏了。频繁重启会打断消解流程,反而让现场更长时间没有有效数据。正确做法是看仪表状态字和测量周期,确认是在测量中还是通讯中断。

第三个坑:只改数采仪,不改平台因子表。数采仪本地显示总磷有数,平台却按另一个因子编码入库,或者单位、量程没同步,现场看就是“平台没数据”。总磷总氮的数据要进平台,数采仪配置和平台因子配置必须两边对齐,只改一边等于白改。

FAQ

问:数采仪显示连接成功,平台就是没数据,到底先查哪?
先查报文,不要先拆仪表。让平台侧看日志,或者用数采仪调试口抓包,确认 2011 有没有发出去、有没有 9011 应答。没有 2011,查上传周期和平台地址;有 2011 没 9011,查 MN、ST、PW、因子编码和 CRC。

问:我这个情况到底要不要传总磷总氮的分钟数据?
看平台要求。HJ212 里 2012 是分钟数据、2013 是小时数据,平台如果只收小时数据,数采仪发分钟数据也可能不入库。以平台因子配置和联网要求为准,不要只看数采仪本地有没有数据。

问:仪表本地有数,数采仪也读到了,平台曲线是平的,是不是数采仪坏了?
不一定。先看平台因子编码和单位,再看数据标记。常见原因是总磷总氮挂错因子、单位 mg/L 与 μg/L 不一致,或者数采仪上传的是保持值。数采仪坏的概率反而低。

问:平台让我补传,命令发下去没反应怎么办?
补传一般走 3000–3999 段的提取/设置命令,先看数采仪有没有收到提取命令,再看本地历史数据还在不在、时间戳是否在平台允许窗口内。历史数据被覆盖或时间超窗,补传命令发下去也补不上。

总磷总氮在线监测仪上传异常,真正难的不是某一个参数,而是排查顺序。先确认报文有没有发、平台有没有收,再核对两边因子配置,最后才动仪表和 485 线。顺序对了,多数“连接成功、平台没数据”的问题,在数采仪参数和平台配置里就能定位。