ModBus总线协议

news2025/7/23 8:17:59

一、知识点

1. 什么是Modbus协议?

        Modbus 是一种工业通信协议,最早由 Modicon 公司在1979年提出,目的是用于 PLC(可编程逻辑控制器)之间的数据通信。它是主从式通信,即一个主机(主设备)控制一个或多个从机(从设备)。

        它常用于 RS-232、RS-485 串口通信,也可以用于 TCP/IP 网络通信(叫做 Modbus TCP)。

2. 核心特征

特征项内容
通信结构主从式(Master/Slave)
通信方式请求-响应(Request-Response)
通信介质串口(Modbus RTU/ASCII)或以太网(Modbus TCP)
编码格式RTU(二进制),ASCII(文本),TCP(基于网络)
最大从设备通常为247个

3. 常见的几种 Modbus 协议类型

  • Modbus RTU

    • 使用二进制格式传输

    • 帧紧凑,效率高

    • 常用于 RS-485

  • Modbus ASCII

    • 使用 ASCII 文本格式传输

    • 更易调试,但效率低

    • 常用于 RS-232

  • Modbus TCP

    • 基于以太网,使用 TCP/IP 协议栈

    • 没有 CRC 校验(TCP 自带校验)

4. Modbus RTU 数据帧结构 

字段说明
从机地址(1字节)目标设备地址,0x01 ~ 0xF7,总共:1~247
功能码(1字节)表示请求类型(如读取、写入等)
数据(N字节)请求的具体数据(如寄存器地址、数量、值)
CRC 校验(2字节)校验数据正确性,CRC_L   CRC_H

(1)地址域:主站要访问的从站地址,其范围 0~247

  • 地址范围是 0~247(即十进制 0x00~0xF7),最大支持 247 个从站

  • 地址 0 是一个特殊广播地址(所有从站接收但不应应答)。

(2)功能码:主站想对从站执行的操作

  • 功能码表示主站具体请求什么操作,如“读取保持寄存器(0x03)”“写单个线圈(0x05)”等。

  • 每种功能码都对应 特定的数据区。

功能码操作数据区名称地址前缀
01读线圈(输出位)Coils0xxxx
02读离散输入位Discrete Inputs1xxxx
03读保持寄存器Holding Registers4xxxx
04读输入寄存器Input Registers3xxxx
05写单个线圈Coils0xxxx
06写单个保持寄存器Holding Registers4xxxx
0F(15)写多个线圈Coils0xxxx
10(16)写多个保持寄存器Holding Registers4xxxx

(3)数据字段(Data):包含具体的操作内容

操作类型数据字段内容
读操作起始地址(2字节) + 数据数量(2字节)
写单个起始地址(2字节) + 要写的数据(2字节)
写多个起始地址 + 数据数量 + 字节数 + 实际数据

(4)差错校验:确保数据传输正确

        为了保证数据传输的正确性,Modbus协议会在数据帧最后面加上两个字节的差错校验。

二、传输示例

示例一:主机请求读取从机0x01的保持寄存器1

  • 从机地址:0x01

  • 功能码:0x03

  • 寄存器地址:0x0000(Modbus地址 40001 -> 实际为0)

  • 寄存器数量:0x0001

  • CRC:自动计算

→ 十六进制完整帧为:01 03 00 00 00 01 CRC_L CRC_H

示例二:主站请求读取从站 0x03 的输入寄存器9

  • 从站地址0x03

  • 功能码0x04(读取输入寄存器)

  • 寄存器起始地址0x0008(Modbus地址 40009 → 实际地址为 8)

  • 寄存器数量0x0001(读取 1 个寄存器)

  • CRC校验0xB03B(低字节在前)

→ 十六进制完整帧为:
03 04 00 08 00 01 B0 3B

   从机接收后的响应 。响应帧(从站 → 主站)

  • 从站地址0x03

  • 功能码0x04(读取输入寄存器)

  • 字节数0x02(表示读取了 1 个寄存器 = 2 字节)

  • 寄存器值0x000A(实际读取到的寄存器数据,十进制为 10)

  • CRC校验0x40F7(低字节在前)

→ 十六进制完整帧为:
03 04 02 00 0A 40 F7

