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

快速了解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.mzph.cn/news/66189.shtml

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

相关文章

力扣2. 两数相加

2. 两数相加 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个…

16 个前端安全知识

16 个前端安全知识 去年 security course 上的是 React,然后学了一些 一些 React 项目中可能存在的安全隐患,今年看了一下列表,正好看到了前端也有更新,所以就把这个补上了。 一个非常好学习各种安全隐患的机构是 https://owasp…

机器学习基础16-建立预测模型项目模板

机器学习是一项经验技能,经验越多越好。在项目建立的过程中,实 践是掌握机器学习的最佳手段。在实践过程中,通过实际操作加深对分类和回归问题的每一个步骤的理解,达到学习机器学习的目的 预测模型项目模板 不能只通过阅读来掌握…

机器学习的第一节基本概念的相关学习

目录 1.1 决策树的概念 1.2 KNN的概念 1.2.1KNN的基本原理 1.2.2 流程: 1.2.3 优缺点 1.3 深度学习 1.4 梯度下降 损失函数 1.5 特征与特征选择 特征选择的目的 1.6 python中dot函数总结 一维数组的点积: 二维数组(矩阵)的乘法&am…

深入了解Kubernetes(k8s):安装、使用和Java部署指南(持续更新中)

目录 Docker 和 k8s 简介1、kubernetes 组件及其联系1.1 Node1.2 Pod1.3 Service 2、安装docker3、单节点 kubernetes 和 KubeSphere 安装3.1 安装KubeKey3.2 安装 kubernetes 和 KubeSphere3.3 验证安装结果 4、集群版 kubernetes 和 KubeSphere 安装5、kubectl 常用命令6、资…

浅谈下cdn以及防盗链问题

目录 一、什么是cdn 二、使用cdn带来的好处 三、CDN工作原理 四、cdn使用场景 五、流媒体CDN之防盗链问题 一、什么是cdn CDN(Content Delivery Network)是一种分布式网络架构,用于提供高效的内容分发服务。CDN通过将内容缓存在离用户最…

Postgresql JSON对象和数组查询

文章目录 一. Postgresql 9.5以下版本1.1 简单查询(缺陷:数组必须指定下标,不推荐)1.1.1 模糊查询1.1.2 等值匹配1.1.3 时间搜索1.1.4 在列表1.1.5 包含 1.2 多层级JSONArray(推荐)1.2.1 模糊查询1.2.2 模糊查询 NOT1.2.3 等值匹配…

恢复数据的利器:易我数据恢复终身技术版v16.2.0.0

EaseUS Data Recovery Wizard为全球提供数据恢复方案,用于误删数据数据,电脑误删文件恢复,格式化硬盘数据恢复,手机U盘数据恢复等,RAID磁盘阵列数据恢复,分区丢失及其它未知原因丢失的数据恢复,简单易用轻松的搞定数据恢复。 特点描述 - 易我数据恢复中文便携版,无…

STM32f103入门(10)ADC模数转换器

ADC模数转换器 ADC简介AD单通道初始化代码编写第一步开启时钟第二步 RCCCLK分频 6分频 72M/612M第三步 配置GPIO 配置为AIN状态第四步,选择规则组的输入通道第五步 用结构体 初始化ADC第六步 对ADC进行校准编写获取电压函数初始化代码如下 Main函数编写 ADC简介 ADC…

植物根系基因组与数据分析

1.背景 这段内容主要是关于植物对干旱胁迫的反应,并介绍了生活在植物体内外以及根际的真菌和细菌的作用。然而,目前对这些真菌和细菌的稳定性了解甚少。作者通过调查微生物群落组成和微生物相关性的方法,对农业系统中真菌和细菌对干旱的抗性…

windows主机和Ubuntu虚拟机共享设置

参考文章 Ubuntu Linux 与主机共享文件夹 vim 修改文件出现错误 “ E45: ‘readonly’ option is set (add to override)“ vim退出时报错“E212: Cant open file for writing”的解决办法 VMware 安装后,安装Ubuntu 20.04一路顺利。 1,在VMware设置…

Qt应用开发(基础篇)——输入对话框 QInputDialog

一、前言 QInputDialog类继承于QDialog,是一个简单方便的对话框,用于从用户获取单个值。 对话框窗口 QDialog QInputDialog输入对话框带有一个文本标签、一个输入框和标准按钮。输入内容可以字符、数字和选项,文本标签用来告诉用户应该要输入…

LAMP介绍与配置

一.LAMP 1.1.LAMP架构的组成 CGI(通用网关接口)和FastCGI(快速公共网关接口)都是用于将Web服务器与后端应用程序(如PHP、Python等)进行交互的协议/接口。 特点 CGI FastCGI 运行方式 每个请求启动…

死信队列理解与使用

一、简介 在rabbitMQ中常用的交换机有三种,直连交换机、广播交换机、主题交换机; 直连交换机中队列与交换机需要约定好routingKey去进行绑定; 广播交换机并不需要routingKey绑定,只需队列与交换机绑定即可; 主题交换机最大的特…

​7.1 项目1 学生通讯录管理:文本文件增删改查(C++版本)(自顶向下设计+断点调试) (A)​

C自学精简教程 目录(必读) 作业目标: 这个作业中,你需要综合运用之前文章中的知识,来解决一个相对完整的应用程序。 作业描述: 1 在这个作业中你需要在文本文件中存储学生通讯录的信息,并在程序启动的时候加载这些…

python+requests实现接口自动化测试

这两天一直在找直接用python做接口自动化的方法,在网上也搜了一些博客参考,今天自己动手试了一下。 一、整体结构 上图是项目的目录结构,下面主要介绍下每个目录的作用。 Common:公共方法:主要放置公共的操作的类,比如数据库sql…

简单了解网络传输介质

目录 一、同轴电缆 二、双绞线 三、光纤 四、串口电缆 一、同轴电缆 10BASE前面的数字表示传输带宽为10M,由于带宽较低、现在已不再使用。 50Ω同轴电缆主要用来传送基带数字信号,因此也被称作为基带同轴电缆,在局域网中得到了广泛的应用…

Prompt GPT推荐社区

大家好,我是荷逸,这次给大家带来的是我日常学习Prompt社区推荐 Snack Prompt 访问地址:http://snackprompt.com Snack Prompt是一个采用的Prompts诱导填空式的社区,它提供了一种简单的prompt修改方式,你只需要输入关…

一款windows的终端神奇,类似mac的iTem2

终于找到了一款windows的终端神奇。类似mac的iTem2 来,上神器 cmder cmder是一款windows的命令行工具,就是我们的linux的终端,用起来和linux的命令一样。所以我们今天要做的是安装并配置cmder ![在这里插入图片描述](https://img-blog.csdni…

Python所有方向的学习路线图!!

学习路线图上面写的是某个方向建议学习和掌握的知识点汇总,举个例子,如果你要学习爬虫,那么你就去学Python爬虫学习路线图上面的知识点,这样学下来之后,你的知识体系是比较全面的,比起在网上找到什么就学什…