ModBus协议学习

news2024/9/25 19:23:51

之前没接触过,记录一下抄的东西。

Modbus 一个工业上常用的通讯协议、一种通讯约定。Modbus协议包括RTU、ASCII、TCP。其中MODBUS-RTU最常用,比较简单,比较容易实现。
在这里插入图片描述在这里插入图片描述

先来简单分析一条MODBUS-RTU报文,例如:01 06 00 01 00 17 98 04

    01         06        00 01      00 17     98 04 
  从机地址     功能码    数据地址     数据     CRC校验

这一串数据的意思是:把数据 0x0017(十进制23) 写入 1号从机地址 0x0001数据地址。

功能码

Modbus的功能码部分如下表,必要的话可以直接百度搜。
在这里插入图片描述

CRC校验

在数据传输过程中可能数据会发生错误,CRC检验检测接收的数据是否正确。

CRC-16错误校验程序如下:报文(此处只涉及数据位,不指起始位、停止位和任选的奇偶校验位)被看作是一个连续的二进制,其最高有效位(MSB)首选发送。报文先与X^16相乘((左移16位),然后看X16+X15+X12+1除,X16+X15+X12+1可以表示为二进制数11000000000000101
整数商位忽略不计,16位余数加入该报文(MSB先发送),成为2个CRC校验字节。余数中的1全部初始化,以免所有的零成为一条报文被接收。经上述处理而含有CRC字节的报文,若无错误,到接收设备后再被同一多项式(X16+X 15+X12+1〉除,会得到一个零余数(接收设备核验这个CRC字节,并将其与被传送的CRC 比较)。全部运算以2为模(无进位)。

习惯于成串发送数据的设备会首选送出字符的最右位(LSB-最低有效位)。而在生成CRC情况下,发送首位应是被除数的最高有效位MSB。由于在运算中不用进位,为便于操作起见,计算CRC时设MSB在最右位。生成多项式的位序也必须反过来,以保持一致。多项式的MSB略去不记,因其只对商有影响而不影响余数。

生成CRC-16校验字节的步骤如下:
①装如一个16位寄存器,所有数位均为1。
②该16位寄存器的高位字节与开始8位字节进行“异或”运算。运算结果放入这个16位寄存器。③把这个16寄存器向右移一位。
④若向右(标记位〉移出的数位是1,则生成多项式1010000000000001和这个寄存器进行“异或”运算;若向右移出的数位是0,则返回③。
⑤重复③和④,直至移出8位。
⑥另外8位与该十六位寄存器进行“异或”运算。
⑦重复③~⑥,直至该报文所有字节均与16位寄存器进行“异或”运算,并移位8次。⑧这个16位寄存器的内容即2字节CRC错误校验,被加到报文的最高有效位。

报文举例

1、主机对从机写数据操作
如果单片机接收到一个报文那么就对报文进行解析执行相应的处理,如上面报文:

    01             06            00 01           00 17          98 04 
  从机地址        功能号          数据地址          数据         CRC校验

假如本机地址是 1 ,那么从机接收到这串数据根据数据计算CRC校验判断数据是否正确,如果判断数据无误,则结果是:
HoldDataReg[1] = 0x0017;
MODBUS主机就完成了一次对从机数据的写操作,实现了通讯。

2、主机对从机读数据操作
主机进行读HoldDataReg[1] 操作,则报文是:

    01             03            00 01           00 01          D5 CA 
 从机地址        功能号          数据地址      读取数据个数       CRC校验

那么单片机接收到这串数据根据数据计算CRC校验判断数据是否正确,如果判断数据无误,则结果是:返回信息给主机,返回的信息也是有格式的:
返回内容:

    01        03           02            0017        F8 4A
  从机地址   功能号     数据字节个数    两个字节数据    CRC校验

MODBUS主机就完成了一次对从机数据的读操作,实现了通讯。

一个ModBus RTU 协议的例子

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

参考网页:
https://www.docin.com/p-1245911103.html
https://blog.csdn.net/huan447882949/article/details/80471105

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Boot 构建多租户SaaS平台核心技术指南

1. 概述 笔者从2014年开始接触SaaS(Software as a Service),即多租户(或多承租)软件应用平台;并一直从事相关领域的架构设计及研发工作。机缘巧合,在笔者本科毕业设计时完成了一个基于SaaS的高…

绘制一张透明背景的单色位图

在上一篇文章中,我留下了一个谜题:如何使用透明背景绘制一张单色位图。今天我们来揭晓谜底。 丑话说前头,我不是一名 GDI 方面的专家,所以,除了下面讲述的两种方法之外,可能还有我所不知道的更好的解决方案…

九、Map接口和常用方法

文章目录框架特点常用方法六大遍历方式练习框架 数据是K-V类型的我们之前学的几个Set底层也是封装了Map,但是Value部分用默认值,我们只使用Key部分 特点 注意:这里讲的是JDK8的Map接口特点 Map用于保存具有映射关系的数据:Key-…

c++类和对象

二、c类和对象 1.什么是类 c当中类是一个数据类型,封装了数据以及操作。个人理解:c类就是对事物的的抽象,c万物即可为类,和c语言的结构体一样,是一系列事物的共同属性和行为 2.什么是对象 对象就是类的具体化(实例化)…

git创建远程分支并关联本地分支

场景一: 本地、远程都没有分支 "v1.0.0" 1. 先查看确认一下,命令: git branch -a 2. 创建本地分支,命令: git checkout -b v1.0.0 3. 创建远程分支,并且本地分支关联远程分支,命令…

上海亚商投顾:沪指缩量跌0.44% 医药股全线反弹

上海亚商投顾前言:无惧大盘大跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 市场情绪大小指数今日走势分化,沪指全天弱势震荡,创业板指盘中涨超1%,午后涨幅有所回落。…

2022-12-29 驱动-IO多路复用

IO多路复用的原理: 1>select和poll原理:将文件描述符添加到集合中,监测是否有准备就绪的文件描述符,将未准备就绪的文件描述符剔除集合,准备就绪的文件描述符实现相关操作 2>对于epoll函数原理:创建…

超融合一体流式引擎,打造分布式数据库新纪元

12月28日,“数智驱动 全栈赋能”亚信科技2022年度系列产品发布会“数据库专场”线上成功举办,亚信科技重磅发布“超融合一体流式引擎”的AntDB V7.2数据库,并分享了在通信、交通等行业的应用实践。 百行千业数智化转型风起云涌,企…

布局云计算的下一个主场,紫光云引领行业云三大趋势

早在2018年,中国信通院发布2018云计算白皮书并指出:行业云时代全面开启。4年后的2022年底,Gartner将行业云平台列入2023年十大战略技术趋势,Gartner预测到2027年将有超过50%的企业使用行业云平台加速其业务项目。可以说&#xff0…

数据结构----树

树的概念 1.树的定义:树是n(n>0)个结点的有限集合 当n0时,称为”空树“ 当n>0时,有且仅有一个称为”根“的特定结点,该结点没有前驱,但是却有一个或者多个后继结点。 除了根节点以外的n-1个结点可划分为多个有…

项目管理范围(下)

创建WBS 什么是WBS? WBS(Work Breakdown Structure) --- 工作分解结构 创建WBS是将项目的可交付成果和项目工作分解成较小的,更易于管理的组件的过程。 它包含哪些内容? 举例: 里程碑的例子:比如需求评审&#xff…

计算机SCI论文润色,更容易被录用吗? - 易智编译EaseEditing

SCI论文润色后投稿,相较于没有润色投稿,确实概率要大一些。 特别有些英语水平较差的作者,投稿的论文,没有润色之前,可能审稿人会不理解,或读不通。 润色后,可能帮助审稿人理解论文。 目前不少…

告别动态规划

一、动态规划的三大步骤 动态规划,无非就是利用历史记录,来避免我们的重复计算。而这些历史记录,我们得需要一些变量来保存,一般是用一维数组或者二维数组来保存。下面我们先来讲下做动态规划题很重要的三个步骤 第一步骤&#…

九、树结构基础

1、为什么需要树这种数据结构? 数组存储方式的分析 优点:通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度。 缺点:如果要检索具体某个值,或者插入值(按一定顺序)会整体移动&…

简单BGP实验

(我这里AS1 BGP为100 AS2BGP为200 AS3 BGP为300) 这里已经配置好ip环回(这里tcp使用的是rip也已经提前配置好) 首先先配置AS2中的ibgp [r2]bgp 200 [r2-bgp]router-id 2.2.2.2 [r2-bgp]peer 4.4.4.4 as-number 100 [r2-bgp]…

白话初识UDP协议

UDP是什么 UDP是一个传输层的数据包装协议,特点有: 无连接(不需要两端连通就可以发送消息给接收端)不可靠传输(无法知道数据是否送达)面向数据报(以数据报为数据传输单位)全双工&…

vue项目cli2 升级 cli3

vue-cli2 升级 vue-cli3 由于vue-cli2 版本太低,升级到vue-cli3 采用的方法是新建cli3项目,对比差异,在cli2项目单独升级 检查环境 node环境检查版本是否在8.11版本以上 npm uninstall vue-cli -g 卸载旧版本的vue-cli npm install -g vue/…

广州蓝景分享—VSCode 前端开发必备插件推荐

Hello~~各位小伙伴好,今天广州蓝景整理一波前端开发必备插件,绝对可以提高你的生产力,希望这篇文章对大家有所帮助。 开发综合推荐 别名路径跳转 插件名:别名路径跳转 使用说明: 别名路径跳转插件,支持任何项目&…

BrightlyPro - 照片视屏后期自动调色增亮工具

BrightlyPro - 照片视屏后期自动调色增亮工具 BrightlyPro 自动增强您的照片和视频,你最需要它。通过一个滑块,BrightlyPro 立即使您的照片自适应地亮起来,同时保持光影之间令人愉悦的平衡,而不会扭曲已经点亮的区域。 下载 ➤ …

day07 面向对象

1. 类和对象 **面向对象和面向过程的思想对比 : ** ​ **面向过程 :**是一种以过程为中心的编程思想,实现功能的每一步,都是自己实现的 ​ **面向对象 :**是一种以对象为中心的编程思想,通过指挥对象实现具体的功能…