Modbus,TCP,通信协议解析及通信示例演示
发布日期:2025-05-22 11:31    点击次数:72

ModbusTCP是一种基于TCP/IP协议的Modbus通信协议,用于在客户机和服务器之间进行数据通信。它常用于工业自动化控制、电力监控与管理、温湿度监测等领域。ModbusTCP协议使用标准的TCP/IP协议栈,通过以太网进行通信,并支持多个设备同时访问同一个ModbusTCP服务器。

ModbusTCP协议帧由两部分组成:MBAP(ModbusApplicationProtocol)头部和PDU(ProtocolDataUnit)数据单元。

1)MBAP头部

MBAP报文头由事务元标识符、协议标识符、长度和单元标识符构成,总共为7个字节长度,其具体描述如下:

2)PDU数据单元

PDU数据单元由功能码(FunctionCode)和数据字段组成。

3)PDU数据单元类型

在ModbusTCP中,PDU有三种类型:

A)请求型协议数据单元(RequestPDU):

请求型协议数据单元(RequestPDU)是由Modbus主站(客户端)发送给从站(服务器)的PDU,用于请求数据或服务。对于读取请求,数据部分可能包含要读取的寄存器地址和数量;对于写入请求,数据部分可能包含要写入的值和地址。

以读取保持寄存器为例(功能码03),RequestPDU可能如下:

B)应答型协议数据单元(ResponsePDU):

应答型协议数据单元(ResponsePDU)是由Modbus从站(服务器)发送给主站(客户端)的PDU,用于响应主站的请求。

以读取保持寄存器为例(功能码03),ResponsePDU可能如下:

C)异常应答型协议数据单元(ExceptionResponsePDU):当服务器无法处理客户端的请求时,会发送一个异常应答PDU,通知客户端发生了错误。

以通过ModbusTCP的03功能码读取起始地址为0000中的温度数据(以float数据类型表示)为例:

请求帧包括以下字段:

将上述信息转换成十六进制表示的请求报文如下:

假设服务器正确响应,响应帧包括以下字段:

将上述响应报文转换成十六进制可能如下:

这里的xxxxxxxx代表从寄存器中读取的4个字节的数据,这些字节需要按照Modbus规范(通常是两个字节颠倒顺序,即大端模式或小端模式,具体取决于设备的实现)来解析成一个float类型的温度值。