Modbus 通讯协议(超详细,简单易懂)

目录

一、协议中的寄存器定义

二、协议概述

三、使用串口的Modbus 报文帧

​编辑 3.1、Modbus ASCII 模式

 3.2、Modbus RTU 模式

3.3、功能码概要

 3.4、Modbus 报文分析

四、什么是RS-485 RS-232?


一、协议中的寄存器定义

阅读 Modbus 协议时会发现它的概念别扭、重复、不易区分,比如线圈 状态(Coil Status)、离散输入状态(Discrete Input Status)、保持寄存器(Holding Register)、输入寄存器(Input Register)。
但是对于软件而言,其实不难理解:
  1. 想得到按键输入状态时,读取到的是一位数据;
  2. 想控制 LED 时,需要输出一位数据,想读取 LED 当前状态时,也可以读取到一位数据
  3. 想读取参数时,读取到的“输入寄存器”,得到多位数据,比如 16 位数据
  4. 想设置参数时,写的是“保存寄存器”,写入的是多位数据,比如 16 位数据;也可以 读“保存寄存器”

        各种寄存器名字花里胡哨的,其实最大区别就是有的可读可写,有的只可读,还有就是可操作的位数量不一样! 有的是位操作,有的是多位操作(在 Modbus 中,多位操作时都是 16 位(2bytes)的)。

  • bit 操作涉及的寄存器有 2 类:线圈状态(可读可写)、离散输入状态(只读)
  • 16bit 操作的寄存器有 2 类:保存寄存器(可读可写)、输入寄存器(只读)
寄存器种类
                                      说明
线圈状态
输出端口。可设定端口 输出状态,也可以读取该位 的输出状态。
离 散 输入状 态
输入端口。通过外部设 定改变输入状态,可读但不 可以写
保 持 寄 存 器
输出参数或保持参数, 控制器运行时被设定的某些 参数,可读可写
输 入 寄 存 器
输入参数。控制器运行 时从外部设备获得的参数, 但可读不可写
一个设备里,可能有多个“线圈状态”、多个“离散输入状态”、多个“保存寄存 器”、多个“输入寄存器”。怎么知道这个寄存器是哪类寄存器呢?
在Modbus 中它们都是有区号的,全称为 存储区代号
          序号         读写        储存类型储存区名称区号
            1         只读bit类型离散型1
            2         读写bit类型线圈0
            3         只读16bit类型输入寄存器3
            4         读写16bit类型保持寄存器4
存储区范围:
① 无论是什么存储区,都会有一个范围的限制;Modbus 的每个存储区也规定了一个范围, 不能无限制使用。
② Modbus 规定每个存储区的最大范围是 65536,也就是 0~65535。
协议地址模型
PLC 地址是我们常见的,但它是怎么组成的的,它是由存储区代号 + 地址组成,我们把这样的地址称为绝对地址,把后面的地址成为相对地址;而我们的 Modbus 地址跟 PLC 地 址也是类似的;
Modbus 地址公式:存储区代号 + (地址 + 1) 如下表所示:
温馨提示:离散型也被称为输入线圈,因此线圈就称为输出线圈以此区分两者。
长地址模型:

但是这么多的地址,现实中我们根本用不完,所以就有了短地址模型 :

二、协议概述

简而言之,Modbus 协议是一种单主/多从的通信协议,其特点是在同一时间总线上只能 有一个主设备,但可以有一个或者多个(最多 247 个)从设备。Modbus 通信总是由主设备发 起,当从设备没有收到来自主设备的请求时,从设备不会主动发送数据。从设备之间不能相 互通信,主设备只能同时启动一个 Modbus 访回事务处理。 主设备可以采用两种方式向从 设备发送 Modbus 请求报文,即主设备可以对指定的单个从设备或者线路上所有的从设备 发送请求报文,而从设备只能在被被动接收请求报文后给出响应报文,即应答。这两种模 式分别如下图所示:

它和IIC协议一样都是多从,但是IIC只能和单一丛机联系,但是 Modbus 不一样,他有单播模式和广播模式。

单播模式:

单播模式。主设备仅仅 寻址单个从设备 ,从设备接收并处理请求后,向主设备 返回一个响应报文,即应答 。在这种模式下,一个 Modbus 事务处理包含两个报文:一个是主设备的请求报文,另一个是从设备的响应报文。
每个从设备必须有唯一的地址 (地址范围为 1~247) ,这样才能区别于其它从设备,从而可以独立被寻址,同时主设备不占用地址。

广播模式:

广播模式。此种模式下,主设备可以向所有从设备发送请求指令,而从设备在接收到广播指令后仅进行相关指令的事务处理,而不要求返回应答。因此广播模式下,请求指令必须是 Modbus 标准功能中的写指令。
根据 Modbus 标准协议的要求,所有从设备必须接收广播模式下的写指令,且地址 0 被保留,用来识别广播通信

Modbus协议说明: 

Modbus诞生于1979年 莫迪康公司 后来被施耐德电气公司收购。Modbus提供通用语言用于彼此通信的设备和设备。
Modbus已经成为工业领域通信协议的业界标准,并且现在是工业电子设备之间常用的连接方式。Modbus作为目前工业领域应用最广泛的协议

最简单的说,Modbus就是一个总线通信协议,像IIC SPI这种,但是他不依赖于硬件总线

Modbus之所以使用广泛,是有他的优点的

  • Modbus协议标准开放、公开发表且无版权要求
  • Modbus协议支持多种电气接口,包括RS232、RS485、TCP/IP等,还可以在各种介质上传输,如双绞线、光纤、红外、无线等
  • Modbus协议消息帧格式简单、紧凑、通俗易懂。用户理解和使用简单,厂商容易开发和集成,方便形成工业控制网络



 

三、使用串口的Modbus 报文帧

        一个报文就是一帧数据,一个数据帧就一个报文: 指的是一串完整的指令数据,本质就是一串数据。

        Modbus 报文是指主机发送给从机的一帧数据,其中包含着从机的地址,主机想执行的操作,校验码等内容

Modbus 使用串口中一共有两种模式:Modbus ASCII 模式和Modbus RTU 模式,常用的就是Modbus RTU 模式Modbus ASCII 模式了解一下即可!

 3.1、Modbus ASCII 模式

        当控制器设为在 Modbus 网络上以 ASCII 模式通信时,在消息中每个 8 位(b)字节都将作 为两个 ASCII 字符发送。这种方式的主要优点是字符发送的时间可隔可达到 1 秒且不产生 错误。
        在 ASCII 模式下,消息 以冒号(:)字符(ASCII 码为 0x3A) 开始, 以回车换行奇结束 (ASCII 码为 0x0D、0x0A) 。消息的其他字段(域)可以使用的传输字符是十六进制的 0···9、 A··· F。处于网络上的 Modbus 设备不断侦测 :”字符,当接收到一个冒号时,每个设备进 入解码阶段,并解码下一个字段(地址域)以判断是否是发给自己的。消息帧中的字符间发送 的时间间隔最长不能超过 1 秒,否则接收设备将认为发生传输错误。

需要注意的是,在消息中的每个字节都作为两个ASCII字符发送

十六进制的0-F 分别对应ASCII字符的0…9,A…F,也就是0x30~0x3A 0x41~0x46

 3.2、Modbus RTU 模式

Modbus 协议 RTU 报文格式如下所示:

 帧结构 = 从机地址 + 功能码 + 数据 + 校验

        从机地址: 每个从机都有唯一地址,占用一个字节,范围 0-255,其中有效范围是 1-247, 其中 255 是广播地址(广播就是对所有从机发送应答)
        功能码: 占用一个字节,功能码的意义就是,知道这个指令是干啥的,比如你可以查询从 机的数据,也可以修改从机的数据,所以不同功能码对应不同功能.
        数据: 根据功能码不同,有不同功能,比方说功能码是查询从机的数据,这里就是查询 数据的地址和查询字节数等。
        校验: 在数据传输过程中可能数据会发生错误,CRC 检验检测接收的数据是否正确

3.3、功能码概要

Modbus 标准在协议中规定了以下 3 类 Modbus 功能码。

 公共功能码:

  1. 被明确定义的功能码;
  2. 保证唯一性;
  3. 由 Modbus 协会确认,并提供公开的文档;
  4. 可进行一致性测试;
  5. 包括协议定义的功能码和保留将来使用的功能码。
用户自定义功能码:
  1. 有两个用户自定义功能码区域,分别是 65~72 和 100~110;
  2. 用户自定义,无法保证唯一性。
保留功能码:
保留功能码因为历史遗留原因,某些公司的传统产品现行使用的功能码不作为公共使用。
常见功能码:

 3.4、Modbus 报文分析

这里我们就主要分析RTU模式就好了,因为这个模式最常用!

读取保存寄存器报文解析:

我们点击Display查看接收的信息的格式: 如果忘记报文帧可以回头看看:帧结构 = 从机地址 + 功能码 + 数据 + 校验

