HJ212 CRC校验错误排查:数采仪连接成功无数据

一位运维工程师的原话:“数采仪显示连接成功,平台就是没数据,平台日志偶尔提示校验失败。”先别急着换卡换天线。

结论:最可能是 HJ212 CRC校验错误,或 CRC 算法、覆盖范围与平台不一致。TCP 连接成功只说明链路通,CRC 不过平台通常丢弃或不回确认。

四层原因先分清

  • 协议层:CRC 覆盖范围从数据段 QN 到 && 的处理不一致;CRC16 初值、多项式、结果是否取反不同;四位十六进制高低字节反了;QN、ST、CN、PW、MN、Flag、CP 字段缺失;长度字段算错;&& 后多空格或回车。1014 状态报文、2000–2999 段监测数据、3020 类统计报文都走同一校验。
  • 网络层:TCP 能连但粘包、拆包、代理改包,按 ## 和长度字段分帧时错位,重算 CRC 自然不对。
  • 设备层:固件版本、MN 配置、串口采集到异常字符,CP 内 Rtd、Flag、SampleTime 出现非法字符或分隔符不统一。
  • 平台层:平台按不同协议版本解析,转义、长度口径、CRC 字节序与现场不一致,或应答超时被误判为校验失败。

为什么先查协议层

连接成功已排除大部分网络问题,先抓原始报文最省时间。看完整帧:##、长度、数据段、CRC、回车。确认数据段是否从 QN 开始到 && 结束,CRC 是否四位十六进制、低字节在前,再用现场协议参数重算。CRC 对不上,换设备换卡都无效;CRC 对上仍丢,再查长度、粘包分帧、转义和平台解析版本,最后查固件。

每步判断和动作

  • 现象:平台日志写校验失败或不回确认。判断:CRC 与重算值不一致。动作:复制原始报文到本地 CRC16 工具,按协议核对初值、多项式、结果处理和高低字节,别用工具默认参数下结论。
  • 现象:报文正常但长度字段总差一两个字符。判断:长度按字节还是字符、是否把 ## 或 && 算进去不一致。动作:按数据段实际字符数重算,删掉 && 后的空格和多余回车。
  • 现象:TCP 稳定但报文时有时无。判断:粘包或拆包导致帧错位。动作:接收端按 ## 起始和长度字段分帧,不要按 read 超时分帧。
  • 现象:1014 正常,2000–2999 数据报错。判断:CP 内数据项格式或转义不统一。动作:固定最小数据项测试,逐项核对 Rtd、Flag、SampleTime 和分隔符。
  • 现象:3020 统计报文错。判断:统计时段或参数个数变化导致长度算错。动作:先用单参数、单时段最小报文跑通,再扩参数。

三个容易误判的坑

  • 坑一:看到“连接成功”只查平台地址和端口。TCP 通只代表网络层通,HJ212 CRC校验错误在应用层。
  • 坑二:用在线 CRC 工具默认参数直接算。HJ212 常用 CRC16 的初值、多项式、结果取反和字节序不一定与默认值相同,要按现场协议版本核对。
  • 坑三:只升级数采仪固件,不核对平台解析版本。转义、长度、CRC 覆盖范围只要一边改,另一边就可能继续报错。

FAQ

问:我这个数采仪显示连接成功,平台就是没数据,是不是 CRC 错了?答:先看平台原始报文和校验日志,再用现场参数重算。连接成功不能排除 HJ212 CRC校验错误。

问:为什么换了一台数采仪还是校验失败?答:大概率不是硬件,而是平台解析版本、CRC 参数或长度口径没统一。

问:平台说报文校验失败,我要改设备还是改平台?答:先拿同一帧报文在两端分别重算,确认覆盖范围、字节序和转义规则,再决定改哪边。

问:CRC 错误会不会把历史数据补传也堵住?答:会。补传报文同样要过 CRC 和长度校验,实时不通时补传队列可能一直重试。