modbus TCP协议讲解及实操
具体讲解
- 前言
- 正文
- modbus tcp主机请求数据
- 基本讲解
- Modbus Poll工具简单使用讲解
- modbus tcp从机响应数据
- Modbus Slave工具简单使用讲解
前言
关于modbus tcp从0到1的讲解,案例结合讲解,详细了解整个modbus的可以参考这个:详解Modbus通信协议。
正文
首先说明一下一个概念,所谓的传输协议,不管是mqtt也好还是modbus也罢,实际上传递的基本都是16进制的字节数组,不同的是每个协议,每个字节,每个字节对应的每一位具有不同的含义,所以,想了解一种协议,就要明白它的字节含义即可,切勿急躁。
言归正传,Modbus就是一个总线通信协议,说白了就是一条线上挂了很多个设备和一个主设备。

通信的规则是:从机不能主动给主机发送消息,只能主机给从机发消息,从机回应,无论是你想查看某一个从机的数据,还是修改某个从机的数据,都需要通过主机先发送一个消息给从机,然后从机根据主机发过来的数据指令,去做对应的操作,最后将结果回应给主机。
注重说一下,在tcp通信中,主机充当的是客户端的角色,从机充当的是服务端的角色,所有从机用的端口都一样,不同从机用id地址区分(也就是从机号)
modbus tcp主机请求数据
基本讲解
我们说一下主机请求从机需要发送的基本数据

针对性的讲一下每个参数,先有个映像,后边还会举例说明:
-
事物标识符:
就是一个递增的数字,每次发送消息递增一下即可,尽量不重复,因为占用2个字节,所以范围是:0~65535 -
协议标识符
这个默认给固定值0,表示modbus协议 -
长度
等于协议标识符的长度2+协议数据单元PDU的长度(不固定) -
单元标识符
这个就是从机地址,就是slave id -
功能码
Modbus规定了多个功能,那么为了方便的使用这些功能,我们给每个功能都设定一个功能码,就是上边说的,你要对从机做什么操作,那么就在这里设定好,从机读取到这个数据就知道要做什么啦。

-
数据
数据对于主机来说就是想要操作从机寄存器里的哪些数据,什么是寄存器?就是从机用来存数据的地方,讲从机的时候具体再将。
讲完了基本概念,咱们来实操一下,在这之前,咱们需要用到两个工具(Modbus Poll 和 Modbus Slave)
Modbus Poll工具简单使用讲解



明白这些就可以啦。
现在我们来连接上1号从机。

连接之后会发现收到了从机的数据了,并且在界面上显示了出来,这里提前给看一下从机的页面(注意不一个软件哈)。

从图上就知道了,确实,我们收到了从机的数据 ,好,那么我们接下来深入看一下主机到底给从机发送了什么数据?

006-01 03 00 00 00 06 01 03 00 00 00 0A
其中,因为软件显示的原因,006-01 03这其实就是事物标识符的两个字节,那么来实际看一下,数据到底是不是我们上边讲的?

006-01 03【事物标识符】00 00【协议标识符】 00 06【长度】01【单元标识符】 03【功能码】 00 00 00 0A【数据】
- 算一下吧,长度=单元标识符1+PDU(功能码+)5=6;
- 功能码03代表查询数据,单元标识符01代表从机id号,所有都对应上了,没问题;

- 再看下发送的数据:

其中 00 00代表要查询的寄存器起始位,00 0A(十进制就是10)代表要查询从起始位往后10位,对应工具设置的这里.

当然你也可以把起始位置和查询数量的参数改一下,再去跟发送的内容对比一下,是同步的,另外,显示界面也会变化的,可以多尝试一下。
modbus tcp从机响应数据
参考主机发送数据,一样的道理,毕竟用的都是modbus tcp协议。

这里就直接实操讲解
Modbus Slave工具简单使用讲解

这里说明一下,工具上显示的寄存器只有0-9位,但是不代表实际中就只有10位哈。

从上边的讲解中可以看出,寄存器是分区的,范围一般是0~49999,工具为了模拟,所以只做了10位。


