带你玩转modbusTCP通信

news2024/10/2 6:43:04

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协议的数据格式如下:

  1. Modbus TCP帧格式

Modbus TCP帧格式如下:

| 事务标识符 | 协议标识符 | 长度 | 单元标识符 | 功能码 | 数据 |

其中,各字段含义如下:

  • 事务标识符:用于标识请求和响应的对应关系。
  • 协议标识符:固定为0x0000。
  • 长度:指示后续数据的字节数。
  • 单元标识符:用于标识Modbus设备。
  • 功能码:指示请求操作的类型。
  • 数据:请求或响应的数据。

几个主要的域说明:

Modbus TCP的事务标识符用于标识请求和响应的对应关系。它是一个16位的无符号整数,由客户端生成,并在请求和响应中保持不变。在请求中,客户端使用一个新的事务标识符,而在响应中,服务器使用相同的事务标识符,以便客户端可以将响应与请求进行匹配。事务标识符的范围是0到65535。

Modbus TCP的单元标识符用于标识Modbus设备。它是一个8位的无符号整数,通常设置为0xFF,表示广播地址。如果单元标识符不是广播地址,则请求将被发送到指定的设备,并且响应也将返回到该设备。如果单元标识符是广播地址,则请求将被发送到所有设备,并且响应只会返回到请求的客户端。在大多数情况下,单元标识符设置为0xFF。

  1. Modbus TCP功能码

Modbus TCP支持的功能码如下:

功能码描述
0x01读线圈
0x02读离散输入
0x03读保持寄存器
0x04读输入寄存器
0x05写单个线圈
0x06写单个保持寄存器
0x0F写多个线圈
0x10写多个保持寄存器
  1. 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】多平台都有更新和发布,大家可以一键三连,关注+星标,不错过精彩内容~
在这里插入图片描述

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

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

相关文章

从0开始学python -49

