带你玩转modbusTCP通信
modbus TCP
Modbus TCP是一种基于TCP/IP协议的Modbus通信协议,它是Modbus协议的一种变体,用于在以太网上进行通信。Modbus TCP协议是一种开放的通信协议,它支持多种编程语言和操作系统,并且可以在不同的硬件和软件平台上进行通信。
Modbus TCP协议使用标准的TCP/IP协议栈,通过以太网进行通信。它支持多个设备同时访问同一个Modbus TCP服务器,从而实现了高效的数据传输。
Modbus TCP协议的数据格式与Modbus RTU协议类似,但是它使用了不同的传输方式。Modbus TCP协议使用了基于TCP的传输方式,因此它可以在局域网或广域网上进行通信,而不需要使用串行通信线路。
Modbus TCP协议可以用于控制和监控各种设备,包括工业自动化设备、机器人、传感器、PLC等。它被广泛应用于工业自动化领域,因为它具有高效、可靠、灵活和易于实现的特点。
modbus TCP通信协议
Modbus TCP协议的数据格式如下:
- Modbus TCP帧格式
Modbus TCP帧格式如下:
| 事务标识符 | 协议标识符 | 长度 | 单元标识符 | 功能码 | 数据 |
其中,各字段含义如下:
- 事务标识符:用于标识请求和响应的对应关系。
- 协议标识符:固定为0x0000。
- 长度:指示后续数据的字节数。
- 单元标识符:用于标识Modbus设备。
- 功能码:指示请求操作的类型。
- 数据:请求或响应的数据。
几个主要的域说明:
Modbus TCP的事务标识符用于标识请求和响应的对应关系。它是一个16位的无符号整数,由客户端生成,并在请求和响应中保持不变。在请求中,客户端使用一个新的事务标识符,而在响应中,服务器使用相同的事务标识符,以便客户端可以将响应与请求进行匹配。事务标识符的范围是0到65535。
Modbus TCP的单元标识符用于标识Modbus设备。它是一个8位的无符号整数,通常设置为0xFF,表示广播地址。如果单元标识符不是广播地址,则请求将被发送到指定的设备,并且响应也将返回到该设备。如果单元标识符是广播地址,则请求将被发送到所有设备,并且响应只会返回到请求的客户端。在大多数情况下,单元标识符设置为0xFF。
- Modbus TCP功能码
Modbus TCP支持的功能码如下:
功能码 | 描述 |
---|---|
0x01 | 读线圈 |
0x02 | 读离散输入 |
0x03 | 读保持寄存器 |
0x04 | 读输入寄存器 |
0x05 | 写单个线圈 |
0x06 | 写单个保持寄存器 |
0x0F | 写多个线圈 |
0x10 | 写多个保持寄存器 |
- Modbus TCP数据格式
Modbus TCP数据格式如下:
- 读线圈、读离散输入、读保持寄存器、读输入寄存器:
字节数 | 描述 |
---|---|
2 | 起始地址 |
2 | 寄存器数量 |
- 写单个线圈、写单个保持寄存器:
字节数 | 描述 |
---|---|
2 | 寄存器地址 |
2 | 写入值 |
- 写多个线圈、写多个保持寄存器:
字节数 | 描述 |
---|---|
2 | 起始地址 |
2 | 寄存器数量 |
1 | 字节数 |
n | 写入值 |
其中,n为写入值的字节数。
modbus TCP实例
假设我们有一个Modbus TCP设备,其IP地址为192.168.1.100,端口号为502。我们可以使用一个Modbus TCP客户端来与该设备进行通信。
例如,我们想要读取该设备上寄存器地址为0的16位整数值,我们可以发送以下Modbus TCP请求:
请求报文:
00 01 00 00 00 06 FF 03 00 00 00 01
解释:
00 01 -> 事务标识符,随意指定
00 00 -> 协议标识符,Modbus TCP协议标识符为0x0000
00 06 -> 报文长度,表示后面的报文长度为6个字节
FF -> 单元标识符,广播地址
03 -> 功能码,读取保持寄存器的功能码为0x03
00 00 -> 起始地址,要读取的寄存器地址为0
00 01 -> 寄存器数量,要读取的寄存器数量为1
设备收到请求后,将返回以下响应:
响应报文:
00 01 00 00 00 03 FF 03 02
解释:
00 01 -> 事务标识符,与请求报文相同
00 00 -> 协议标识符,与请求报文相同
00 03 -> 报文长度,表示后面的报文长度为3个字节
FF -> 单元标识符,广播地址
03 -> 功能码,读取保持寄存器的功能码为0x03
02 -> 寄存器值,读取到的16位整数值为2
这就是一个简单的Modbus TCP实例,它演示了如何使用Modbus TCP协议读取一个设备的寄存器值。
为何需要单元标识符?
Modbus TCP是基于TCP/IP协议的应用层协议,它使用TCP协议的端口号来标识Modbus TCP通信。默认情况下,Modbus TCP使用502端口。
虽然Modbus TCP使用端口号来标识通信,但仍然需要使用单元标识符来标识通信的目标设备。这是因为Modbus协议最初是为串行通信设计的,其中每个设备都有一个唯一的地址,称为单元标识符。在Modbus TCP中,单元标识符通常设置为0xFF,表示通信的目标设备是广播地址,但也可以将其设置为特定的设备地址,以单独与该设备通信。
因此,单元标识符在Modbus TCP中仍然具有重要的作用,它可以帮助Modbus TCP客户端识别通信的目标设备,并将请求发送到正确的设备。同时,端口号可以帮助网络路由器将Modbus TCP通信路由到正确的设备。
【最后一个bug】多平台都有更新和发布,大家可以一键三连,关注+星标,不错过精彩内容~
相关文章:

带你玩转modbusTCP通信
modbus TCP Modbus TCP是一种基于TCP/IP协议的Modbus通信协议,它是Modbus协议的一种变体,用于在以太网上进行通信。Modbus TCP协议是一种开放的通信协议,它支持多种编程语言和操作系统,并且可以在不同的硬件和软件平台上进行通信…...
2021牛客OI赛前集训营-提高组(第三场)T2交替
2021牛客OI赛前集训营-提高组(第三场) 题目大意 一个长度为nnn的数组aaa,每秒都会变成一个长度为n−1n-1n−1的新数组a′aa′,其变化规则如下 如果当前数组aaa的大小nnn为偶数,则对于新数组a′aa′的每一个位置i(1≤…...

论文投稿指南——中文核心期刊推荐(金融)
【前言】 🚀 想发论文怎么办?手把手教你论文如何投稿!那么,首先要搞懂投稿目标——论文期刊 🎄 在期刊论文的分布中,存在一种普遍现象:即对于某一特定的学科或专业来说,少数期刊所含…...
华为OD机试 - 不等式(C 语言解题)【独家】
最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧文章目录 使用说明本期题目:不等式题…...

90后老板用低代码整顿旅行社,创2000万年收,他是怎么做到的?(真实)
热爱旅游的92年成都小伙猴哥,大学毕业后开了一家旅行社,主要从事川藏、云南定制游服务。 从今年春节开始,国内各地旅游业开始复苏,向旅行社打电话咨询的人越来越多。 旅游的人多是好事,也是一种烦恼,因为…...

Apache Dubbo 存在反序列化漏洞(CVE-2023-23638)
漏洞描述 Apache Dubbo 是一款轻量级 Java RPC 框架 该项目受影响版本存在反序列化漏洞,由于Dubbo在序列化时检查不够全面,当攻击者可访问到dubbo服务时,可通过构造恶意请求绕过检查触发反序列化,执行恶意代码 漏洞名称Apache …...

【YOLO】YOLOv8训练自定义数据集(4种方式)
YOLOv8 出来一段时间了,继承了分类、检测、分割,本文主要实现自定义的数据集,使用 YOLOV8 进行检测模型的训练和使用 YOLOv8 此次将所有的配置参数全部解耦到配置文件 default.yaml,不再类似于 YOLOv5,一部分在配置文件…...

linux重置root用户密码
重置root密码 法一:rd.break 第 1 步:重启系统编辑内核参数 第 2 步:找到 linux 这行,在此行末尾空格后输入rd.break (End键也可直接进入行尾) 成功后显示页面为: 第 3 步:查看。…...

【DBC专题】-10-CAN DBC转换C语言代码Demo_接收Rx报文篇
案例背景(共15页精讲): 该篇博文将告诉您,CAN DBC转换C语言代码Demo,只需传递对应CAN信号关联参数,无需每个信号"左移"和"右移",并举例介绍:在CANoe/Canalyzer中CAPL中的应用ÿ…...
AtCoder292 E 思维
题意: 给定一副n(n≤3000)n(n\leq 3000)n(n≤3000)个顶点,mmm条有向边的图,可以在图中添加有向边,求添加的最少边数,使得这副图满足:如果顶点aaa到顶点bbb有边,顶点bbb到ccc右有边,…...

20230309英语学习
What Is Sleep Talking? We Look at the Science 为什么人睡觉会说梦话?来看看科学咋说 Nearly everyone has a story about people talking in their sleep.Though it tends to be more common in children, it can happen at any age:A 2010 study in the jour…...

CAD转换PDF格式怎么弄?教你几种方法轻松搞定!
CAD是从事与艺术创作相关等行业的打工人们必需的工作软件,可以用来完成建筑设计图、设计图纸等。在日常的工作中,一些伙伴经常需要传输图纸给合作方来完成探讨。但是CAD图纸需要使用专业软件才能打开,这就给文件传送带来了一定的困难。而且传…...
AtCoder 259E LCM
题意: 以唯一分解形式给出nnn个数: aipi,1ei,1pi,2ei,2...pi,tei,ta_{i}p_{i,1}^{e_{i,1}}p_{i,2}^{e_{i,2}}...p_{i,t}^{e_{i,t}} aipi,1ei,1pi,2ei,2...pi,tei,t 现在可以将某个数改为111,求所有改法中,有多少个…...

MQTT协议-取消订阅和取消订阅确认
MQTT协议-取消订阅和取消订阅确认 客户端向服务器取消订阅 取消订阅的前提是客户端已经通过CONNECT报文连接上服务器,并且订阅了一个主题 UNSUBSCRIBE—取消订阅 取消订阅的报文同样是由固定报头可变报头有效载荷组成 固定报头由两个字节组成,第一个…...

90后小伙,用低代码“整顿”旅游业,年入2000万,他是怎么做到的?
热爱旅游的92年成都小伙猴哥,大学毕业后开了一家旅行社,主要从事川藏、云南定制游服务。 从今年春节开始,国内各地旅游业开始复苏,向旅行社打电话咨询的人越来越多。 旅游的人多是好事,也是一种烦恼,因为…...

C51---PWM 脉冲宽度调制
1.PWM:脉冲宽度调制,它是通过一系列脉冲宽度进行调制,等效出所需要的波形(包含形状以及幅值)。对模拟信号电平进行数字编码。也就是说通过调节占空比的变化来调节信号、能量等的变化,占空比就是指在一个周期内,信号处于…...

毕业设计 基于51单片机WIFI智能家居系统设计
基于51单片机WIFI智能家居系统设计1、毕业设计选题原则说明(重点)2、项目资料2.1 系统框架2.2 系统功能3、部分电路设计3.1 STC89C52单片机最小系统电路设计3.2 ESP8266 WIFI电路设计3.3 DHT11温湿度传感器电路设计4、部分代码展示4.1 LCD12864显示字符串…...

Nginx服务优化措施与配置防盗链
目录 一.优化Nginx的相关措施 二.隐藏/查看版本号 三.修改用户与组 四.设置缓存时间 五.日志切割脚本 六.设置连接超时控制连接访问时间 七.开启多进程 八.配置网页压缩 九.配置防盗链 1.配置web源主机(192.168.79.210 www.zhuo.com) 1.1 安装…...

Java 某厂面试题真题合集
哈喽~大家好,这篇来看看Java 某厂面试题真题合集。 🥇个人主页:个人主页 🥈 系列专栏:【日常学习上的分享】 🥉与这篇相关的文章: Spr…...

很特别的5G市场,5.75亿部手机,却有11亿5G用户,这是怎么了?
中国在5G商用方面已取得了巨大的成绩,这是毋庸置疑的,不过近期公布的一份数据却相当特别,5G手机用户数为5.75亿,而开通了5G套餐的用户数却已超过11亿,这数据对比有点意思。中国在5G商用方面推进很快,建成的…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...

Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...

376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...

多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...

vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...
省略号和可变参数模板
本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...