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. 简单总结Get与Post的区别

    工作当中经常遇到这两种类型的接口,也会被问到这两种类型的区别,这里简单总结一下算是一个简单的回忆吧. GET和POST是http协议的两种发送请求的方法.因为http的底层是TCP/IP,所以GET和 ...

  2. Go——标准库使用代理

    本文知识点 Go的安装 Go使用代理 Go进阶学习 环境配置 Go的安装 确认环境都安装好了,看看go的版本. go version 代码样例 使用代理,发送GET请求 package main im ...

  3. 029-PHP取随机数

    <?php //打印从1到100中间的10个随机的数 ; $index < ; $index++) { print(rand(,) . "<BR>\n"); ...

  4. Vue.js(24)之 弹窗组件封装

    同事封装了一个弹窗组件,觉得还不错,直接拿来用了: gif图展示: 弹框组件代码: <template> <transition name="confirm-fade&qu ...

  5. VUE中常用的一些方法

    1.获取URL中的参数 export function getUrlKey(name) { return decodeURIComponent((new RegExp('[?|&]' + na ...

  6. P 1016 部分A+B

    转跳点:

  7. CodeForces - 404B Marathon(精度)

    题意:一个人绕着一个长度为a的正方形逆时针跑,以(0,0)为起点,喝一次水可以跑d米,问每喝一次水可以跑到的位置坐标. 分析:这道题卡精度卡的太厉害了. 设l是正方形的周长,只有d对l取余且每次跑d米 ...

  8. 51nod 1435:位数阶乘

    1435 位数阶乘 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 X是一个n位数的正整数 (x=a0a1...a ...

  9. c++ 字符串转数字或数字转字符串

    在C++中字符串转换为数字,或数字转换为字符串,用到如下函数: _itoa atoi.atof.itoa.itow _itoa_s 1.整形转换为字符串: wchar_t * _itot(int _V ...

  10. 使用dbcp连接mysql

    1.创建dbcp.properties 文件 driver=com.mysql.jdbc.Driver url=jdbc:mysql:///zhang username=root password= ...