ModBus协议简介及移植到STM32单片机

一、基本概念 

Modbus协议是全球最早用于工业现场的总线规约,许多工业设备,包括PLC,DCS,智能仪表等都在使用此协议作为他们之间的通信标准。

Modbus 协议是一个请求/应答协议,发起请求的为Master(client),响应请求的为slave(server)。

此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一个控制器请求访问其它设备的过程,如何回应来自其它设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式。

 

二、消息格式

这里大致说明Modbus协议的消息中包含有哪些域(ADU:应用数据单元,PDU:协议数据单元),并且说明各个域的作用。但是需要注意,modbus tcp无地址码和校验码,modbus ascii和modbus rtu也有差别,具体请看下节详述。

 

地址码:每个从机都必须有唯一的地址码(从1到247,0是广播地址),并且只有符合地址码的从机才能响应回送。当从机回送信息时,相应的地址码表明该信息来自于何处。

功能码:主机发送的功能码告诉从机执行什么任务。ModBus通讯规约定义功能号为1到127。表2-1列出部分常用功能码,以备查询。

数据区:数据区包含需要从机执行什么动作或由从机采集的返送信息。应答包中,数据包括了数据字节长度+数据值,请求包中数据只包含数据值。

校验码:主机或从机可用校验码进行判别接收信息是否出错。

表2-1

代码

中文名称

为操作/字节操作

操作数量

01

读线圈状态

位操作

单个或多个

02

读离散状态

位操作

单个或多个

03

读保持寄存器

字节操作

单个或多个

04

读输入寄存器

字节操作

单个或多个

05

写单个线圈

位操作

单个

06

写单个保持寄存器

字节操作

单个

15

写多个线圈

位操作

多个

16

写多个保持寄存器

字节操作

多个

 

三、通讯方式

3.1 异步串行传输

各种介质如有线RS-232/422/485/;光纤、无线等,对应的通信模式是MODBUS RTU或MODBUS ASCII。

3.1.1 ASCII帧

起始位

设备地址

功能代码

数据

LRC校验

结束符

2个字符

2个字符

n个字符

2个字符

2个字符

  

使用ASCII模式,消息以冒号(:)字符(ASCII码 3AH)开始,以回车换行符结束(ASCII码 0DH,0AH)。

其它域可以使用的传输字符是十六进制的0...9,A...F。网络上的设备不断侦测“:”字符,当有一个冒号接收到时,每个设备都解码下个域(地址域)来判断是否发给自己的。消息中字符间发送的时间间隔最长不能超过1秒,否则接收的设备将认为传输错误。

3.1.2 RTU帧

起始位

设备地址

功能代码

数据

CRC校验

结束符

T1-T2-T3-T4

8bit

8bit

n个8bit

16bit

T1-T2-T3-T4

使用RTU模式,消息发送至少要以3.5个字符时间的停顿间隔开始(如上图的T1-T2-T3-T4所示)。传输的第一个域是设备地址。可以使用的传输字符是十六进制的0...9,A...F。网络设备不断侦测网络总线,包括停顿间隔时间内。当第一个域(地址域)接收到,每个设备都进行解码以判断是否发往自己的。在最后一个传输字符之后,一个至少3.5个字符时间的停顿标定了消息的结束。一个新的消息可在此停顿后开始。

整个消息帧必须作为一连续的流转输。如果在帧完成之前有超过1.5个字符时间的停顿时间则为非法帧,如果一个新消息在小于3.5个字符时间内接着前个消息开始,接收的设备将认为它是前一消息的延续,这将导致一个错误,因为在最后的CRC域的值不可能是正确的。即帧之间的间隔必须大于3.5T,帧内字符的间隔必须小于1.5T。实际应用中1.5T一般不处理,只处理3.5T(FreeModBus开源代码就是这样)。

3.2 以太网

在以太网上进行通讯,对应的通讯模式是MODBUS TCP,其帧结构如下图。

与MODBUS RTU相比,少了校验域和地址码,其中地址码被放到MBAP报文头里面了,没有校验域是因为TCP本身就有校验所以省略了。

3.3 高速令牌传递网络

对应的通信模式是Modbus PLUS。

 

四、调试工具

如果你做的是modbus master,可以使用modbus slave工具模拟从设备来调试,该工具下载地址:http://www.cr173.com/soft/21410.html

如果你做的是modbus slave,可以使用modbus poll工具模拟主设备来调试,该工具下载地址:http://www.cr173.com/soft/21405.html

以上两个工具的使用方法,可以参考此博客:

https://blog.csdn.net/byxdaz/article/details/77979114

 

五、移植到STM32单片机

5.1 FreeModBus Master工程

5.1.1 开发环境

STM32L475 + STM32CubeMX + KEIL5

5.1.2 工程说明

使用STM32L475单片机的uart1作为调试串口,uart2外接RS485芯片作为modbus通讯串口,PC3引脚用来控制RS485芯片的方向。下载本工程后,只需根据你的硬件,改变上述接口,即可正常工作!

本工程实现了MODBUS MASTER RTU的功能,MODBUS SLAVE RTU、MODBUS ASCII和MODBUS TCP均未测试!

5.1.3 下载地址

https://u20529624.ctfile.com/fs/20529624-383190905

本人使用modbus slave工具进行测试,读取线圈、离散、输入、保持四种寄存器都正常,如下图所示

 

5.2 FreeModBus Slave工程

5.2.1 开发环境

STM32L071 + STM32Cube + KEIL5

5.2.2 下载地址

