找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5690|回复: 13

200SMART如何编写CRC校验算法程序

   火.. [复制链接]
  • 打卡等级:即来则安
  • 打卡总天数:29
  • 打卡月天数:1
  • 打卡总奖励:7791
  • 最近打卡:2025-12-13 17:25:16

2540

主题

1355

回帖

2万

积分

管理员

积分
21304
发表于 2019-10-11 20:41:10 | 显示全部楼层 |阅读模式
CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。
在Modbus RTU通讯中数据报文中有一帧是CRC校验码,用来进行错误检测。其原理是由发送设备将数据帧进行一定的运算得出一个检验码,然后加在数据帧后一起发送过去,接收设备接收到数据后重新运算,再讲运算出来的校验码与发送过去的校验码进行比较,如果一致则说明数据无错误,如果不一致则说明数据传输错误。
CRC运算过程如下:
CRC是先存入0 XFFFF到CRC寄存器,然后调用一个过程将消息中连续的8Bit字节与当前寄存器中的值进行处理。仅每个字符中的8Bⅰt数据对CRC有效,起始位和停止位以及奇偶校验位均无效。CRC产生过程中:每个8位字符都单独和CRC寄存器内容相异或(X0R),结果向最低有效位方向移动,最高有效位以0填充。LSB被提取出来检测,如果LSB为1,CRC寄存器单独和预置的值相异或,如果LSB为0,则不进行。整个过程要重复8次。在最后一位(第8位)完成后,下一个8位字节又单独和CRC寄存器的当前值相异或。最终CRC寄存器中的值,是消息中所有的字节都执行之后的CRC值。
下面为产生GRG的计算过程
1.将一个16位寄存器的值设置为FFFF(hex),称之为CRC寄存器。
2.将数据的第一个8Bit字符与16位CRC寄存器的低8位进行异或计算,并把结果存入CRC寄存器。
3.CRC寄存器向右移一位(向着最低位LSB),最高位MSB补零,移出并检查LSB。
4.如果LSB为0:重复第三步(另一个移位)如果LSB为1:CRC寄存器与预置值:A001H(1010000000000001B)进行异或操作。
5.重复第3与第4步直到8次移位全部完成,此时一个8Bit数据处理完毕。
6.重复第2与第5步直到所有数据全部处理完成。
7.最终CRC寄存的内容即为CRC值。
注意:CRC校验码使用时低字节在前,高字节在后。
用S7-200 SMART编写运算程序如下:

将CRC算法创建成库,在主程序中调用即可算出CRC结果:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
工控课堂 www.gkket.com

0

主题

119

回帖

418

积分

注册会员

积分
418
发表于 2019-10-18 01:18:27 | 显示全部楼层
感谢分享,佩服佩服!
工控课堂 www.gkket.com

0

主题

170

回帖

374

积分

注册会员

积分
374
发表于 2020-11-18 05:08:00 | 显示全部楼层
楼主您的技术水准,我最服你,其他都是浮云
工控课堂 www.gkket.com

0

主题

37

回帖

448

积分

中级会员

积分
448
发表于 2023-5-14 19:57:32 | 显示全部楼层
真是难得给力的帖子啊。
工控课堂 www.gkket.com

0

主题

66

回帖

94

积分

新手上路

积分
94
发表于 2025-11-12 10:54:57 | 显示全部楼层
画面感太强了,仿佛身临其境!
工控课堂 www.gkket.com

0

主题

101

回帖

288

积分

注册会员

积分
288
发表于 2025-11-13 09:45:53 | 显示全部楼层
赞同 + 10086,完全说出了我的想法!
工控课堂 www.gkket.com

0

主题

112

回帖

169

积分

新手上路

积分
169
发表于 2025-11-14 03:39:12 | 显示全部楼层
来凑个热闹,为楼主增加点人气!
工控课堂 www.gkket.com

0

主题

168

回帖

669

积分

中级会员

积分
669
发表于 2025-11-14 04:41:05 | 显示全部楼层
不请自来,只为说一句:太精彩了!
工控课堂 www.gkket.com

0

主题

132

回帖

280

积分

注册会员

积分
280
发表于 2025-11-14 11:24:43 | 显示全部楼层
被戳中笑点 / 泪点,太真实了!
工控课堂 www.gkket.com

0

主题

60

回帖

76

积分

新手上路

积分
76
发表于 2025-11-17 02:07:23 | 显示全部楼层
不请自来,就想夸一句:太顶了!
工控课堂 www.gkket.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|手机版|免责声明|本站介绍|工控课堂 ( 沪ICP备20008691号-1 )

GMT+8, 2025-12-23 05:34 , Processed in 0.082557 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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