当前位置: 首页 > news >正文

Modbus TCP

Modbus

(👆 百度百科,放心跳转)

起源

Modbus 由 Modicon 公司于 1979 年开发,是一种工业现场总线协议标准。
Modbus 通信协议具有多个变种,支持串口,以太网多个版本,其中最著名的是 Modbus RTU、
Modbus ASCII 和 Modbus TCP 三种。Modbus TCP 是在施耐德收购 Modicon 后 1997 年发布的。

分类

1、Modbus RTU(Remote Terminal Unit)
运行在串口上的协议,采用二进制表现形式以及紧凑的数据结构,通信效率高,应用广泛。
2、Modbus ASCII
运行在串口上的协议,采用 ASCII 码进行传输,并且在每个字节的开始和结束 都有特殊字符作为标志,传输效率远远低于 Modbus RTU,只有传输数据量较小时,才会考虑。
3、Modbus TCP
运行在以太网上的协议。

优势

免费、简单、容易使用。

应用场景

Modbus 协议是现在国内工业领域应用最多的协议,不只 PLC 设备,各种终端设备,比如水控机、水表、电表、工业秤、各种采集设备,都应用此协议。

通信

1、Modbus 采用主从问答式(master / slave)通信;

有一个节点是 master 节点,其他使用 Modbus 协议参与通信的节点是 slave 节点(可多个), 每个 slave 设备都有唯一一个地址。

Modbus TCP

Modbus TCP 协议 和 Modbus RTU 协议非常相似,只要把 RTU 协议中两个字节的校验码去掉,然后在 RTU 协议的开始加上 5 个 0 和 1 个 6,通信时通过 TCP/IP 网络协议发送出去即可。
在这里插入图片描述

特点

1、见“Modbus ——> 通信”;

2、该协议是 应用层的协议,基于传输层的 TCP协议 进行通信;
3、Modbus TCP 默认接收报文的端口号为 502。

协议格式(报文头 + 功能码 + 数据)

Modbus TCP/IP 协议 最大数据帧长度为 260 字节。报文格式如下:
在这里插入图片描述

报文头

在这里插入图片描述

功能码

在这里插入图片描述

寄存器

在这里插入图片描述

线圈寄存器,类比为开关量,每一个 bit 都对应一个信号的开关状态,所以 一个 byte 就可以同时控制8 路的信号。 线圈寄存器支持也支持写,写又分为写单个线圈寄存器和写多个线圈寄存器。
对应功能码:0x01 0x05 0x0f
离散输入寄存器,相当于线圈寄存器的只读模式,也是每个 bit 表示一个开关量,其开关量只能读取输入的开关信号,是不能写的。比如取外部按键的按下还是松开。
对应功能码: 0x02
保持寄存器,单位不再是 bit 而是两个 byte,是可以存放具体的数据量的。比如设置时间年月日,不但可以写入也可以读出。该寄存器并可读写的,写也分为写单个保持寄存器和写多个保持寄存器。
对应功能码: 0x03 0x06 0x10
输入寄存器,和保持寄存器类似,但也只支持读而不能写。一个寄存器也是占据两个 byte 的空间。比如,通过读取输入寄存器获取现在的 AD 采集值。
对应功能码: 0x04

读数据

主机 ——>从机
报文头 + 功能码 + 起始地址 + 数量
7 + 1 + 2 + 2 = 12
从机 ——>主机
报文头 + 功能码 + 字节计数 + 数据
7 + 1 + 1 + n = 9 + n

0x01(读线圈状态)

在这里插入图片描述

0x02(读离散输入状态)

在这里插入图片描述

0x03(读保持寄存器)

在这里插入图片描述

0x04(读输入寄存器)

在这里插入图片描述

写单个

主机 ——>从机
报文头 + 功能码 + 地址 + 断通标志 / 数据
7 + 1 + 2 + 2 = 12
从机 ——>主机
原文返回

0x05(写单个线圈)

在这里插入图片描述

0x06(写单个保持寄存器)

在这里插入图片描述

写多个

主机 ——>从机
报文头 + 功能码 + 起始地址 + 数量 + 字节计数 + 数据
7 + 1 + 2 + 2 + 1 + n = 13 + n
从机 ——>主机
报文头 + 功能码 + 起始地址 + 数量
7 + 1 + 2 + 2 = 12

0x0F(写多个线圈)

在这里插入图片描述

0x10(写多个保持寄存器)

在这里插入图片描述

工具软件的安装与使用

Modbus poll

破解

点击 connection -> connect,输入序列号即可。

使用

先设置,后连接。
在这里插入图片描述

Modbus slave

破解

