WeStudio技术社区

 找回密码
 立即注册

快捷登录

QQ登录

只需一步,快速开始

查看: 537|回复: 0

环保HJ212-2017协议 CRC16校验

[复制链接]

99

主题

142

帖子

1046

积分

版主

Rank: 7Rank: 7Rank: 7

积分
1046
发表于 2022-11-23 15:41:58 | 显示全部楼层 |阅读模式
本帖最后由 hixon 于 2022-11-23 16:14 编辑

关于HJ212协议,需要注意的是它里面有一个 CRC16的校验,其算法有别于Modbus的CRC16,下面是我们用JavaScript来实现的HJ212 CRC16校验方法。

  1. var crc16 = function(msg, msg_len) {
  2.     var i, j, crc, check;
  3.     crc = 0xFFFF;
  4.     for(i = 0; i < msg_len ; i++) {
  5.         crc = ((crc >> 8)) ^ msg.charCodeAt(i);
  6.         for(j = 0; j < 8; j++) {
  7.             check = crc & 0x0001;
  8.             crc >>= 1;
  9.             if(check == 0x0001) {
  10.                 crc ^= 0xA001;
  11.            }
  12.         }
  13.     }
  14.     // 返回16进制表示的大写字符串,如 "6E80"
  15.     return crc.toString(16).toUpperCase();
  16. };
复制代码
下面我们给一段测试数据,看一下计算的结果是否正确,黄底部分为参与CRC计算的数据
hj212-test-data.png

开始测试:
  1. var data = "QN=20210320163101890;ST=32;CN=2011;PW=123456;MN=81733553213013;Flag=4;CP=&&DataTime=20210320013400;w00000-Rtd=181.682,w00000-Flag=N;w21001-SampleTime=20210320005400,w21001-Rtd=45.160,w21001-Flag=N;w21011-SampleTime=20210320013400,w21011-Rtd=1.970,w21011-Flag=N;w21003-SampleTime=20210320013400,w21003-Rtd=53.131,w21003-Flag=N;w01018-SampleTime=20210320013400,w01018-Rtd=194.200,w01018-Flag=N;w01001-SampleTime=20210320013406,w01001-Rtd=7.496,w01001-Flag=N&&";
  2. var crc = crc16(data, data.length);
  3. util.console.log('crc: ' + crc); // 计算结果应该为  6E80
复制代码









HJ212-2017污染源在线监测数据传输标准.pdf

1.65 MB, 下载次数: 0

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|物一世(北京)科技有限公司 ( 京ICP备20025895 )

GMT+8, 2024-4-23 16:07 , Processed in 0.013866 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表