一、MODBUS RTU简介

MODBUS RTU(Remote Terminal Unit)是一种基于串行通信(RS-485/RS-232)的工业标准协议,采用二进制数据格式,具有高效、可靠的特点,广泛应用于PLC、传感器、变频器等工业设备。

1. 主要特点

  • 通信方式:主从模式(Master/Slave)

  • 传输介质:RS-485(推荐)/ RS-232

  • 数据格式:二进制(HEX)

  • 校验方式:CRC-16(循环冗余校验)

  • 默认波特率:9600、19200、38400、115200等

  • 最大从站地址:247(地址范围1~247,0为广播地址)


二、MODBUS RTU数据帧格式

1. 基本帧结构

字段说明长度(字节)
从站地址设备地址(1~247)1
功能码操作类型(读/写等)1
数据域寄存器地址、数据等N
CRC校验循环冗余校验(低字节在前)2

2. 常用功能码

功能码名称操作
01读取线圈状态读取单个/多个DO(0x/1x)
02读取输入状态读取DI(1x)
03读取保持寄存器读取多个AO(4x)
04读取输入寄存器读取AI(3x)
05写单个线圈控制单个DO(0x)
06写单个寄存器写入单个AO(4x)
10(0x10)写多个寄存器写入多个AO(4x)

三、MODBUS RTU通信示例

1. 读取保持寄存器(功能码03)

请求帧(Master → Slave)

[从站地址][功能码][起始地址高8位][起始地址低8位][寄存器数量高8位][寄存器数量低8位][CRC低8位][CRC高8位]

示例:读取从站地址1的保持寄存器40001(0x0000),读取1个寄存器

01 03 00 00 00 01 84 0A

解析

  • 01:从站地址1

  • 03:功能码03(读保持寄存器)

  • 00 00:寄存器地址0x0000(对应40001)

  • 00 01:读取1个寄存器

  • 84 0A:CRC校验

响应帧(Slave → Master)

[从站地址][功能码][字节数][数据1高8位][数据1低8位][CRC低8位][CRC高8位]

示例:返回数据1234(0x04D2)

01 03 02 04 D2 B8 5F

解析

  • 01:从站地址1

  • 03:功能码03

  • 02:返回2字节数据

  • 04 D2:数据0x04D2(十进制1234)

  • B8 5F:CRC校验


四、MODBUS RTU调试方法

1. 使用串口调试助手

  1. 连接设备

    • 使用USB转485转换器连接PC和设备

    • 确保A/B线正确连接(A-A,B-B)

    • 终端电阻(120Ω)在长距离通信时需启用

  2. 参数设置

    • 波特率:9600(默认)

    • 数据位:8

    • 停止位:1

    • 校验位:无

  3. 发送MODBUS RTU指令

    • 输入16进制格式指令,如 01 03 00 00 00 01 84 0A

    • 点击发送,观察返回数据

  4. 解析响应

    • 检查返回的CRC是否正确

    • 解析数据域(如 04 D2 表示1234)

2. 使用MODBUS Poll(专业调试工具)

  • 可自动计算CRC

  • 支持多种功能码测试

  • 提供数据解析和图表显示


五、CRC-16校验计算

MODBUS RTU采用CRC-16校验,计算步骤如下(C语言示例):

c

#include <stdint.h>uint16_t crc16(uint8_t *data, uint16_t length) {uint16_t crc = 0xFFFF;for (uint16_t i = 0; i < length; i++) {crc ^= data[i];for (uint8_t j = 0; j < 8; j++) {if (crc & 0x0001) {crc >>= 1;crc ^= 0xA001;} else {crc >>= 1;}}}return crc;
}

示例
计算 01 03 00 00 00 01 的CRC:

c

uint8_t data[] = {0x01, 0x03, 0x00, 0x00, 0x00, 0x01};
uint16_t crc = crc16(data, 6);  // 返回 0x840A(低字节在前:0A 84)

六、常见问题与解决方案

问题可能原因解决方案
无响应1. 接线错误(A/B反接)
2. 波特率不匹配
3. 从站地址错误
检查接线、波特率、地址
CRC校验错误1. 数据损坏
2. 校验算法错误
检查通信线路,重新计算CRC
返回异常码(错误响应)1. 功能码不支持
2. 寄存器不存在
检查设备文档,确认功能码和寄存器范围

