[杂谈]-快速了解Modbus协议

news2024/11/27 18:47:09

快速了解Modbus协议

文章目录

  • 快速了解Modbus协议
    • 1、为何 Modbus 如此受欢迎
    • 2、范围和数据速率
    • 3、逻辑电平
    • 4、层数
    • 5、网络与通讯
    • 6、数据帧格式
    • 7、数据类型
    • 8、服务器如何存储数据
    • 9、总结

​ Modbus 是一种流行的低速串行通信协议,广泛应用于自动化行业。 该协议由 Modicon(现已被施耐德电气收购)于 1979 年为其自己的可编程逻辑控制器开发。 该协议充当 PLC 和智能自动化设备之间的链接。 Modbus 现在是由 Modbus 组织维护的开放协议,自诞生以来就深受自动化工程师的欢迎。 该协议广泛用于工业监测和控制,特别是 PLC。

​ 串行协议基于主从配置,能够建立Modbus客户端与最多247个Modbus服务器的通信。 设备上的物理接口通过标准 RS-485 或 RS-232 端口来实现。 总线是两端均为 150 欧姆的屏蔽或非屏蔽双绞线电缆。 该电缆可以使用 9 针 D 型外壳、螺丝端子或 RJ-45 连接器轻松连接到设备。

​ Modbus 是使用菊花链或分接头的点对点或多点网络。 Modbus 网络中的整个通信均由主站(即 Modbus 客户端)控制和管理

​ Modbus 广泛用于将仪器仪表和控制设备与控制器或数据收集设备连接。 通常,数据收集设备或 Modbus 客户端是人机界面 (HMI) 或监控和数据采集 (SCADA) 系统内的监控计算机。 包括传感器模块、可编程逻辑控制器(PLC)或可编程自动化控制器(PAC)的远程终端单元(RTU)是Modbus服务器。 几乎所有商用 HMI、SCADA、OPC 服务器和数据采集软件都支持 Modbus,从而可以将 Modbus 兼容设备与任何工业自动化系统 (IAS) 或楼宇管理系统 (BMS) 轻松集成。

1、为何 Modbus 如此受欢迎

​ Modbus 被许多不同行业的制造商使用,并且因其简单性而变得相当流行。 它是一个开放标准; 因此,制造商可以将 RTU 版本的 Modbus 内置到他们的设备中,而无需支付任何使用费。 该协议甚至可以在 Arduino 等原型板上实现。 事实上,该通信协议可以在任何微控制器或计算机上轻松实现。 数据通信通过请求-响应方式进行,消息具有固定的帧格式。

​ Modbus 协议最初是作为应用层协议开发的,用于通过串行层传输数据,目前有三个版本:两个用于串行线路 — Modbus RTU 和 Modbus ASCII;两个用于串行线路 — Modbus RTU 和 Modbus ASCII;两个用于串行线路 — Modbus RTU 和 Modbus ASCII。 一种用于以太网(TCP/IP 和 UDP)——Modbus TCP。 虽然相对简单,该协议仍然能够进行消息检查,并且准确率超过 99%。 Modbus RTU 具有循环冗余校验和 (CRC),Modbus ASCII 具有用于错误检查的纵向冗余校验 (LRC)。

​ 尽管该协议诞生于 20 世纪 70 年代,但其实施只需要极少的 RAM 和内存资源。 在 20 世纪 70 年代,计算机技术以及嵌入式技术还没有今天那么先进,像 Modbus 这样的轻量级协议尤其有吸引力。 Modbus 的受欢迎程度从未下降。

2、范围和数据速率

Modbus 的标准数据速率为 9600 b/s 或 19.2 kb/s。 通常,19.2 kb/s 是默认速率。 数据速率可降低至4800 b/s、2400 b/s等。最大数据速率为115.2 kb/s。 在 9600 b/s 的标准数据速率下,Modbus 的最大范围可达 1000 米。 如果数据速率增加,范围就会减小。 龙头长度应始终小于 20 米。

3、逻辑电平

