// 生成modbus CRC16数据
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数据的更多相关文章
- JavaScript 解析 Django Python 生成的 datetime 数据 时区问题解决
JavaScript 解析 Django/Python 生成的 datetime 数据 当Web后台使用Django时,后台生成的时间数据类型就是Python类型的. 项目需要将几个时间存储到数据库中 ...
- T-SQL Recipes之生成动态列表数据
Problem 首先什么是动态列表?举个示例,假设你想输出以逗号分隔的IDs,如: 1,45,67,199,298 Solution 生成动态列表数据在我们生活场景中很常见,比如在 Dynamic P ...
- 【转】Visual Studio 2010在数据库生成随机测数据
测试在项目中是很重要的一个环节,在Visual Studio 2010中,在测试方面已经有很好的支持了,比如有单元测试,负载测试等等.在数据测试的方面,Visual Studio 2010,还支持对数 ...
- 利用Java随机,生成随机学生数据
为模拟向数据库中大量插入学生数据(注:此处应该用PreparedStatement.batchUpdate等批处理提高效率)的情形,通过Java随机来生成学生数据. 一.要生成的学生数据 studen ...
- 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 ...
- 对抗生成网络-图像卷积-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特征图的 ...
- [Oracle]快速生成大量模拟数据的方法
快速生成大量模拟数据的方法: create table TEST(id integer, TEST_NUMBER NUMBER(18,6)); insert into TEST select i+j, ...
- 快速生成100W条数据
快速生成100W条数据,生成的时候是顺序生成,取的时候是随机取用,生成100W条数据大概一分多钟,比网上其他代码速度要快很多 )) --truncate table tb --select top 1 ...
- JS随机生成不重复数据的代码分享
JS随机生成不重复数据. 代码如下: <script> // 定义存放生成随机数的数组 var array=new Array(); // 循环N次生成随机数 for(var i = 0 ...
随机推荐
- 简单总结Get与Post的区别
工作当中经常遇到这两种类型的接口,也会被问到这两种类型的区别,这里简单总结一下算是一个简单的回忆吧. GET和POST是http协议的两种发送请求的方法.因为http的底层是TCP/IP,所以GET和 ...
- Go——标准库使用代理
本文知识点 Go的安装 Go使用代理 Go进阶学习 环境配置 Go的安装 确认环境都安装好了,看看go的版本. go version 代码样例 使用代理,发送GET请求 package main im ...
- 029-PHP取随机数
<?php //打印从1到100中间的10个随机的数 ; $index < ; $index++) { print(rand(,) . "<BR>\n"); ...
- Vue.js(24)之 弹窗组件封装
同事封装了一个弹窗组件,觉得还不错,直接拿来用了: gif图展示: 弹框组件代码: <template> <transition name="confirm-fade&qu ...
- VUE中常用的一些方法
1.获取URL中的参数 export function getUrlKey(name) { return decodeURIComponent((new RegExp('[?|&]' + na ...
- P 1016 部分A+B
转跳点:
- CodeForces - 404B Marathon(精度)
题意:一个人绕着一个长度为a的正方形逆时针跑,以(0,0)为起点,喝一次水可以跑d米,问每喝一次水可以跑到的位置坐标. 分析:这道题卡精度卡的太厉害了. 设l是正方形的周长,只有d对l取余且每次跑d米 ...
- 51nod 1435:位数阶乘
1435 位数阶乘 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 X是一个n位数的正整数 (x=a0a1...a ...
- c++ 字符串转数字或数字转字符串
在C++中字符串转换为数字,或数字转换为字符串,用到如下函数: _itoa atoi.atof.itoa.itow _itoa_s 1.整形转换为字符串: wchar_t * _itot(int _V ...
- 使用dbcp连接mysql
1.创建dbcp.properties 文件 driver=com.mysql.jdbc.Driver url=jdbc:mysql:///zhang username=root password= ...