博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于MODBUS的CRC
阅读量:6074 次
发布时间:2019-06-20

本文共 1354 字,大约阅读时间需要 4 分钟。

%ws   WCHAR wszName 

设编码前的原始信息多项式为P(x),P(x)的最高幂次加1等于k;生成多项式为G(x),G(x)的最高幂次等于r;CRC多项式为R(x);编码后的带CRC的信息多项式为T(x)。发送方编码方法:将P(x)乘以xr(即对应的二进制码序列左移r位),再除以G(x),所得余式即为R(x)。用公式表示为 T(x)=xrP(x)+R(x)接收方解码方法:将T(x)除以G(x),如果余数为0,则说明传输中无错误发生,否则说明传输有误。

程序可以如下实现:    

1)将Mx^r的前r位放入一个长度为r的寄存器;    

2)如寄存器首位为1,将寄存器左移1位(将Mx^r剩下部分的MSB移入寄存器的LSB)再与G的后r位异或,否则仅将寄存器左移1位(将Mx^r剩下部分的MSB移入寄存器LSB);      

3)重复第2步,直到M全部Mx^r移入寄存器;    

4)寄存器中的值则为校验码。

 

    ModBus 通信协议的 CRC ( 冗余循环校验码含2个字节, 即 16 位二进制数。CRC 码由发送设备计算, 放置于所发送信息帧的尾部。接收信息设备再重新计算所接收信息 (除 CRC 之外的部分)的 CRC, 比较计算得到的 CRC 是否与接收到CRC相符, 如果两者不相符, 则认为数据出错。

1) 预置 1 个 16 位的寄存器为十六进制FFFF(即全为 1) , 称此寄存器为 CRC寄存器。

2) 把第一个 8 位二进制数据 (通信信息帧的第一个字节) 与 16 位的 CRC寄存器的低 8 位相异或, 把结果放于 CRC寄存器。

3) 把 CRC 寄存器的内容右移一位( 朝低位)用 0 填补最高位, 并检查右移后的移出位。

4) 如果移出位为 0, 重复第 3 步 ( 再次右移一位); 如果移出位为 1, CRC 寄存器与多项式A001 ( 1010 0000 0000 0001) 进行异或。

5) 重复步骤 3 和步骤 4, 直到右移 8 次,这样整个8位数据全部进行了处理。

6) 重复步骤 2 到步骤 5, 进行通信信息帧下一个字节的处理。

7) 将该通信信息帧所有字节按上述步骤计算完成后,得到的16位CRC寄存器的高、低字节进行交换。

8) 最后得到的 CRC寄存器内容即为 CRC码。

 

 

 

 

            

 

 寻呼测试

unsigned int CRC16 ( uchar *arr_buff, uchar len) {  uint crc=0xFFFF;  uchar i, j, Data;   for ( j=0; j  {    crc=crc ^*arr_buff++;      for ( i=0; i<8; i++)   {         if( ( crc&0x0001) >0)         {           crc=crc>>1;           crc=crc^ 0xa001;          } else            crc=crc>>1;             }   }    return ( crc);}
View Code

 

 

转载于:https://www.cnblogs.com/iamgoodman/p/3597798.html

你可能感兴趣的文章
HTTP协议及其POST与GET操作差异 & C#中如何使用POST、GET等
查看>>
asp.net之treeview无法显示树结点图标(IP与域名的表现竟不一样)
查看>>
微型项目实践(1):用XML描述实体
查看>>
给Linux初学者的七个建议,值得一读
查看>>
Html5 Web Workers
查看>>
在matlab中对中国地图中的不同省份按照高度进行渲染
查看>>
C++中的三种继承关系
查看>>
Android 开发,你遇上 Emoji 头疼吗?
查看>>
浅谈CSS 选择器
查看>>
如何为Pyramid添加Middleware
查看>>
关于代码重构和UT的一些想法
查看>>
动态调用对象事件
查看>>
PgSQL · 应用案例 · 惊天性能!单RDS PostgreSQL实例支撑 2000亿
查看>>
记录:在老XPS1330上安装CentOS7
查看>>
初探物联网 - 基于Arduino的气象站和View and Data API的结合实例
查看>>
Informix 系统表(syscolumns)中字段类型(coltype)字段的含义
查看>>
消息队列 beanstalkd 介绍
查看>>
无废话WPF系列7:WPF布局控件
查看>>
SharePoint 2013 开发——CSOM概要
查看>>
Android -- 加载大图片的方法
查看>>