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

Modbus03功能码读取

Modbus 是一种应用层(OSI 模型第 7 层)的请求/应答协议,它位于 TCP/IP 或异步串行链路等底层协议之上。它的设计目标是让工业设备(如 PLC、传感器、执行器)之间能够简单、可靠地进行通信。

这里我们利用串口协议的03功能码进行连接

1、Modbus Slave设置从站地址

Modubus协议支持

1、Serial Port(串口协议)

2、Modbus TCP/IP

3、Moubus UDP/IP

4、Modbus RTU Over TCP/IP

5、Modbus RTU Over UDP/IP

五种协议

我们使用Serial Port 即串口协议

2、设置从站数据

Modbus协议将存储区域分为四个区域如上图所示:

根据上图我设置的是从站地址 Slave ID 为1,要测试的存储区为4区保持寄存器, 在4区起始数据地址为0,一共设置了10个数据。

数据类型对象类型访问方式物理量功能码 (举例)
0x 线圈 (Coils Status)单个比特读写数字量输出,开关01读, 05写单个, 15写多个
1x离散输入 (Discrete Inputs)单个比特只读数字量输入,按钮02读
3x输入寄存器 (Input Registers)16位字只读模拟量输入,传感器数据04读
4x保持寄存器 (Holding Registers)16位字读写模拟量输出,配置参数03读, 06写单个, 16写多个

3、设置主站地址参数(Modbus Poll)

这里的Slava ID是要连接从站地址的ID,我们上面设置从站地址为1

4、实现效果以及功能码可以如图所示

Modbus Poll 发送的数据是: 01 03 00 01 00 05 04 09

接接收的数据是: 01 03 0A 00 10 00 02 00 03 00 04 00 05 CF 24

Modbus Slave

接收到的数据是: 01 03 00 01 00 05 04 09

发送的数据是: 01 03 0A 00 10 00 02 00 03 00 04 00 05 CF 24

5、其他功能码详解

在Modbus Poll中我们可看到其他功能码:

这里由破站博主工控圈视频总结,我观看后截图如下:(便于回顾与复习)

AI概述:

一、核心概念与特点

  1. 主从架构 (Master-Slave)

    • 主站 (Master): 主动发起请求的设备,通常是上位机(如 SCADA 系统、HMI、PC 软件)。同一时间网络上只能有一个主站。

    • 从站 (Slave): 响应主站请求的设备,通常是终端设备(如温度传感器、电机控制器)。每个从站都有一个唯一的地址(1-247)。

  2. 简单明了: 协议格式简单,易于开发和部署,这是它经久不衰的重要原因。

  3. 开放标准: 协议规范是公开的,无需版权费用,促进了其广泛采用。

  4. 两种主要传输模式

    • Modbus RTU (Remote Terminal Unit): 基于二进制格式,通过串行通信(如 RS-232, RS-485)传输。紧凑、高效,是最常见的模式。

    • Modbus ASCII: 基于十六进制ASCII字符,可读性更好但效率低,现已较少使用。

    • Modbus TCP/IP: 基于以太网和TCP/IP协议栈。在二进制报文前加上一个 Modbus Application Protocol (MBAP) 报文头。

  5. 数据模型 (Data Model) Modbus 将数据组织在四个不同的“表”中,每个数据项都有一个从 0 开始的地址。

    数据类型对象类型访问方式物理量功能码 (举例)
    线圈 (Coils)单个比特读写数字量输出,开关01读, 05写单个, 15写多个
    离散输入 (Discrete Inputs)单个比特只读数字量输入,按钮02读
    输入寄存器 (Input Registers)16位字只读模拟量输入,传感器数据04读
    保持寄存器 (Holding Registers)16位字读写模拟量输出,配置参数03读, 06写单个, 16写多个

    注意: 这里的“地址”是协议地址,通常与设备内存的实际物理地址有一个映射关系,由设备制造商定义。


二、协议数据单元 (PDU)

