Modbus TCP 协议全解析
在工业自动化领域,设备之间的通信协议至关重要,而 Modbus TCP 协议无疑是其中的佼佼者。今天,就让我们深入探讨 Modbus TCP 协议,揭开其神秘面纱,了解它如何在工业自动化中发挥关键作用。Modbus TCP 是 Modbus 协议在以太网环境下的应用,它基于 TCP/IP 协议栈,实现了设备之间的高效通信
(一)Modbus TCP 报文结构
Modbus TCP 报文由 MBAP 报文头和 PDU 两部分组成。MBAP 报文头包含传输标识、协议标识、长度和单元标识四个部分,用于确保通信的准确性和完整性。PDU 则包含了功能码和数据区,用于具体的操作指令和数据传输
MBAP 报文头包含以下四个部分:
传输标识(Transaction ID):2 字节,用于标识请求和响应的配对。
协议标识(Protocol ID):2 字节,通常为 0x0000,表示 Modbus TCP 协议。
长度(Length):2 字节,表示从单元标识开始到报文结束的字节数。
单元标识(Unit ID):1 字节,通常用于标识从机地址。
------------------功能码--------------------
01H(读线圈状态):用于读取线圈寄存器的状态。
02H(读离散输入状态):用于读取离散输入寄存器的状态。
03H(读保持寄存器):用于读取保持寄存器的值。
04H(读输入寄存器):用于读取输入寄存器的值。
05H(写单个线圈寄存器):用于设置单个线圈的状态。
06H(写单个保持寄存器):用于设置单个保持寄存器的值。
0FH(写多个线圈寄存器):用于设置多个线圈的状态。
10H(写多个保持寄存器):用于设置多个保持寄存器的值。
------------------数据区--------------------
起始地址:指定要操作的寄存器的起始地址。
寄存器数量:指定要操作的寄存器的数量。
字节数:指接下来的数据字节数。
数据值:指传输的数值(浮点数占2个寄存器)。
在 Modbus 协议中,一个寄存器通常等于2个字节、一个字节等于8位
------------------举例一--------------------
05 2B:传输标识
00 00:协议标识,0x0000,表示 Modbus TCP 协议
00 06(00 09):长度表示从单元标识开始到报文结束的字节数
01 :单元标识,通常用于标识从机地址
03:功能码
发送 :05 2B00 0000 06010300 0000 03
00 00:寄存器的起始地址
00 03:寄存器的数量
功能码为03H、寄存器起始地址为0,在接收时会省略寄存器的起始地址和寄存器的数量
接收 :05 2B00 0000 0901030600 0144 0D E0 00
06:指接下来的数据字节数
00 01:整数型(0x0001=1)
44 0D E0 00:浮点数567.5(高位在前)
------------------举例二--------------------
发送 :10 3D 00 00 00 0D 01 10 00 64 00 03 06 00 02 44 05 20 00
接收 :10 3D 00 00 00 06 01 10 00 64 00 03
10 3D:传输标识
00 00:协议标识,0x0000,表示 Modbus TCP 协议
00 0D(00 06):长度表示从单元标识开始到报文结束的字节数(0x000D=13)
01 :单元标识,通常用于标识从机地址
10:功能码(0x10=16)
00 64:寄存器的起始地址(0x0064=100)
00 03:寄存器的数量
06:指接下来的数据字节数
00 02:整数型(0x0002=2)
44 05 20 00:浮点数532.5(高位在前)