Modbus TCP返回报文

embedded/2025/4/1 4:54:41/

请求报文

客户端发送的请求报文如下:

字段名称值(十六进制)说明
事务标识符0x0001客户端生成的事务标识符。
协议标识符0x0000固定值。
长度0x0006从单元标识符到报文结束的字节数。
单元标识符0x00固定值。
功能码0x03读取保持寄存器。
起始地址0x0000起始寄存器地址。
寄存器数量0x0002要读取的寄存器数量。

完整的请求报文为:0x0001 0x0000 0x0006 0x00 0x03 0x0000 0x0002

服务器响应报文

假设服务器成功读取了两个寄存器的数据,返回的报文格式如下:

字段名称长度(字节)说明
事务标识符2与请求报文中的事务标识符相同。
协议标识符2固定为0x0000。
长度2表示从单元标识符到报文结束的字节数。
单元标识符1与请求报文中的单元标识符相同。
功能码1与请求报文中的功能码相同。
数据字节计数1返回数据的字节数。
数据可变返回的寄存器数据。

假设读取的两个寄存器的值分别为0xAAAA和0xBBBB,返回的报文如下:

字段名称值(十六进制)说明
事务标识符0x0001与请求报文中的事务标识符相同。
协议标识符0x0000固定值。
长度0x0005从单元标识符到报文结束的字节数(1字节单元标识符 + 1字节功能码 + 1字节数据字节计数 + 4字节数据)。
单元标识符0x00与请求报文中的单元标识符相同。
功能码0x03与请求报文中的功能码相同。
数据字节计数0x04返回数据的字节数(2个寄存器,每个寄存器2字节)。
数据0xAAAA 0xBBBB返回的寄存器数据。

完整的响应报文为:0x0001 0x0000 0x0005 0x00 0x03 0x04 0xAAAA 0xBBBB

解释

  1. 事务标识符(0x0001):与请求报文中的事务标识符相同,用于匹配请求和响应。
  2. 协议标识符(0x0000):固定值,表示使用的是Modbus TCP协议。
  3. 长度(0x0005):从单元标识符到报文结束的字节数,包括单元标识符(1字节)、功能码(1字节)、数据字节计数(1字节)和数据(4字节)。
  4. 单元标识符(0x00):与请求报文中的单元标识符相同。
  5. 功能码(0x03):与请求报文中的功能码相同,表示读取保持寄存器。
  6. 数据字节计数(0x04):返回数据的字节数,表示返回了4个字节的数据(2个寄存器,每个寄存器2字节)。
  7. 数据(0xAAAA 0xBBBB):返回的寄存器数据,表示两个寄存器的值分别为0xAAAA和0xBBBB。

错误响应

如果服务器无法完成请求,例如寄存器地址无效或设备故障,服务器会返回一个错误响应报文。错误响应报文的格式如下:

字段名称长度(字节)说明
事务标识符2与请求报文中的事务标识符相同。
协议标识符2固定为0x0000。
长度2表示从单元标识符到报文结束的字节数。
单元标识符1与请求报文中的单元标识符相同。
功能码1请求的功能码的最高位设置为1,表示错误。
错误码1表示具体的错误类型。

假设请求的功能码为0x03,但服务器无法完成请求,返回的错误响应报文如下:

字段名称值(十六进制)说明
事务标识符0x0001与请求报文中的事务标识符相同。
协议标识符0x0000固定值。
长度0x0003从单元标识符到报文结束的字节数(1字节单元标识符 + 1字节功能码 + 1字节错误码)。
单元标识符0x00与请求报文中的单元标识符相同。
功能码0x83请求的功能码的最高位设置为1,表示错误。
错误码0x02表示具体的错误类型,例如0x02表示非法数据地址。

完整的错误响应报文为:0x0001 0x0000 0x0003 0x00 0x83 0x02

总结

  • 正常响应:返回请求的数据,包含事务标识符、协议标识符、长度、单元标识符、功能码、数据字节计数和数据。
  • 错误响应:返回错误信息,包含事务标识符、协议标识符、长度、单元标识符、功能码(最高位为1)和错误码。

通过这些报文格式,客户端可以清楚地了解服务器的响应情况。


http://www.ppmy.cn/embedded/177685.html

相关文章

Kotlin when 表达式完全指南:从基础到高级的12种实战用法

掌握 when 的灵活运用,告别繁琐的 if-else 链 以下是 Kotlin 中 when 表达式的 12种核心用法 的全面总结,涵盖基础到高级场景,并附带实用示例: 一、基础用法 1. 替代 Java 的 switch-case when (x) {1 -> println("一&qu…

使用 Qt 处理 JSON 数据:从入门到精通

目录 什么是 JSON? 使用 Qt 处理 JSON 数据 生成 JSON 数据 示例代码 代码解释 解析 JSON 数据 示例代码 代码解释 总结 随着现代应用程序对数据交换需求的不断增加,JSON(JavaScript Object Notation)作为一种轻量级的数…

ai画图comfyUI lora风格特化。

基础功能下,单一lora。lora是对模型小规模特训,需要单独下载,放在lora文件夹。先直接运行,生成的类似娃娃手办图。然后,删掉这个lora节点,如果要添加就在空白处双击或右键添加节点,搜索lora&…

每日算法-250328

记录今天学习和解决的LeetCode算法题。 92. 反转链表 II 题目 思路 本题要求反转链表中从 left 到 right 位置的节点。我们可以采用 头插法 的思路来反转指定区间的链表。 具体来说,我们首先定位到 left 位置节点的前一个节点 prev。然后,从 left 位置…

基于python的租房数据分析系统(爬虫爬取真实数据)

项目介绍 本租房数据分析系统具备创新爬虫功能,能从安居客实时抓取房屋信息,同时提供全面的用户管理、个人中心服务。系统支持房屋信息的新增、修改、删除、查询及用户评论,以及租房数据的全面管理分析。此外,房屋资讯管理和轮播图…

微信小程序报错:600001 ERR_CERT_AUTHORITY_INVALID 的问题排查及解决

一、问题描述 最近有小伙伴私信我排查一个微信小程序的问题: 在真机上测试请求https://xxx.yyyy.com:8091域名接口的时候遇到了600001的错误,而请求https://xxx.yyyy.com域名接口的时候却正常。 request:fail errcode:-202 cronet error code:-202 err…

AI玩具迎来爆发式增长,IoT行业如何抓住机遇?

最近这两年,AI技术的迅猛发展,对整个社会产生了深远影响。各行各业都在经历AI所带来的变革。很多的产品,正在加速融入AI元素。 玩具产业及其产品也不例外。想必大家已经注意到相关新闻,许多制造商正积极将AI大模型技术与传统玩具相…

第P9周:YOLOv5-Backbone模块实现

🍨 本文为🔗365天深度学习训练营中的学习记录博客 🍖 原作者:K同学啊 Backbone 模块主要用于提取图像的多层级特征,采用 CSP 结构优化计算效率,并结合多尺度特征提取机制,提高目标检测的准确性…