PDU 是 Modbus 协议的核心,它独立于底层的传输网络。PDU 由两部分组成: PDU = 功能码 (Function Code) + 数据 (Data)

  • 功能码 (1字节): 指定服务器(从站)要执行的操作。高位为 1 表示异常响应。

    • 01: 读线圈

    • 03: 读保持寄存器

    • 05: 写单个线圈

    • 06: 写单个寄存器

    • 15 (0x0F): 写多个线圈

    • 16 (0x10): 写多个寄存器

  • 数据 (可变长度): 包含请求或响应的参数,如起始地址、数据数量、写入的具体值等。


三、报文格式详解

PDU 需要加上额外的地址和校验信息才能在实际网络中传输,这就形成了不同的报文帧。

1. Modbus RTU 帧格式
字段长度描述
从站地址1 字节目标从站的地址 (0-247)。0 是广播地址,从站不响应广播。
功能码1 字节指定要执行的操作。
数据N 字节请求或响应的参数,内容取决于功能码。
CRC 校验2 字节循环冗余校验,用于检测传输错误。校验范围包括从地址到数据区的所有字节。
  • 帧间隔: RTU 帧之间必须有至少 3.5 个字符时间的静默间隔,用于标识一帧的开始和结束。

示例:用功能码 03 (0x03) 读取从站地址 1 的保持寄存器

  • 请求:读取起始地址为 0x0000 的 2 个寄存器。

    • [从站地址] = 0x01

    • [功能码] = 0x03

    • [数据] = 0x00, 0x00, 0x00, 0x02 (起始地址高位、低位,数量高位、低位)

    • [CRC] = 计算 01 03 00 00 00 02 的 CRC 值 (假设为 0xC4 0x0B)

    • 完整请求帧 (十六进制)01 03 00 00 00 02 C4 0B

  • 正常响应:返回 2 个寄存器(4 字节)的值,分别为 0x0015 和 0x0100。

    • [从站地址] = 0x01

    • [功能码] = 0x03

    • [字节计数] = 0x04 (表示后面数据区有 4 个字节)

    • [数据] = 0x00, 0x15, 0x01, 0x00 (第一个寄存器的值,第二个寄存器的值)

    • [CRC] = 计算 01 03 04 00 15 01 00 的 CRC 值

    • 完整响应帧 (十六进制)01 03 04 00 15 01 00 [CRC]

  • 异常响应:如果地址无效。

    • [从站地址] = 0x01

    • [功能码] = 0x83 (0x03 + 0x80,表示异常)

    • [异常码] = 0x02 (表示非法数据地址)

    • [CRC] = 计算 01 83 02 的 CRC 值

    • 完整异常响应帧01 83 02 [CRC]

2. Modbus TCP/IP 帧格式

Modbus TCP 将 PDU 封装在 TCP 包中,用连接本身来管理帧的边界,因此不需要 CRC 和地址字段(IP地址和端口用于寻址)。它增加了一个 MBAP 头

字段长度描述
事务元标识符2 字节由主站生成,用于将请求和响应配对。
协议标识符2 字节0x00 0x00 表示 Modbus 协议。
长度2 字节表示后面还有多少个字节(单元标识符 + PDU)。
单元标识符1 字节用于标识串行链路或总线上的从站(相当于RTU的从站地址)。在TCP中常用于网关后面连接多个设备。
功能码1 字节同 RTU。
数据N 字节同 RTU。

示例:用功能码 03 (0x03) 读取单元标识符 1 的保持寄存器

  • 请求:读取起始地址为 0x0000 的 2 个寄存器。

    • [事务元] = 0x00 0x01 (任意值,响应会原样返回)

    • [协议] = 0x00 0x00

    • [长度] = 0x00 0x06 (后面有 6 个字节:单元ID 1 + PDU 5)

    • [单元ID] = 0x01

    • [PDU] = 0x03 00 00 00 02 (功能码 + 起始地址 + 寄存器数量)

    • 完整请求帧 (十六进制)00 01 00 00 00 06 01 03 00 00 00 02

  • 正常响应

    • [事务元] = 0x00 0x01 (与请求一致)

    • [协议] = 0x00 0x00

    • [长度] = 0x00 0x05 (后面有 5 个字节:单元ID 1 + PDU 4)

    • [单元ID] = 0x01

    • [PDU] = 0x03 04 00 15 01 00 (功能码 + 字节数 + 2个寄存器的数据)

    • 完整响应帧 (十六进制)00 01 00 00 00 05 01 03 04 00 15 01 00