示例三:主站向从站 0x03 的保持寄存器地址 0x0001 开始写入 2 个寄存器(共 4 字节)。请求帧(主站→ 从站)

  • 从站地址0x03

  • 功能码0x10(写多个保持寄存器)

  • 起始地址0x0001(Modbus地址 40002 → 实际地址为 1)

  • 寄存器数量0x0002(写入 2 个保持寄存器 = 4 字节)

  • 字节数0x04(后续数据长度,共 4 字节)

  • 写入数据

    • 第一个寄存器数据:0x000A

    • 第二个寄存器数据:0x0102

  • CRC校验0x9988(低字节在前)

→ 十六进制完整帧为:
03 10 00 01 00 02 04 00 0A 01 02 99 88

 从机接收后的响应 。响应帧(从站 → 主站)

  • 从站地址0x03

  • 功能码0x10(写多个保持寄存器)

  • 起始地址0x0001(原样返回主站请求的起始地址)

  • 寄存器数量0x0002(原样返回主站请求写入的寄存器数量)

  • CRC校验0x11EA(低字节在前)

→ 十六进制完整帧为:
03 10 00 01 00 02 11 EA

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

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

相关文章

【计算机网络】非阻塞IO——poll实现多路转接

🔥个人主页🔥:孤寂大仙V 🌈收录专栏🌈:计算机网络 🌹往期回顾🌹:【计算机网络】非阻塞IO——select实现多路转接 🔖流水不争,争的是滔滔不息 一、…

DAX权威指南8:DAX引擎与存储优化

文章目录 十七、DAX引擎17.1 DAX 引擎的体系结构17.1.1 表格模型的双引擎架构17.1.2 存储引擎的三种模式17.1.2.1 VertiPaq引擎17.1.2.2 DirectQuery 引擎17.1.2.3 对比与最佳实践 17.1.3 数据刷新 17.2 理解 VertiPaq 存储引擎17.2.1 列式数据库17.2.2 VertiPaq 压缩17.2.2.1 …

智慧货运飞船多维度可视化管控系统

图扑搭建智慧货运飞船可视化系统,借数字孪生技术,高精度复刻货运飞船外观、结构与运行场景。整合多维度数据,实时呈现飞行状态、设备参数等信息,助力直观洞察货运飞船运行逻辑,为航天运维、任务推演及决策提供数字化支…

电脑开不了机,主板显示67码解决过程

文章目录 现象分析内存条问题BIOS设置问题其它问题 解决清理内存条金手指所需工具操作步骤注意事项 电脑在运行过程中,显示内存不足,重启电脑却无法启动。 现象 System Initialization 主板风扇是转的,也有灯光显示,插上屏幕&am…

自托管图书搜索引擎Bookologia

简介 什么是 Bookologia ? Bookologia 是一个专门的书籍搜索引擎,可以在几秒钟内找到任何书籍。它是开源的,可以轻松自托管在 Docker 上,为用户提供一个简单而高效的书籍查找体验。 主要特点 简洁的用户界面:界面设计…

前端flex、grid布局

flex布局 弹性布局是指通过调整其内元素的宽高,从而在任何的显示设备上实现对可用显示空间最佳填充的能力。弹性容器扩展其内元素来填充可用空间,或将其收缩来避免溢出 简单来说,弹性盒子模型,是为了你的网页可以在不同分辨率设…

Maven相关问题:jna版本与ES冲突 + aop失效

文章目录 1、背景2、解决3、一点思考4、环境升级导致AOP失效5、okhttp Bean找不到6、总结 记录一些Maven依赖相关的思考 1、背景 做一个监控指标收集&#xff0c;用一下jna依赖&#xff1a; <dependency><groupId>net.java.dev.jna</groupId><artifact…

Tomcat全方位监控实施方案指南

#作者&#xff1a;程宏斌 文章目录 一&#xff0e;二进制部署1、安装包信息2、新建配置文件2.1 配置config.yaml文件2.2 上传jar包 3、修改配置3.1 备份3.2 修改bin目录下的startup.sh文件 4、重启tomcat5、访问测试 二&#xff0e;docker部署1、临时方案1.1、重新启动容器1.2…

To be or Not to be, That‘s a Token——论文阅读笔记——Beyond the 80/20 Rule和R2R