其中数据包括起始地址+寄存器数量的高低位: 我们是从0开始一次性读取10个寄存器,所以起始地址高低位都为00,而A对应的就是10.

那么丛机回应的信息格式:

需要关注的是字节数,因为保存寄存器都是16位的,假如有N个寄存器,所以对应的字节数量就是2N个字节,这里有10个寄存器,所以就会有20个字节,HEX14对应的就是DEC的20。

后面的就是每个寄存器的高低位和CRC校验位了。

温馨提示:如果是线圈,每个寄存器都是一位,所以答应报文中的字节数需要将寄存器数N/8,然后如果有余数家需要+1.

例:有9个线圈寄存器,9/8=1......1,所以需要+1,所以就需要两个字节。

四、什么是RS-485 RS-232?

我们在看Modbus的时候,经常会看到485串口,232串口,这些是什么呢?

RS232,RS485是一种电平标准

数据在通信双方之间传输,本质是传输物理的电平 比方说传输5V的电压 -1V的电压信号,这些物理信号在传输过程中会受到很多干扰,比方说你传输一个5V的电压,到了接收端可能就变成了4.8V,并且通信的双方高低电平的参考电压可能不同。

那么这个时候就需要一个电平标准,来判断多少V的电压是高电平 1,多少V的电压是低电平 0 这就诞生了 RS-485 RS-232

RS232:是电子工业协会(Electronic Industries Association,EIA) 制定的异步传输标准接口,同时对应着电平标准和通信协议(时序),其电平标准:+3V~+15V对应0,-3V~-15V对应1。

  • 全双工
  • 逻辑1:-15V–5V
  • 逻辑0:+3V–+15V

RS485:RS485是一种串口接口标准,为了长距离传输采用差分方式传输,传输的是差分信号,抗干扰能力比RS232强很多。两线压差为-2~-6V表示0,两线压差为+2~+6V表示1

  • 半双工
  • 逻辑1:+2V~+6V
  • 逻辑0: -2V~ -6V

注意485的电平指的是485-A和485-B两根传输线,两线间的电压差。而不是传输线上的电压

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/79587.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机总线系统入门:理解数据传输的核心

一、总线系统简介:计算机内部的交通网络 在计算机系统中,总线是指连接各个组件的一组共享信号线或传输通道,用于在系统内不同的硬件模块之间传递数据、地址、控制信号等信息。它类似于交通系统中的道路,帮助计算机各个部件&#…

《应用开发突围指南:敏捷开发的实战精髓》

如何在应用开发中精准且深入地应用敏捷开发方法呢?让我们一同深入探索。 敏捷开发,绝非仅仅是一种开发流程,更是一种蕴含深刻智慧的理念与思维方式。它与传统开发模式有着本质的区别,传统开发模式如同严谨的线性旅程,…

《高性能MySQL》第1讲:MySQL架构

MySQL是一个非常流行的关系型数据库管理系统,它的设计非常灵活,能够适应多种不同的应用场景。无论是Web应用、数据仓库,还是高可用性系统,MySQL都能胜任。为了更好地理解MySQL的工作原理,我们需要从它的架构入手。 1.1 MySQL逻辑架构 首先,我们来看一下MySQL的逻辑架构…

数据赋能(212)——质量管理——统一性原则

概述 数据统一性原则在数据管理的各个环节中都具有不可忽视的重要性。它确保了数据在不同部门、系统和时间点上的一致性和可比性,为企业的决策制定、业务分析、风险管理等提供了准确、可靠的数据支持。 原则定义 数据统一性原则:在数据的收集、处理、…

btrace1.0使用方法

记于 2022 年 6 月 24 日 btrace1.0使用方法 - Wesley’s Blog 注意:目前仅限于macos和linux使用 btrace/README.zh-CN.md at master bytedance/btrace GitHub btrace(又名 RheaTrace) 是一个基于 Systrace 实现的高性能 Android trace 工具,它支持在…

C++八股--5--设计模式--适配器模式,代理模式,观察者模式

