Modbus协议学习方法

news2025/2/22 13:50:51

  在刚开始接触modbus协议的时候,很容易被里面的各种功能码搞晕,同时在编写程序的时候也容易搞不清楚每一位数据代表的含义。如果在学习的过程中有实际的发送和接收数据的例子话,那么理解modbus协议就会更容易一些。
  下面我将自己借助软件学习的方法分享给大家,文章中所用到的软件下载地址 https://download.csdn.net/download/qq_20222919/87960214。

  这里要用到三个软件:虚拟串口、Modbus主机、Modbus从机。

  • 虚拟串口主要用来在电脑上虚拟出来2个串口,并将这两个串口连接起来。这样不需要在电脑上接USB转串口的硬件设备,依然可以使用串口来收发数据。
    在这里插入图片描述

  • Modbus Poll 这个是模拟Modbus主机的软件,通过这个软件可以读取火或者设置从机中寄存器的值。
    在这里插入图片描述

  • Modbus Slave 这个是模拟Modbus从机的软件,在这个软件中可以设置寄存器的地址和值,配合主机来使用。
    在这里插入图片描述

  接下来开始这三个软件的使用,首先安装虚拟串口软件,安装完成后打开虚拟串口软件。
在这里插入图片描述

  打开后可以看到界面的左上方显示了两个物理端口COM1和COM2,这两个串口是我电脑上存在的串口。
在这里插入图片描述

  如果要用这两个串口的话,就需要在外部将单片机的串口和电脑上的USB串口连接起来才能用。但是为了方便一点,不想在外部接线。只想在电脑上模拟串口,那么此时就需要新建一对虚拟串口。
在这里插入图片描述
  直接在虚拟串口的软件右边点击Add pair按钮,添加2个串口COM3和COM4
在这里插入图片描述
  这是在虚拟串口软件的左边就会显示出来添加后的两个虚拟串口,同时在电脑的设备管理器中也能看到添加后的两个串口。添加的这两个串口COM3和COM4是直接连接在一起的,也就是是COM3的发送端连接的是COM4的接收端,COM4的发送端连接的是COM3的接收端。

  可以直接使用串口助手进行测试,打开两个串口助手,一个选择COM3一个选择COM4.
在这里插入图片描述
  用这两个串口助手互相发数据。
在这里插入图片描述
  可以看到这两个虚拟串口可以互相收发数据,下面我们就使用这两个虚拟串口来进行Modbus数据的收发。

  关掉这两个串口助手,打开Modbus Slave 软件。
在这里插入图片描述
  在工具栏上选择连接—连接
在这里插入图片描述
  这里选择的连接方式为串口连接,然后选择COM3,设置波特率和奇偶校验方式。设置好之后点确定按钮。
  接下来在菜单栏选择设置—从站设置
在这里插入图片描述

  这里设置从机地址为1,寄存器起始地址为100,寄存器数量为10个,寄存器的类型为线圈状态。

在这里插入图片描述

  然后修改寄存器的状态值,直接在0或1上双击鼠标左键,就会弹出一个界面可以修改状态值为On或者Off。
在这里插入图片描述

  此时从机就配置好了,接下来配置主机,打开Modbus Poll软件,在工具栏中选择连接—连接。
在这里插入图片描述
  这里也选择串口连接,串口选择COM4,其他的设置需要和从机一样,然后点确定按钮。

在这里插入图片描述
  接下来在工具栏中选择设置–读写定义。

在这里插入图片描述
  设置要读取的从机地址,这个地址要和刚才配置的从机地址一样。选择要使用的功能码,然后设置要读取的寄存器起始地址和要读取的寄存器数量。设置完成之后点击确定按钮。
在这里插入图片描述
  此时就可以看到主机从从机读取到的线圈状态值。
在这里插入图片描述
  在从机寄存器上双击鼠标,改变线圈的状态,此时主机界面上读取到的线圈状态值也会发生改变。

在这里插入图片描述
  在Modbus Poll界面上单击放大镜的图标,打开数据监控。
在这里插入图片描述

  通过这个数据监控,就可以看到主机发送的数据和从机接收的数据。
在这里插入图片描述
  然后将这些数据和Modbus通信协议对照起来看。
在这里插入图片描述
  通过对比就可以很清晰看出来发送和接收数据中每一位数据的含义。

  比如发送数据中的第二个01代表的是功能码,接下来两位数据0x0064就表示寄存器的起始地址100,后面的0x0003表示要读取3个线圈的值。最后的两位数为CRC校验值,这里可以不用管。
  接收数据的第二个01也是功能码,第三个01表示读取到了1个字节的数据,05表示读取到的线圈值为0x05,由于线圈是按位表示的这里将0x05换算为二进制 0101,也就是说读取到3个线圈的值分别是1、0、1。

  接下来在Modbus中将寄存器的起始地址设置为110,