https://u20529624.ctfile.com/fs/20529624-383193713

 

 

  • 27
    点赞
  • 277
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
课程背景Modbus 协议是工业自动化控制系统中常见的通信协议协议的全面理解是个痛点。本课程主讲老师集10多年在Modbus协议学习、使用中的经验心得,结合当前物联网浪潮下Modbus协议开发的痛点,推出这套面向Modbus 协议初学者的课程。本课程不同于以往市面课程只是协议讲解无实现代码,而是采用讲解与实践并重的方式,结合STM32F103ZET6开发板进行手把手编程实践,十分有利于初学者学习。涵盖了学习者在Modbus协议方面会遇到的方方面面的问题,是目前全网首个对Modbus协议进行全面总结的课程。课程名称   协议讲解及实现>>课程内容1、Modbus 协议的基础。2、Modbus协议栈函数编程实现。3、Modbus协议在串行链路编程实现。4、Modbus协议在以太网链路编程实现。5、常见问题的解决方法。带给您的价值通过学习本课程,您可以做到如下:1、全面彻底的理解Modbus协议。2、理解在串行链路,以太网链路的实现。3、掌握Modbus协议解析的函数编程方法,调试工具的使用。4、掌握多个串口,网口同时运行同一个Modbus协议栈的方法。5、掌握Modbus协议下,负数,浮点数等处理方法。讲师简介许孝刚,山东大学工程硕士,副高职称,技术总监。10多年丰富嵌入式系统开发经验,国家软考“嵌入式系统设计师”。2017年获得“华为开发者社区杰出贡献者”奖励。
### 回答1: 基于Modbus协议STM32单片机是一种集成了STM32芯片和Modbus通信协议的开发板或模块。Modbus是一种常见的串行通信协议,广泛应用于工业自动化领域。 STM32单片机是由STMicroelectronics公司推出的一系列高性能、低功耗的32位RISC微控制器。它具有丰富的外设和强大的处理能力,适用于多种应用场景。 基于Modbus协议STM32单片机可以用于实现与其他Modbus设备之间的通信。它可以作为主站或从站工作,在Modbus网络上完成数据的读取、写入和控制操作。 在使用基于Modbus协议STM32单片机时,我们需要先配置Modbus协议栈。这个协议栈通常是由软件实现的,可以使用现有的Modbus库或自行开发。它负责将数据进行封装和解析,实现Modbus协议的通信。 在STM32单片机中,我们可以通过串口、以太网或其他通信接口来实现与其他设备的物理连接。可以使用UART、SPI或I2C等通信协议与其他设备进行数据的传输。 一旦配置好Modbus协议栈和通信接口,基于Modbus协议STM32单片机就可以与其他Modbus设备进行通信了。我们可以通过读取和写入数据寄存器来获取其他设备的状态和数据,也可以发送控制命令来控制其他设备的操作。 总之,基于Modbus协议STM32单片机可以实现与其他Modbus设备的数据交换和控制操作,具有广泛的应用前景,特别是在工业自动化和远程监控领域。 ### 回答2: 基于Modbus协议STM32单片机是一种嵌入式系统解决方案,它能够通过Modbus通信协议与其他设备进行数据交换。 首先,STM32单片机是由ST公司推出的一系列高性能、低功耗的32位微控制器,它具备丰富的外设和强大的处理能力。它采用ARM Cortex-M系列内核,具有高度灵活性和可编程性,可以满足不同应用场景的需求。 而Modbus协议是一种常用的工业通信协议,用于串行通信和现场总线系统。它基于主从结构,可以实现设备之间的数据交换和控制。Modbus协议包含了常用的读写寄存器功能,使得设备之间的数据传输非常简单。 基于Modbus协议STM32单片机方案可以实现以下功能: 1. STM32单片机可以作为Modbus主站或从站,通过串口与其他Modbus设备进行通信。作为主站时,它能够主动请求数据,并控制从站设备;作为从站时,它能够被其他主站设备主动请求数据。 2. STM32单片机具备丰富的外设,可以与其他传感器、执行器等设备进行连接。通过Modbus协议,它可以读取和控制这些外设的状态和数据,实现实时监测和控制。 3. STM32单片机可以实现多个Modbus通信通道,通过多个串口或者以太网等接口与其他设备进行通信。这样,在大规模工业控制系统中,可以同时与多个设备实现数据交换和控制。 4. STM32单片机的高性能和低功耗特点使得它非常适合运行Modbus通信协议,能够满足工业应用对实时性和可靠性的要求。 综上所述,基于Modbus协议STM32单片机方案可以实现设备之间的数据交换和控制,具有广泛的应用前景。 ### 回答3: 基于Modbus协议STM32单片机是指使用STM32系列单片机来实现Modbus通信协议Modbus是一种通信协议,广泛应用于工业自动化领域,主要用于连接不同设备之间的通信和数据交换。 STM32单片机是由意法半导体(STMicroelectronics)推出的ARM Cortex-M系列的32位微控制器,具有强大的性能和丰富的外设功能。它们是模块化的,可以方便地与其他硬件设备进行连接和通信。 基于Modbus协议STM32单片机可以通过串口或以太网等接口与其他Modbus设备进行通信。它可以作为Modbus主站或从站,可以发送和接收Modbus命令和数据。 在使用STM32单片机实现Modbus协议时,首先需要使用相应的软件库,例如FreeMODBUSMODBUS-STM32等,这些库提供了实现Modbus协议所需的基本函数和驱动程序。然后,通过编程控制STM32的串口或以太网接口,发送和接收Modbus消息,实现设备之间的数据交换。 基于Modbus协议STM32单片机可以应用于各种工业自动化场景,例如环境监测系统、温度控制系统、能源管理系统等。它们可以与传感器、执行器、PLC等设备进行通信,实现数据采集、控制和监控等功能。 总之,基于Modbus协议STM32单片机是一种强大而灵活的解决方案,可用于实现工业自动化系统中的通信和数据交换。它们具有高性能,易于编程和定制,使得设备之间的通信更加稳定和可靠。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值