STM32H库Modbus-RTU程序

参考博主 STM32移植modbus通讯协议简明教程

简介

Modbus通讯协议最早由Modicon公司开发,是一种采用主从通信模式,即只有主机可以发起请求,从站设备通过向主机提供请求的数据或执行查询中请求的操作作为响应,广泛应用于工业现场的总线协议。主从查询——响应机制如下图所示。

在这里插入图片描述
主机可以通过指定节点地址的方式访问从设备,也可以通过发送广播消息访问所有从设备;从设备只响应针对自己的查询,不会响应广播查询。Modbus通信协议是一项应用层报文传输协议,包括RTU、ASCII和TCP,标准的Modbus协议物理层接口包括RS232、RS485和以太网。

主要的Modbus协议有四种,分别是:

Modbus ASCII协议

该协议使用ASCII字符编码传输数据,每个字节被表示为两个ASCII字符。由于采用了ASCII编码,该协议的传输速率相对较慢,但可以通过普通的串口进行通信。

Modbus RTU协议

该协议使用二进制编码传输数据,每个字节用8个二进制位表示。相比于Modbus ASCII协议,Modbus RTU协议的传输速率更快。通常使用串口进行通信,但也可以使用其他物理介质。

Modbus TCP协议

该协议基于TCP/IP协议栈,通过以太网进行通信。Modbus TCP协议将Modbus RTU协议的数据帧封装在TCP/IP协议的数据包中进行传输,具有更高的传输速率和可靠性。由于基于以太网,该协议可以支持更长的通信距离和更多的设备。

Modbus/UDP协议

该协议类似于Modbus TCP协议,但是使用UDP协议进行传输。与TCP协议相比,UDP协议不保证数据的可靠性和顺序,但传输速率更快。因此,Modbus/UDP协议适用于实时性要求较高的应用场景。

Modbus RTU与Modbus ASCII均为串行传输方式。其中,Modbus RTU采用二进制表现形式以及紧凑数据结构,通信效率较高,应用比较广泛。而Modbus ASCII采用ASCII码传输,并且利用特殊字符作为其字节的开始与结束标识,其传输效率要远远低于Modbus RTU协议。
Modbus TCP是通过工业以太网TCP/IP网络传输的Modbus通信。Modbus数据传输提供了连接在以太网TCP/IP网络上的客户机与服务器之间的实时通讯。

Modbus RTU 数据帧结构

Modbus RTU协议通过将从站设备地址(或广播)、定义请求操作的功能码、要发送的数据和CRC校验放入主机查询中来建立查询报文;从站设备的响应消息也是使用Modbus RTU报文结构,包括从站设备地址、请求操作的功能码、要发送的数据和CRC校验;如果在接收消息时发生错误、或者从站设备无法执行请求的操作,从站设备将发送一个异常消息作为响应。Modbus RTU数据帧结构如下:

在这里插入图片描述

帧结构 = 地址 + 功能码 + 数据 + CRC校验。地址就是相当于哪个从机,功能码就是要干的事情,数据就是要具体怎么做,最后来个CRC校验确保数据是对的。值得注意的是地址: 地址的有效范围是1-247,其他有特殊用途,比如255是广播地址(广播地址就是应答所有地址,正常的需要两个设备的地址一样才能进行查询和回复),而且RTU没有帧头和帧尾,所以协议里明确两帧之间要大于3.5个字节时间间隔,作为一帧结束的判断依据。

Modbus 支持的功能码

0x03:读取寄存器
0x06:写单个寄存器
0x10:写多个寄存器

功能码 0x03:读取寄存器

在这里插入图片描述
①功能码0x03实战:
在这里插入图片描述

解析:
 
/*主机发送解析*/
 
05-地址
 
03-功能码,代表查询功能,其他功能后面再说
 
01 64-代表查询的起始寄存器地址.说明从0x0164开始查询.
 
(这里需要说明以下,Modbus把数据存放在寄存器中,通过查询寄存器来得到不同变量的值,一个寄存器地址对应2字节数据;)
 
00 02-代表查询了一个寄存器.结合前面的00 00,意思就是查询从0开始的2个寄存器值;
 
85 AC-循环冗余校验,是modbus的校验公式,从首个字节开始到84前面为止;
 
