首页 > 其他分享 >Modbus TCP报文详解

Modbus TCP报文详解

时间:2024-05-28 21:58:40浏览次数:22  
标签:00 01 字节 报文 TCP Modbus 寄存器

一、Modbus TCP协议构成
Modbus TCP通信协议主要包括三个部分:报文头(MBAP)、功能码和数据。Modbus TCP/IP协议的最大数据帧为260个字节。

二、MBAP报文头构成
MBAP报文头占7个字节,具体构成如下:

  1. 事务处理标识符(Transaction Identifier):2个字节,为此次通信事务处理标识符,一般每次通信之后将被要求加1以区别不同的通信数据报文。
  2. 协议标识符(Protocol Identifier):2个字节,表示该条指令遵循Modbus TCP协议,一般都为00 00。
  3. 长度(Length):2个字节,表示后面数据的长度,有几个字节,高字节在前。
  4. 单元标识符(Unit Identifier):1个字节,设备地址,可以用于局域网里面的具体地址。如果目标机器有固定IP,这个地址可能不起作用,通常写成00。

三、功能代码
功能代码占1个字节,主机给从机发送Modbus协议时,从机根据功能码的不同完成不同的操作。功能代码基于四种不同的寄存器类型(离散量输入、线圈、输入寄存器、保持寄存器)可以分为8种主要的功能代码,包括:

  1. 01H:读线圈状态
  2. 02H:读离散量输入线圈
  3. 03H:读保持寄存器
  4. 04H:读输入寄存器
  5. 05H:写单个线圈
  6. 06H:写单个保持寄存器
    (注:以上仅为部分功能代码示例,还有其他功能代码用于不同的操作)

四、数据区
数据区位于功能码之后,其长度和内容取决于功能码和具体的操作。例如,在读取多个线圈的请求报文中,数据区可能包含起始地址和读取的线圈数量;在响应报文中,数据区则包含实际读取的线圈状态值。

五、示例报文
以下是两个示例报文,用于说明Modbus TCP报文的格式:

读取多个线圈的请求报文:

00 01 00 00 00 06 FF 01 00 01 00 10

其中:

  • 00 01:事务处理标识符
  • 00 00:协议标识符
  • 00 06:长度,表示后面有6个字节的数据
  • FF:单元标识符,设备地址
  • 01:功能码,读取多个线圈
  • 00 01:起始地址
  • 00 10:读取的线圈数量(16个)

读取多个保持寄存器的响应报文:

00 01 00 00 00 07 01 03 04 00 22 00 00

其中:

  • 00 01 00 00 00 07:与请求报文中的前6个字节相同,表示事务处理、协议和长度信息
  • 01:单元标识符
  • 03:功能码,读取多个保持寄存器
  • 04:后面数据位的长度,表示有4个字节的数据
  • 00 22 00 00:实际读取的保持寄存器值(示例数据)

通过以上讲解和示例,希望能够清晰地展示Modbus TCP报文的结构和组成。

标签:00,01,字节,报文,TCP,Modbus,寄存器
From: https://blog.csdn.net/qq_46994975/article/details/139278392

相关文章

  • C++ - TCP粘包解决方法
     下面的代码演示了粘包问题,客户端连续三次向服务器端发送数据,服务器端却一次性接收到所有数据。服务器代码#define_WINSOCK_DEPRECATED_NO_WARNINGS#include<iostream>usingnamespacestd;//#include<stdio.h>#include<WinSock2.h>​//#pragmacomment(lib,"ws2_......
  • 一、TCP/IP协议
    学习自######https://xiaolincoding.com/network/1_base/tcp_ip_model.html#%E5%BA%94%E7%94%A8%E5%B1%82前提同一设备间的通信:管道、消息队列、共享内容、信号等方式不同设备间的通信:通用的网络协议来兼容各种设备网络协议是分层的:应用层、传输层、网络层、网络接口层应......
  • 《计算机网络微课堂》4-8 网际控制报文协议ICMP
    本节课我们介绍网际控制报文协议ICMP(InternetControlMessageProtocol):‍为了更有效的转发IP数据报和提高交付成功的机会,在网际层使用了网际控制报文协议ICMP主机或路由器使用ICMP协议来发送差错报告报文和询问报文ICMP报文被封装在IP数据报中发送ICMP差错报告......
  • TCP滑动窗口
    发送方发送报文不再使用一个一个报文发送然后等待一个一个确认,而是进行一段(多个报文)发送接收方接收到数据后,发送当前接收到数据序列值+1,以及下一次可以接收的窗口值 也就是说,发送方需要配合接收方接受的窗口大小来确定数值发送 发送方窗口左边为后沿,右边为前沿。1.当......
  • ADS-B报文格式解析
    一、介绍二次雷达二次监视雷达(secondarysurveillanceradar,SSR)。SSR使用1030MHz发送询问,飞机应答器使用1090MHz发送答复。在SSR的早期设计中,引入了两种民用通信协议(模式A和模式C)。模式A和模式C允许SSR分别连续询问飞机的身份(代号)和气压高度。二次雷达通过两种不同的脉冲模式......
  • [Java EE] 网络编程与通信原理(三):网络编程Socket套接字(TCP协议)
    ......
  • 《TCP/IP网络编程》(第十章)多进程服务器端(2)
    基于进程的并发服务器我们将扩展之前的回声服务器,使其可以同时向多个客户端体提供服务,实现模型如下图所示即每当有客户端向服务器请求服务时,服务器端都创建一个子进程为其提供服务,比如有5个客户端请求服务,则创建个5子进程。通过fork()复制的文件描述符下图是父进程调用......
  • [转载]TCP keepalive的详解(解惑)
    原文出自于https://www.cnblogs.com/lanyangsh/p/10926806.htmlTCP是面向连接的,一般情况,两端的应用程序可以通过发送和接收数据得知对端的存活。当两端的应用程序都没有数据发送和接收时,如何判断连接是否正常呢?这就是SO_KEEPALIVE的作用。1.SO_KEEPALIVE的作用1.1SO_KEEPA......
  • TCP_UNACCEPTABLE_14: [close-wait] out-of-wdw SEQ | unacceptable ACK -> ACK (seq,
    测试目的:验证TCP在CLOSE-WAIT状态下,接收到一个窗口外的序列号或不可接受的ACK号的段时,是否能够返回一个带有正确的序列号和ACK号的ACK段,并保持在相同的状态。描述:在TCP连接的CLOSE-WAIT状态下,如果接收到一个序列号超出当前窗口或ACK号不可接受的段,TCP必须回应一个空的ACK......
  • H3CNE-7-TCP和UDP协议
    TCP和UDP协议TCP:可靠传输,面向连接--------速度慢,准确性高UDP:不可靠传输,非面向连接--------速度快,但准确性差面向连接:如果某应用层协议的四层使用TCP端口,那么正式的数据报文传输之前,需要先建立连接,只有建立完连接之后,才可以传输数据。TCP三次握手......