当前位置: 首页 > news >正文

Modbus协议(TCP)

        从今开始,会详细且陆续整理各类的通信协议,以便在需要且自身忘记的情况下,迅速复习。如有错误之处,还请批评指正。

一、Modbus协议的简述

        Modbus协议作为应用层协议,基于主从设备模型,主设备负责请求消息,从设备进行消息的应答。

传输支持

  • 物理层:支持RS-232、RS-485等串行链路及以太网(TCP/IP) 
  • 协议版本:包括Modbus RTU(二进制高效传输)、Modbus ASCII(可读性高)、Modbus TCP(基于以太网)

本文重点叙述TCP的方式。

二、工作机制

  • 请求-响应模式:主设备发送包含 功能码 和 数据地址 的请求帧,从设备返回操作结果或数据。例如:
    • 功能码03H:读取保持寄存器(如读取温度设定值) 
    • 功能码06H:写入单个保持寄存器(如调整电机转速) 
  • 数据帧结构
    • Modbus RTU帧:地址 + 功能码 + 数据 + CRC校验 
    • Modbus TCP帧:MBAP头(事务ID协议ID后续报文的字节数设备地址) + PDU(功能码 + 数据),注:事务ID,当需要进行并发请求的时候,就可使用不同的事务ID,避免匹配错误。 单元ID:多PLC通信的场景下,需要使用单元ID,以保证每条信息是专属的。

三、功能码

寄存器类型功能码操作类型数据单位典型应用
线圈寄存器01H位(Bit)监控继电器、电磁阀状态
05H单个位控制单个执行机构
0FH多个位批量控制执行机构
离散输入寄存器02H位(Bit)监测外部传感器信号
输入寄存器04H字(Word)获取传感器实时数据
保持寄存器03H字(Word)读取设备配置参数
06H单个字修改单个设备参数
10H多个字批量配置设备参数

四、寄存器类型

        这里简要叙述下寄存器的类型,不同的寄存器它所占的空间大小和读写权限都是不同的

寄存器类型功能码范围读写权限典型应用
线圈寄存器01H、05H、0FH读写控制开关量输出(如继电器) 
离散输入寄存器02H只读监测开关量输入(如急停信号) 
输入寄存器04H只读读取模拟量输入(如传感器电压) 
保持寄存器03H、06H、10H读写存储设备参数或实时数据(如PID参数)

五、异常码

在Modbus协议中,当从站设备(服务器)检测到请求错误时,会返回包含 异常功能码(Error Function Code)异常码(Error Code) 的响应报文。

  1. 异常功能码:原功能码的最高位被置为1(即功能码 + 0x80)。例如:
    • 原功能码 0x03(读保持寄存器)→ 异常功能码 0x83
    • 原功能码 0x10(写多个寄存器)→ 异常功能码 0x90
  2. 异常码:紧随异常功能码后,占1字节,表示具体错误类型(如非法地址、非法功能等)
  3. 以下列举出常用的异常码
异常码(十六进制)名称含义典型场景
0x01非法功能 (Illegal Function)请求的功能码不被支持或未实现。例如:向只读寄存器发送写操作。主站发送功能码 0x05(写线圈),但设备不支持该功能。 
0x02非法数据地址 (Illegal Data Address)寄存器地址超出设备允许范围。请求读取地址 40010,但设备仅支持 40001-40005。 
0x03非法数据值 (Illegal Data Value)写入的数据值不合法(如超出寄存器范围)。试图向16位寄存器写入 0x10000(最大值应为 0xFFFF)。 
0x04设备故障 (Slave Device Failure)从站设备内部错误(如硬件故障)。从站设备因电源波动导致处理失败。 
0x05确认 (Acknowledge)从站已接收请求但需要更长时间处理(需主站轮询完成状态)。主站请求写入大量数据,从站返回 0x05 表示正在处理。 
0x0B目标设备未响应 (Target Device Failed to Respond)网关无法将请求转发到目标设备。网络中断或目标设备离线。

六、举例

        最后,我们来看三段报文

报文1:00 01 00 00 00 06 01 06 00 00 00 01
  • MBAP头
    • Transaction ID: 00 01(事务ID为1)
    • Protocol ID: 00 00(Modbus协议)
    • Length: 00 06(后续报文长度为6字节)
    • Unit ID: 01(设备地址1)
  • PDU
    • 功能码: 06(写单个保持寄存器)
    • 寄存器地址: 00 00(地址0x0000)
    • 写入值: 00 01(值为1)
  • 作用:向地址 0x0000 的保持寄存器写入值 1
