MODBUSTCP和MODBUSRTU数据帧对比

工具介绍

ModBus Poll 在TCP中模拟客户端,在RTU中模拟主机;(请求数据方)
ModBus Slave 在TCP中模拟服务器,在RTU中模拟从机;(响应数据方)

数据帧简介

ModBus是一种通信协议,用于在工业自动化领域中,通过串行通信或以太网连接来传输数据。ModBus数据帧是用于在ModBus协议中传输数据的格式。
ModBus协议支持两种不同的数据帧格式:ModBus TCP和ModBus RTU。
ModBus TCP数据帧:
ModBus TCP是基于以太网的ModBus协议版本。在ModBus TCP中,数据帧格式如下:
1)事务标识符(2字节):用于标识请求和响应之间的关联。
2)协议标识符(2字节):用于指定ModBus协议版本。
3)长度字段(2字节):指定数据帧中后续字段的长度。
4)单元标识符(1字节):用于标识ModBus设备。
5)功能码(1字节):指定要执行的操作。
6)字节数(1字节):数据的字节数量
6)数据(可变长度):根据功能码的不同,数据字段可以包含不同类型的数据。
ModBus RTU数据帧:
ModBus RTU是基于串行通信的ModBus协议版本。在ModBus RTU中,数据帧格式如下:
1)地址(1字节):用于标识ModBus设备。
2)功能码(1字节):指定要执行的操作。
3) 字节数(1 字节) :数据的字节个数
3) 数据(可变长度):根据功能码的不同,数据字段可以包含不同类型的数据。
4) CRC(2字节):用于检测数据传输中的错误。

数据帧具体举例

ModBusTCP和ModBusRTU数据帧,主从对比示例。功能码为4
以下是一个主从模式下使用功能码为4的ModBusTCP和ModBusRTU数据帧的对比示例:
假设我们有一个ModBus主设备(主机)和一个ModBus从设备(从机),主设备要从从设备读取输入寄存器的值。

ModBus TCP主从模式数据帧示例:
主设备发送:
1)事务标识符:0x0001
2)协议标识符:0x0000
3)长度字段:0x0006
4)单元标识符:0x01
5)功能码:0x04
6)起始地址:0x0000
7)读取长度:0x0002
从设备响应:
1)事务标识符:0x0001
2)协议标识符:0x0000
3)长度字段:0x0005
4)单元标识符:0x01
5)功能码:0x04
6)字节数:0x04
7)数据:0x1234 0x5678(输入寄存器的值)

ModBus RTU主从模式数据帧示例:
主设备发送:
1)地址:0x01
2)功能码:0x04
3)起始地址:0x0000
4)读取长度:0x0002
5)CRC:0xA9 0x39(根据数据计算的循环冗余校验)
从设备响应:
1)地址:0x01
2)功能码:0x04
3)字节数:0x04
4)数据:0x34 0x12 0x78 0x56(输入寄存器的值,低位在前)
5)CRC:0x9E 0x80(根据数据计算的循环冗余校验)

可以看到,ModBusTCP和ModBusRTU主从模式下的数据帧结构也是基本相同的,都包含了地址、功能码、起始地址、读取长度和数据字段。不同之处在于ModBusTCP数据帧中包含了额外的字段(事务标识符、协议标识符、长度字段),而ModBusRTU数据帧中则没有这些字段。此外,ModBusRTU数据帧中的数据字段是按照字节顺序排列的,而ModBusTCP数据帧中则是按照字节顺序排列的。

帧格式对比

从机

类型 MBAP报文头 地址码 功能码 寄存器地址 寄存器数量 CRC校验
MODBUS RTU 0C 04 00 00 00 05 XX XX
MODBUS TCP 00 01 00 00 00 06 0C 04 00 00 00 05

主机

类型 MBAP报文头 地址码 功能码 数据长度 具体数据 CRC校验
MODBUS RTU 0C 04 0a 00 05 … XX XX
MODBUS TCP 00 01 00 00 00 06 0C 04 0a 00 05 …

图示

如果需要将MODBUS TCP数据转化为MODBUS RTU数据则只需要将RTU数据的CRC校验去掉,然后加上事务处理标识符、协议标识符、长度字段信息即可。
MODBUSTCP和MODBUSRTU数据帧对比_第1张图片

你可能感兴趣的:(STM32,stm32,嵌入式)