在 Modbus 上,二进制 0 由 +2 至 +6V 的电压电平表示。 二进制1由-2至-6V的电压电平表示。

4、层数

最初,Modbus 是在串行层上实现的单一协议。 当为以太网实现协议时,引入了应用数据单元,以便能够通过串行以及 TCP/IP 和 UDP 网络实现。 该协议现在分为两层——核心层和网络层。 核心层定义协议数据单元(PDU),而网络层定义应用数据单元(ADU)。 即使没有定义任何应用数据单元,PDU也可以通过UDP网络传输。

Modbus 的串行版本(即 Modbus RTU 和 Modbus ASCII)仅需要 PDU,而以太网版本(即 Modbus TCP)则需要 PDU 和 ADU。

5、网络与通讯

Modbus 是一种以主从配置实现的请求-响应协议。 有两种类型的设备 - Modbus 客户端和 Modbus 服务器。 Modbus 客户端是主站,通常是 SCADA 系统或 HMI 中的监控计算机。 Modbus 服务器是从站,通常是远程终端单元,例如传感器模块、PLC 和 PAC。

Modbus 的串行版本支持单个客户端与最多 247 个 Modbus 服务器的通信。 由于 RS-485 和 RS-232 端口都是 Modbus 实现的通用端口,如果使用 RS-232 端口,Modbus 服务器的最大数量可达 247 个,但如果使用 RS-485 端口,则最大 Modbus 服务器数量可达 247 个。 由于 RS-485 标准的实际限制,Modbus 服务器限制为 32 个。 可以有多个客户端和无限的服务器,因为 Modbus 的以太网版本具有用于互联网路由的附加 6 字节标头

整个数据通信由Modbus客户端通过请求-响应的方式控制。 在 Modbus 中,数据被传输为字节。 在 RTU 版本中,每个字节都编码在一个 11 位异步帧中,该帧由起始位、数据字节、偶校验和一个停止位组成。 在 ASCII 版本中,每个字节都编码在 10 位帧中,该帧由起始位、7 位数据、1 位偶数或奇数奇偶校验或无位(如果没有奇偶校验)以及 1 个停止位(如果使用奇偶校验)组成 2 停止位。

主设备/客户端和从设备/服务器之间传递的消息称为协议数据单元(PDU)。 PDU 由从机地址、功能代码(命令)、数据和校验和(CRC 或 LRC)组成。

主设备向由从设备地址标识的从设备之一发送请求。 从机地址为一字节长,可以是 0 到 255 之间的值。根据协议,从机地址 0 保留用于广播消息,标识从机设备的从机地址不能超过 247。功能代码也是一字节 长,它告诉被寻址的从设备必须采取什么样的操作。 1~255范围内的功能码有效,其中128~255保留用于异常响应。 该操作是读取或写入操作,请求中的数据借此提供执行该操作所需的附加信息。 例如,它可以指定从哪里开始读取以及必须读取多少数据。 RTU 版本采用CRC 进行错误检查,而ASCII 版本采用LRC 进行错误检查。

当主设备向寻址的从设备发出请求时,它会发回响应。 从机地址和功能代码在同一响应中回显。 数据包含主站请求的值。 如果在执行请求的操作时发生错误,则功能代码将被修改,并且数据包含描述错误的代码。 同样,分别根据 RTU 或 ASCII 帧的 CRC 或 LRC 用于确保消息或 PDU 的完整性。

6、数据帧格式

在 RTU 成帧中,每个字节代表 11 位帧中的两个 4 位十六进制字符。 PDU 由 1 字节长的从机地址、1 字节长的功能码、0 至 252 字节长的数据和 2 字节长的 CRC 组成。

在这里插入图片描述

