php实现 crc16 xmode校验,基于Modbus三种CRC16校验方法的性能对比
[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校验方法的性能对比相关推荐
- Sql Server中三种字符串合并方法的性能比较
最近正在处理一个合并字符吕的存储过程,在一个测试系统的开发中,要使用到字符串合并功能,直接在Sql中做. 示例: 有表內容﹕ 名称 內容 ...
- ML之DT:基于简单回归问题训练决策树(DIY数据集+三种深度的二元DT性能比较)
ML之DT:基于简单回归问题训练决策树(DIY数据集+三种深度的二元DT性能比较) 目录 输出结果 设计思路 核心代码 输出结果 设计思路 核心代码 for i in range(1, len(xPl ...
- 三种CRC16 C语言算法理解(CCITT)
三种CRC16的算法实现,结合自己的理解记录一下: 一.先说算法的C语言实现和各算法的优缺点: 1.按位计算CRC 代码如下 uint16_t crc_16(uint8_t *data, uint16 ...
- OpenCV函数应用:基于二值图像的三种孔洞填充方法记录(附python,C++代码)
系列文章目录 函数系列: OpenCV函数简记_第一章数字图像的基本概念(邻域,连通,色彩空间) OpenCV函数简记_第二章数字图像的基本操作(图像读写,图像像素获取,图像ROI获取,图像混合,图形 ...
- Python 三种读文件方法read(), readline(), readlines()及去掉换行符\n
Python 三种读文件方法read(), readline(), readlines()及去掉换行符\n 首先, 让我们看下数据demo.txt, 就两行数据. 35durant teamGSW 1 ...
- 极低噪声幻像电源如何设计?详细原理图和三种消噪方法拿走不谢
极低噪声幻像电源如何设计?详细原理图和三种消噪方法拿走不谢 原创 ADI 亚德诺半导体 2022-04-19 11:48 极低噪声幻像电源如何设计?详细原理图和三种消噪方法拿走不谢 Q: 是否可以利用 ...
- python读文件readlines_Python 三种读文件方法read(), readline(), readlines()及去掉换行符\n...
Python 三种读文件方法read(), readline(), readlines()及去掉换行符\n 首先, 让我们看下数据demo.txt, 就两行数据. 35durant teamGSW 1 ...
- 【小白学习keras教程】十、三种Model Selection方法:k-fold cross-validation,GridSearchCV和RandomizedSearchCV
@Author:Runsen Model Selection是划分训练集和测试集的手段,下面总结了三种Model Selection方法. k-fold cross-validation using ...
- Python实现二叉树的三种深度遍历方法!
python代码实现了二叉树,这次将会实现二叉树的几种遍历方法,来更好的解析二叉树的结构特点.分别是一种广度遍历,和三种深度遍历方法:先序遍历,中序遍历,后序遍历.下面是代码实现: 1.先序遍历 遍历 ...
最新文章
- vue webpack打包入口文件是哪个_Vue项目起步
- android screen monitor怎么用
- 浏览器弹不出java_打开网址跳出弹窗“您的浏览器没有获得Java virtual machine 支持”,怎么办?...
- Centos7上kvm虚拟化自定义NAT网络
- 最简单的SpringMVC + Maven配置
- Mysql_mysql force Index 强制索引
- 【重识 HTML + CSS】知识点目录
- 返回零长度的数组或者集合,而不是null
- Model-Free Adaptive Predictive Control
- mysql 说说反模式设计_关于反模式、设计和复用的一些想法
- 成都大数据语言培训:改变人们的生活的大数据趋势
- SAP VF11冲销发票BADI
- 网传毕业神会到底神不神? ICME仅剩72小时截稿
- android传递socket对象,Android Socket通信详解
- 《系统思考》:先有鸡还是先有蛋?(转)
- TC358840XBG HDMI 转 CSI 中文手册
- 什么是 web 框架?
- python自动执行方法_python里类自动调用方法有哪些?
- PTA:7-4 神坛 (30 分)
- linux服务器u盘挂载,Linux系统下如何挂载FAT32的U盘