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

【modbus学习笔记】Modbus协议解析

 参考教程

 第二节 modbus协议解析(下)_哔哩哔哩_bilibili

1.Modbus协议格式

        MODBUS 协议定义了一个与基础通信层无关的简单协议数据单元(PDU)。 特 定总线或网络上 的MODBUS协议映射能够在应用数据单元(ADU)上引入一些附加域。

通用帧格式:

功能码分类:

公共功能码定义:

 2.Modbus_RTU协议要求

 由发送设备将Modbus 报文构造为带有已知起始和结束标记的帧。这使设备可以在报文的开始接收 新帧,并且知道何时报文结束。不完整的报文必须能够被检测到而错误标志必须作为结果被设置。 在 RTU 模式,报文帧由时长至少为3.5 个字符时间的空闲间隔区分。在后续的部分,这个时间区 间被称作t3.5。

 整个报文帧必须以连续的字符流发送。 如果两个字符之间的空闲间隔大于1.5 个字符时间,则报文帧被认为不完整应该被接收节点丢弃。

 3.使用工具捕获Modbus数据

configure virtual serial por driver :com口逻辑连接

modbus poll:模拟主机

modbus slave:模拟从机

 步骤1:使用cvspd进行com1和2建立虚拟连接

  步骤2:modbus poll连接com2,modbus slave连接com1,修改发送数据

 

   步骤3:点击TC右边的放大镜

可以看到发送的数据(以第一行数据为例子):

01 03 00 00 00 0A C5 CD

地址 功能码 数据 校验

4.功能码解释

1.功能码 0x03(连续读取寄存器)

查看功能码:

 主机发送: 01      03            0 0 00     00  0A                                        C5 CD

                 地址    功能码      数据内容(起始地址,读取个数)             校验

从寄存器00开始往后读10个 

主机接收: 01    03    14 00 00 00 01 00 02 00 03 00 04 00 05 00 06 00 07 00 08 00 09    CD  51

                地址  功能码            数据内容 (0x14表示20个数据,内容)                                  校验

 14是数据的个数,转换为10进制就是20,表示后面有20个数据

2.功能码 0x06(写单个寄存器)

 use function中选06

 Slave Id:1  Address:0   Value:6

主机发送: 01      06            00 00     00  06                                      09 C8

                 地址    功能码      数据内容 (地址 内容)                         校验

主机接收:01      06            00 00     00  06                                      09 C8

                地址    功能码      数据内容(地址 内容)                           校验

3.功能码 0x10(写多个寄存器)

主机发送: 01      10            00 00   00  01 02 00 00                         A6 50

                 地址    功能码      数据内容 (起始地址0000 寄存器数量0001 修改字节数02 内容)                         校验

主机接收:01      10            00 00   00  01                                      01 C9

                地址    功能码      数据内容(起始地址0000 寄存器数量0001)              校验

 

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

相关文章:

  • WPF学习(四)
  • 分布式集合通信--学习笔记
  • ComfyUI工作流:一键换背景体验不同场景
  • 如何搭建 OLAP 系统?OLAP与数据仓库有什么关系?
  • 2-2 PID-代码部分
  • Fiddler 中文版怎么配合 Postman 与 Wireshark 做多环境接口调试?
  • Hawk Insight|美国6月非农数据点评:情况远没有看上去那么好
  • 如何将FPGA设计验证效率提升1000倍以上(2)
  • 应急响应靶场——web2——知攻善防实验室
  • 大带宽服务器中冗余技术的功能
  • 新能源汽车功率级测试自动化方案:从理论到实践的革命性突破
  • Python常用医疗AI库以及案例解析(2025年版、上)
  • Nginx + ModSecurity + OWASP CRS + Lua + GEOIP2 构建传统WAF
  • 【ACP】阿里云云计算高级运维工程师--ACP
  • 服务器的IO性能怎么看?
  • 【机器学习3】机器学习(鸢尾花分类)项目核心流程与企业实践差异分析
  • 【问题记录】MySQL错误1140深度解析:聚合查询中的GROUP BY问题解决方案
  • PP-OCR:一款实用的超轻量级OCR系统
  • LINUX74 LAMP5
  • Poetry 在 Linux 和 Windows 系统中的安装步骤
  • 基于开源AI智能名片链动2+1模式S2B2C商城小程序的超级文化符号构建路径研究
  • WPF学习笔记(23)Window、Page与Frame、ViewBox
  • OneCode采用虚拟DOM结构实现服务端渲染的技术实践
  • 负载均衡--四层、七层负载均衡的区别
  • java中this. 和 this::的区别和用法
  • Apache RocketMQ进阶之路阅读笔记和疑问
  • RabbitMQ用法的6种核心模式全面解析
  • 论文解析:AutoMedPrompt框架的核心与实现示例
  • 【Qt】在windows环境下,配置QtCreator中的clang-format
  • P/Invoke 在默认封送(marshalling)规则下,常见托管 ⇄ 非托管类型的对应关系