[toc]

#1.背景介绍 主要应用场景在物联网中,底端设备注册报文的上报,需要对报文的有效载荷(data)进行CRC16的复验,验证与设备端的CRC校验是否相等,如果相等,报文有效,设备上报就会注册成功,不是第一次则会刷新心跳时间,避免通信中断告警。设备的报文结果以及设备的CRC16位置如下:

平台端需要重新对注册包内容(不包含设备的CRC计算字节)进行CRC校验计算,与设备端的CRC校验对比。如果相等,则平台端的CRC校验成功。

备注:本文的CRC校验全部指CRC16的校验。 #2. CRC校验的三种方法 本文侧重测试CRC的性能,不讲CRC校验的原理,因为CRC只是个校验数据准确性的工具,而且每个报文(不单单心跳报文),还有AI,DI,DO,AO,告警报文等都需要校验,因此,执行CRC程序段的性能显得尤为重要。 如果读者对CRC的校验原理感兴趣,请自行网上搜索相关资料进行深入研究,此处不再展开。 ##2.1. 直接计算CRC校验 以下代码已经做过验证,与设备端的CRC校验码相等(协议是基于变种的私有modbus协议),具体校验步骤可参考如下程序注释。最终将此类封装在了Crc16的帮助类里面。

///

/// 计算CRC16校验码

///

/// 校验数据

/// 多项式码

/// 校验码初始值

///

public static byte[] GetCRC16(byte[] value, ushort poly = 0xA001, ushort crcInit = 0xFFFF)

{

if (value == null || !value.Any())

throw new ArgumentException("生成CRC16的入参有误");

//运算

ushort crc = crcInit;

for (int i = 0; i < value.Length-2; i++)

{

//Step1.与校验对象的某字节取异或

crc = (ushort)(crc ^ (value[i]));

for (int j = 0; j < 8; j++)

{ //Step2.==0?右移1比特,否则右移1 bit与多项式异或

crc = (crc & 1) != 0 ? (ushort)((crc >> 1) ^ poly) : (ushort)(crc >> 1);

}

}

byte hi = (byte)((crc & 0xFF00) >> 8); //高位置

byte lo = (byte)(crc & 0

php实现 crc16 xmode校验,基于Modbus三种CRC16校验方法的性能对比相关推荐

  1. Sql Server中三种字符串合并方法的性能比较

    最近正在处理一个合并字符吕的存储过程,在一个测试系统的开发中,要使用到字符串合并功能,直接在Sql中做.         示例:         有表內容﹕         名称  內容        ...

  2. ML之DT:基于简单回归问题训练决策树(DIY数据集+三种深度的二元DT性能比较)

    ML之DT:基于简单回归问题训练决策树(DIY数据集+三种深度的二元DT性能比较) 目录 输出结果 设计思路 核心代码 输出结果 设计思路 核心代码 for i in range(1, len(xPl ...

  3. 三种CRC16 C语言算法理解(CCITT)

    三种CRC16的算法实现,结合自己的理解记录一下: 一.先说算法的C语言实现和各算法的优缺点: 1.按位计算CRC 代码如下 uint16_t crc_16(uint8_t *data, uint16 ...

  4. OpenCV函数应用:基于二值图像的三种孔洞填充方法记录(附python,C++代码)

    系列文章目录 函数系列: OpenCV函数简记_第一章数字图像的基本概念(邻域,连通,色彩空间) OpenCV函数简记_第二章数字图像的基本操作(图像读写,图像像素获取,图像ROI获取,图像混合,图形 ...

  5. Python 三种读文件方法read(), readline(), readlines()及去掉换行符\n

    Python 三种读文件方法read(), readline(), readlines()及去掉换行符\n 首先, 让我们看下数据demo.txt, 就两行数据. 35durant teamGSW 1 ...

  6. 极低噪声幻像电源如何设计?详细原理图和三种消噪方法拿走不谢

    极低噪声幻像电源如何设计?详细原理图和三种消噪方法拿走不谢 原创 ADI 亚德诺半导体 2022-04-19 11:48 极低噪声幻像电源如何设计?详细原理图和三种消噪方法拿走不谢 Q: 是否可以利用 ...

  7. python读文件readlines_Python 三种读文件方法read(), readline(), readlines()及去掉换行符\n...

    Python 三种读文件方法read(), readline(), readlines()及去掉换行符\n 首先, 让我们看下数据demo.txt, 就两行数据. 35durant teamGSW 1 ...

  8. 【小白学习keras教程】十、三种Model Selection方法:k-fold cross-validation,GridSearchCV和RandomizedSearchCV

    @Author:Runsen Model Selection是划分训练集和测试集的手段,下面总结了三种Model Selection方法. k-fold cross-validation using ...

  9. Python实现二叉树的三种深度遍历方法!

    python代码实现了二叉树,这次将会实现二叉树的几种遍历方法,来更好的解析二叉树的结构特点.分别是一种广度遍历,和三种深度遍历方法:先序遍历,中序遍历,后序遍历.下面是代码实现: 1.先序遍历 遍历 ...

最新文章

  1. vue webpack打包入口文件是哪个_Vue项目起步
  2. android screen monitor怎么用
  3. 浏览器弹不出java_打开网址跳出弹窗“您的浏览器没有获得Java virtual machine 支持”,怎么办?...
  4. Centos7上kvm虚拟化自定义NAT网络
  5. 最简单的SpringMVC + Maven配置
  6. Mysql_mysql force Index 强制索引
  7. 【重识 HTML + CSS】知识点目录
  8. 返回零长度的数组或者集合,而不是null
  9. Model-Free Adaptive Predictive Control
  10. mysql 说说反模式设计_关于反模式、设计和复用的一些想法
  11. 成都大数据语言培训:改变人们的生活的大数据趋势
  12. SAP VF11冲销发票BADI
  13. 网传毕业神会到底神不神? ICME仅剩72小时截稿
  14. android传递socket对象,Android Socket通信详解
  15. 《系统思考》:先有鸡还是先有蛋?(转)
  16. TC358840XBG HDMI 转 CSI 中文手册
  17. 什么是 web 框架?
  18. python自动执行方法_python里类自动调用方法有哪些?
  19. PTA:7-4 神坛 (30 分)
  20. linux服务器u盘挂载,Linux系统下如何挂载FAT32的U盘

热门文章

  1. java blob 下载_前端通过Blob实现文件下载
  2. Instapaper再次在欧盟运作
  3. 若果win7 旗舰版主题突然不能用了,变成 xp经典模式的主题了,这里给出建议办法
  4. LVS技术浅析-配置管理3
  5. uniapp(踩坑记录 持续更新)
  6. 这是一篇知识帖:终于能明白云原生技术的概念和可落地的应用分享
  7. 1.Premiere Pro CS6界面介绍
  8. mysql 语法 insert into set
  9. 从特征描述符到深度学习:计算机视觉发展20年
  10. SQL语句里中括号的作用