首页 > 其他分享 >Modbus协议的入门简介 (2) - 从Modbus RTU说起

Modbus协议的入门简介 (2) - 从Modbus RTU说起

时间:2024-09-03 22:24:31浏览次数:5  
标签:RTU 入门 主站 查询 Modbus 地址 数据



Modbus协议的入门简介 (1) - 历史-CSDN博客

Modbus协议的入门简介 (2) - 从Modbus RTU说起-CSDN博客

1. 主从通讯模式(Master/Slave)

Modbus RTU是运行在串口上的Modbus协议,它采用了主从通讯模式。简单来说,在一条总线上,只有一个主站,可以有很多个从站。

主站可以主动地发起通讯,向从站查询自己所需要的信息,它既可以向指定的从站发送信息(每个从站都有一个地址),或者使用地址0,向所有的从站发出广播。

而从站则只能被动的反应,只能在收到主站的查询后回复信息,它不可以主动发送信息的,无论是向主站,还是向其它从站。

另外,实际上Modbus Organization在2020年时,作为技术也要政治正确的一部分,已经不再使用Master/Slave的说法了,修改为了Client/Server,所以在一些地方看到的是Modbus RTU Client和Modbus RTU Server,但由于主/从的说法仍被广泛使用,这里就仍然沿用了。在2020年的声明:

https://modbus.org/docs/Client-ServerPR-07-2020-final.docx.pdf

2. 查询和响应(Query-Response)

主从通讯模式下,采用的是查询-响应(Query-Response)的方式传递信息。简单来说,主站发出的命令被称之为查询,而从站的回复被称之为响应。

举例来说:

像是在一个教室里,老师就是主站Master,学生们就是一个个的从站Slave,每个学生都有一个自己的编号,老师会依次地向学生发问,老师的发问里就包含了学生的编号,被问到的学生则开始回答,没有被问到的学生是不可以说话的,如果被问到的学生在设定时间里没有回答,这就是超时了,那么老师也会结束这次询问并开始下一个的询问。

如下图所示,横线的上部分为主站的查询,下半部分为从站的响应:主站开始查询,被问到的从站开始响应;主站开始广播,这时是不需要响应的,主站继续开始下一次的查询,依次进行一个又一个的循环。

这就是主从模式和查询-响应的数据交换方式,那么主站在查询,从站在响应时到底包括了哪些内容的,这就是数据帧和数据帧的解析了。以下会简单介绍Modbus RTU的数据帧的格式。

3. Modbus RTU的数据帧

Modbus RTU的数据帧格式也比较简单,无论是主站的查询,还是从站的应答都包括了一样的内容:

组成

定义

长度

解释

1

从站地址

1 字节

0: 广播(所有从站)

1–247: 从站地址

2

功能码

1 字节

功能码用于指示读或者写的操作

3

数据

n 字节

对于读或者写的操作,给出其具体的命令的内容

4

校验

2 字节

CRC16,用于校验数据帧是否正常

注意:主站是没有地址的,地址0是留给广播用的。

简单来说:

主站发出查询命令,会指定要查询的是哪个从站(从站地址),会告诉从站主站是要读数据还是要写数据(功能码),想要读写的数据的寄存器地址和数据(数据),最后给出校验,用于从站判断数据帧是否正常(校验)。

从站的返回,也会说明是哪个从站返回的数据(从站地址),会告诉主站当时收到的功能码是多少(功能码),写入和读取的数据(数据),最后同样给出校验,用于主站判断数据帧是否正常(校验)。

关于往返的数据帧的格式的定义,我在开发时经常参考下面网站,这里针对每一个功能码,给出了很详细的例子,解释了往返数据帧里每一个字节的含义:

Data Communication Solutions | Simply Modbus Software

比如功能码FC01:

Modbus Function Code 01 | Read Coil Status | Simply Modbus Software

标签:RTU,入门,主站,查询,Modbus,地址,数据
From: https://blog.csdn.net/DeviceTalk/article/details/141682498