好了,这两步知道就可以了!
当我们启动这边,主机那边才能连接上,并且发送数据,主机连接上之后,看下发送的数据和收到的数据吧。

031-08 13 00 00 00 17 01 03 14 03 E8 00 0C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
为了方便讲解,把响应的数据拆成两部分讲解:
031-08 13 00 00 00 17 01
这部分代表报文头,其他参数都没疑问,就是这个17变化了,十六进制的17转化成十进制是23。
这就对了,23=1(单元标识符)+22(下边的PDU)。
03 14 03 E8 00 0C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
PDU的变化相对于主机发送的数据来说变长了,那么我们来解释一下:
03:代表功能码(主机那边传递过来的,原封不动返回去)。
14:代表的是数据长度,转换成十进制正好是20,从数据可以看出从14往后数,正好有20位。
03 E8:代表寄存器0号位置的数值,转换成十进制就是1000。
00 0C:代表寄存器1好位置的数据,转换成十进制就是12。
后边的就不一一讲解了吧,都是每个位置对应的值。
再对比下前边的图

不难理解了吧。
ok,讲解完毕,后边会整合springboot、netty实现一套完成的主机客户端。
相关文章:
modbus TCP协议讲解及实操
具体讲解 前言正文modbus tcp主机请求数据基本讲解Modbus Poll工具简单使用讲解 modbus tcp从机响应数据Modbus Slave工具简单使用讲解 前言 关于modbus tcp从0到1的讲解,案例结合讲解,详细了解整个modbus的可以参考这个:详解Modbus通信协议…...
既有内销又有外贸,多样性外贸业务管理解决方案
随着外贸数字化贸易全球化的深入发展,出口、进口、内销业务越来越受到关注。外贸业务是企业在海外市场进行商品贸易,而内销业务是企业在国内市场进行商品贸易。在管理这种业务时,想要实现降本增效,企业需要有一套成熟的管理解决方…...
spring eurake中使用IP注册
在开发spring cloud的时候遇到一个很奇葩的问题,就是服务向spring eureka中注册实例的时候使用的是机器名,然后出现localhost、xxx.xx等这样的内容,如下图: eureka.instance.perferIpAddresstrue 我不知道这朋友用的什么spring c…...
c# 从零到精通 form界面之listView控件
c# c# 从零到精通 form界面之listView控件 添加值 设置值 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace Test06 { public partial cla…...
Qt6.5.1+WebRTC学习笔记(十二)环境搭建流媒体服务器(ubuntu22.04+SRS)
前言 若只是实现一对一通信,仅使用webrtc就足够了。但有时间需要进行多个人的直播会议,当人比较多时,建议使用一个流媒体服务器,笔者使用的是SRS。 这个开源项目资料比较全,笔者仅在此记录下搭建过程 一、准备 1.操…...
LeetCode 9. 回文数
LeetCode 9. 回文数 一、题目描述: 给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数…...
Linux系统之部署Teleport堡垒机系统
Linux系统之部署Teleport堡垒机系统 一、Teleport介绍1.1 Teleport简介1.2 Teleport特点1.3 支持操作系统 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、检查本地环境3.1 检查本地操作系统版本3.2 检查系统内核版本 四、部署teleport服务端4.1 创建部署目录4.2 下载t…...
【二叉树part02】| 102.二叉树的层序遍历、226.翻转二叉树、101.对称二叉树
目录 ✿LeetCode102.二叉树的层序遍历❀ ✿LeetCode226.翻转二叉树❀ ✿LeetCode101.对称二叉树❀ ✿LeetCode102.二叉树的层序遍历❀ 链接:102.二叉树的层序遍历 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地ÿ…...
【干货】Android系统定制基础篇:第十五部分(Android支持鼠标右键返回、GPIO 控制方案、属性标识USB摄像头的VID与PID)
1、修改 frameworks/native/services/inputflinger/InputReader.cpp 如下: diff --git a/frameworks/native/services/inputflinger/InputReader.cpp b/frameworks/native/services/inputflinger/Inp index 7207a83..2721800 100755 --- a/frameworks/native/servi…...
ubuntu18 修改dns服务器地址为google
域名解析被干扰的有点严重,直接使用谷歌dns服务器来解析ip 第一、永久修改DNS方法 1、修改 /etc/systemd/resolved.conf 文件 vi /etc/systemd/resolved.conf这里我们可以看到这些参数: # 指定 DNS 服务器,以空白分隔,支持 IP…...
RHCE shell 作业一
1. 设置邮箱 [rootserver ~]# yum install s-nail -y [rootserver ~]# vim /etc/s-nail.rc 编写脚本 [rootserver ~]# vim homework1.sh 设置定时任务 [rootserver ~]# vim /etc/crontab 2. [rootserver ~]# vim homework2.sh 测试: 3. [rootserve…...
Qqis中采用栅格工具生成XYZ瓦片(目录)简介
目录 前言 一、Qgis的相关功能 1、数据准备 2、将两个xyz图源添加到图层 二、Qgis栅格工具生成 1、生成xyz图块工具在哪里 2、生成xyz图块怎么用 3、下载结果 4、Leaflet加载离线瓦块 总结 前言 在上一篇博客中,介绍了一种在Qgis中基于QMetaTiles插件进行xyz瓦…...
【Axure教程】根据标签数自动调整尺寸的多选下拉列表
多选下拉列表常用于需要用户从一组选项中选择多个选项的情况。它提供了一个下拉菜单,用户可以点击展开并选择他们感兴趣的多个选项。多选下拉列表可以用于展示可选标签,并允许用户选择多个标签。例如,在一个博客发布界面上,可以…...
【python】js逆向基础案例——有道翻译
前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 课程亮点: 1、爬虫的基本流程 2、反爬的基本原理 3、nodejs的使用 4、抠代码基本思路 环境介绍: python 3.8 pycharm 2022专业版 >>> 免费使用教程文末名片获取 requests >>> pip install req…...
面经系列.飞猪 Java开发工程师.杭州.2023.6.14一面面经
本人是2023年6月14日面试的,面试的岗位是飞猪的Java研发工程师,地点是杭州,面试时长37分钟,没有问八股文。全都围绕项目在问,在提问的过程中会涉及到原理以及具体操作。整体面试感觉下来,面试官很随和,通过面试也能和面试官学到很多,交流了对未来行业的看法,也对某些技…...
基于物联网及云平台的光伏运维系统
系统结构 在光伏变电站安装逆变器、以及多功能电力计量仪表,通过网关将采集的数据上传至服务器,并将数据进行集中存储管理。用户可以通过PC访问平台,及时获取分布式光伏电站的运行情况以及各逆变器运行状况。平台整体结构如图所示。 光伏背景…...
Android kotlin 实现仿京东多个item向左自动排队(横向、动手滑动、没有首尾滑动)功能
文章目录 一、实现效果二、引入依赖三、源码实现1、适配器2、视图实现一、实现效果 二、引入依赖 在app的build.gradle在添加以下代码 1、implementation com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.6,这个里面带的适配器,直接调用就即可 BaseRecyclerViewAdapt…...
美团买菜基于 Flink 的实时数仓建设
美团买菜基于 Flink 的实时数仓建设 1. 背景介绍2. 技术愿景和架构设计3. 典型场景、挑战与应对3.1 动态 ETA 实时特征3.2 实时数据经营分析 4. 未来规划 1. 背景介绍 美团买菜是美团自营生鲜零售平台,上面所有的商品都由美团亲自采购,并通过供应链物流体…...
前端vue入门(纯代码)08
【08.webStorage--本地存储】 (1). 什么是 localStorage 和 sessionStorage ? 它们都是浏览器的一种本地存储数据的方式它们只是存在本地,即浏览器中,不会发送到服务器 它们的区别: localStorage:永久存在浏览器中…...
Xubuntu22.04之便签工具(一百八十)
简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