本周又在同一方向上刷到两篇文章&#xff0c;可以说&#xff0c;……同学们确实卷啊&#xff0c;要不卷卷开放场域的推理呢&#xff1f; 这两篇都在讲&#xff1a;如何巧妙的利用带有分支能力的token来提高推理性能或效率的。 第一篇叫 Beyond the 80/20 Rule: High-Entropy Mi…

《UE5_C++多人TPS完整教程》学习笔记37 ——《P38 变量复制(Variable Replication)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P38 变量复制&#xff08;Variable Replication&#xff09;》 的学习笔记&#xff0c;该系列教学视频为计算机工程师、程序员、游戏开发者、作家&#xff08;Engineer, Programmer, Game Developer, Author&#xff09…

AWS API Gateway配置日志

问题 访问API Gateway接口出现了403问题&#xff0c;具体报错如下&#xff1a; {"message":"Missing Authentication Token"}需要配置AWS API Gateway日志&#xff0c;看请求过程是什么样子的。 API Gateway 先找到API Gateway的的日志角色&#xff0c…

Towards Open World Object Detection概述(论文)

论文&#xff1a;https://arxiv.org/abs/2103.02603 代码&#xff1a;https://github.com/JosephKJ/OWOD Towards Open World Object Detection 迈向开放世界目标检测 Abstract 摘要 Humans have a natural instinct to identify unknown object instances in their environ…

轻松备份和恢复 Android 系统 | 4 种解决方案

我们通常会在 Android 手机上存储大量重要的个人数据&#xff0c;包括照片、视频、联系人、信息等等。如果您不想丢失宝贵的数据&#xff0c;可以备份 Android 数据。当您需要访问和使用这些数据时&#xff0c;可以将其恢复到 Android 设备。如果您想了解 Android 备份和恢复&a…

具备强大的数据处理和分析能力的智慧地产开源了

智慧地产视觉监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本。 AI是新形势下数…

【iSAQB软件架构】软件架构中构建块的视图:黑箱、灰箱和白箱及其交互机制

在软件架构描述中&#xff0c;黑箱视图&#xff08;Black-box&#xff09;、灰箱视图&#xff08;Gray-box&#xff09;和白箱视图&#xff08;White-box&#xff09; 是不同抽象层级的构建模块表示方式&#xff0c;用于满足不同受众和设计阶段的需求。以下是基于ISAQB标准的清…

如何在电脑上轻松访问 iPhone 文件

我需要将 iPhone 下载文件夹中的文件传输到 Windows 11 电脑上。我该怎么做&#xff1f;我可以在 Windows 11 上访问 iPhone 下载吗&#xff1f; 由于 iOS 和 Windows 系统之间的差异&#xff0c;在 PC 上访问 iPhone 文件似乎颇具挑战性。然而&#xff0c;只要使用正确的工具…

C语言字符数组输入输出方法大全(附带实例)

在 C语言中&#xff0c;字符数组是一种特殊的数组&#xff0c;用于存储和处理字符串。理解字符数组的输入和输出操作对于初学者来说至关重要&#xff0c;因为这是处理文本数据的基础。 字符数组的定义与初始化 在讨论输入输出之前&#xff0c;我们先来回顾一下字符数组的定义…

短视频矩阵SaaS系统:开源部署与核心功能架构指南

一、系统架构概述 短视频矩阵系统是基于SaaS&#xff08;软件即服务&#xff09;模式的多平台内容管理解决方案&#xff0c;通过开源技术实现账号聚合、智能创作、跨平台分发及数据闭环。系统采用微服务架构&#xff0c;支持高并发场景下的弹性扩展。 二、核心功能模块开发逻辑…

oss:上传图片到阿里云403 Forbidden

访问图片出现403Forbidden问题&#xff0c;我们可以直接登录oss账号&#xff0c;查看对应权限是否开通&#xff0c;是否存在跨域问题

4. 数据类型

4.1 数据类型分类 分类 数据类型 说明 数值类型 BIT(M) 位类型。M指定位数&#xff0c;默认值1&#xff0c;范围1 - 64 TINYINT [UNSIGNED] 带符号的范围 -128 ~ 127&#xff0c;无符号范围0 ~ 255&#xff0c;默认有符号 BOOL 使用0和1表示真和假 SMALLINT [UNSIGNED] 带符号是…