七、总结

  • MODBUS RTU是工业自动化中最常用的串行通信协议之一。

  • 数据帧包含 地址+功能码+数据+CRC,采用 16进制(HEX) 传输。

  • 调试时需确保 波特率、数据位、停止位、校验位 一致。

  • CRC校验 是确保数据完整性的关键。

掌握MODBUS RTU协议,可以高效调试PLC、传感器、变频器等设备,适用于工业自动化、SCADA系统、能源监控等场景。 🚀

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TCP/UDP协议原理和区别 笔记

从简单到难吧 区别就是TCP一般用于安全稳定的需求&#xff0c;UDP一般用于不那么需要完全数据的需求&#xff0c;比如说直播&#xff0c;视频等。 再然后就是TPC性能慢于UDP。 再然后我们看TCP的原理&#xff08;三次握手&#xff0c;数据传输&#xff0c;四次挥手&#xff0…

Jackson使用详解

JSON Jackson是java提供处理json数据序列化和反序列的工具类&#xff0c;在使用Jackson处理json前&#xff0c;我们得先掌握json。 JSON数据类型 类型示例说明字符串&#xff08;String&#xff09;"hello"双引号包裹&#xff0c;支持转义字符&#xff08;如 \n&a…

C语言| 指针变量的定义

C语言| 指针的优点-CSDN博客 * 表示“指向”&#xff0c;为了说明指针变量和它所指向的变量之间的联系。 int * i&#xff1b;//表示指针变量i里面存放的地址&#xff0c;所指向的存储单元里的【数据】。 【指针变量的定义】 C语言规定所有变量&#xff0c;在使用前必须先定…

Java 快速转 C# 教程

以下是一个针对 Java 开发者快速转向 C# 的简明教程&#xff0c;重点对比 Java 与 C# 的异同&#xff0c;帮助你快速上手。 项目结构&#xff1a; .sln &#xff1a;解决方案文件&#xff0c;管理多个项目之间的依赖关系。.csproj &#xff1a;项目文件&#xff0c;定义目标框…

EasyExcel详解

文章目录 一、easyExcel1.什么是easyExcel2.easyExcel示例demo3.easyExcel read的底层逻辑~~4.easyExcel write的底层逻辑~~ 二、FastExcel1.为什么更换为fastExcel2.fastExcel新功能 一、easyExcel 1.什么是easyExcel 内容摘自官方&#xff1a;Java解析、生成Excel比较有名的…

jvm安全点(三)openjdk17 c++源码垃圾回收之安全点结束,唤醒线程