报文2:00 01 00 00 00 05 01 03 00 00 00 0A
  • MBAP头
    • Transaction ID: 00 01(事务ID为1)
    • Protocol ID: 00 00(Modbus协议)
    • Length: 00 05(后续报文长度为5字节)
    • Unit ID: 01(设备地址1)
  • PDU
    • 功能码: 03(读保持寄存器)
    • 寄存器起始地址: 00 00(地址0x0000)
    • 读取数量: 00 0A(读取10个寄存器)
  • 作用:从地址 0x0000 开始读取10个保持寄存器的值

报文3:00 01 00 00 00 17 01 03 14 00 00 00 01 00 02 00 03 00 04 00 05 00 06 00 07 00 08 00 09 00 0A

  • MBAP头
    • Transaction ID: 00 01(事务ID为1)
    • Protocol ID: 00 00(Modbus协议)
    • Length: 00 17(后续报文长度为23字节)
    • Unit ID: 01(设备地址1)
  • PDU
    • 功能码: 03(读保持寄存器)
    • 字节数: 14(数据总字节20)
    • 寄存器数据: 00 00 00 01 00 02 00 03 00 04 00 05 00 06 00 07 00 08 00 09 00 0A(10个寄存器的值)

下面来一段错误报文的机制:
        场景:主站尝试读取保持寄存器地址 400101(十进制地址100),但从站设备仅支持寄存器地址 400001-400050,导致地址越界错误

        请求报文:00 01 00 00 00 06 01 03 00 64 00 01

字段值(十六进制)说明
事务ID00 01事务标识符(自增值,用于匹配请求与响应)。
协议ID00 00Modbus TCP协议固定标识符(0x0000)。
长度00 06后续数据长度6字节(单元ID + PDU)。
单元ID01从站地址(本例为1)。
功能码03读保持寄存器操作。
起始地址00 64十进制地址100(对应Modbus地址400101)。
寄存器数量00 01读取1个寄存器。

        响应报文:00 01 00 00 00 03 01 83 02

字段值(十六进制)说明
事务ID00 01与请求报文的事务ID一致,用于匹配请求与响应。
协议ID00 00固定标识符(0x0000)。
长度00 03后续数据长度3字节(单元ID + 异常功能码 + 异常码)。
单元ID01从站地址(与请求一致)。
异常功能码83原功能码 03 + 0x80(表示异常响应)。
异常码02错误类型为 非法数据地址(从站不支持地址400101)。

相关文章:

Modbus协议(TCP)

从今开始,会详细且陆续整理各类的通信协议,以便在需要且自身忘记的情况下,迅速复习。如有错误之处,还请批评指正。 一、Modbus协议的简述 Modbus协议作为应用层协议,基于主从设备模型,主设备负责请求消息&…...

虚拟系统配置实验报告

一、实验拓扑图 二、实验配置 要求一: 虚拟系统: 设置管理: 进行信息配置 R1配置 虚拟系统配置 a: b: c: 测试 a–>b: 检测...

Agentic系统:负载均衡与Redis缓存优化

摘要 本文在前文Agentic系统的基础上,新增负载均衡(动态调整线程数以避免API限流)和缓存机制(使用Redis存储搜索结果,减少API调用)。通过这些优化,系统在高并发场景下更加稳定高效。代码完整可…...

28-文本左右对齐

给定一个单词数组 words 和一个长度 maxWidth ,重新排版单词,使其成为每行恰好有 maxWidth 个字符,且左右两端对齐的文本。 你应该使用 “贪心算法” 来放置给定的单词;也就是说,尽可能多地往每行中放置单词。必要时可…...

建筑兔零基础自学python记录39|实战词云可视化项目——章节分布10(上)

