三菱PLC实现CRC(循环冗余校验)计算程序,详细案例解析
haoteby 2024-12-26 13:25 2 浏览
Modbus协议,相信大家都不陌生。串口Modbus协议的数据形式分为两类,Modbus-RTU(二进制)和Modbus-ASCII。其中常用的是Modbus-RTU的方式,报文内容如下:
(以03读寄存器为例)
字节1:站号
字节2:功能码
字节3:从站地址高位
字节4:从站地址低位
字节5:读取数量高位
字节6:读取数量低位
字节7:CRC校验高位
字节8:CRC校验低位
例如:读取4号从站的0002号寄存器:
04 03 00 02 00 01 25 9F
最后的25 9F就是报文中的CRC校验。对于每一个主站发给从站的Modbus命令,都要附带2个字节的CRC校验,这样才能确保数据的准确无误性。
那么问题来了,CRC校验是如何得出的呢?如果我们要用自由口的方式来编写Modbus程序,如何来计算CRC校验值呢?
先看一下CRC校验的定义:
CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。
CRC校验算法主要分为七个步骤:
1、设置CRC存储器为16#FFFF。
2、把第一个参与校验的8位数与CRC的低八位进行异或运算结果仍存与CRC。
3、把CRC右移一位,最高位补0,检查最低位b0位。
4、若b0=0,CRC不变,若b0=1,CRC与16#A001进行异或运算,结果仍存与CRC。
5、重复3、4两步,直到右移8次,这样第一个八位数就进行处理了结果仍然存于CRC。
6、重复2~5步,处理第二个八位数。
7、处理完后,对所得结果进行高低字节交换
流程图如下所示:
从上图中发现,有两个循环过程,小循环是对单个数据的CRC的计算,主要是对首个数据的CRC暂存器进行8次移位运算,大循环是所有数据的运算(先运算完一个8位数据的CRC,下一个数据与这个CRC进行运算),这样把所有数据都计算完成后即可得到CRC校验码。
按照流程图步骤进行编写程序如下:
1、初始CRC值:HFFFF;
2、大循环4次,依次对数据来源D10、D11、D12、D13进行校验;
3、小循环8次,对于每一个数据,
◆首先将M20复位是为了后面的高位补零用,
◆SFTR指令是位右移指令,表示对M0为起始位置的16数据右移1位置,高位用M20填补即高位补零,低位M0为移除的溢出数据即LSB。
◆如果LSB=1,则需要把移位后的数据与A001H进行异或计算,结果保存到CRC暂存器K4M0中,此时将覆盖原来的K4M0中的数据,
◆如果LSB=0,只要把移位后的数据放入CRC暂存器中即可。
4、所有数据运算完成之后,我们要对结果寄存器进行高低8位调换,将CRC校验码的低位存放到D200,高位存放发到D201中。至此CRC校验码计算完成。
看完这篇讲解,大家是不是觉得Modbus很难呢?实际并不是这样的。
FX3U系列以上的PLC都已经内置了CRC校验指令,完全不需要我们来专门计算CRC了。
退一步讲,就算是1S这种停产的PLC要做Modbus,如果是固定的几个数据读取,不需要计算CRC。就算要计算,我们也可以通过触摸屏的方式来代替。
对于Modbus协议,我们建议使用ADP-MB等专用模块,可以支持Modbus便利指令的。
事实上,越高级的PLC对于Modbus协议也是越来越简单的,结合PLC调试神器来测试数据,难度已经降低很多了。
所以,对于这篇文章,大家如果觉得理解不了的话,那就欣赏一下即可。只需要记得Modbus协议需要添加一个CRC校验就行。
相关推荐
- 单点登录(SSO)解决方案介绍(单点登录概念)
-
一、单点登录的介绍单点登录(SingleSignOn),简称为SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系...
- 系统登录的三种方式,哪一种更安全?
-
登录是一个高频的动作,笔者抓住这一个小点,分析了系统登录的几种方式和对应的场景。今天谈谈登录。登录即用户输入用户名和密码登录进系统中。B端系统,对于登录的业务场景有两种(可能不止,目前遇到过这两种):...
- 到底什么是单点登录(SSO)?(什么叫做单点登录)
-
什么是单点登录?单点登录(SingleSign-On,简称SSO)是一种集中式的身份验证和授权机制,用户只需在一处输入一次凭证(例如用户名和密码)就可以访问多个相关但独立的软件系统。在数字化时代,...
- 5年稳如老狗的单点登录系统,到底是怎么搞出来的?
-
说到单点登录(SingleSign-On,简称SSO),大家的第一反应可能是——啊不就是登录一次,能到处串门儿嘛?别说,还真差不多,就是这么个意思。但真要搭一套好用、耐造、还能扛住公司里各种奇奇怪...
- 这些负载均衡都解决哪些问题?服务、网关、NGINX?
-
在微服务项目中,有服务的负载均衡、网关的负载均衡、Nginx的负载均衡,这几个负载均衡分别用来解决什么问题呢?一、服务的负载均衡先抛出一个问题:...
- Nginx负载均衡最全详解(4大算法原理机制)
-
Nginx在大型网站架构很重要,也是大厂重点考察方向,今天我就重点来详解Nginx负载均衡@mikechen本篇已收于mikechen原创超30万字《阿里架构师进阶专题合集》里面。Nginx负载均衡N...
- 负载均衡 Nginx Session 一致性(nginx 负载均衡 会话保持)
-
HTTPS请求跳转...
- 监控Oracle Cloud负载均衡器:Applications Manager释放最佳性能
-
设想你正在运营一个受欢迎的在线学习平台,在考试前的高峰期,平台流量激增。全球的学生同时登录,观看视频、提交作业和参加测试。如果OracleCloud负载均衡器不能高效地分配流量,或者后端服务器难...
- Nginx负载均衡:nginx.conf配置文件说明!
-
大家好,欢迎来到程序视点!我是你们的老朋友.小二!在此记录下Nginx服务器nginx.conf负载均衡的配置文件说明,部分注释收集与网络.关于nginx.conf基本的配置,请查看上一篇文章!Ng...
- Java高可用系统架构中的负载均衡策略
-
Java高可用系统架构中的负载均衡策略在现代的分布式系统中,负载均衡策略是构建高可用系统的基石。Java开发者需要深刻理解这些策略,以便打造稳定且高效的系统。接下来,让我们一起揭开负载均衡的神秘面纱。...
- Spring Boot3 客户端负载均衡全解析:从原理到实战
-
在当今互联网大厂后端技术开发的激烈竞争环境中,构建高效、稳定的微服务架构是核心诉求。其中,SpringBoot3作为热门开发框架,其客户端负载均衡功能对于提升系统性能、保障服务稳定性起着关键作用。...
- MySql高可用集群MySQL Router负载均衡读写分离
-
名词解释MGR:MysqlGroupReplication组复制,多台MySQL服务器在同一组中会自动保持同步状态,当某台服务器故障时,整个复制组依然可以保持正常并对外提供服务。...
- 性能测试之tomcat+nginx负载均衡(nginx tomcat)
-
nginxtomcat配置准备工作:两个tomcat执行命令cp-rapache-tomcat-8.5.56apache-tomcat-8.5.56_2修改被复制的tomcat2下con...
- win10/11双网卡链路聚合叠加负载均衡提升网速解决网卡网速瓶颈!
-
双网卡链路聚合一种网络配置技术,通过将多个物理网卡绑定在一起,形成一个逻辑上的网络接口,以提高网络的可靠性、可用性和性能。这种技术通常用于服务器和网络设备中,以实现负载均衡、冗余和高可用性。本机环境:...