ModbusTCP协议报文解析

这篇具有很好参考价值的文章主要介绍了ModbusTCP协议报文解析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ModbusTCP协议报文解析

报文格式

交互(通信)标识:2个字节 为此次通信事务处理标识符,一般每次通信之后将被要求加1以区别不同的通信数据报文。
协议标识:2个字节 表示该条指令遵循ModbusTCP协议,一般都为00 00
报文长度:2个字节 表示后面数据的长度,有几个字节,高字节在前
(前六位Modbus/TCP协议不同功能码通用)

设备标识 :1个字节 设备地址,这个可以用于局域网里面的具体的地址,如果目标机器有固定ip,这个就不起作用,直接上写成 00
功能码:1个字节 功能码在modbus协议用于表示信息帧的功能
数据:N个字节 后面数据根据不同功能码不同。

modbus 常用功能代码

十进制 功能 数据类型
01 读取 多个线圈
02 读取 多个离散量输入量
03 读取 多个保持寄存器 16进制整型
04 读取 多个输入寄存器 16进制整型
05 写入 单个线圈
06 写入 单个寄存器 16进制整型
15 写入 多个线圈
16 写入 多个寄存器 16进制整型

功能码详解

01 读取多个线圈

示例报文:

请求00 01 00 00 00 06 FF 01 00 01 00 10

第1,2位 00 01 交互标识
第3,4位 00 00 协议标识
第5,6位 00 06 后面报文长度 有6位
第7位 FF 设备地址,发送什么,响应什么
第8位 01 功能码

第9,10位00 01 起始地址

第11,12位 00 10查询线圈长度,查询16位线圈

响应00 01 00 00 00 05 FF 01 02 0A 02

前四位和7,8位同请求发送的报文

第5,6位是后面报文长度

第9位是后面数据位的长度,

第10位开始是数据位。

01查询线圈,每一个16进制数据表示8位线圈

第10位0A --> 0000 1010 第二位是1,第四位是1

02 读取多个离散量输入

同01

03 读取 多个保持寄存器

寄存器读取与线圈的区别,响应数据,寄存器数据每两个字节表示1位,一次请求不能超过127个地址
示例报文:

请求00 01 00 00 00 06 01 03 00 05 00 02
第1,2位 00 01 交互标识
第3,4位 00 00 协议标识
第5,6位 00 06 后面报文长度 有6位
第7位 01 设备地址,发送什么,响应什么
第8位 03 功能码

第9,10位00 05起始地址
第11,12位 00 02查询寄存器长度,查询2个寄存器

