Modbus RTU报文帧CRC校验的计算及校验工具的使用

 技术文章     |      2024

关键词:MODBUS RTU CRC校验,串口调试器,MODBUS RTU协议

本文由艺捷自动化编写,其旗下产品有易为二维码说明书小程序

在工业自动化通讯中,Modbus RTU是使用非常广泛的一种通讯协议.尽管它的通讯效率不高,但由于它现场接线简单,有众多设备厂商支持,简单好用,所以是一种重要的通讯方式,有时候甚至是唯一可选的通讯方式.因为有许多的仪表只支持Modbus RTU通讯协议.

首先,说一下在什么情况下需要用到这种Modbus RTU通讯帧的CRC校验计算.如果你的上位机中有现成的Modbus RTU通讯指令则不用关注帧的细节.比如用PLC通过485总线来与现场仪表进行Modbus RTU通讯,则PLC程序中有相应的Modbus RTU通讯指令,只需调用这些指令就可以了,你无需知道CRC校验是如何计算的.比如你用西门子200 SMART PLC做主站与多个设备从站做485通讯,只需要调用MBUS_CTRL和MBUS_MSG这两条指令就可以了.那么我们什么时候需要计算Modbus RTU帧里面CRC校验数值呢.就是用电脑与仪表进行通讯的时候.比如你去现场调查或者调试,只带了笔记本电脑和一些配套的串口通讯器件,你想验证一下现场的仪表能不能实现Modbus RTU通讯,就需要自己写出通讯帧的内容,然后通过笔记本发出去.仪表如果能通讯会返回相应的应答帧.这就需要你能计算出通讯帧里面的CRC校验码,这个校验码有一定的算法,可以查看相关资料,但要人工计算这个校验码太费事了.这里介绍一个软件,详细说明它的使用方法,并提供这个软件的程序文件.

笔记本电脑一般的电气工程师都会有,但要进行串行通讯的话,往往需要加一点串口通讯的器件.现在笔记本电脑几乎都没有串口的,这就需要给电脑加一个串口.一般是USB转RS232转换器,或者USB转RS485转换器,或者RS232转485转换器.还有USB转422转换器,但用的不多,485用的居多.232和485的串口我都用过,后面我会推荐一下好用的串口器件.

这里讲的CRC校验工具是计算通讯帧中CRC校验字节的软件,我会另外附加文件提供给您。实际上要在电脑上收发串口数据,还需要一种串口调试器软件,我后面会给出链接。串口调试器软件的用法就不在这里详细讲述了,可以参考我写的一篇名为《如何使用串口调试器测试串行通讯》的文章。有了通讯软件还需要知道怎么编写通讯帧,这就要比较熟悉Modbus RTU通讯协议。这个通讯协议是一个非常古老的通讯协议了,但现在还在广泛的使用。这个通讯协议的全部文本我这里也有,我也会另外附加文件提供给您。当你初步掌握了这个协议之后,你就知道怎么写一个通讯帧发给仪表了,最大的难题还是CRC校验码的计算,也就是这篇文章所要讲述的主要内容。

那么CRC校验工具,串口调试软件,Modbus RTU协议文本,以及相关的硬件产品都会在下面给出链接或下载方式,软硬件都准备齐全后,后面具体介绍怎么操作。

附加内容:

下面是一些本文所提到的一些资源:

晶华USB转RS232串口线转换器晶华USB转RS232串口线转换器

https://item.taobao.com/item.htm?spm=a21dvs.23580594.0.0.621e3d0dWvnvKo&ft=t&id=748385000856

绿联USB转RS485电脑422九针串口绿联USB转RS485电脑422九针串口

https://item.taobao.com/item.htm?spm=a21dvs.23580594.0.0.621e3d0dWvnvKo&ft=t&id=748530793717

大瀛RS232转RS485转换器大瀛RS232转RS485转换器

https://item.taobao.com/item.htm?spm=a21dvs.23580594.0.0.621e3d0dWvnvKo&ft=t&id=748603026607

易为二维码说明书

易为二维码说明书,已经上线,可在电气柜体上粘贴二维码扫码查看电气图纸和资料.

串口调试器

https://item.taobao.com/item.htm?spm=a21dvs.23580594.0.0.1d293d0dMIKIbe&ft=t&id=751573174633

CRC校验工具

https://item.taobao.com/item.htm?spm=a21dvs.23580594.0.0.1d293d0dMIKIbe&ft=t&id=748401044135

现在可以在易为二维码说明书小程序,下载上面所有的软件和文档。扫一扫以下小程序码即刻下载。

易为二维码说明书小程序

有了上面提供的资料和工具后,下面具体讲解Modbus RTU的帧结构和CRC校验字节的计算.

上篇讲到在什么情况下需要用到CRC校验计算,现在详细介绍一下如何计算这个值.

第一,先介绍一下Modbus RTU通讯帧的结构.

RTU模式每个字节的格式为:

编码系统:8位二进制.

数据位:起始位,数据位(首先发送最低有效位),奇偶校验,停止位.

帧发送方式:每个字符或字节均由从左到右顺序发送.

校验:循环冗余校验(CRC),低位字节先发.

Modbus-RTU报文帧

地址

功能码

数据

CRC校验

1字节

1字节

0到252字节

2字节

 

 

 

CRC低

CRC高

那么CRC校验是计算的那一部分数据呢,具体说是从地址字节开始到校验字节之前的字节,搞清楚这点很重要.

下面看一下PZ系列多功能表Modbus RTU通讯的例子.

下面的例子是从01 号从机读3 个采集到的基本数据(数据帧中每个地址占用2 个字节)UAB、UBC、UCA,其中UAB 的地址为0028H, UBC 的地址为0029H, UCA 的地址为002AH。

主机需要发送如下帧.

地址码

功能码

起始地址

寄存器数量

CRC校验码

 

 

高字节

低字节

高字节

低字节

低字节

高字节

01H

03H

00H

28H

00H

03H

85H

C3H

生成一个CRC有固定的流程,这里不做详细阐述.这里讲述如何利用CRC校验工具软件来计算这个CRC校验码.打开程序后先点Modbus-CRC16,输入上面帧中从地址码到CRC校验码之前的16进制数,01 03 00 28 00 03,点计算,计算结果为C385,计算结果需要注意的是,C3为高字节,85为低字节,不要搞混了.下图展示操作画面.

CRC校验工具

下面来看DM6212多通道采集器的Modbus-RTU协议格式.

比如计算机(主站)读取数据发送命令格式(命令帧).

通讯地址

功能号

起始地址高位

起始地址低位

数据个数高位

数据个数低位

校验码高位

校验码低位

01

03

00

00

00

03

05

CB

从站返回数据格式(应答帧).

通讯地址

功能号

数据个数

第一个数据高位

第一个数据低位

第二个数据高位

第二个数据低位

第三个数据高位

第三个数据低位

校验码高位

校验码低位

01

03

06

03

E8

03

E8

03

E8

C1

9F

大家可以用CRC校验工具软件计算一下校验码,演练一下.注意这家的说明文档中把校验码第一个字节称为高位,把第二个字节称为低位.各家的叫法不一样,但实际对应的字节是一样的.有的产品实际通讯中把CRC校验码高低字节搞反了,只要通讯时交换一下高低字节试试就好了.

更多精彩内容可访问https://cloud1-8gn6aceiacd9d7a5-1318392953.tcloudbaseapp.com/