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

STM32 Modbus通信学习笔记——通信流程

文章目录前言Modbus协议硬件连接基于RS485的Modbus通信Modbus拓扑结构Modbus通信流程Modbus主机帧结构传输方式RTU传输方式ASC传输方式数据帧格式ASCII 帧RTU 帧设备地址找谁功能码干什么校验CRC-16循环冗余错误校验LRC纵向冗余错误校验总结合集前言上一篇中介绍了不同硬件层协议传输逻辑0和逻辑1的方式也知道了软件层协议是需要依托这些硬件层的传输才能实现的。此篇将介绍Modbus的整个通信流程以及数据帧的结构。Modbus协议硬件连接根据之前的理论我们知道Modbus作为一种上层协议其底层其实可以是任意一种硬件层板级通信的协议UART、IIC、SPI亦或是现场级总线RS485、RS232、CAN总线这些来实现。基于RS485的Modbus通信笔者这里采用板级RS485进行描述学习过232和485的同学肯定都有一个感觉就是在编程的时候单片机端的配置其实和普通的UART串口配置没什么太大的区别以485为例通过观察下面的代码可以看见整个485初始化只是在串口初始化的基础上增加了一个接收和发送的模式控制。//模式控制#defineRS485_TX_ENPDout(7)//485模式控制.0,接收;1,发送.//如果想串口中断接收请不要注释以下宏定义#defineEN_USART2_RX1//0,不接收;1,接收.上一篇中我们知道单片机与485协议的设备通信时需要有硬件电路进行转换通过观察下面这个硬件电路可以看出在传统UART的TX、RX两个引脚上多了个RE这个脚就是用来控制发送和接收过程的。因为UART通信是一种全双工的通信模式通信双发都可以主动发送数据给对方而RS485采用的是半双工的通信方式也有全双工RS422采用主从通信同一时间只能主机发送或者只能从机发送不能主机和从机同时发送所以需要通过一个控制器来实现发送和接收控制。SP3485的2号引脚为低电平接收使能3号引脚为高电平发送使能。在这里我们将两个引脚连接在一起只需要通过一个信号RS485_RE即可控制收发过程当RS485_RE为高电平时SP3485 处于发送状态当RS485_RE为低电平时SP3485处于接收状态。RS485_RE状态1发送0接收Modbus拓扑结构Modbus采用主从通信结构即1.从机不能主动发送数据2.系统中只有一个主机。作为工业控制中一个通用的控制协议Modbus理论上可以有248个节点根据地址而定但是实际使用中只能挂接32个节点挂载设备数跟接口芯片的驱动能力有关不唯一这些节点之间只有唯一的一个主机其余都是从机连接示意图如下Modbus通信流程1.系统开机后所有设备都进入接收模式监听状态2.主机根据需求发送数据包到数据总线上发送完毕后释放总线重新进入接收模式3.从机检测总线状态并接收数据包4.从机判断主机发送数据包是否与自己的地址对应1地址对应就对数据包进行CRC校验CRC校验通过就开始处理主机发送的消息并按照约定的格式给主机打包数据并发送如果CRC校验不通过则说明数据丢失或者接收异常需要反馈给主机错误信息2地址不对应不对此数据包做处理也不需要回应主机5.如果主机发送的数据后超过设定的时间没有回应则说明从设备掉线需要检查地址是否正确以及线路连接是否正常。Modbus主机帧结构Modbus有两种传输方式一种是RTU另外一种是ASC。传输方式RTU传输方式RTU是以16进制形式或者说是2进制方式传输数据例如需要发送 “0x30”这个数据在485传输初始化是定义的是8位数据位一位停止位无校验位其发送格式如下ASC传输方式而ASC传输则是采用的ASCLL码表的形式例如需要传输30则实际发送的数据是‘3’和’0’的ascll码表的值及0x33和0x30。其传输形式如下通过上面两个例子可以看出ASCLL的传输方式明显比RTU的传输方式数据量大传输效率肯定不如RTU方式但是ASCLL得方式可以很方便调试调试时只需要将PC接入总线就可以实时获取数据包内容进而进行分析所以ASCLL的传输方式常用于调试用。而RTU则作为实际生产所用。数据帧格式ASCII 帧用 ASCII 模式 消息以冒号 : 字符 ASCII 码 3AH 开始 以回车换行符结束 ASCII 码 0DH,0AH。其它域可以使用的传输字符是十六进制的 0…9,A…F。 网络上的设备不断侦测“ :” 字符 当有一个冒号接收到时每个设备都解码下个域地址域来判断是否发给自己的。消息中字符间发送的时间间隔最长不能超过 1 秒否则接收的设备将认为传输错误。RTU 帧用 RTU 模式消息发送至少要以 3.5 个字符时间的停顿间隔开始。 在网络波特率下多样的字符时间这是最容易实现的(如下图的 T1-T2-T3-T4 所示)。传输的第一个域是设备地址。可以使用的传输字符是十六进制的 0…9,A…F。网络设备不断侦测网络总线包括停顿间隔时间内。当第一个域地址域接收到每个设备都进行解码以判断是否发往自己的。在最后一个传输字符之后一个至少 3.5 个字符时间的停顿标定了消息的结束。一个新的消息可在此停顿后开始。整个消息帧必须作为一连续的流转输。如果在帧完成之前有超过 1.5 个字符时间的停顿时间接收设备将刷新不完整的消息并假定下一字节是一个新消息的地址域。同样地如果一个新消息在小于 3.5 个字符时间内接着前个消息开始接收的设备将认为它是前一消息的延续。这将导致一个错误因为在最后的CRC 域的值不可能是正确的。此模式没有类似ASCLL模式的固定的起始位和结束位而是通过时钟周期来判断发送开始和结束的当开始接收数据时定时器开始准备计时当接收完毕后定时器开始计时当时间超过3.5个字节接收周期后则认为接收完毕。例如当波特率为9600bit/s时每位数据传输的时间t为t1s/9600bit104us则传输一个字节数据所用时间8位数据位加1位停止位Tt9936us约等于1ms时间那么3.5个字节所需时间T13.513.5MS也就是说在接受不到数据后开始计时记录没有数据传输的时间如果大于3.5ms(3.5个字符周期)则接收完毕如果小于3.5ms则说明此帧数据有误丢弃不做处理。设备地址找谁modbus中一共有0~247个地址其中0号地址作为广播地址即主机向0号地址发送数据时所有从设备都需要接收此数据包从设备不需要回应。功能码干什么modbus中一共有128个功能码每个功能码都有其对应的功能功能码不同后面的数据位的定义也各不相同常用的几个功能码如下所示需要进一步了解的可以自己去搜索详细介绍。校验数据包的传输过程中一般都会包括校验位目的是为了验证数据包的正确性在打包前主机会对数据位按照约定进行计算得到一个校验位并放在包内指定位置从机接收到数据包后也会再按照约定计算一遍数据位得到一个校验码此时对比两个校验位如果一致则说明数据包正确如果不一致则说明数据有误这个数据包应该被丢弃。可以发现acsll方式和RTU方式的校验方法不同一个是使用的LRC校验另外一个是CRC校验有关两种校验方式的具体实现形式如下可以参考实际使用中已经有前辈做好了封装可以直接调用。CRC-16循环冗余错误校验CRC-16 校验字节的步骤如下①装如一个 16 位寄存器所有数位均为 1。②该 16 位寄存器的高位字节与开始 8 位字节进行“异或” 运算。运算结果放入这个 16 位寄存器。③把这个 16 寄存器向右移一位。④若向右标记位 移出的数位是 1 则生成多项式 1010000000000001 和这个寄存器进行“异或” 运算若向右移出的数位是 0则返回③。⑤重复③和④直至移出 8 位。⑥另外 8 位与该十六位寄存器进行“异或” 运算。⑦重复③~⑥直至该报文所有字节均与 16 位寄存器进行“异或” 运算并移位 8 次。⑧这个 16 位寄存器的内容即 2 字节 CRC 错误校验被加到报文的最高有效位。另外在某些非 ModBus 通信协议中也经常使用 CRC16 作为校验手段而且产生了一些 CRC16 的变种他们是使用 CRC16 多项式 X↑ 16X↑ 15X↑ 21单首次装入的 16 位寄存器为 0000使用 CRC16 的反序X↑ 16X↑ 14X↑ 11首次装入寄存器值为 0000 或 FFFFH。LRC纵向冗余错误校验LRC 错误校验用于 ASCII 模式。这个错误校验是一个 8 位二进制数可作为 2 个 ASCII 十六进制字节传送。把十六进制字符转换成二进制加上无循环进位的二进制字符和二进制补码结果生成 LRC 错误校验。 这个 LRC 在接收设备进行核验 并与被传送的 LRC 进行比较 冒号 、 回车符号 CR 、换行字符 LF和置入的其他任何非 ASCII 十六进制字符在运算时忽略不计。LRC校验码~(地址功能码数据1…数据n)%2561实际上LRC校验码是一个0-255的数据。总结有关modbus的通信流程就介绍到此如有问题欢迎指正后面还会再出一篇基于STM32的RTU通信实例。合集STM32 Modbus通信学习笔记——理论基础STM32 Modbus通信学习笔记——通信流程STM32 Modbus通信学习笔记—— 代码及示例STM32 使用MODBUS与维控屏通信modbus系列代码

