通讯协议001——Modbus报文协议分析

2023-10-27

        Modbus协议存在用于串口、以太网、专用网络的版本。各版本的Modbus通信协议在数据模型和功能调用上都是相同的,只有封装方式和一些细节有所不同的。本文对Modbus RTU报文协议进行分析。

        Modbus数据帧格式如下:

        1)从站地址:地址范围1-247,响应报文中的从站地址保持与请求报文的从站地址一致。

        2)功能代码:表示不同的功能。正常响应报文中的功能代码保持与请求报文的功能代码一致,异常响应报文的功能代码=请求报文的功能代码 + 80H。常见功能代码如下:

        3)数据:请求报文中的数据格式根据功能代码而定,响应报文中的数据为返回的数据或错误码。

        4)校验码:2个字节,用于校验数据,RTU采用CRC校验码。

        下文采用Modbus Poll、Modbus Slave软件(登录网信智汇wangxinzhihui.com下载)对常见功能的报文进行分析。

        1)功能码01H:读读线圈(01寄存器)。

         ModbusPoll读取01从站地址为00的线圈开始10个线圈状态。

         报文分析如下:

         其中响应报文返回的数据字节1、字节2组成的0201H,对应的二进制为1000000001。

        2)功能码05H:写单个线圈(01寄存器)

        ModbusPoll设置01从站地址为01的线圈为ON。

        报文分析如下:

         其中:

                 线圈地址:01,高低字节分别为00、01

                 通断标志:ON对应高低位FF00,OFF对应0000

                 正常响应报文与请求报文一致。

3)功能码0FH:写多个线圈(01寄存器)

ModbusPoll设置01从站地址为00的线圈开始10个线圈的状态。

报文分析如下:

其中线圈通断为多个线圈通断状态按Bit组合而成的数据。如0D  02 组合成020DH,对应二进制为1000001101,每个bit对应线圈的状态。

4)功能码02H:读输入线圈(02寄存器)

ModbusPoll读取01从站地址为00的输入线圈开始10个线圈状态。

报文分析如下:

其中响应报文返回的数据字节1、字节2组成的0004H,对应的二进制为0000000100。

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

以下为ModbusPoll读取01从站地址为02的保持寄存器,开始2个字,组成1个浮点数。

报文分析如下:

5)功能码06H:写单个保持寄存器(03寄存器)

以下为ModbusPoll写01从站地址为02的保持寄存器,写入数据为23。

报文分析如下:

其中

写入数据0017H,为数据23

响应报文同请求报文

6)功能码10H:写多个保持寄存器(03寄存器)

以下为ModbusPoll往01从站保持寄存器02地址写入数据120.34,34.768。

报文分析如下:

7)功能码04H:读输入寄存器(04寄存器)

以下为ModbusPoll读取01从站输入寄存器00开始4个字,组成2个浮点数。

报文分析如下:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通讯协议001——Modbus报文协议分析 的相关文章