点击 connection -> connect,输入序列号即可。

使用

先设置,后连接。
在这里插入图片描述

网络调试助手

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

Wireshark(Windows 版)

在这里插入图片描述

捕获器选择:
如果连接有线网络,选择本地连接 / 以太网;
如果连接无线网络,选择 WLAN;
如果只是在本机上的通信,可以选择 NPCAP Loopback apdater 或 Adapter for loopback traffic capture。
过滤条件:

1、过滤端口:tcp.port == 502
2、过滤IP:ip.addr == Windows 的IP
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

练习:

1、读传感器数据,读1个寄存器数据,写出主从数据收发协议。
在这里插入图片描述

2、写出控制 IO 设备开关的协议数据,操作1个线圈,置1。
在这里插入图片描述

3、在虚拟机编写客户端,实现 poll 端功能,和 Slave 通信,读保持寄存器的三个值。

    uint8_t hldreg[12] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x01, 0x03, 0x00, 0x00, 0x00, 0x03};send(sockfd, hldreg, sizeof(hldreg), 0);uint8_t buf[32] = {};recv(sockfd, buf, sizeof(buf), 0);for (int i = 0; i < buf[8]; i++)printf("%#x ", buf[9+i]);putchar(10);

运行结果如下:
在这里插入图片描述
在这里插入图片描述

4、编写客户端程序,实现对 Slave 单个线圈的控制(置一)。

    uint8_t coil[12] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x01, 0x05, 0x00, 0x00, 0xff, 0x00};send(sockfd, coil, sizeof(coil), 0);

运行结果如下:
在这里插入图片描述

5、封装函数:设置单元标识符(从机地址)

void set_slave_id(uint8_t *p, int slave_id){p[6] = slave_id;
}

6、封装函数:读保持寄存器

void read_hldreg(int addr, int num, uint8_t *hldreg, uint8_t *dest){hldreg[5] = 0x06;hldreg[7] = 0x03;hldreg[8] = addr >> 8;hldreg[9] = addr & 0xff;hldreg[10] = num >> 8;hldreg[11] = num & 0xff;send(sockfd, hldreg, 12, 0);			// 指针类型,不能 sizeof(hldreg)recv(sockfd, dest, 64, 0);				// 64 为数组 dest 的长度,sockfd 为全局变量
}

相关文章:

Modbus TCP

Modbus &#xff08;&#x1f446; 百度百科&#xff0c;放心跳转&#xff09; 起源 Modbus 由 Modicon 公司于 1979 年开发&#xff0c;是一种工业现场总线协议标准。 Modbus 通信协议具有多个变种&#xff0c;支持串口&#xff0c;以太网多个版本&#xff0c;其中最著名的…...

基于人工兔算法优化概率神经网络PNN的分类预测 - 附代码

基于人工兔算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于人工兔算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于人工兔优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神经网络…...

微服务学习(十二):安装Minio

微服务学习&#xff08;十二&#xff09;&#xff1a;安装Minio 一、简介 MinIO 是一款基于Go语言发开的高性能、分布式的对象存储系统。客户端支持Java,Net,Python,Javacript, Golang语言。MinIO系统&#xff0c;非常适合于存储大容量非结构化的数据&#xff0c;例如图片、视…...

SpringCloud实用-OpenFeign整合okHttp

文章目录 前言正文一、OkHttpFeignConfiguration 的启用1.1 分析配置类1.2 得出结论&#xff0c;需要增加配置1.3 调试 二、OkHttpFeignLoadBalancerConfiguration 的启用2.1 分析配置类2.2 得出结论2.3 测试 附录附1&#xff1a;本系列文章链接附2&#xff1a;OkHttpClient 增…...

Python 异步套接字编程

异步套接字编程是异步编程在网络通信中的应用&#xff0c;它使用异步 IO 操作和事件循环来实现高并发的网络应用。Python 中的 asyncio 模块提供了对异步套接字编程的支持&#xff0c;以下是异步套接字编程的一些重要概念和使用方法&#xff1a; 1. 异步套接字服务器&#xff…...

今年的校招薪资真的让人咋舌!

秋招接近尾声&#xff0c;各大公司基本也陆续开奖了。这里整理了部分公司的薪资情况&#xff0c;数据来源于 OfferShow 和牛客网。 ps&#xff1a;爆料薪资的几乎都是 211 和 985 的&#xff0c;并不是刻意只选取学校好的。另外&#xff0c;无法保证数据的严格准确性。 淘天 …...

debian 设置系统默认以命令行方式启动,关闭x windows