在这里插入图片描述

  此时接收到数据就会返回一个错误码。
在这里插入图片描述

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

  这样通过Modbus文档和实际发送接收的数据进行对比,就可以很容易的理解文档中说的一些概念。

  如果想观察其他功能码的使用时,直接在Modbus主机和从机软件中设置就行。比如设置从机为保持寄存器,并修改寄存器的值。
在这里插入图片描述
  主机读取从101开始的一个寄存器地址。
在这里插入图片描述

  通过数据监控可以看出03为功能码,0x0065为寄存器起始地址101,0x0001为要读取的寄存器数量。
在这里插入图片描述
  返回的数据03为功能码,02为字节数,0x00C8为读取到的寄存器值200。
在这里插入图片描述

  接下来将主机功能码改为读取写多个寄存器值。
在这里插入图片描述
  从寄存器100开始连续写3个寄存器的值。在Modbus Poll界面上双击寄存器的值,在打开的界面中直接输入需要设置的值,然后点确定按钮。
在这里插入图片描述
  这时在从机的界面上就可以看到寄存器的值已经被修改过来了。
在这里插入图片描述
  将监控到的数据和Modbus文档对比去着去看
在这里插入图片描述

  这样一边看文档一边自己动手去收发数据,去理解功能码的含义和使用方法,学习Modbus协议的时候就会更容易一点。如果是学习Modbus TCP的话,也可以用这个这个软件去观察数据。在选择通信方式的时候,直接选择网络模式就可以了。
在这里插入图片描述
  前面6个数据为Modbus TCP通信时的MBAP报文头,数据的最后面取消了CRC校验。其他的数据和Modbus RTU一样,这里就不多做介绍了。
在这里插入图片描述

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

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

相关文章

3.0C++虚函数

C 虚函数 C的虚函数是一种特殊的成员函数,可以在派生类中被重写。 虚函数的作用是实现多态性,当我们使用基类指针或引用来调用虚函数时,程序会根据实际的对象类型来调用相应的派生类函数。 我们可以将一个成员函数声明为虚函数&#xff0c…

C++primer(第五版)第六章(函数)

6.1函数基础 函数可以理解成是可以循环使用的代码块.函数的定义通常包含以下部分:返回类型,函数名称,参数列表,函数体. //以下是一个返回值为int类型,有两个参数的函数的定义 int add(int a,int b){return ab; }我们用调用运算符( )来执行函数,在运算符内传入参数.调用时会打…

如何确保大模型追求“正确”的目标?丨AI安全与对齐圆桌回顾

导读 在智源大会「AI 安全与对齐」论坛上,与会嘉宾针对目前人们关心的 AI 安全控制标准、多智能体强化学习环境下的安全、开源对 AI 安全的影响、对智能涌现安全的思考等问题展开了讨论。 能力越大,责任越大。 嘉宾名单 谢旻希丨主持人,安远A…

高压线路距离保护程序逻辑原理(一)

为了保证高压线路输电的稳定性和可靠性,通常要求高压电网构成多侧电源的环形电网。在这种电网中简单的电压电流保护往往不能满足保护的基本要求,例如方向电流保护往往不能保证有选择性地切除故障。为此,在多侧电源的环形电网的线路上配置了选…

使用Nexus搭建Maven私有库实战

本篇快速演示如何搭建和使用Nexus本地库, 关于Nexus 的基本使用参考: Nexus搭建Maven私有库介绍 实战场景 本篇的实际场景是: 本地开发机器可以连接外部网络测试或正式部署环境只能连接内网项目使用了内部开发的组件库 在搭建搭建Maven私…

如何一次解决两大难题,不用写注释,也不会被他人吐槽没有注释呢?

如何一次解决两大难题,不用写注释,也不会被他人吐槽没有注释呢? 导读为什么要减少代码中的注释量呢?一、无用型的注释二、絮絮叨叨的注释三、代替代码分层的注释四、不知所云的注释 参考:阿里云开发者社区…

【vs2022】解决 “对程序集签名是出错 - 拒绝访问 ”

背景 拿到一个工程,编译时报错:“对程序集签名是出错 - 拒绝访问” 解决方法 ”C:\ProgramData\Microsoft\Crypto\RSA”目录下面,找到【MachineKeys】文件夹。 右键【MachineKeys】文件夹,在安全属性里面,将当前win…

