CRC- / MODBUS :

)CRC寄存器初始值为 FFFF;即16个字节全为1;

)CRC- / MODBUS的多项式A001H (   0001B) ‘H’表示16进制数,‘B’表示二进制数

计算步骤为: 
().预置 位寄存器为十六进制 FFFF(即全为 ) ,称此寄存器为 CRC  寄存器;  
().把第一个  位数据与  位 CRC  寄存器的低位相异或,把结果放于 CRC  寄
存器;  ().检测相异或后的CRC寄存器的最低位,若最低位为1:CRC寄存器先右移1位,再与多项式A001H进行异或;若为0,则CRC寄存器右移1位,无需与多项式进行异或。 ().重复步骤  ,直到右移  次,这样整个 位数据全部进行了处理; 
().重复步骤  到步骤4,进行下一个  位数据的处理; 
().最后得到的 CRC  寄存器即为 CRC 码。  附参考: 数据(进制): CRC校验:F7 DB 附C语言实现代码: #include <stdio.h> int main(void)
{
unsigned short tmp = 0xffff;
unsigned short ret1 = 0;
unsigned char buff[6] = {0};
buff[] = 0x01;
buff[] = 0x03;
buff[] = 0x61;
buff[] = 0x00;
buff[] = 0x00;
buff[] = 0x02; for(int n = ; n < ; n++){/*此处的6 -- 要校验的位数为6个*/
tmp = buff[n] ^ tmp;
for(int i = 0;i < 8;i++){ /*此处的8 -- 指每一个char类型又8bit,每bit都要处理*/
if(tmp & 0x01){
tmp = tmp >> 1;
tmp = tmp ^ 0xa001;
}
else{
tmp = tmp >> 1;
}
}
}
/*CRC校验后的值*/
printf("%X\n",tmp);
/*将CRC校验的高低位对换位置*/
ret1 = tmp >> ;
ret1 = ret1 | (tmp << );
printf("ret: %X\n",ret1);
return ;
}
输出结果: F7DB
ret: DBF7 // 生成modbus CRC16数据
function CRC16(sSrc:shortstring):shortstring;
var
tmp: word;
ret1: word;
buff: array of byte;
n:integer;
i:integer; ilen:Integer; //ssrc length
begin
if trim(ssrc)='' then exit; tmp:= $FFFF;
ret1:= ; ssrc:= Trim(ssrc);
ssrc:= StringReplace(sSrc,' ','',[rfReplaceAll]);
ilen:= length(ssrc); SetLength(buff,ilen div );
i:=;
while i<ilen do
begin
buff[(i-)div ]:= StrToInt('$'+sSrc[i]+sSrc[i+]);
i:=i+;
end; for n := to Length(buff)- do //*此处的6 -- 要校验的位数为6个*/
begin
tmp:= buff[n] xor tmp;
for I := to do //*此处的8 -- 指每一个char类型又8bit,每bit都要处理*/
begin
if(tmp and $)<> then
begin
tmp:= tmp shr ;
tmp:= tmp xor $A001;
end
else
begin
tmp:= tmp shr ;
end;
end;
end; ret1 := tmp shr ; //*将CRC校验的高低位对换位置*/
ret1 := ret1 or (tmp shl );
Result:= IntToHex(ret1,); //返回16进制串 用 空格 分开 crc 暂定 2字节
result:= Result[]+Result[]+' '+Result[]+Result[];
end;