debian 设置系统默认以命令行方式启动&#xff0c;关闭x windows 2021-01-02 tech linux 设置 grub启动设置在/etc/default/grub中&#xff0c;打开 default grub 配置: $ sudo vim /etc/default/grub修改以下配置&#xff1a; 更新grub&#xff0c;设置多用户启动: …...

AMEYA360:蔡司新能源汽车解决方案驱动产业未来

电动化正在重塑中国汽车工业。自中国汽车工业开始发展以来&#xff0c;在电动化和智能化的浪潮推动下&#xff0c;汽车行业从未面临着如此巨大的变革。得益于中国汽车产业尤其是新能源车过去十余年的激流勇进&#xff0c;消费者对新能源汽车的接受度也在发生转变。新能源汽车市…...

C#面试问题整理

sqlserver中视图和表的区别 在 SQL Server 中&#xff0c;视图&#xff08;View&#xff09;和表&#xff08;Table&#xff09;是不同的对象&#xff0c;它们有以下几点区别&#xff1a; 数据存储方式&#xff1a;表是一种实际存储数据的数据库对象&#xff0c;它包含列和行&…...

微信小程序 基于Android的共享付费自习室座位选座系统uniAPP

题目&#xff1a; 基于Android的共享自习室APP设计与实现 (学校要求&#xff1a;数据库不少于有逻辑关系的20个表&#xff0c;系统功能不少于60个功能点&#xff09; 技术&#xff1a; 功能&#xff1a; 1. 用户端&#xff1a; 一、首页&#xff1a; &#xff08;1&…...

Java中类的类型判断技巧以及没有无参构造函数时的应对策略。isInstance()方法解析

类的类型判断 基本数据类型的包装类中&#xff0c;例如Integer、Long这些类是没有无参构造方法的&#xff0c;因此在以下情况中&#xff0c;会出错 具体类型是未知的&#xff0c;只有全路径类名 String typeSte "java.lang.Integer"; Class<?> typeClass …...

基于微信小程序的员工宿舍报修系统

项目介绍 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时…...

机器学习探索计划——KNN算法流程的简易了解

文章目录 数据准备阶段KNN预测的过程1.计算新样本与已知样本点的距离2.按照举例排序3.确定k值4.距离最近的k个点投票 scikit-learn中的KNN算法 数据准备阶段 import matplotlib.pyplot as plt import numpy as np# 样本特征 data_X [[0.5, 2],[1.8, 3],[3.9, 1],[4.7, 4],[6.…...

ES6之class类

ES6提供了更接近传统语言的写法&#xff0c;引入了Class类这个概念&#xff0c;作为对象的模板。通过Class关键字&#xff0c;可以定义类&#xff0c;基本上&#xff0c;ES6的class可以看作只是一个语法糖&#xff0c;它的绝大部分功能&#xff0c;ES5都可以做到&#xff0c;新…...

17 redis集群方案

1、RedisCluster分布式集群解决方案 为了解决单机内存&#xff0c;并发等瓶颈&#xff0c;可使用此方案解决问题. Redis-cluster是一种服务器Sharding技术&#xff0c;Redis3.0以后版本正式提供支持。 这里的集群是指多主多从&#xff0c;不是一主多从。 2、redis集群的目标…...

[数据结构]—栈和队列

&#x1f493;作者简介&#x1f389;&#xff1a;在校大二迷茫大学生 &#x1f496;个人主页&#x1f389;&#xff1a;小李很执着 &#x1f497;系列专栏&#x1f389;&#xff1a;数据结构 每日分享✨&#xff1a;到头来&#xff0c;有意义的并不是结果&#xff0c;而是我们度…...

【GridSearch】 简单实现并记录运行效果

记录了使用for循环实现网格搜索的简单框架。 使用df_search记录每种超参数组合下的运行结果。 lgb_model.best_score返回模型的最佳得分 lgb_model.best_iteration_返回模型的最佳iteration也就是最佳n_extimator import numpy as np import pandas as pd import lightgbm as …...

SecureCRT出现Key exchange failed.No compatible key exchange method. 错误解决方法

SecureCRT出现Key exchange failed.No compatible key exchange method. 如下 Key exchange failed. No compatible key exchange method. The server supports these methods: curve25519-sha256,curve25519-sha256libssh.org,diffie-hellman-group-exchange-sha256解决方法&…...

Android RGB转YUV的算法

将 ARGB&#xff08;Alpha-Red-Green-Blue&#xff09;颜色空间转换为 YUV&#xff08;亮度-色度&#xff09;颜色空间的常用算法有以下几种&#xff1a; 矩阵转换法 使用预定义的转换矩阵将 RGB 值转换为 YUV 值。其中&#xff0c;Y 表示亮度&#xff0c;U 和 V 表示色度。这…...