这次我们来制作《红楼梦》各章节的分布情况: 源代码: import pandas as pd import numpy as np import matplotlib.pyplot as pltdf_hlm pd.read_csv("hlm.txt", names["hlm_texts"]).dropna()df_hlm df_hlm[~df_hlm.hlm_texts.s…...

Impacket工具中的横向渗透利器及其使用场景对比详解

在渗透测试中,横向移动(Lateral Movement)是指攻击者在获得一个系统的控制权限后,通过网络进一步渗透到其他系统的过程。Impacket 是一款强大的渗透测试工具集,提供了多种实现横向渗透的脚本,常见的工具包括…...

基于java,SpringBoot和Vue的医院药房药品管理系统设计

摘要 随着医疗行业信息化的快速发展,高效、精准的医院药房药品管理对于提升医疗服务质量和医院运营效率至关重要。本文基于 Java 语言,采用 SpringBoot 框架和 Vue 框架进行医院药房药品管理系统的设计与研究。该系统以 SpringBoot 作为后端开发框架&am…...

MQ保证消息的顺序性

在消息队列(MQ)中保证消息的顺序性是一个常见的需求,尤其是在需要严格按顺序处理业务逻辑的场景(例如:订单创建 → 支付 → 发货)。 一、消息顺序性被破坏的原因 生产者异步/并行发送:消息可能…...

cmake、CMakeLists.txt、make、ninja

文章目录 一、概念0.cmake官网1.什么是cmake2.为什么使用cmake3.CMakeLists.txt 二、CMakeLists.txt语法:如何编写CMakeLists.txt,语法详解(0)语法基本原则(1)project关键字(2)set关键字(3)message关键字(4)add_executable关键字(5)add_subdirectory关键…...

数据结构与算法 计算机组成 八股

文章目录 数据结构与算法数组与链表的区别堆的操作红黑树定义及其原理 计算机组成int和uint的表示原码反码补码移码的定义?为什么用补码? 数据结构与算法 数组与链表的区别 堆的操作 红黑树定义及其原理 计算机组成 int和uint的表示 原码反码补码移…...

RoboBrain:从抽象到具体的机器人操作统一大脑模型

25年2月来自北大、北京智源、中科院自动化所等的论文“RoboBrain: A Unified Brain Model for Robotic Manipulation from Abstract to Concrete”。 目前的多模态大语言模型(MLLM) 缺少三项必备的机器人大脑能力:规划能力,将复杂…...

算法 之 前缀和 与 滑动窗口 与 背包问题 的差异(子数组之和为k问题)

文章目录 使用前缀和哈希表560.和为K的子数组525.连续数组2588.统计美丽子数组数目 子数组的定义是原来的数组当中连续的非空的序列,而我们的背包问题的选与不选的情况,对应的是这个非连续的情况,那么这种情况就要注意当然啦,对于线性的时间内…...

微电网协调控制器ACCU-100 分布式光伏 光储充一本化

安科瑞 华楠 18706163979 应用范围: 分布式光伏、微型风力发电、工商业储能、光储充一体化电站、微电网等领域。 主要功能: 数据采集:支持串口、以太网等多通道实时运行,满足各类风电与光伏逆变器、储能等 设备接入&#xff…...

IDEA入门及常用快捷键

IDEA是java常用的IDE。当run一个.java文件时,其实是经历了先编译为.class,再运行的过程。 在project文件夹中,out文件夹存储编译的.class文件,src文件夹存储.java代码文件。 设置自动导包 快捷键: 格式化快捷键&…...

electron打包结构了解

Electron 应用打包后的文件结构和内容取决于你使用的打包工具(如 electron-builder、electron-packager 等)以及目标操作系统(Windows、macOS、Linux)。以下是典型 Electron 应用打包后的文件结构和关键组成部分: 1. 基…...

03.06 QT

一、使用QSlider设计一个进度条&#xff0c;并让其通过线程自己动起来 程序代码&#xff1a; <1> Widget.h: #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QThread> #include "mythread.h"QT_BEGIN_NAMESPACE namespace Ui {…...

Python中的常用库

一、collections collections是 Python 标准库中的一个模块&#xff0c;提供了一些专门的容器数据类型&#xff0c;能够帮助你更高效地处理常见的数据结构操作。 1、Counter Counter 是一个字典的子类&#xff0c;用于计数可哈希对象。它会统计对象的出现次数&#xff0c;并…...

马尔科夫不等式和切比雪夫不等式

前言 本文隶属于专栏《机器学习数学通关指南》&#xff0c;该专栏为笔者原创&#xff0c;引用请注明来源&#xff0c;不足和错误之处请在评论区帮忙指出&#xff0c;谢谢&#xff01; 本专栏目录结构和参考文献请见《机器学习数学通关指南》 正文 统计概率的利剑&#xff1a;掌…...

护照阅读器在汽车客运站流程中的应用

在汽车客运站的日常运营里&#xff0c;如何高效服务旅客、保障出行安全是工作重点。护照阅读器作为精准身份识别的得力工具&#xff0c;在客运站的多个关键流程&#xff0c;如自助购票、柜台购票、安检以及行李托运中&#xff0c;发挥着不可小觑的作用&#xff0c;有力地提升了…...

CentOS 7 安装Nginx-1.26.3

无论安装啥工具、首先认准了就是官网。Nginx Nginx官网下载安装包 Windows下载&#xff1a; http://nginx.org/download/nginx-1.26.3.zipLinxu下载 wget http://nginx.org/download/nginx-1.26.3.tar.gzLinux安装Nginx-1.26.3 安装之前先安装Nginx依赖包、自行选择 yum -y i…...

从零开始理解反步控制:用李雅普诺夫函数一步步‘后退’设计控制器(附Simulink仿真模型)

非线性控制实战&#xff1a;用反步法构建稳定系统的可视化指南 在控制理论中&#xff0c;非线性系统总是以其复杂的动态特性让工程师们又爱又恨。传统的线性控制方法往往难以应对这种复杂性&#xff0c;而反步控制&#xff08;Backstepping Control&#xff09;作为一种系统化的…...

4个硬核特性解决开发者存储管理难题

4个硬核特性解决开发者存储管理难题 【免费下载链接】czkawka Multi functional app to find duplicates, empty folders, similar images etc. 项目地址: https://gitcode.com/GitHub_Trending/cz/czkawka 一、存储困境诊断&#xff1a;开发者面临的四大存储挑战 识别…...

终极指南:如何深度探索Alerter的10个隐藏高级功能

终极指南&#xff1a;如何深度探索Alerter的10个隐藏高级功能 【免费下载链接】Alerter Tapadoo/Alerter: 是一个简单易用的 Android 通知和进度条控件库。适合对 Android 开发、用户界面以及想要在 Android 应用中显示通知和进度条的开发者。 项目地址: https://gitcode.com…...

告别繁琐输入:基于SmartConfig与微信的ESP8266/ESP32一键配网实战

1. 为什么我们需要一键配网技术&#xff1f; 每次拿到新的智能设备&#xff0c;最头疼的就是怎么把它连上家里的Wi-Fi。传统的配网方式通常需要你在手机App里手动输入Wi-Fi名称和密码&#xff0c;这个过程不仅繁琐&#xff0c;还容易出错。想象一下&#xff0c;你要给10个智能灯…...

手把手教你用RK3576开发板驱动RC522读卡器:一个SPI实战项目的完整配置流程

手把手教你用RK3576开发板驱动RC522读卡器&#xff1a;一个SPI实战项目的完整配置流程 在嵌入式开发领域&#xff0c;能够独立完成一个从硬件连接到软件驱动的完整项目&#xff0c;是每个开发者成长的必经之路。RK3576作为一款性能强劲的开发板&#xff0c;搭配常见的RC522读卡…...

Spring Security实战:Bcrypt加密算法在用户密码存储中的正确使用姿势(附完整代码)

Spring Security实战&#xff1a;Bcrypt加密算法在用户密码存储中的正确使用姿势&#xff08;附完整代码&#xff09; 在当今数字化时代&#xff0c;用户密码安全已成为系统开发中最基础也最关键的一环。作为开发者&#xff0c;我们经常面临一个核心问题&#xff1a;如何在数据…...

AI赋能开发:让快马平台智能理解并生成产区标准图交互应用

AI赋能开发&#xff1a;让快马平台智能理解并生成产区标准图交互应用 最近在做一个农产品产区标准查询系统的项目&#xff0c;发现用传统方式开发这类需求特别费时。比如要处理用户自然语言查询、动态生成地图、实现智能推荐逻辑&#xff0c;光写基础代码就得花好几天。后来尝…...

路沿模板,乐山水泥路面模板,40公分路面钢模哪里有名

打路面模板&#xff1a;乐山水泥路面的优质之选在道路建设中&#xff0c;打路面模板起着至关重要的作用。它不仅关系到路面的成型质量&#xff0c;还影响着整个工程的效率和成本。乐山地区对于道路建设的需求不断增加&#xff0c;尤其是在水泥路面的铺设方面&#xff0c;40公分…...

PKSM终极指南:从第一世代到第八世代的宝可梦存档管理神器

PKSM终极指南&#xff1a;从第一世代到第八世代的宝可梦存档管理神器 【免费下载链接】PKSM Gen I to GenVIII save manager. 项目地址: https://gitcode.com/gh_mirrors/pk/PKSM PKSM是一款功能强大的免费开源宝可梦存档管理工具&#xff0c;支持从第一世代到第八世代的…...

专业安防怎么选?奥尔特云与普通摄像头核心性能对比

不少人认为安防摄像头只是“能录像、能看见”就够&#xff0c;选型无需太过考究&#xff0c;实则这是安防系统搭建的关键误区。安防系统的核心是精准感知、有效采集&#xff0c;而摄像头作为前端核心采集设备&#xff0c;是所有安防数据的源头。若源头的画面质量、感知能力不达…...