// 生成modbus CRC16数据的更多相关文章

  1. JavaScript 解析 Django Python 生成的 datetime 数据 时区问题解决

    JavaScript 解析 Django/Python 生成的 datetime 数据 当Web后台使用Django时,后台生成的时间数据类型就是Python类型的. 项目需要将几个时间存储到数据库中 ...

  2. T-SQL Recipes之生成动态列表数据

    Problem 首先什么是动态列表?举个示例,假设你想输出以逗号分隔的IDs,如: 1,45,67,199,298 Solution 生成动态列表数据在我们生活场景中很常见,比如在 Dynamic P ...

  3. 【转】Visual Studio 2010在数据库生成随机测数据

    测试在项目中是很重要的一个环节,在Visual Studio 2010中,在测试方面已经有很好的支持了,比如有单元测试,负载测试等等.在数据测试的方面,Visual Studio 2010,还支持对数 ...

  4. 利用Java随机,生成随机学生数据

    为模拟向数据库中大量插入学生数据(注:此处应该用PreparedStatement.batchUpdate等批处理提高效率)的情形,通过Java随机来生成学生数据. 一.要生成的学生数据 studen ...

  5. modbus tcp数据报文结构

    modbus tcp数据报文结构 请求:00 00 00 00 00 06 09 03 00 00 00 01 响应:00 00 00 00 00 05 09 03 02 12 34 一次modbus ...

  6. 对抗生成网络-图像卷积-mnist数据生成(代码) 1.tf.layers.conv2d(卷积操作) 2.tf.layers.conv2d_transpose(反卷积操作) 3.tf.layers.batch_normalize(归一化操作) 4.tf.maximum(用于lrelu) 5.tf.train_variable(训练中所有参数) 6.np.random.uniform(生成正态数据

    1. tf.layers.conv2d(input, filter, kernel_size, stride, padding) # 进行卷积操作 参数说明:input输入数据, filter特征图的 ...

  7. [Oracle]快速生成大量模拟数据的方法

    快速生成大量模拟数据的方法: create table TEST(id integer, TEST_NUMBER NUMBER(18,6)); insert into TEST select i+j, ...

  8. 快速生成100W条数据

    快速生成100W条数据,生成的时候是顺序生成,取的时候是随机取用,生成100W条数据大概一分多钟,比网上其他代码速度要快很多 )) --truncate table tb --select top 1 ...

  9. JS随机生成不重复数据的代码分享

    JS随机生成不重复数据. 代码如下: <script> // 定义存放生成随机数的数组 var array=new Array(); // 循环N次生成随机数 for(var i = 0 ...

随机推荐

  1. mapper.xml实现oracle的分页语句

    当我们用常规方法进行分页查询时,虽然在数据库可以分页查询出来数据, 如下语句 <!-- 分页查询所有 --> <select id="findAllPage" r ...

  2. SpringBoot#JSR303

    __震惊了!,一遍一遍在业务逻辑中编写的验证条件被抽离了! 是什么: - Java Specification Requests 303 ,用于对javaBean 属性的验证. - 解决了什么问题: ...

  3. 如何将本地项目推送到Github

    如何将本地项目推送到Github Tip:在本地要安装好Git,官网:https://git-scm.com/ 一个学习Git的好地方:https://try.github.io/ 在线闯关实战,边练 ...

  4. 使用docker快速体验kali linux

    环境 运行在 64位 机器 企业版的 win10 系统 下载镜像 首先搜索docker download 去官网下载docker:https://www.docker.com/products/doc ...

  5. flink笔记(三) flink架构及运行方式

    架构图 Job Managers, Task Managers, Clients JobManager(Master) 用于协调分布式执行.它们用来调度task,协调检查点,协调失败时恢复等. Fli ...

  6. Idea 打印GC

    设置 Run ⇒ Edit Configurations ⇒ VM options 添加 -XX:+PrintGCDetails 运行程序后会在末尾打印GC信息 2019-11-02 13:07:47 ...

  7. yarn调度器 FairScheduler 与 CapacityScheduler

    yarn FairScheduler 与 CapacityScheduler CapacityScheduler(根据计算能力调度) CapacityScheduler 允许多个组织共享整个集群, 每 ...

  8. VM ESXi虚拟化使用学习笔记

    由于疫情原因,没有条件介绍安装部分的内容,也没有安装部分内容的相关截图,所以安装部分可以选择网上资料.但是只要熟练安装CentOS系统的,基本安装ESXi一看就会,设置主机地址方面有一定图形化界面,比 ...

  9. Java的包装类

    一.概述 因为基本数据类型的变量身上没有任何的方法和属性,所以针对基本数据类型提供了对应的类形式--包装类. 利用这个类产生对象,调用对象身上的方法来操作这个数据. 二.分类 包装类分为以下几种: 基 ...

  10. Python MySQL Select

    章节 Python MySQL 入门 Python MySQL 创建数据库 Python MySQL 创建表 Python MySQL 插入表 Python MySQL Select Python M ...