3. 观察者模式(也叫做观察者-监听者模式,发布-订阅模式) 主要关注对象的一对多关系,也就是多个对象都依赖于一个对象,当该对象状态改变时,其余对象都能得到对应的通知 如:一组数据(数…

ArcGIS arcpy代码工具——根据属性结构表创建shape图层

系列文章目录 ArcGIS arcpy代码工具——关于工具使用的软件环境说明 ArcGIS arcpy代码工具——批量对MXD文件的页面布局设置修改 ArcGIS arcpy代码工具——数据驱动工具批量导出MXD文档并同步导出图片 ArcGIS arcpy代码工具——将要素属性表字段及要素截图插入word模板 ArcGIS…

机器视觉开发-打开摄像头

以下是使用Python和OpenCV打开摄像头的最简单实现: import cv2# 打开默认摄像头(通常是0) cap cv2.VideoCapture(0)# 检查摄像头是否成功打开 if not cap.isOpened():print("无法打开摄像头")exit()print("摄像头已打开 - 按…

(Go Gin)Gin学习笔记(三)数据解析和绑定:结构体分析,包括JSON解析、form解析、URL解析,区分绑定的Bind方法

1. 数据解析和绑定 bind或bindXXX函数(后文中我们统一都叫bind函数)的作用就是将请求体中的参数值绑定到对应的结构体上,以方便后续业务逻辑的处理 1.1 JSON数据解析和绑定 客户端传参,后端接收并解析到结构体 package mainim…

Kubernetes(k8s)学习笔记(四)--入门基本操作

本文通过kubernetes部署tomcat集群,来学习和掌握kubernetes的一些入门基本操作 前提条件 1.各个节点处于Ready状态; 2.配置好docker镜像库(否则会出现ImagePullBackOff等一些问题); 3.网络配置正常(否则即使应用发布没问题,浏…

【大模型面试每日一题】Day 7:为什么大模型训练选择 Adam 而非 SGD?Adam 的关键改进是什么?

【大模型面试每日一题】Day 7:为什么大模型训练选择 Adam 而非 SGD?Adam 的关键改进是什么? 📌 题目重现 🌟🌟 面试官:为什么大模型训练选择 Adam 而非 SGD?Adam 的关键改进是什么…

轻量级在线Excel预览工具

轻量级在线Excel预览工具 简介 在日常工作中,我们经常需要快速查看Excel文件的内容,但不一定总是需要打开完整的Excel软件。为了解决这个问题,我开发了一个轻量级的在线Excel预览工具,让您可以通过浏览器快速查看Excel文件内容。…

[Vue]props解耦传参

在 Vue 中,通过 props 传递路由参数(即 props 解耦)是一种将组件与路由参数解耦的推荐方式。这种方法能显著提升组件的独立性、复用性和可维护性。以下是详细解释: 一、什么是 props 解耦? props 解耦是指&#xff1a…

Trae 使用心得:从新手到上手

Trae 使用心得:从新手到上手 最近,我开始试用 Trae,一款新兴的 AI 开发工具。在使用过程中,我发现它与我之前用过的 Cursor 有些不同,也带来了一些新的体验。 初体验:操作的便利性 一开始,我…

游戏引擎学习第256天:XBox 控制器卡顿和修复 GL Blit 伽玛问题

回顾并为今天定下基调 今天的主要任务是让我们的性能分析工具正常工作,因为昨天已经完成了结构性工作。现在,剩下的工作大部分应该是调试和美化。性能分析工具现在应该已经基本可用了。昨天我们在这个方面取得了很大的进展。 接下来,我们将…

PVD中断检测掉电

文章目录 概述配置掉电擦写注意 概述 STM32 PVD功能具体可以检测到上电、掉电瞬间,其处理方式有中断响应及事件响应。掉电设置为上升沿触发,上电为下降沿触发 配置 1.开启PVD中断并设置其优先级 2.配置响应中断或事件的阈值电压 3.配置响应模式 生成…

快速掌握--cursor

Cursor - The AI Code Editor 官网下载安装 详细教程:cursor 下载安装使用(保姆教程)_cursor下载-CSDN博客 不知道为啥,第一次给我用的是繁体回答 然后改了一下询问方式 codebase就是告诉ai可以从整个项目中找答案&#xff0…

1993年地级市民国铁路开通数据(地级市工具变量)

1993年地级市民国铁路开通数据(地级市工具变量) 1、时间:1933年 2、指标:是否开通铁路 3、来源:《Z国铁道便览》 4、方法说明:参考田坤(2023)参考章元(2008&#xff…

AI优化SEO关键词实践路径

内容概要 随着人工智能技术深度渗透数字营销领域,SEO关键词优化正经历从人工经验驱动向算法智能决策的跃迁。本文聚焦AI技术在SEO关键词全生命周期管理中的应用框架,系统阐述智能算法如何通过海量数据挖掘潜在搜索需求、解析用户意图的语义关联性&#…

论微服务架构及其应用

试题四 论微服务架构及其应用 微服务提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通。在微服务架构中,每个服务…