相关文章

  • Docker入门——什么是Docker
    1.什么是docker?docker是一种容器化技术,具体来说它是将应用程序及其依赖环境打包的一种软件,用于保证开发环境的一致性2.为什么需要docker?解决"在我的机器上能跑"的问题,即解决依赖环境一致性问题3.docker是怎么解决这个问题的?docker提供将应用程序及其依赖环境打包成镜像......
  • Datawhale X 李宏毅苹果书 AI夏令营-深度学习入门班-task3-机器学习实践方法论
    引入在简单了解到机器学习的过程,以及模型函数的优化升级之后,我们需要根据一些方法论,解决模型实践过程中会遇到的问题,学会分析模型数据,按照正确的路径优化模型,减少测试误差(TestingLoss)。实践方法论整体框架下图是实践方法论的整体框架,下文会根据逻辑顺序一一介绍。step......
  • C#设计模式入门实战教程
    什么是设计模式设计模式是对面向对象设计中反复出现的问题的解决方案。它们提供了被反复使用、多数人知晓的、经过分类编目的代码设计经验总结。设计模式的作用提高代码的可重用性:通过定义一套标准的解决方案,设计模式使得相同或类似的问题可以在不同的项目中复用相同的代码结构或逻......
  • Datawhale X 李宏毅苹果书 AI夏令营-深度学习入门篇-Task3《深度学习详解》- 实践方法
     核心学习目标:通过《深度学习详解》和李宏毅老师21年的机器学习课程视频,入门机器学习,并尝试学习深度学习,展开代码实践(选修)。该书保留了李宏毅老师公开课中大量生动有趣的例子,帮助读者从生活化的角度理解深度学习的概念、建模过程和核心算法细节,包括卷积神经网络、Transform......
  • C#设计模式入门实战教程
    什么是设计模式设计模式是对面向对象设计中反复出现的问题的解决方案。它们提供了被反复使用、多数人知晓的、经过分类编目的代码设计经验总结。设计模式的作用提高代码的可重用性:通过定义一套标准的解决方案,设计模式使得相同或类似的问题可以在不同的项目中复用相同的代码结......
  • C++入门基础知识48——【关于C++函数】之Lambda 函数与表达式
    成长路上不孤单......
  • Prometheus入门
    介绍1、Prometheus是一个开源的服务监控系统和时序数据库,其提供了通用的数据模型和快捷数据采集、存储和查询接口。它的核心组件Prometheusserver会定期从静态配置的监控目标或者基于服务发现自动配置的自标中进行拉取数据,当新拉取到的数据大于配置的内存缓存区时,数据就会持久......
  • Java 入门指南:Java 并发编程 —— 并发容器 ConcurrentSkipListMap
    ConcurrentMapConcurrentMap是Java并发包中提供的一个接口,它继承了java.util.Map接口,专门用于支持高并发环境下的线程安全操作。ConcurrentMap提供了一系列线程安全的方法,旨在解决在多线程环境下使用普通Map类型(如HashMap)时可能出现的竞态条件和数据不一致问题。......
  • vue3整合antv x6实现图编辑器快速入门
    安装:npminstall@antv/x6--save如果使用umd包,可以使用下面三个CDN中的任何一个,默认使用X6的最新版:https://unpkg.com/@antv/x6/dist/index.jshttps://cdn.jsdelivr.net/npm/@antv/x6/dist/index.jshttps://cdnjs.cloudflare.com/ajax/libs/antv-x6/2.0.0/index.......
  • Java入门第一课
    如何下载使用Eclipse?首先进入Eclipse官网ThankYouforDownloadingEclipse|TheEclipseFoundation下载符合自己电脑系统的版本,选择所在地区的镜像进行下载,否则可能会比较慢。下载完成之后应该是一个exe文件,直接打开进行下载选择第一个,选择好安装路径就可以点击install......