在 ASCII 帧中,每个字节代表 10 位帧中的两个 ASCII 字符。 PDU 由 1 个字符长的起始字符、2 个字符长的从机地址、2 个字符长的功能代码、0 至 504 个字符长的数据、2 个字符长的 LRC 和 2 个字符长的结束字符组成。 起始字符始终为冒号 (😃 或 ASCII 3A 十六进制。 结束字符始终是带有换行符的回车符(ASCII 0D 和 0A 十六进制)。 RTU 中的每个 PDU 以及 ASCII 版本均由 28 位或 3.5 个字符分隔。

在这里插入图片描述

Modbus 的 RTU 和 ASCII 版本几乎相似,除了一些差异之外。 在 RTU 成帧中,字节以二进制形式表示,而在 ASCII 成帧中,字节以可读的 4 位 ASCII 字符表示。 ASCII 帧具有文本开始和文本结束字符,而在 RTU 帧中,PDU/消息之间的 28 位分隔被解释为检测帧的开始和结束。 由于 RTU 成帧使用较短的消息,因此它比 ASCII 版本更快。 ASCII 版本确实有一个优点,即消息中的字符之间最多可以间隔一秒。 如果间隔超过一秒,设备将视为传输错误。

TCP版本的Modbus中的PDU由2字节长的事务ID、2字节长的协议字段、2字节长的长度字段、1字节长的从机地址和1到252字节长的协议字段组成。 消息字段。

在这里插入图片描述

事务 ID 标识事务,协议始终设置为 0 以指示 Modbus。 长度表示后面的字节数。 接下来是 1 字节长的从机地址。 消息字段是类似于Modbus帧的RTU版本,由功能代码和数据组成。 消息字段的最大大小可以是 253 字节(即功能代码为 1 字节,数据如 RTU 帧中最大为 252 字节)。

在所有版本(RTU、ASCII 和 TCP)中,最低有效位首先发送。Modbus 兼容设备无法自动检测波特率,因此需要在总线的客户端和服务器端显式设置相同的波特率。 Modbus PDU 支持的格式只能发送数据,无法跨通信设备发送参数。

7、数据类型

Modbus 中有两种类型的数据——线圈( Coils)和寄存器(Registers)。 线圈是单个位,可以是 0(关)或 1(开)。 线圈可以是离散的输出线圈或离散的输入触点。 离散输入触点是物理离散输入的状态,即“开”或“关”。 离散输出线圈是物理离散输出信号的状态,即 ON 或 OFF。

这些寄存器是 16 位无符号寄存器,可以包含表示浮点数、ASCII 文本、队列或表的值。 寄存器本身仅存储 0 到 65535 范围内的正值,即 0x0000 到 0xFFFF 十六进制。 存储在寄存器中的 16 位数据可以被 Modbus 客户端解释为 16 位无符号整数、16 位有符号整数、2 字符 ASCII 字符串或离散 ON/OFF 值。 存储在寄存器中的 32 位数据可以被 Modbus 客户端解释为 32 位无符号整数、32 位有符号整数、4 个字符的 ASCII 字符串或 32 位双精度浮点数。

有两种类型的寄存器——模拟输入寄存器和模拟输出保持寄存器。 与离散输入触点(线圈)一样,输入寄存器将外部输入的状态存储为 0 到 65535(0x0000 和 0xFFFF)之间的值。 过去,输入寄存器通常用于存储模拟输入值的数字表示,这些模拟输入值可以是电压或电流信号。 输出保持寄存器用于存储设备上的数据。 现在,由于大多数Modbus兼容设备都不是输入/输出设备,因此输入寄存器也用于存储数据。

8、服务器如何存储数据

在传感器模块、PLC 或 PAC 等 Modbus 服务器上,数据被组织到四个表或数据库中。 有两个数据库用于存储离散的开/关值或线圈。 这些数据库分别存储离散输出线圈和离散输入触点。 然后,有两个存储数值的数据库或寄存器,分别存储模拟输入寄存器和模拟输出保持寄存器。

每个数据库可存储 9999 个值。 例如,离散输出线圈和离散输入触点的数据库可以分别存储 0000 到 270E 范围内的 9999 位。 模拟输入寄存器和模拟输出保持寄存器的数据库可存储 9999 个字,每个字的范围为 0000 至 270E,每个字为 16 位长。

离散量输出线圈和模拟量输出保持寄存器的数据库是读写型的,而离散量输入触点和模拟量输入寄存器的数据库是只读型的。

数据库中的值可以通过位置名称来访问。 离散量输出线圈、离散量输入触点、模拟量输入寄存器和模拟量输出保持寄存器的数据库位置分别为 19999、1000119999、30001~39999 和 40001~49999。 下表总结了 Modbus 服务器上四个数据库的结构和性质。

在这里插入图片描述

9、总结

Modbus 是一种广泛使用的工业通信协议,通常与 PLC 一起使用。 该协议具有三个版本:RTU、ASCII 和 Modbus。 RTU 版本是开放标准且速度最快,最常被制造商使用。 对于较短的消息,RTU 帧的 Modbus 消息可以以 100 毫秒的间隔更新。 几乎所有商业 HMI、SCADA、OPC 服务器和数据采集软件都支持 Modbus,因此可以轻松地将 Modbus 兼容设备集成到任何工业自动化系统或楼宇管理系统中。

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

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

相关文章

postgresql并行查询(高级特性)

######################## 并行查询 postgresql和Oracle一样支持并行查询的,比如select、update、delete大事无开启并行功能后,能够利用多核cpu,从而充分发挥硬件性能,提升大事物的处理效率。 pg在9.6的版本之前是不支持的并行查询的,从9.6开始支持并行查询,但是功能非常…

ISO/IEC标准之Mpeg-1到Mpeg21对应哪些ISO/IEC标准(三十八)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注:Android…

数电再回顾

最近,花了点时间回顾数字电路,放几张我觉得比较好的截图,记录学习过程。 附录: 计算机是如何保存1和0的 - 知乎 (zhihu.com) 只读存储器ROM || ROM实现逻辑函数 || 数电 - 知乎 (zhihu.com) ROM的组成原理 -解决方案-华强电子网…

Java 复习笔记 - 字符串篇

文章目录 一,API和API帮助文档(一)API(二)API帮助文档 二,String概述三,String构造方法代码实现和内存分析四,字符串的比较五,综合练习(一)用户登…

python实现某音自动登录+获取视频数据

前言 Dy这个东西想必大家都用过,而且还经常刷,今天就来用代码,获取它的视频数据 环境使用 Python 3.8 Pycharm 模块使用 requests selenium json re 一. 数据来源分析 1. 明确需求 明确采集网站以及数据内容 网址: https://www.dy.com/…

Midjourney学习(四)光源类型prompt

序号类别光线名称英文名称描述用途示例1光线质地硬光Hard Light直接照射在主题上,产生明显的阴影和高对比度。强调轮廓,增加照片的戏剧性2光线质地软光/柔光Soft Light光线经过散射或扩散,产生柔和的阴影和低对比度。平滑细节,适合…

sublime编辑latex 出现参考文献无法编译报错:citation “...” undefined

问题描述 使用sublime编译latex文件时,参考文献按照常规的方式放好,ctrl B 编译的时候,显示找不到参考文献,编译出的pdf文件也没有references: 但是把文件放到overleaf上就可以直接编译出来,说明是本地编…

基于阻塞队列的生产消费模型

目录 一、线程同步 1.生产消费模型(或生产者消费者模型) 2.认识同步 (1)生产消费模型中的同步 (2)生产者消费者模型的特点 二、条件变量 1.认识条件变量 2.条件变量的使用 3.代码改造 三、基于阻…

B092-人力资源项目-security

目录 springsecurity权限控制使用的必要性分析及它的概念介绍基于session的认证和授权流程介绍认证流程认证检查授权流程 代码认证流程小结认证授权流程Security中核心过滤器链security执行认证的详细流程图Security授权流程剩余见代码工程 springsecurity权限控制使用的必要性…

2、Nginx 安装

文章目录 2、Nginx 安装2.1 官网下载2.2 安装 nginx2.2.1 第一步2.2.2 第二步2.2.3 第三步,安装 nginx2.2.4 第四步,修改防火漆规则 【尚硅谷】尚硅谷Nginx教程由浅入深 志不强者智不达;言不信者行不果。 2、Nginx 安装 2.1 官网下载 nginx…

vim练级攻略(精简版)

vim推荐配置: curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh 0. 规定 Ctrl-λ 等价于 <C-λ> :command 等价于 :command <回车> n 等价于 数字 blank字符 等价于 空格&#xff0c;tab&am…

HuggingFace 简介

HuggingFace 简介 0. HuggingFace 简介1. HuggingFace 官网地址2. HuggingFace 标准研发流程3. HuggingFace 工具集4. 编码工具4.1 编码工具介绍4.2 使用编码工具 5. 数据集工具5.1 数据集工具介绍5.2 使用数据集工具 6. 评价指标工具6.1 评价指标工具介绍6.2 使用评价指标工具…

微信小程序 通过设置开发者工具编译模式 改变进入后的第一个page界面

在很多时候 我们小程序开发阶段&#xff0c;只需要写某个界面&#xff0c;嫌一级一级点进去太麻烦了 我们可以 打开开发者工具 选择自己正在开发的小程序 然后 上面选择编译模式(操作如下图) 然后 选择 添加编译模式 然后 弹出的配置栏中 重点是 启动页面 选择自己的page 然后…

友元(个人学习笔记黑马学习)

1、全局函数做友元 #include <iostream> using namespace std; #include <string>//建筑物类 class Building {//goodGay全局函数是 Building好朋友 可以访问Building中私有成员friend void goodGay(Building* building);public:Building() {m_SittingRoom "…

操作系统备考学习 day2 (1.3.2 - 1.6)

操作系统备考学习 day2 计算机系统概述操作系统运行环境中断和异常的概念系统调用 操作系统体系结构操作系统引导虚拟机 计算机系统概述 操作系统运行环境 中断和异常的概念 中断的作用 CPU上会运行两种程序&#xff0c;一种是操作系统内核程序&#xff0c;一种是应用程序。…

r 安装源码包 安装本地r包

总结一下手动安装R包 - 简书 (jianshu.com)https://www.jianshu.com/p/2a7a36414734 #BiocManager::install("simplifyEnrichment") #BiocManager::install("EnsDb.Hsapiens.v86")#下载包 之后 手动安装 #install.packages("~/datasets/EnsDb.Hsapien…

Grafana之魔法:揭秘数据可视化的艺术

在数据驱动的时代&#xff0c;如何有效地呈现和理解数据成为了每个组织和个人的核心任务。Grafana作为一个领先的开源数据可视化工具&#xff0c;为我们提供了强大的功能和灵活性。本文将深入探讨Grafana的魔法&#xff0c;以及它如何帮助我们更好地理解数据。 Grafana简介 G…

学习周报9.3

文章目录 前言文献阅读一摘要挑战基于时间序列的 GAN 分类 文献阅读二摘要介绍提出的模型:时间序列GAN (TimeGAN) 代码学习总结 前言 本周阅读两篇文献&#xff0c;文献一是一篇时序生成方面的综述&#xff0c;主要了解基于时间序列 的GAN主要分类以及时间序列GAN方面面临的一…

elasticsearch的索引库操作

索引库就类似数据库表&#xff0c;mapping映射就类似表的结构。我们要向es中存储数据&#xff0c;必须先创建“库”和“表”。 mapping映射属性 mapping是对索引库中文档的约束&#xff0c;常见的mapping属性包括&#xff1a; type&#xff1a;字段数据类型&#xff0c;常见的…

【个人博客系统网站】框架升级 · 工程目录 · 数据库设计

【JavaEE】进阶 个人博客系统&#xff08;1&#xff09; 文章目录 【JavaEE】进阶 个人博客系统&#xff08;1&#xff09;1. 使用Spring全家桶 MyBatis框架进行开发2. 页面2.1 登录页2.2 注册页2.3 详情页2.4 我的博客列表页3.5 所有人的博客列表页3.6 添加博客页3.7 修改文…