DETR系列:RT-DETR(一) 论文解析

论文:《DETRs Beat YOLOs on Real-time Object Detection》 2023.4 DETRs Beat YOLOs on Real-time Object Detection:https://arxiv.org/pdf/2304.08069.pdf 源码地址:https://github.com/PaddlePaddle/PaddleDetection/tree/develop/conf…

江西五十铃汽车PMO经理苏建受邀为第十二届PMO大会演讲嘉宾

江西五十铃汽车有限公司PMO经理苏建先生受邀为由PMO评论主办的2023第十二届中国PMO大会演讲嘉宾,演讲议题:PMO全链路建设促进组织变革——传统汽车行业0-1PMO最佳实践探索。大会将于8月12-13日在北京举办,敬请关注! 议题简要&…

LangChain:LLM应用程序开发(上)——Models、Prompt、Parsers、Memory、Chains

文章目录 一、Models、Prompt、Parsers1.1 环境配置(导入openai)1.2 辅助函数(Chat API : OpenAI)1.3 使用OpenAI API进行文本翻译1.4使用LangChain进行文本翻译1.5 使用LangChain解析LLM的JSON输出1.5.1 LangChain输出为string格…

基于人体姿势估计的舞蹈检测(AI Dance based on Human Pose Estimation)

人体姿势骨架以图形格式表示人的方向。本质上,它是一组坐标,可以连接起来描述人的姿势。骨架中的每个坐标都被称为一个部分(或一个关节,或一个关键点)。两个部分之间的有效连接称为一对(或分支)。下面是一个人体姿势骨架样本。 因此&#xff…

mysql基础3——数据备份与恢复、破解数据库密码

文章目录 一、备份方案二、备份工具mysqldump2.1 备份整张表数据2.2 备份整个库数据 三、全量备份四、差异备份五、数据库密码破解 一、备份方案 备份方案概念特点全量备份对某一个时间点上的所有数据或应用进行完全拷贝。数据恢复快,备份时间长。增量备份在一次全…

抓住重点,谋定而后动

一、我们平常项目有哪几种 有两种常规项目、大项目 1.常规项目 技术团队的重心是把执行做到位,你要更关注过程管控,确保系统交付 2.大项目: 什么是大项目,他有什么特点 大项目时间投入大、人员规模大、系统更大,复…

ResourceBundle读取properties文件

ResourceBundle 常用API 方法签名方法描述public Locale getLocale()获取本地国际化环境ppublic Enumeration getKeys()获取属性文件中所有keypublic final String getString(String key)获取属性文件中key对应的value, 返回值为String, 如果不存在, 则抛出异常public final O…

STM32文档

一、寄存器缩写 二、存储器和总线构架 DMA,全称为:Direct Memory Access,即直接存储器访问 简而言之,DMA就是将一个内存里的数据搬运到另一个内存里,此过程无需CPU直接控制输出 系统架构存储器组织存储器映射&#xf…

解密:Prompt、Token、和completions是什么?

Prompt、Token、和completions 本文是科普向,大家放心阅读 在ChatGPT越来越火的时候,很多开发者都想大展拳脚,但在这之前,我们需要了解一些基础知识,比如你知道什么是token、什么是prompt、什么是Complemention Pro…

vue下基于elementui自定义表单-后端数据设计篇

vue下基于elementui自定义表单-后端篇 自定义表单目前数据表单设计是基于数据量不大的信息单据场景,因为不考虑数据量带来的影响。 数据表有: 1.表单模版表,2.表单实例表,3.表单实例项明细表,4表单审批设计绑定表 以FormJson存…

chatgpt赋能python:关于Python的常见问题及解决方法

关于Python的常见问题及解决方法 在编程领域中,Python已经成为了最流行的编程语言之一。然而,在使用Python编写代码时,难免会遇到一些问题。在本文中,我们将介绍一些常见的Python问题以及如何解决它们。 编码问题 在Python中&a…

idea项目名旁边还有一个项目名——idea笔记

问题描述 我们常常因为想改项目名但是没有改完全从而出现了项目名旁边还有一个项目名 例如: 解决方案: 打开File->project structure 修改前: 修改后:

【数据挖掘】时间序列教程【一】

第一章 说明 对于时间序列的研究,可以追溯到19世纪末和20世纪初。当时,许多学者开始对时间相关的经济和社会现象进行研究,尝试发现其规律和趋势。其中最早的时间序列研究可以追溯到法国经济学家易贝尔(Maurice Allais)…