CRC校验

循环冗余校验码(cyclic redundancy check)简称CRC(循环码),是一种能力相当强的检错、纠错码,并且实现编码和检码的电路比较简单,常用于串行传送(二进制位串沿一条信号线逐位传送)的辅助存储器与主机的数据通信和计算机网络中。

算法介绍

循环冗余校验码由信息码n位和校验码k位构成。k位校验位拼接在n位数据位后面,n+k为循环冗余校验码的字长,又称这个校验码(n+k,n)码。
n位信息位可以表示成为一个报文多项式M(x),最高幂次是xn-1。约定的生成多项式G(x)是一个k+1位的二进制数,最高幂次是xk。将M(x)乘以xk,即左移k位后,除以G(x),得到的k位余数就是校验位。这里的除法运算是模2除法,即当部分余数首位是1时商取1,反之商取0。然后每一位的减法运算是按位减,不产生借位。

代码实现

python有一个专门用于crc校验的库(crcmod),下面代码需要此库的支持。
安装:pip install crcmod
以下实例代码是计算16位的crc校验,如需其他crc校验可以查看库案例说明。

def crc16Add(read):crc16 = crcmod.mkCrcFun(0x18005, rev=True, initCrc=0xFFFF, xorOut=0x0000)data = read.replace(" ", "")readcrcout = hex(crc16(unhexlify(data))).upper()print(readcrcout)str_list = list(readcrcout)print(str_list)if len(str_list) == 5:str_list.insert(2, '0') crc_data = "".join(str_list)print(crc_data)print('CRC16校验: %s' % (crc_data[4:] + ' ' + crc_data[2:4]))read = data + crc_data[4:] + crc_data[2:4]print('增加Modbus_CRC16校验:>>> %s' % read)return readif __name__ == '__main__':crc16Add("0141FD0300")

运行结果

python 实现modBus协议的crc校验算法相关推荐

  1. 编写一个字节数的rtu C语言校验程序,Modbus通信协议中CRC校验的快速C语言算法

    Modbus通信协议中CRC校验的快速C语言算法 2004年第11期 福 建 电 脑 63 Modbus通信协议中CRC校验的快速C语言算法 孟开元 (西安石油大学计算机学院陕西西安710065) [ ...

  2. modbus c语言校验算法,Modbus CRC校验算法

    终于找到了 Modbus CRC 校验算法 算法一: unsigned int calccrc(uchar crcbuf,uint crc) { uchar i; crc=crc ^ crcbuf; ...

  3. 三菱FX3G/FX3S+485bd扩展,采用modbus rtu协议,crc校验,通讯控制四台E700变频器,可以实现正反转

    三菱FX3G/FX3S 485协议通讯四台三菱E700变频器程序资料 三菱FX3G/FX3S+485bd扩展,采用modbus rtu协议,crc校验,通讯控制四台E700变频器,可以实现正反转,停止 ...

  4. c# 如何编写CRC校验算法

    在C#中编写CRC校验算法,可以使用以下步骤: 首先需要确定CRC校验的多项式和初始值.根据具体的需求和应用场景,选择合适的CRC多项式和初始值. 定义一个计算CRC校验值的函数,函数的输入参数为待校 ...

  5. MAC协议之CRC校验码

    ForeWord Everybody,我胡汉三又回来了ヾ(●´∀`●) ヾ 又到了我装逼的时间了,今天我才发现.学习真的会使人快乐.这不,刚才舍友找我开黑,我谈定的回了一句: 毕竟我这样的好学生已经不 ...

  6. CRC-16原理及通用的16位CRC校验算法代码

    CRC-16原理及通用的16位CRC校验算法代码 循环冗余码校验英文名称为Cyclical Redundancy Check,简称CRC.它是利用除法及余数的原理来作错误侦测(Error Detect ...

  7. 【FPGA】CRC校验算法从数学原理到代码实现

    老规矩,转b站 [[FPGA]CRC校验算法从数学原理到代码实现-哔哩哔哩]

  8. CRC校验算法的数学原理(上)

    介绍   CRC是Cyclic Redundancy Check的缩写,用中文来讲,就是 循环冗余校验.是一种通过对数据产生固定位数校验码以备侦测数据错误的数据校验技术,主要用来侦测数据传输错误,也可 ...

  9. Modbus-RTU通讯协议中CRC校验码的计算步骤及算法代码

    在CRC计算时只用8个数据位,起始位及停止位,如有奇偶校验位也包括奇偶校验位,都不参与CRC计算. CRC计算方法是: 1. 预置1个16位的寄存器为十六进制FFFF(全1),此寄存器为CRC寄存器 ...

  10. CRC校验算法的解析,暨对网上的CRC详解的补充

    一.CRC的形象理解 本文面向对CRC校验有一定基础的读者,如果你不懂,请戳这里.维基百科还有图解版的. 在CRC的具体实现中,如果要计算CRC的数据很长,一般都会用到寄存器,用来保存当前的计算到的C ...

最新文章

  1. 【bzoj 1833】【codevs 1359】 [ZJOI2010]count 数字计数(数位dp)
  2. 田野中科院计算机网络信息中心,中国科学院
  3. hive中如何读取数组_hive解析json嵌套数组
  4. SpringBoot高级-缓存-RedisTemplate序列化机制
  5. java8收集器,Java 8中的收集器collectionAndThen()方法
  6. Linux常用命令大全(非常全)
  7. [转]VB:如何检测到U盘的插拔(源代码)
  8. socket 网络通信(基于tcp协议)以及粘包解决方案
  9. vue-cli结构介绍
  10. android 环形进地图条,easyEcharts折线,柱状,饼图,仪表盘,环形,水球,圆柱,地图纯JS绘制...
  11. IP地址作用与分类(A类 B类 C类 D类 E类)
  12. 尚学堂马士兵Oracle教程笔记
  13. 基于Kears的Reuters新闻分类
  14. MacQQ上接收的文件都放在哪?
  15. ubuntu查看实时网速
  16. win10网页找不到服务器dns,找不到服务器或DNS错误怎么办
  17. 第三章第二十四题(游戏:抽牌)(Game: pick a card)
  18. 我的世界服务器修改nbt,我的世界NBT教程 关于NBT作用与内容介绍
  19. 英特尔芯片漏洞比想象中更严重:控制计算机无需密码
  20. elasticsearch7.1.1入门之集群的基础配置

热门文章

  1. linux多线程编程书籍推荐:linux大牛之路从这几本书開始总结
  2. 虎牙tv是用php写的吗,huya虎牙php_麦麦同学
  3. python爬虫实战——爬取猫眼电影TOP100并导入excel表
  4. java敏感词过滤算法
  5. Git提交代码的流程
  6. 全球与中国ARM开发套件市场现状及未来发展趋势
  7. FLEX地图应用教程集
  8. 内核调试技巧-逆向寻踪,揭开 LACP 协议流程的神秘面纱
  9. [转载] 【汇总】Android知识清单
  10. java 卡密_【java实现点卡生成】