响应00 01 00 00 00 07 01 03 04 00 22 00 00
前四位(00 01 00 00)和7,8位(01 03)同请求发送的报文
第5,6位 00 07 是后面报文长度
第9位 04 是后面数据位的长度
第10-13位 数据位(00 22 00 00

04 读取 多个输入寄存器

同03

05 (05H)写入 单个线圈

请求:00 01 00 00 00 06 FF 05 00 01 FF 00

第9,10位 00 01 写入线圈的地址

第11,12位 写入的数据值 FF 00 表示置ON/1状态 00 00 表示置OFF/0状态

响应:00 01 00 00 00 06 FF 05 00 01 FF 00

15(0FH)写入 多个线圈

请求:00 01 00 00 00 09 FF 0F 00 05 00 0A 02 CD 01

第9,10位 00 05写入的起始地址

第11,12位 00 0A写入线圈数量

第13位 02数据字节数量

第14位之后是数据 低字节在前

CD 01 —> 1100 1101 0000 0001

0C 0B 0A 09 08 07 06 05
1 1 0 0 1 1 0 1
14 13 12 11 10 0F 0E 0D
0 0 0 0 0 0 0 1

06(06H) 写入 单个寄存器

请求:00 05 00 00 00 06 FF 06 00 05 00 23

向地址为5的寄存器写入35。
第9,10位 00 05写入的起始地址
第11,12位 00 0A写入寄存器的值

响应:00 05 00 00 00 06 FF 06 00 05 00 23

16(10H)写入多个寄存器

请求:00 06 00 00 00 0B FF 10 00 02 00 02 04 00 21 00 2A

从地址2开始写入两个寄存器,2寄存器写入33,3寄存器写入42
第9,10位 00 02写入的起始地址
第11,12位 00 02写入寄存器的数量
第13位 04 后面数据的字节
第14-17位 数据

响应:00 06 00 00 00 06 FF 10 00 02 00 02

从地址2开始写入两个寄存器,2寄存器写入33,3寄存器写入42

第9,10位 00 02写入的起始地址

第11,12位 00 02写入寄存器的数量

第13位 04 后面数据的字节

第14-17位 数据

响应:00 06 00 00 00 06 FF 10 00 02 00 02

错误响应

当发生通讯异常时,响应前7位仍然为modbus正常协议格式,第八位响应功能码(请求功能码+0x80),第九位异常码。

异常数据即包含异常码的数据:
目前使用的异常码是:01,02,03和04。

  • 响应功能码 = 请求功能码 + 0x80
  • 响应报文提供异常码显示出错原因。

常见异常码含义:

异常码 名称 含义
01 非法功能 对于服务器(或从站)来说,询问中接收到的功能码是不可允许的操作,可能是因为功能码仅适用于新设备而被选单元中不可实现同时,还指出服务器(或从站)在错误状态中处理这种请求,例如:它是未配置的,且要求返回寄存器值。
02 地址非法 对于服务器(或从站)来说,询问中接收的数据地址是不可允许的地址,特别是参考号和传输长度的组合是无效的。对于带有100个寄存器的控制器来说,偏移量96和长度4的请求会成功,而偏移量96和长度5的请求将产生异常码02。
03 数据非法 对于服务器(或从站)来说,询问中包括的值是不可允许的值。该值指示了组合请求剩余结构中的故障。例如:隐含长度是不正确的。modbus协议不知道任何特殊寄存器的任何特殊值的重要意义,寄存器中被提交存储的数据项有一个应用程序期望之外的值。
04 从站设备故障 当服务器(或从站)正在设法执行请求的操作时,产生不可重新获得的差错。

特殊数据处理

float 按IEEE-754标准协议存储

C#中浮点数的二进制格式遵循IEEE754标准

IEEE-754格式标准:一个浮点数有2部分组成:底数m和指数e
IEEE-754

寄存器地址

Modbus协议定义的寄存器地址是5位十进制地址,即:
线圈(DO)地址:00001~09999
触点(DI)地址:10001~19999
输入寄存器(AI)地址:30001~39999
输出寄存器(AO)地址:40001~49999

0x代表线圈(DO)类地址,1x代表触点(DI)类地址、 3x代表输入寄存器(AI)类地址、4x代表输出寄存器(AO)类地址。
在实际编程中,前缀的区分作用(有功能码进行区分),所以只需说明后4位数,而且需转换为4位十六进制地址。
Modbus 数据地址格式是从0开始,寄存器地址对应报文中地址关系,x0001对应00 00,示例40003对应 00 02地址

以上根据开发时查的资料和网上资料整理一些的有用信息,方便开发查询文章来源地址https://www.toymoban.com/news/detail-781512.html

到了这里,关于ModbusTCP协议报文解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Modbus协议及基于Python的ModbusTCP客户端实现

    Modbus 协议是由 Modicon 公司(现在的施耐德电气 Schneider Electric )于1979年为使用可编程逻辑控制器(PLC)通信而推出,主要建立在物理串口、以太网 TCP/IP 层之上,目前已经成为工业领域通信协议的业界标准,广泛应用在工业电子设备之间的互联。 Modbus技术文档 Modbus 是OSI模型

    2024年02月07日
    浏览(48)
  • 2.1 - 网络协议 - ARP协议原理,报文解析,抓包实战

    「作者主页」: 士别三日wyx 「作者简介」: CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」: 对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 ARP(Address Resolution Protocol)是 「地址解析协议」 ,可以根据IP地址获取Mac地

    2024年02月07日
    浏览(39)
  • TCP/IP协议专栏——分片报文详解——网络入门和工程维护必看

    一个链路层数据报能承载的最大数据量称为最大传送单元(MTU)。 因为IP数据报(IP头+DATA)被封装在链路层数据报中,故链路层的MTU严格地限制着IP数据报的长度, 而且在IP数据报的源与目的地路径上的各段链路可能使用不同的链路层协议,有不同的MTU. 例如,以太网的MTU为15

    2024年01月19日
    浏览(64)
  • Modbus通信从入门到精通_2_Modbus TCP通信详解及仿真(搭建ModbusTCP仿真环境:创建虚拟PLC并进行ModbusTCP通讯;寄存器与PLC中映射关系;适合理解如何编写上位机)

    本篇将会以西门子PLC软件搭建ModbusTCP仿真环境,并通过仿真环境,介绍基础知识及模拟实际应用中写一个简单的通信读取PLC数据方法,并简介了编写上位机的方法。 由于具有TCP/IP栈协议,通常在Modbus TCP通讯的上位机开发中, 上位机是作为客户端,控制器作为服务器 。Modbu

    2024年02月08日
    浏览(179)
  • 网络协议报文理解刨析篇二(再谈Http和Https), 加上TCP/UDP/IP协议分析(理解着学习), 面试官都惊讶你对网络的见解

    目录 前文链接(系列助学, 也为后文学习做铺垫, 可按需读取) 一. 再谈HTTP再理解 二. HTTP对比学习HTTPS HTTP和HTTPS的区别如下: 三.TCP协议  (三次握手四次挥手细节过程理解在之前的博文中有详细图解) tcp缓冲区概念的引入  (解释流量控制): 确认应答(ACK)机制的理解 (编序号)

    2023年04月09日
    浏览(64)
  • Modbus tcp转ETHERCAT网关modbus tcp/ip协议

    捷米JM-ECT-TCP网关能够连接到Modbus tcp总线和ETHERCAT总线中,实现两种不同协议设备之间的通讯。这个网关能够大大提高工业生产的效率和生产效益,让生产变得更加智能化。捷米JM-ECT-TCP 是自主研发的一款 ETHERCAT 从站功能的通讯网关。该产品主要功能是将 ETHERCAT 网络和 MODB

    2024年02月15日
    浏览(78)
  • 计算机网络—TCP协议详解:协议构成、深度解析(1)

                                               🎬慕斯主页 : 修仙—别有洞天                                        ♈️ 今日夜电波: マリンブルーの庭園—ずっと真夜中でいいのに。                                                            0:34━━━

    2024年04月16日
    浏览(41)
  • 计算机网络—TCP协议详解:协议构成、深度解析(3)

                                               🎬慕斯主页 : 修仙—别有洞天                                        ♈️ 今日夜电波: マリンブルーの庭園—ずっと真夜中でいいのに。                                                            0:34━━━

    2024年04月29日
    浏览(50)
  • TCP 协议报文

    TCP 协议(一)报文结构 TCP 协议(二)连接与断开 TCP 协议(三)十种核心机制 TCP 协议(四)传输异常 TCP 提供面向连接的通信传输,面向连接是指在传送数据之前必须先建立连接,数据传送完成后要释放连接。无论哪一方向另一方发送数据之前,都必须先在双方之间建立一

    2024年02月12日
    浏览(35)
  • TCP协议报文结构

    TCP(传输控制协议)是一种面向连接的、可靠的、全双工的传输协议。它使用头部(Header)和数据(Data)来组织数据包,确保数据的可靠传输和按序传递。 下面详细阐述TCP协议的结构: 源端口号 和 目的端口号 :占用2个字节,分别表示发送方和接收方的端口号。 序列号 :

    2024年02月11日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包