Spring事务底层原理(待完善)

EnableTransactionManagement 我们经常使用EnableTransactionManagement开启事务, 这个注解导入一个类,Import(TransactionManagementConfigurationSelector.class), 会在spring容器增加两个bean, AutoProxyRegistrar和ProxyTransactionManagementConfiguration. AutoProxyRe…...

LiveEventBus安全与混淆配置:保护Android应用数据与代码的终极指南

LiveEventBus安全与混淆配置&#xff1a;保护Android应用数据与代码的终极指南 【免费下载链接】LiveEventBus :mailbox_with_mail:EventBus for Android&#xff0c;消息总线&#xff0c;基于LiveData&#xff0c;具有生命周期感知能力&#xff0c;支持Sticky&#xff0c;支持…...

软考架构师通关秘籍:从CISC/RISC到CPS,这些底层知识点你真的懂了吗?

软考架构师通关秘籍&#xff1a;从CISC/RISC到CPS的底层知识全景解析 当计算机体系结构的演进遇上现代分布式系统设计&#xff0c;软考高级系统架构师考试中的那些看似孤立的概念——从CISC/RISC的指令集之争到信息物理系统(CPS)的虚实融合——实则暗藏着一条贯穿计算机发展史的…...

逻辑优化进阶-香农分解在时序关键路径优化中的应用

1. 香农分解与时序优化的奇妙化学反应 第一次听说香农分解能优化电路时序时&#xff0c;我的反应和大多数工程师一样&#xff1a;"这不就是个布尔函数分解技巧吗&#xff1f;"直到亲眼见证它把一个关键路径延迟降低了30%&#xff0c;才意识到这个诞生于1940年代的数学…...

Unity Shader实战:用ZTest和双Pass实现游戏角色透视效果(附完整源码)

Unity Shader实战&#xff1a;双Pass透视效果全流程开发指南 在角色扮演或战术竞技类游戏中&#xff0c;我们经常需要实现"透视敌人"的视觉效果——当目标被墙壁遮挡时&#xff0c;仍然能够显示其轮廓。这种技术不仅增强了游戏策略性&#xff0c;还能创造出独特的科幻…...

3步诊断与修复:为什么你的Windows任务栏透明工具开机不启动?

3步诊断与修复&#xff1a;为什么你的Windows任务栏透明工具开机不启动&#xff1f; 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB Tran…...

Dify日志审计配置必须在2024年底前完成升级!等保2.0 8.2.3条款强制要求的5项新增字段(user_agent、session_id、api_version)如何精准注入?

第一章&#xff1a;Dify 2026日志审计配置升级的合规性紧迫性随着《网络安全法》《数据安全法》《个人信息保护法》及最新发布的《生成式人工智能服务安全基本要求&#xff08;GB/T 43871—2024&#xff09;》全面实施&#xff0c;日志审计能力已成为AI应用平台强制性合规基线。…...

nli-MiniLM2-L6-H768代码实例:curl/API/Python SDK三种调用方式完整示例

nli-MiniLM2-L6-H768代码实例&#xff1a;curl/API/Python SDK三种调用方式完整示例 1. 服务概述 nli-MiniLM2-L6-H768是一个基于自然语言推理的句子关系判断服务&#xff0c;采用cross-encoder/nli-MiniLM2-L6-H768模型&#xff08;630MB&#xff09;。该服务能够分析两个句…...

用Python+代理IP池模拟真实用户,手把手教你实现抖音直播间自动互动脚本

Python自动化直播间互动技术解析 在当今数字营销领域&#xff0c;直播平台已成为品牌与用户互动的重要渠道。对于开发者而言&#xff0c;理解如何通过技术手段实现自动化互动不仅具有学习价值&#xff0c;也能为数据分析提供支持。本文将深入探讨基于Python的直播间自动化技术实…...

深入SGLang HiCache与LMCache:两大KV Cache卸载方案,我该选哪个?

深入解析SGLang HiCache与LMCache&#xff1a;KV Cache卸载技术选型指南 在大模型推理服务中&#xff0c;KV Cache管理是影响性能的关键因素之一。随着模型规模的不断扩大&#xff0c;KV Cache占用的显存资源也急剧增加&#xff0c;如何高效管理这些缓存成为技术团队必须面对的…...

Primo内置代码编辑器深度解析:实时预览与智能开发体验

Primo内置代码编辑器深度解析&#xff1a;实时预览与智能开发体验 【免费下载链接】primo Component-based CMS with a built-in IDE, visual editing, and static site generation. One server, unlimited sites. 项目地址: https://gitcode.com/gh_mirrors/pr/primo P…...