吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5072|回复: 5
收起左侧

[其他原创] VB代码写的modbus的rtu协议的CRC(循环冗余校验)

[复制链接]
望天hous 发表于 2018-11-20 22:24
本帖最后由 望天hous 于 2018-11-21 11:10 编辑

最近闲来无事看了一下mudbus的RTU协议
CRC计算方法是:
1、  预置1个16位的寄存器为十六进制FFFF(全1),此寄存器为CRC寄存器
2、  把第一个8位二进制数据(即通讯信息帧的第一个字节)与16位的CRC寄存器的低八位相异或,把结果存放于CRC寄存 器。
3、  把CRC寄存器的内容右移一位(朝低位)用0填补最高位,并检测右移后的移出位。
4、  如果移出位为零,则重复第三步(再次右移一位);如果移出位为1,CRC寄存器与多项式0xa001进行异或。
5、  重复步骤3和4,直到右移8次,这样整个8位数据全部进行了处理。
6、  重复步骤2和5,进行通讯信息帧下一个字节的处理。
7、  将该通讯信息帧所有字节按上述步骤计算完成后,得到的16位CRC寄存器的高、低字节进行交换
8、  最后得到的CRC寄存器内容即为:CRC校验码。

度娘上类似的说明代码很多,但是没有我想用的 ,下面结合实例说明一下

见附件:图片


现场MODBUS设备的报文



蓝色区域是发送请求上位机代码(这里也不再叙述各个代码含义,感兴趣可以问问度娘),灰色区域是返回数据(感兴趣的  可以看看)这里说一下蓝色区域的最后 C4 2C 和A5 E5分别是前面的数据CRC校正码,低位在前高位在后 循环冗余码校验英文名称为Cyclical Redundancy Check,简称CRC。它是利用除法及余数的原理来作错误侦测(Error Detecting)的。他将要发送的数据比特序列当作一个多项式f(x)的系数,发送时用双方预先约定的生成多项式G(x)去除,求得一个余数多项式,将余数多项式加到数据多项式之后发送到接收端,接收端同样用G(x)去除接收到的数据,进行计算,然后把计算结果和实际接收到的余数多项式数据进行比较,相同的话表示传输正确。CRC校验检错能力强,容易实现,是目前应用最广的检错码编码方式之一。
在国际标准中,根据生成多项式G(x)的不同,CRC又可分为以下几种标准:
  ①CRC-12码:    G(x)=X12+X11+X3+X2+X+1
  ②CRC-16码:    G(x)=X16+X15+X2+1
  ③CRC-CCITT码: G(x)=X16+X12+X5+1
  ④CRC-32码:    G(x)=X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X1+X+1


这里用的是第 二种标准废话少说上成品展示图

见附录图片:第一个

第一个

见附录图片:第二个

第二个
下面是源码和成品,


感兴趣可以下载看看,共同学习共同进步

有用的话记得收藏,点赞,解压密码:hous

第一个成品展示图

第一个成品展示图

第二个成品展示图

第二个成品展示图

现场MODBUS设备的报文图片

现场MODBUS设备的报文图片

源码及其成品.rar

942.21 KB, 下载次数: 119, 下载积分: 吾爱币 -1 CB

modbus的rtu协议的CRC(循环冗余校验)

免费评分

参与人数 1吾爱币 +3 热心值 +1 收起 理由
wushaominkk + 3 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 望天hous 发表于 2018-11-21 11:11
重新排了一下版,要不看起来太乱了
R.E.D 发表于 2018-11-24 21:20
 楼主| 望天hous 发表于 2018-11-28 20:39
Iciness 发表于 2019-1-9 23:23

收藏,谢谢分享
hack5332817 发表于 2020-11-12 13:04
厉害我的乖乖a
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 23:38

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表