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

Modbus-RTU协议讲解与实战

1、背景

工作需要,需要使用Modbus-RTU实现RS485通信,于是简单学习并实践了一下。

2、参考资料

一文看懂Modbus协议

3、协议说明

3.1、协议类型

当前设备采用Modbus-RTU协议,采用CRC-16_Modbus校验算法,数据链路层使用用标准串口协议,物理层采用RS485进行数据传输。

3.2、帧结构

帧结构说明
地址码(1)指定待通信的设备地址,可以是广播地址、单设备地址或多设备地址。地址码占1字节,有效值范围是1~247。
功能码 (1)指令类型,详细说明程序执行的操作是读取、写入还是查询串口通信协议。功能码占1字节,有效值范围是1~255
起始地址(2)寄存器地址,2个字节
数据(N)根据执行的命令指令来封装数据内容,数据长度为多字节
CRC校验码(2)数据传输前需要计算校验和,检验数据是否传输正确。CRC校验占2字节

3.3、功能码

功能码说明
01H读取输出线圈
02H读取输入线圈
03H读取保持寄存器
04H读取输入寄存器
05H写入单线圈
06H写入单寄存器
0FH写入多线圈
10H写入多寄存器

4、协议主、从机数据交互

4.1、数据帧格式

4.1.1、读数据 读单个或多个寄存器03H

1)主机发送

从机地址功能码寄存器起始地址寄存器个数CRC16校验
1Byte1Byte2Byte,高字节在前2Byte,高字节在前2Byte,低字节在前

2)从机接收

从机地址功能码数据长度(字节数)寄存器数据CRC16校验
1Byte1Byte1ByteN,高字节在前2Byte,低字节在前

4.1.2、写数据 写单个寄存器06H

1)主机发送

从机地址功能码寄存器起始地址寄存器数据CRC16校验
1Byte1Byte2Byte,高字节在前N,高字节在前2Byte,低字节在前

2)从机接收

从机地址功能码寄存器起始地址寄存器数据CRC16校验
1Byte1Byte2Byte,高字节在前N,高字节在前2Byte,低字节在前

4.1.3、写数据 写多个寄存器10H

1)主机发送

从机地址功能码寄存器起始地址寄存器数量寄存器数据总字节数(2*寄存器数量)数据CRC16校验
1Byte1Byte2Byte,高字节在前2Byte,高字节在前1ByteN,高字节在前2Byte,低字节在前

2)从机接收

从机地址功能码寄存器起始地址寄存器数量CRC16校验
1Byte1Byte2Byte,高字节在前2Byte,高字节在前2Byte,低字节在前

5、协议示例

5.1、寄存器地址划分

在这里插入图片描述

5.2 、查询03H

5.2.1 、查询两个寄存器

单个寄存器对应寄存器数量设为01H,可以自行实现

  • 主机发送帧
    在这里插入图片描述
  • 从机回复帧
    在这里插入图片描述

5.2.2 查询N个寄存器

  • 主机发送帧
    在这里插入图片描述
  • 从机回复帧
    在这里插入图片描述

5.3、设置

5.3.1、主机设置单个寄存器的值

就是写数据帧

  • 主机发送帧
    在这里插入图片描述
  • 从机回复帧
    在这里插入图片描述

5.3.2、主机设置两个寄存器的值

  • 主机发送数据帧
    在这里插入图片描述
  • 从机回复数据帧
    在这里插入图片描述

5.3.3 、主机设置N个寄存器的值

  • 主机发送数据帧
    在这里插入图片描述

  • 从机回复数据帧
    在这里插入图片描述

6、计算校验值

6.1、crc16在线计算校验值

CRC(循环冗余校验)在线计算

RC校验(循环冗余校验)小知识 CRC即循环冗余校验码(Cyclic Redundancy
Check):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。

CRC算法参数模型解释: NAME:参数模型名称。 WIDTH:宽度,即CRC比特数。
POLY:生成项的简写,以16进制表示。例如:CRC-32即是0x04C11DB7,忽略了最高位的"1",即完整的生成项是0x104C11DB7。
INIT:这是算法开始时寄存器(crc)的初始化预置值,十六进制表示。 REFIN:待测数据的每个字节是否按位反转,True或False。
REFOUT:在计算后之后,异或输出之前,整个数据是否按位反转,True或False。
XOROUT:计算结果与此参数异或后得到最终的CRC值。