相关文章:

STM32 Modbus通信学习笔记——通信流程

文章目录前言Modbus协议硬件连接基于RS485的Modbus通信Modbus拓扑结构Modbus通信流程Modbus主机帧结构传输方式RTU传输方式ASC传输方式数据帧格式ASCII 帧RTU 帧设备地址(找谁)功能码(干什么)校验CRC-16(循环冗余错误校…...

蓝牙技术基础知识

文章目录概述1、Basic Rate -经典蓝牙2、Low Energy(LE)几个常用的蓝牙规范:A2DPProfile 汇总概述 在网络上收集的一些资料,做一下汇总,方便自己查阅和学习。 作为一种通用的无线通信技术,规范…...

体系结构论文(九十九):Large Language Models (LLMs) for Electronic Design Automation (EDA)

Large Language Models (LLMs) for Electronic Design Automation (EDA) 25SOCC这是一篇什么类型的文章这不是一篇提出单一新算法、单一新 benchmark 或单一系统的论文,而是一篇关于“LLM 如何进入 EDA 全流程”的综述/特邀 session 论文。它想做的事情很明确&#…...

OpenClaw备份方案:Qwen3.5-9B驱动的自动化文件同步

OpenClaw备份方案:Qwen3.5-9B驱动的自动化文件同步 1. 为什么需要AI驱动的文件备份方案 上周我的移动硬盘突然罢工,导致三个月的项目文档全部丢失。这次惨痛经历让我意识到:传统备份方案存在两个致命缺陷。首先,手动备份依赖记忆…...

基于springboot林业资源管理系统设计与实现_2595688s_c014

前言 随着全球生态环境保护意识的增强,林业资源管理作为生态保护与可持续发展的重要环节,其信息化、智能化水平直接影响管理效率与决策科学性。传统林业管理依赖人工巡查、纸质记录,存在数据更新滞后、信息孤岛、资源监管困难等问题。基于Spr…...

打卡信奥刷题(3086)用C++实现信奥题 P7096 [yLOI2020] 泸沽寻梦

P7096 [yLOI2020] 泸沽寻梦 题目背景我应是泸沽烟水里的过客, 孑然弹铗,划天地开阖。 邂逅过的,梦醒之余, 却忘了该如何洒脱。——银临《泸沽寻梦》 题目描述南有仙地,名曰摩梭,摩梭有湖,泸沽是…...

打卡信奥刷题(3085)用C++实现信奥题 P7095 [yLOI2020] 不离

P7095 [yLOI2020] 不离 题目背景乱玄黄时序,探风林实虚。 我要你共我奇谈怪趣。 任日月斑斓,待春秋兴残。 我要我们有聚无散。——银临《不离》 题目描述 这道题目来自 zxy 哔哔,咕咕让哔哔选一首歌作为题目名,但是哔哔说没有想好…...

打卡信奥刷题(3084)用C++实现信奥题 P7091 数上的树

P7091 数上的树 题目背景 本题自动开启 O2 优化,时间限制 2s。 题目描述 您需要构造一棵二叉树,根节点权值为 nnn,每个节点都有 222 个或 000 个儿子,且满足如下限制: 若该点有两个儿子,该点权值需等于两个…...

Pretext:值得关注的文本排版引擎涎

一、语言特性:Java 26 与模式匹配进化 1.1 Java 26 语言级别支持 IDEA 2026.1 EAP 最引人注目的变化之一,就是新增 Java 26 语言级别支持。这意味着开发者可以提前体验和测试即将在 JDK 26 中正式发布的语言特性。 其中最重要的变化是对 JEP 530 的全面支…...

Awoo Installer:Switch游戏安装的终极解决方案,告别格式兼容烦恼

Awoo Installer:Switch游戏安装的终极解决方案,告别格式兼容烦恼 【免费下载链接】Awoo-Installer A No-Bullshit NSP, NSZ, XCI, and XCZ Installer for Nintendo Switch 项目地址: https://gitcode.com/gh_mirrors/aw/Awoo-Installer 还在为Swi…...

Access VBA 生成二维码的两种方式与中文编码处理

在技术领域,我们常常被那些闪耀的、可见的成果所吸引。今天,这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力,让我们得以一窥未来的轮廓。然而,作为在企业一线构建、部署和维护复杂系统的实践者,我们深知…...

GPT-6「土豆」4月14日发布:性能暴涨40%,国内用户怎么第一时间用上?

TL;DR:OpenAI 内部代号「土豆」的 GPT-6 定档 4 月 14 日发布,代码和 Agent 能力较前代提升 40%,上下文扩至 200 万 Token。本文拆解它的核心能力变化,并整理国内用户第一时间用上的可行方案。GPT-6 到底升级了什么 4 月 7 日&…...

目标检测实战:从XML到TXT标注文件的完整转换指南

1. 为什么需要XML到TXT的格式转换 做目标检测项目时,我们经常会遇到标注文件格式不兼容的问题。LabelImg生成的XML文件虽然信息完整,但YOLO系列模型训练时需要的却是TXT格式的标注。这就好比你想用微信支付,但商家只支持支付宝——虽然都是支…...

Windows系统焕新指南:用Win11Debloat打造高效流畅体验

Windows系统焕新指南:用Win11Debloat打造高效流畅体验 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and cu…...

突破Cursor使用限制:智能解决方案实现Pro功能持续访问

突破Cursor使用限制:智能解决方案实现Pro功能持续访问 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your tri…...

Papa Parse故障排除:从入门到精通的4个实战方案

Papa Parse故障排除:从入门到精通的4个实战方案 【免费下载链接】PapaParse Fast and powerful CSV (delimited text) parser that gracefully handles large files and malformed input 项目地址: https://gitcode.com/gh_mirrors/pa/PapaParse 在数据处理领…...

OpenClaw+百川2-13B:个人财务管理自动化实践

OpenClaw百川2-13B:个人财务管理自动化实践 1. 为什么需要自动化财务管理 每个月收到银行账单邮件时,我总会被两个问题困扰:一是手动整理消费记录耗时费力,二是很难从零散的交易中看出消费趋势。作为一名技术从业者,…...

播客内容结构化:SenseVoice-Small ONNX模型章节自动划分演示

播客内容结构化:SenseVoice-Small ONNX模型章节自动划分演示 1. 快速了解SenseVoice-Small语音识别模型 SenseVoice-Small是一个专门处理语音识别任务的先进模型,它不仅能准确识别语音内容,还能分析情感和检测音频中的各种事件。这个模型经…...

IC670GBI002总线接口单元

IC670GBI002 总线接口单元 (BIU) 产品特点该总线接口单元是工业自动化系统中实现模块间高速、可靠数据通信的关键组件,保证控制系统稳定、高效运行。提供高速可靠的总线通信接口支持多模块数据交换,实现系统扩展数据传输稳定,确保控制精度响应…...

揭秘.NET 10 + Blazor 9预发布架构图:微软内部泄露的3类新渲染管线对比(含性能基准测试数据+GC压力热力图)

第一章:揭秘.NET 10 Blazor 9预发布架构图:微软内部泄露的3类新渲染管线对比(含性能基准测试数据GC压力热力图) 微软近期在.NET Conf 2024 Preview Track中非正式披露了.NET 10与Blazor 9联合演进的核心架构蓝图,其中…...

企业级Mermaid与Confluence集成实战指南:从技术选型到价值落地

企业级Mermaid与Confluence集成实战指南:从技术选型到价值落地 【免费下载链接】mermaid Generation of diagrams like flowcharts or sequence diagrams from text in a similar manner as markdown 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid …...

资源控制与开发者工具:重构网页资源加载的全流程解决方案

资源控制与开发者工具:重构网页资源加载的全流程解决方案 【免费下载链接】ResourceOverride An extension to help you gain full control of any website by redirecting traffic, replacing, editing, or inserting new content. 项目地址: https://gitcode.co…...

终极Gmail桌面应用开发指南:从源码到专业级邮件客户端部署

终极Gmail桌面应用开发指南:从源码到专业级邮件客户端部署 【免费下载链接】gmail-desktop :postbox: Gmail desktop app for macOS, Windows & Linux (formerly Gmail Desktop) 项目地址: https://gitcode.com/gh_mirrors/gm/gmail-desktop Meru&#x…...

山地农田泵站数据采集远程监控系统方案

某地多为丘陵山地等地形,山顶水资源为丰富,水库蓄水充足,但由于山势陡峭、地势沟壑纵横,水流难以翻山越岭,导致各个农田难以得到充分灌溉,影响到当地的农民收益。如果采取各个农田分别开渠引水的方式&#…...

C++复习录

1.命名空间 namespace nn{int a; } //名字空间指令 using namespace nn;//从这行代码开始,nn中的标识符在当前作用域可见(位于可见表)//名字空间声明 using nn::a;//从这行代码开始,nn中的a引入当前作用域(相当于定义,位于定义表) gcc/g++针对每个函数都和制作两张表,…...

终极免费虚拟光驱指南:如何在Windows上轻松挂载ISO文件

终极免费虚拟光驱指南:如何在Windows上轻松挂载ISO文件 【免费下载链接】WinCDEmu 项目地址: https://gitcode.com/gh_mirrors/wi/WinCDEmu 在数字时代,我们不再需要物理光驱来读取光盘内容,但ISO、NRG、MDS等光盘映像文件仍然无处不…...

开源工具助力数字内容管理:跨平台音频下载解决方案

开源工具助力数字内容管理:跨平台音频下载解决方案 【免费下载链接】xmly-downloader-qt5 喜马拉雅FM专辑下载器. 支持VIP与付费专辑. 使用GoQt5编写(Not Qt Binding). 项目地址: https://gitcode.com/gh_mirrors/xm/xmly-downloader-qt5 在数字内容爆炸的时…...

.NET源码生成器基于partial范式开发和nuget打包塘

1 安装与初始化 # 全局安装 OpenSpec npm install -g fission-ai/openspeclatest # 在项目目录下初始化 cd /path/to/your-project openspec init 初始化时,OpenSpec 会提示你选择使用的 AI 工具(Claude Code、Cursor、Trae、Qoder 等)。 3 O…...

OpenAI呼吁重新审视税收政策,迎接AI带来的新经济时代

ChatGPT的开发商OpenAI近日呼吁政策制定者重新思考税收体系的结构,并提出了一系列针对人工智能潜在经济与社会影响的政策建议。在周一发布的一份政策文件中,OpenAI表示,AI可能从根本上重塑经济格局,其中包括若干潜在风险&#xff…...

Swoole + Redis Cluster 实时推送系统(千万级QPS压测实录+全链路监控配置清单)

第一章:Swoole Redis Cluster 实时推送系统概览现代高并发实时推送场景(如聊天消息、行情更新、协同编辑)对系统吞吐量、低延迟与水平扩展能力提出严苛要求。本系统以 Swoole 作为高性能异步协程服务器核心,结合 Redis Cluster 提…...