1. VMThread::inner_execute() - 触发安全点​​ cpp 复制 void VMThread::inner_execute(VM_Operation* op) { if (op->evaluate_at_safepoint()) { SafepointSynchronize::begin(); // 进入安全点&#xff0c;阻塞所有线程 // ...执行GC等操作... SafepointSynchronize::…

102. 二叉树的层序遍历递归法:深度优先搜索的巧妙应用

二叉树的层序遍历是一种经典的遍历方式&#xff0c;它要求按层级逐层访问二叉树的节点。通常我们会使用队列来实现层序遍历&#xff0c;但递归法也是一种可行且有趣的思路。本文将深入探讨递归法解决二叉树层序遍历的核心难点&#xff0c;并结合代码和模拟过程进行详细讲解。 …

首个窗口级无人机配送VLN系统!中科院LogisticsVLN:基于MLLM实现精准投递

导读 随着智能物流需求日益增长&#xff0c;特别是“最后一公里”配送场景的精细化&#xff0c;传统地面机器人逐渐暴露出适应性差、精度不足等瓶颈。为此&#xff0c;本文提出了LogisticsVLN系统——一个基于多模态大语言模型的无人机视觉语言导航框架&#xff0c;专为窗户级别…

WPF Datagrid 数据加载和性能

这篇文章并非讨论 WPF Datagrid 的性能数据&#xff0c;而只是简单介绍一下为了使其性能良好&#xff0c;你需要注意哪些方面。我不太想使用性能分析器来展示实际数据&#xff0c;而是尽可能地使用了 Stopwatch 类。这篇文章不会深入探讨处理海量数据的技术&#xff0c;例如分页…

matlab求矩阵的逆、行列式、秩、转置

inv - 计算矩阵的逆 用途&#xff1a;计算一个可逆矩阵的逆矩阵。 D [1, 2; 3, 4]; % 定义一个2x2矩阵 D_inv inv(D); % 计算矩阵D的逆 disp(D_inv);det - 计算矩阵的行列式 用途&#xff1a;计算方阵的行列式。 E [1, 2; 3, 4]; determinant det(E); % 计算行列式 disp…

ridecore流水线解读

文章目录 流水线stage分属前后端PCpipelineIFIDDPDP 与 SW 中间没有latchSWCOM 源码地址 流水线stage分属前后端 IF -> ID -> DP -> SW -> EX -> COM分类阶段说明前端IF指令获取阶段。PC 使用分支预测器&#xff0c;访问指令存储器。典型前端操作。前端ID解码并…

【SpringBoot】关于MP使用中配置了数据库表前缀的问题

problem 使用MP时&#xff0c;在application.yml配置文件中配置了MP匹配数据库表中的表名时的前缀作了规定&#xff0c;如下&#xff1a; 那么当我运行时报错了错误&#xff0c;报错信息如下&#xff1a; 因为我数据库表的书类表名是book&#xff0c;MP在匹配时使用了表名前…

印度Rummy游戏支付通道申请策略:技巧类游戏的合规与创新

本文为印度支付申请科普文&#xff0c;自去年开始&#xff0c;印度Rummy类游戏申请印度支付都需要拥有AIGF的会员及产品证书。 如需要rummy可以通过AIGF审核的源。码&#xff0c;或咨询AIGF的相关内容&#xff0c;可以联。系老妙。 印度作为全球棋牌类游戏增长最快的市场之一&…

日志与策略模式

什么是设计模式 IT⾏业 ,为了让 菜鸡们不太拖⼤佬的后腿, 于是⼤佬们针对⼀些经典的常⻅的场景, 给定了⼀些对应的解决⽅案, 这个就是 设计模式 日志认识 计算机中的⽇志是记录系统和软件运⾏中发⽣事件的⽂件&#xff0c;主要作⽤是监控运⾏状态、记录异常信 息&#xff…

解锁Ubuntu高效部署!自动安装配置文件YAML全解析

我们之前介绍了两种Ubuntu系统的安装方式&#xff0c;分别对应桌面版&#xff08;准备搞OpenStack了&#xff0c;先装一台最新的Ubuntu 23.10&#xff09;和服务器版&#xff08;Ubuntu 22.04 LTS服务器版本安装演示&#xff09;。但对于有些用户&#xff0c;因为技术问题&…

关系代数和关系数据库语言(SQL)

阅读提示&#xff1a;本篇文章较长&#xff0c;建议从目录上选取想看的内容。代码上的话&#xff0c;我习惯用小写&#xff0c;如果看不习惯建议跳过。有问题欢迎讨论&#xff01;&#xff01;&#xff01; 一、基础概念 1.1数据库的概念 数据库(Database)是按照数据结构来组…

EXO 可以将 Mac M4 和 Mac Air 连接起来,并通过 Ollama 运行 DeepSeek 模型

EXO 可以将 Mac M4 和 Mac Air 连接起来&#xff0c;并通过 Ollama 运行 DeepSeek 模型。以下是具体实现方法&#xff1a; 1. EXO 的分布式计算能力 EXO 是一个支持 分布式 AI 计算 的开源框架&#xff0c;能够将多台 Mac 设备&#xff08;如 M4 和 Mac Air&#xff09;组合成…

区块链基本理解

文章目录 前言一、什么是分布式账本(DLT)二、什么是P2P网络?二、共识算法三、密码算法前言 区块链是由一个一个数据块组成的链条,按照时间顺序将数据块逐一链接,通过哈希指针链接,所有的数据块共同维护一份分布式账本(DLT),每个节点(可以理解为一个玩家,一台计算机)都拥…

Node.js中的洋葱模型

文章目录 前言 前言 Node.js中的洋葱模型是一种中间件执行机制&#xff0c;主要用于处理HTTP请求和响应的流程控制。该模型通过层层包裹的中间件结构&#xff0c;实现请求从外到内穿透、响应从内向外返回的顺序执行。以下从核心概念、实现原理、框架差异及实际应用等方面解析&…

UI-TARS Desktop:用自然语言操控电脑,AI 重新定义人机交互

在人工智能技术飞速发展的今天,从文本生成到图像识别,AI 的能力边界不断被打破。而字节跳动近期开源的 UI-TARS Desktop,则将这一技术推向了更复杂的交互场景——通过自然语言直接控制计算机界面,实现了图形用户界面(GUI)的智能化自动化。这款工具不仅降低了操作门槛,更…