其他相关工具:LRC校验BCC校验

提示:复制数据时请注意字符串首尾的一些不可见字符!

在这里插入图片描述

注意:要注意校验值高字节低字节的顺序,必要时需要转换位置
在这里插入图片描述

其他参考资料:
主机实现:
Modbus主机实现
从机实现:
Modbus从机实现
https://blog.csdn.net/weixin_31301271/article/details/120334602

6.2、代码实现

6.2.1、crc16校验

注意:注意高低字节位置

#include <stdio.h>/* CRC余式表 */
const unsigned int crc_table[256] = {0x0000, 0xc0c1, 0xc181, 0x0140, 0xc301, 0x03c0, 0x0280, 0xc241,0xc601, 0x06c0, 

相关文章:

Modbus-RTU协议讲解与实战

1、背景 工作需要,需要使用Modbus-RTU实现RS485通信,于是简单学习并实践了一下。 2、参考资料 一文看懂Modbus协议 3、协议说明 3.1、协议类型 当前设备采用Modbus-RTU协议,采用CRC-16_Modbus校验算法,数据链路层使用用标准串口协议,物理层采用RS485进行数据传输。 …...

数据结构 查找基本概念

敬请期待。。。 1. 适用于折半查找的表的存储方式及元素排列要求为&#xff08;顺序方式存储&#xff0c;元素有序 &#xff09;。 2. 有一个按元素值排好序的顺序表(长度大于2)&#xff0c;分别用顺序查找和折半查找与给定值相等的元素&#xff0c;比较次数分别是s和b&am…...

『Linux升级路』基础开发工具——gcc/g++篇

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;Linux &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、快速认识gcc/g 二、预处理 &#x1f4d2;1.1头文件展开 &#x1f4d2;1…...

面试:RocketMQ相关问题

文章目录 什么是 RocketMQ&#xff0c;有哪些使用场景&#xff1f;RocketMQ 由哪些⻆色组成&#xff0c;每个⻆色作用和特点是什么&#xff1f;RocketMQ 中的 Topic 和 JMS 的 queue 有什么区别&#xff1f;RocketMQ 消费模式有几种&#xff1f;RocketMQ 的 Consumer 是如何消费…...

2304. 网格中的最小路径代价 : 从「图论最短路」过渡到「O(1) 空间的原地模拟」

题目描述 这是 LeetCode 上的 「2304. 网格中的最小路径代价」 &#xff0c;难度为 「中等」。 Tag : 「最短路」、「图」、「模拟」、「序列 DP」、「动态规划」 给你一个下标从 0 开始的整数矩阵 grid&#xff0c;矩阵大小为 m x n&#xff0c;由从 0 到 的不同整数组成。 你…...

【机器学习】算法性能评估常用指标总结

考虑一个二分问题&#xff0c;即将实例分成正类&#xff08;positive&#xff09;或负类&#xff08;negative&#xff09;。对一个二分问题来说&#xff0c;会出现四种情况。如果一个实例是正类并且也被 预测成正类&#xff0c;即为真正类&#xff08;True positive&#xff0…...

前端 JavaScript 与 HTML 怎么实现交互?

前端的交互性是通过JavaScript与HTML结合实现的。JavaScript作为一种脚本语言&#xff0c;可以嵌入HTML中&#xff0c;通过对DOM&#xff08;文档对象模型&#xff09;的操作&#xff0c;实现与用户的交互。以下将详细介绍前端JavaScript与HTML如何实现交互&#xff0c;包括事件…...

命令执行总结

之前做了一大堆的题目 都没有进行总结 现在来总结一下命令执行 我遇到的内容 这里我打算按照过滤进行总结 依据我做过的题目 过滤system 下面是一些常见的命令执行内容 system() passthru() exec() shell_exec() popen() proc_open() pcntl_exec() 反引号 同shell_exec() …...

机器学习——词向量模型(CBOW代码实现-未开始)

本来是不打算做这个CBOW代码案例的&#xff0c;想快马加鞭看看前馈神经网络 毕竟书都买好了 可是…可是…我看书的时候&#xff0c;感觉有点儿困难&#xff0c;哭的很大声… 感觉自己脑细胞可能无法这么快接受 要不&#xff0c;还是退而求个稍微难度没那么大的事&#xff0c;想…...

智慧海岛/海域方案:助力海洋空间智慧化、可视化管理

随着我国海洋经济的快速发展&#xff0c;海域海岛的安防技术也获得了进步。传统的安防监控模式已经满足不了海域海岛的远程监管需求。伴随着人工智能、边缘计算、大数据、通信传输技术、视频技术、物联网等信息化技术的发展&#xff0c;海岛海域在监管手段上&#xff0c;也迎来…...

Bin、Hex、ELF、AXF的区别

1.Bin Bin文件是最纯粹的二进制机器代码, 或者说是"顺序格式"。按照assembly code顺序翻译成binary machine code&#xff0c;内部没有地址标记。Bin是直接的内存映象表示&#xff0c;二进制文件大小即为文件所包含的数据的实际大小。 BIN文件就是直接的二进制文件&…...

IDEA安装教程

文章目录 1 下载IntelliJ IDEA2 安装3 IDEA配置4 创建项目 1 下载IntelliJ IDEA ​ 官方网站上下载最新版本的IntelliJ IDEA。官方网站提供了两个版本&#xff1a;Community版和Ultimate版。 Community版是免费的&#xff0c;适用于个人和非商业用途。Ultimate版则需要付费购…...

DRF-项目-(1):构建纯净版的drf项目,不再使用django的后台管理,django的认证,django的session等功能,作为一个纯接口项目

项目的目录结构&#xff1a; -HeartFailure |-- apps |--user |--HeartFailure |-- static |--manage.py 一、django项目相关的 1、命令行中创建django项目 #1、切换到指定的虚拟环境中 workon my_drf#2、该虚拟环境已经安装好django和rest_framework了 django-admin startp…...

ubuntu 手动清理内存cache

/proc是一个虚拟文件系统&#xff0c;我们可以通过对它的读写操作来做为与kernel实体间进行通信的一种手段。也就是说可以通过修改/proc中的文件&#xff0c;来对当前kernel的行为做出调整。 那么我们可以通过调整/proc/sys/vm/drop_caches来释放内存。操作如下&#xff1a; …...

gitBash中如何使用Linux中的tree命令

文章目录 在gitBash中安装tree的目的如何安装安装完成,就可以直接完美适配Linux系统了 在gitBash中安装tree的目的 如下图,powershell虽然可以看做是window下的Linux系统,但是根本就不适配很多Linux中的命令 如何安装 tree.exe安装网址 下载 tree 命令的 二进制包&#xf…...

【鸿蒙应用ArkTS开发系列】- 灌水区,鸿蒙ArkTs开发有问题可以在该帖中反馈

大家好, 这是一篇水贴&#xff0c;给大家提供一个交流沟通鸿蒙开发遇到问题的地方。 新增新增这个文章呢&#xff0c;大家在开发使用ArkTS开发鸿蒙应用或者鸿蒙服务的时候&#xff0c;有遇到疑问或者问题&#xff0c;可以在本文章评论区提问&#xff0c;我看到了如果知道怎么…...

c语言习题1124

分别定义函数求圆的面积和周长。 写一个函数&#xff0c;分别求三个数当中的最大数。 写一个函数&#xff0c;计算输入n个数的乘积 一个判断素数的函数&#xff0c;在主函数输入一个整数&#xff0c;输出是否为素数的信息 写一个函数求n! ,利用该函数求1&#xff01;2&…...

线段树---数据结构学习

线段树的教程可以参照线段树 这里推荐 https://oi-wiki.org/ 这个网站&#xff0c;数据结构讲的非常透。 线段树学了很多次忘了很多次&#xff0c;这次打算记录一下以后方便回顾(leetcode这类题遇见的不算特别多)。 样板例题 leltcode-307 #题目样板 class NumArray {private …...

linux基础5:linux进程1(冯诺依曼体系结构+os管理+进程状态1)

冯诺依曼体系结构os管理 一.冯诺依曼体系结构&#xff1a;1.简单介绍&#xff08;准备一&#xff09;2.场景&#xff1a;1.程序的运行&#xff1a;2.登录qq发送消息&#xff1a; 3.为什么需要内存&#xff1a;1.简单的引入&#xff1a;2.计算机存储体系&#xff1a;3.内存的意义…...

JVM-基础

jdk7及以前&#xff1a; 通过-XX:PermSize 来设置永久代初始分配空间&#xff0c;默认值是20.75m -XX:MaxPermSize来设定永久代最大可分配空间&#xff0c;32位是64m&#xff0c;64位是82m jdk8及之后&#xff1a; 通过-XX:MetaspaceSize 来设置永久代初始分配空间&#xff…...

Blender 3MF插件:打通3D打印工作流的格式转换利器

Blender 3MF插件&#xff1a;打通3D打印工作流的格式转换利器 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat 你是否在Blender中精心设计的3D模型&#xff0c;在导出到3D…...

基于灰狼优化、改进灰狼优化、金豺优化、沙丘猫群,(GWO、IGWO、GJO、SCSO、SCA)优化与正弦余弦算法的无人机三维航迹路径规划对比研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

BitNet-b1.58-2B-4T-GGUF效果展示:多轮对话中角色一致性与记忆能力测试

BitNet-b1.58-2B-4T-GGUF效果展示&#xff1a;多轮对话中角色一致性与记忆能力测试 1. 模型特性概览 BitNet-b1.58-2B-4T-GGUF是一款突破性的开源大语言模型&#xff0c;采用原生1.58-bit量化技术&#xff0c;在保持高性能的同时实现了极致的效率优化。这款模型最引人注目的特…...

5秒解锁百度网盘资源:baidupankey提取码智能获取工具终极指南

5秒解锁百度网盘资源&#xff1a;baidupankey提取码智能获取工具终极指南 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 还在为百度网盘提取码而反复搜索浪费时间吗&#xff1f;baidupankey作为一款专业的百度网盘提取码智能…...

WideSearch:从广度优先搜索到智能广义搜索的架构与实践

1. 项目概述&#xff1a;从“宽搜”到“广搜”的智能进化最近在开源社区里&#xff0c;一个名为“WideSearch”的项目引起了我的注意。它来自ByteDance-Seed&#xff0c;这个名字本身就自带光环&#xff0c;让人联想到背后可能蕴藏的工程实践与前沿探索。乍一看标题&#xff0c…...

仓颉(Cangjie)编程语言:从汉字造字始祖到全场景智能应用开发语言

仓颉&#xff08;Cangjie&#xff09;编程语言&#xff1a;从汉字造字始祖到全场景智能应用开发语言 一、引言&#xff1a;当古老传说遇见现代代码 仓颉编程语言&#xff08;Cangjie Programming Language&#xff09;&#xff0c;这个名字承载着一段横跨五千年的文化传承。在…...

使用 Rsync 实现服务器数据同步

在当今数据驱动的时代&#xff0c;服务器数据同步是保障业务连续性和数据安全的关键任务。Rsync作为一款高效、灵活的文件同步工具&#xff0c;凭借其增量传输和低资源消耗的特性&#xff0c;成为运维人员的首选方案。无论是跨服务器备份、负载均衡还是灾备恢复&#xff0c;Rsy…...

语言模型核心概念与文本生成参数详解

1. 语言模型入门指南&#xff1a;六项核心概念解析刚接触自然语言处理的新手常被各种术语搞得晕头转向——概率分布、上下文窗口、温度参数这些概念就像外语一样难以理解。我在2016年第一次调试文本生成模型时&#xff0c;就曾因为误用采样方法导致输出一堆乱码。本文将拆解语言…...

BERT模型解析:双向Transformer在NLP中的应用与实践

1. BERT模型基础解析BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;作为自然语言处理领域的里程碑式模型&#xff0c;其核心创新在于双向上下文编码机制。传统语言模型&#xff08;如GPT&#xff09;采用单向的自回归方式&#xff0c;只…...

Keras实现Mask R-CNN目标检测与实例分割实战

1. 基于Keras的Mask R-CNN目标检测实战指南在计算机视觉领域&#xff0c;目标检测一直是最具挑战性的任务之一。它不仅需要识别图像中的物体是什么&#xff08;分类&#xff09;&#xff0c;还需要精确确定它们的位置&#xff08;定位&#xff09;。作为一名长期从事计算机视觉…...