(这里新手可能不懂,这个校验就是保证数据传输过程没有错误的一种手段,不同的协议这种校验公式不一样,只需了解这个就足够了,具体怎么求的,可以直接在输出数据得到结果,地址为:http://www.ip33.com/crc.html)
 
/*从机回复解析*/
 
05-地址
 
03-功能码
 
04-代表后面数据的字节数,因为上面说到,一个寄存器有4个字节,所以后面的字节数肯定是2*查询的寄存器个数;
 
13 88-寄存器的值是0x1388,结合发送的数据看出,01这个寄存器的值为0x1388

00 01-寄存器的值是0x0001,结合发送的数据看出,02这个寄存器的值为0x0001
 
35 15-循环冗余校验

功能码0x06:写单个寄存器

在这里插入图片描述

功能码0x10:写多个寄存器

在这里插入图片描述
③功能码0x10实战:
在这里插入图片描述

解析:
 
/*主机发送解析*/
 
05-主机要查的地址
 
10-功能码,0x10=16D代表修改多个寄存器功能;
 
01 6C-代表修改的起始寄存器地址.说明从0x016C开始.
 
00 02-代表修改的寄存器数量,这里开始于0x06的修改不同;
 
04 -表示修改的总字节数,由于修改了2个寄存器,所以数据要有4个字节;
 
00 F4-表示修改的值,结合上面,就是从第016C寄存器开始修改第一个寄存器值为0x01F4,就是把016C寄存器改为0x01F400 01-表示修改的值,结合上面,就是从第016C寄存器开始修改第二个寄存器值为0x0001,就是把016D寄存器改为0x00016C BC -循环冗余校验,是Modbus的校验公式
 
 
 
/*从机回复解析*/
 
05-从机返回的地址,说明这就是主机查的从机
 
10-功能码
 
01 6C-代表修改的起始寄存器地址.说明是0x016C.
 
00 02-代表修改的寄存器数量,只需要回复这么多久足够了,从机告诉主机,你修改了哪几个寄存器就足够了;
 
81 AD-循环冗余校验;

Modbus RTU 接线

Modbus RTU协议使用RS-232或RS-485物理层,使用RS-485物理层可以配置1~32个从站设备地址,构成RS-422/RS-485网络拓扑,通常在物理连接的末端设备并联120Ω的终端电阻。

RS485半双工两线制接线方式如图所示:
在这里插入图片描述

Modbus RTU 程序

可到他的微信公众号回复 “Modbus”可领取相关资料和程序,该程序经过简单验证可以正常使用。

STM32移植modbus通讯协议简明教程

Modbus RTU 调试

可以使用SSCOM串口工具来,省事的是可以不用自己添加CRC校验,工具可以直接带上去发送给通讯设备,至于硬件工具可以再某宝上直接买USB转485模块,这个模块相当于CH430串口芯片一样使用
在这里插入图片描述

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
STM32 Modbus-RTU主机程序是一种针对STM32单片机开发的软件程序,用于实现Modbus通信协议中主站(主机)的功能。Modbus-RTU是一种常见的串行通信协议,用于在工业自动化系统中进行数据交换。 STM32 Modbus-RTU主机程序的设计目的是实现STM32单片机作为Modbus通信系统中的主站,具备与从站进行通信的能力。主机程序中通过串口与从站进行通信,接收和发送数据。主机程序需要实现Modbus协议的相关功能,包括函数码解析、地址解析、数据读写操作等。 在设计STM32 Modbus-RTU主机程序时,需要考虑以下几个关键因素。首先,需要确定从站的地址和通信参数,包括波特率、数据位数、停止位等。其次,需要实现Modbus通信协议的各种功能,如读取保持寄存器、读取输入寄存器、写入单个线圈等。此外,还要考虑主机与从站的通信方式和通信频率,以及数据的处理和解析方式。 在编写STM32 Modbus-RTU主机程序时,可以使用STM32的开发环境进行开发,如Keil等。首先建立串口通信功能,然后根据主机与从站的通信协议,实现相应的Modbus函数码解析和数据读写操作。最后进行测试和调试,确保主机程序能够正确地与从站进行通信,并实现所需的数据交换功能。 总之,STM32 Modbus-RTU主机程序是一种通过STM32单片机实现Modbus通信协议的软件程序。它能够使STM32单片机具备作为主站与从站进行通信的能力,并实现相关的数据读写操作。通过该主机程序,能够在工业自动化系统中实现高效可靠的通信。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谢谢~谢先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值