随机推荐

  • 《Graph Learning》

    从本章开始 我们就会陆续讲一些图算法 本文首先给大家聊一聊图传播算法 对于图传播算法 并没有确切的定义 但是这类算法都有着十分明确和统一的范式 理解了这一范式之后 就能迅速掌握此类算法 给定图G V E V表示节点集合 E表示边集合 设N
  • Cmake 多版本共存与切换

    1 之前安装的Cmake不删 下载新版本的Cmake Cmake官网的下载地址 2 解压软件包 cmake可执行性文件 home yoyo 360Downloads cmake 3 21 1 linux x86 64 bin cmake c
  • Java字符串长度不够前面或后面补0 

    1 第一种字符串补0 public static String addZeroForNum String str int strLength int strLen str length StringBuffer sb null while
  • 2021年第十二届蓝桥杯省赛Java B组真题及题解

    A试题 ASC 填空题 本题总分 5 分 1 问题描述 已知大写字母 A 的 ASCII 码为 65 请问大写字母 L 的 ASCII 码是多少 2 答案提交 这是一道结果填空的题 你只需要算出结果后提交即可 本题的结果为一个整数 在提交答
  • CNN样本分类验证

    神经网络训练完成后需要样本来验证神经网络的性能 或者说使用神经网络的分类功能 需要加载你当前训练完成后神经网络的权重对样本进行计算 输出一个理想的结果 首先需要将需要验证的图像转换成为神经网络batch的大小 比如说 我的神经网络输入的ba
  • rocketmq安装与踩坑

    rocketmq安装与踩坑 本体下载与启动 下载地址 https rocketmq apache org release notes release notes 4 4 0 启动 1 配置环境变量 ROCKETMQ HOME C code
  • Derek解读Bytom源码-孤块管理

    作者 Derek 简介 Github地址 https github com Bytom bytom Gitee地址 https gitee com BytomBlockc 本章介绍bytom代码孤块管理 作者使用MacOS操作系统 其他平台
  • python中的ans是什么意思_python ans

    从第1行开始 继续前进 直到第一个1 然后跳至第2行 但仍留在同一列中 重复右移的过程 直到您点击为止1 重复执行此操作 您上一步右移的行就是您的答案 这是一个O N M 解 对于NxM矩阵 或者对于正方形NxN矩阵为O N 如问题所示 使
  • Scrapy 服务器远程更新爬虫xpath或css规则,利用ElementTree远程解析XML节点

    我们在做分布式爬虫的时候有些网站可能因为规则变更使得我们爬虫也要跟着变更规则 如果部署了很多的话更新规则就会是个头大的问题 慢慢去一个一个更新爬虫规则实在是太累了 所以我就想到了用xml来做规则 让爬虫去读取一个远程xml就可以了 我们后期
  • 安装svn时2503/2502错误

    win8 1 64位安装svn 1 8 8时出错 error code is 2503 2502 参考了下面的解决方案后依然出错 后来发现是权限问题 于是以管理员方式运行cmd 然后定位到安装文件目录启动安装文件 安装成功 其它安装程序应该
  • openwrt 软路由 查看IP地址命令 ifconfig / ip -4 addr

    openwrt 软路由 查看IP地址命令 ifconfig ip 4 addr
  • 遥感影像语义分割论文笔记(一)FarSeg CVPR2020

    Foreground Aware Relation Network for Geospatial Object Segmentation in High Spatial Resolution Remote Sensing Imagery 论
  • osg学习(六十四)osg的纹理模式 纹理属性

    在osg中都通过渲染状态集StateSet来管理 纹理模式最终调用glEnable glDisable来实现 纹理属性最终调用glBindTexture glTexImage2D glTexParameter等来实现 1 纹理模式 纹理模式
  • PowerDesigner15在win7-64位系统下对MySQL 进行反向工程以及建立物理模型产生SQL语句步骤图文傻瓜式详解...

    1 安装PowerDesigner15 MySQL5 不详细讲解了 网上一大把 请各位亲参考去 2 安MyODBC standard 3 51 0 7 win msi mysql connector odbc 5 1 5 win msi两个
  • Python xlrd读取excel日期类型

    废话不多说 直接开讲 今天遇到py读取excel日期问题 2021 10 11 10 27 55 这种格式 xldate as datetime 直接转化为datetime对象 succ time xldate as datetime ro
  • 10以内的分解与组成怎么教_如何教宝宝熟记10以内分解?

    要先易后难 先从十以内的加减法算起 可以与生活中可以用数量概念表达的物体结合 比如苹果 桔子 荔枝 西红柿 芒果等 这样可以提高孩子的兴趣 也可以让他知道学习数学在生活中的重要作用 运用分解技巧从分解组合开始教孩子 一边分 一边用语言表述
  • 解决:VSCode Win10 激活conda环境时报错 CommandNotFoundError

    错误如下 conda activate data science CommandNotFoundError Your shell has not been properly configured to use conda activate
  • git架构设计

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 管理的是修改 而不是文件 参考 https www liaoxuefeng com wiki 0013739516305929606dd18361248578c67b806
  • java 检查版本号大小

    apk开发过程中 需要比较版本号大小 判断是否需要升级 一个版本号 Firmware Version 6 3 148 0 我的做法是先提取数字 保存为List
  • 通讯协议001——Modbus报文协议分析

    Modbus协议存在用于串口 以太网 专用网络的版本 各版本的Modbus通信协议在数据模型和功能调用上都是相同的 只有封装方式和一些细节有所不同的 本文对Modbus RTU报文协议进行分析 Modbus数据帧格式如下 1 从站地址 地址