Python MySQL - mysql-connector 驱动 -2 插入数据 插入数据使用 “INSERT INTO” 语句: demo_mysql_test.py: 向 sites 表插入一条记录。 import mysql.connectormydb mysql.connector.connect(host"localhost",user"root",passwd"…

液氮恒温器概述

恒温器是直接或间接控制一个或多个热源和冷源来维持所要求的温度的一种装置。 恒温器要实现这种功能,就必须具有一个敏感元件和一个转换器,敏感元件量度出温度的变化,并对转换器产生所需的作用。转换器把来自敏感元件的作用转换成对改变温度…

创建型设计模式(C++)

文章目录1.简单工厂模式&静态工厂模式2.工厂方法模式3.抽象工厂模式4.原型模式5.单例模式a.饿汉式b.懒汉式6.建造者模式(生成器模式)创建型模式提供了创建对象的机制,旨在提升已有代码的灵活性和可复用性。 部分插图来自: ht…

20230308 Apdl lsdyna两杆撞击案例学习笔记

本次模拟使用的是ANSYS 16.0 一、设置Element type 首先打开APDL界面 添加element type 在LS-DYNA Explicit选择条件下,选择3D solid 164 二、设置材料类型 选择material models 选择Elastic-Isotropic-输入 Density:密度 EX:杨氏模量 NUXY:泊松比 三、几何模型建…

小应用记账本-第2章-数据库设计

小应用记账本-第2章-数据库设计 在上一章《小应用记账本-第1章-需求分析》已经罗列了我们需要的功能,因为很简单,所以这一章就来设计数据库吧。 Account表:账户表 字段名类型说明取值idint账户idaccount_namevarchar账户名称remaining_sumd…

【目标检测论文解读复现NO.33】改进YOLOv5的新能源电池集流盘缺陷检测方法

前言此前出了目标改进算法专栏,但是对于应用于什么场景,需要什么改进方法对应与自己的应用场景有效果,并且多少改进点能发什么水平的文章,为解决大家的困惑,此系列文章旨在给大家解读最新目标检测算法论文,…

python+opencv生成较真实的车牌号码图片

本文参考github代码:https://github.com/loveandhope/license-plate-generator 效果: 一、代码目录结构: font目录下存放车牌中文、字符的ttf字体 images目录下存放蓝色底牌、新能源绿色底牌、污渍(噪声)的图片 完整…

嵌入式物联网毕业设计选题智能图像识别项目-stm32mp157 linux开发板

stm32mp157开发板FS-MP1A是华清远见自主研发的一款高品质、高性价比的Linux单片机二合一的嵌入式教学级开发板。开发板搭载ST的STM32MP157高性能微处理器,集成2个Cortex-A7核和1个Cortex-M4 核,A7核上可以跑Linux操作系统,M4核上可以跑FreeRT…

ControlNet-有条件图文生成论文阅读

文章目录摘要算法:ControlNetControlNet in Image Diffusion ModelTrainingImproved Training实验Canny edgesHough linesHuman scribblesHED boundary mapOpenpifpaf poseOpenposeADE20K segmentation mapCOCO-Stuff segmentation mapDIODE normal mapDepth-to-Ima…

蓝桥冲刺31天之第六天

今天是摆子的一天,明天我要肝一整天的第四题!!! PS:一个普通的排序罢了 import java.io.*; import java.util.Arrays; import java.util.Scanner;/*** ClassName 考勤刷卡* Description TODO* Author 小怂很怂* Date 2…

DataX与DB2导入导出案例

DataX与DB2导入导出案例 文章目录DataX与DB2导入导出案例0. 写在前面1. DB2介绍2. DB2数据库对象关系3. 安装前的准备3.1 安装依赖3.2 修改配置文件 sysctl.conf3.3 修改配置文件 limits.conf4. 安装4.1 预检查4.2 添加组和用户4.3 创建实例4.4 创建实例库、开启服务4.5 连接5.…

在CentOS7上静默安装Oracle19c

1.下载Oracle 官方安装包下载路径(需要登录Oracle账号): https://www.oracle.com/database/technologies/oracle-database-software-downloads.html#19c 可选择windows/Linux平台对应的安装包,我选择Linux x86-64、ZIP包下载&…

分析linux内核移植中vmlinux可执行文件是如何生成的?以及 uImage/zImage/Image/vmlinx之间关系

一:分析linux内核移植中vmlinux可执行文件是如何生成的? 1:进入内核源码顶层目录下打开Makefile文件,搜索vmlinux 这里构建vmlinux的命令使用了makefile的内置函数call。这是一个比较特殊的内置函数,make使用它来引用…

Go语言学习编程实践:五种模式解决go中的并发问题

五种模式解决go中的并发问题For-Select-Done扇入模式从流中获取前 n 个值订阅模式地图模式过滤模式For-Select-Done 我们应该防止程序中发生任何泄露。所以我们应该对于留在程序中的go例程发送信号,让它知道它可以退出。 最常见的就是将for-select循环与通道结合起…

UEFI启动流程

以上是UEFI系统运行的7个阶段,下边是详细描述: SEC阶段:(安全验证) 1、接收和处理系统的启动,重启,异常信号; 2、SEC阶段特色功能“Cache As RAM(CAR)”&am…

英伦四地到底是什么关系?

英格兰、苏格兰、威尔士和北爱尔兰四地到底是什么关系,为何苏格兰非要独立?故事还要从中世纪说起。大不列颠岛位于欧洲西部,和欧洲大陆隔海相望。在古代,大不列颠岛和爱尔兰属于凯尔特人的领地。凯尔特人是欧洲西部一个庞大的族群…

Caddy2学习笔记——Caddy2反向代理Frp内网穿透和反向代理PVE

一、环境概述 本人拥有一个国内云服务商的云主机和一个备案好的域名,通过caddy2来作为web服务器。 我的云主机是公网ip,地址为:43.126.100.78;我备案好的域名是:hotgirl.com 。后面的文章都以上述的ip和域名来进行讲解…

Actipro WinForms Studio Crack

Actipro WinForms Studio Crack 已验证Microsoft.NET 7兼容性。 添加了MetroDark配色方案。 添加了支持MetroLight和MetroDark颜色方案的MetroScrollBarRenderer。 添加了IWindowsColorScheme接口,该接口将替换对WindowsColorScheme的大多数引用。 添加了IWindowsCo…

Zookeeper客户端ZkClient、Curator的使用,史上最详细的教程来啦~

1 前言 本文主要介绍了操作Zookeeper的几种客户端的基础使用,希望对老铁们会有所帮助。 可以去操作zookeeper创建、删除、查询、修改znode节点 2 Zookeeper服务器客户端分类 目前,Zookeeper服务器有三种Java客户端: Zookeeper、Zkclient和…

inquirerjs

inquirerjs inquirerjs是一个用来实现命令行交互界面的工具集合。它帮助我们实现与用户的交互交流,比如给用户一个提醒,用户给我们一个答案,我们根据用户的答案来做一些事情,典型应用如plop等生成器工具。 npm install inquirer…