四、总结与对比

特性Modbus RTU/ASCIIModbus TCP/IP
底层传输串行链路 (RS-485/RS-232)以太网 (TCP/IP)
地址1字节从站地址IP 地址 + 端口 (默认 502) + 单元标识符
帧定界时间间隔 (3.5字符)TCP 连接本身
错误检测CRC 校验依赖 TCP 的校验和,可选的CRC由应用层处理
效率高 (二进制,帧小)略低 (增加了MBAP头,但传输速度快)
应用场景工业现场总线,设备间短距离通信工厂级网络,远程监控,设备接入IT系统

五、实践建议

  1. 工具: 使用诸如 Modbus Poll (主站模拟)、Modbus Slave (从站模拟) 或开源的 qModMaster 等工具来测试和调试通信。

  2. 字节序: Modbus 规定寄存器中的数据是大端序 (Big-Endian),即高位字节在前。但多个寄存器组成32位浮点数或32位整数时,其顺序(字序)由设备制造商决定,常见的有 ABCD (大端) 和 CDAB (小端字交换) 等,需要查阅设备手册。

  3. 起始地址: 协议中定义的地址是从 0 开始的。但很多设备和软件使用从 1 开始的编号(如保持寄存器 40001)。40001 对应的协议地址就是 0。切记区分“协议地址”和“参考号”。

  4. 超时处理: 主站必须实现超时机制,如果在指定时间内未收到从站响应,应重发请求或报错。

http://www.dtcms.com/a/605944.html

相关文章:

  • 2025.11.12 力扣每日一题
  • wordpress 架站 电子书石家庄网站推广
  • 有没有哪个网站可以做LCM模组阜宁县住房与城乡建设局网站
  • 天硕SSD自主主控技术解析:如何实现工业级宽温域下的高可靠存储
  • 牛客周赛round117--------题解1
  • 锂电池 SOC 估计技术综述:成熟算法、新颖突破与车企应用实践
  • 玄机-第八章 内存马分析-java01-nacos
  • 教育平台oss做视频网站网站横幅怎么更换
  • C语言程序编译器 | 提升C语言编程效率的工具与技巧
  • 网站建设 类型泰州seo
  • 基于springboot的共享汽车管理系统开发与设计
  • 灵猴机器人操作
  • 广东的一起(17)做网站ppt做视频的模板下载网站有哪些内容
  • Python编程实战 - Python实用工具与库 - 操作PDF:pdfplumber、PyPDF2
  • PDF文档导出分页功能实现
  • 甘肃住房建设厅网站深圳公司排名前50
  • 【OpenCV + VS】视频流处理与图像处理:实时视频流与视频保存
  • 【C++】map_set 的封装
  • 效益成本原则网站建设如何在网站申请做co
  • 支付网站开发怎么做账微信wordpress
  • Windows下安装Linux子系统Ubuntu
  • 做外贸营销型网站瑞安市住房和城乡规划建设局网站
  • STM32外设学习-串口数据包笔记-(数据包的了解)
  • 3ds Max文件压缩攻略
  • 合肥网站建设q479185700棒有没有做生物科技相关的网站
  • 响应式网站内容布局吉林网站模板
  • 制约楼宇自动化控制系统应用的两大因素:需求匹配与落地能力
  • 反编译易语言 | 解析易语言反编译技术与实践应用
  • 大全!桥梁结构健康实时自动化监测预警——测量设备讲解+架构
  • 快站免费网站建设哪家好网站前面的logo标志