跳至主要內容

Modbus TCP

约 794 字大约 3 分钟

Modbus TCP

Modbus TCP是Modbus协议的一个变体,它运行在TCP/IP网络之上。相比于Modbus RTU和Modbus ASCII这两种基于串行通信的Modbus协议,Modbus TCP支持更快的数据传输速度和更远的通信距离。由于基于TCP/IP,Modbus TCP可以在以太网上进行通信,使其非常适合于现代工业自动化系统。

基本概念

  • TCP/IP网络:Modbus TCP使用TCP/IP协议栈进行通信,确保了数据传输的可靠性。
  • 端口号:Modbus TCP通常使用502号TCP端口。
  • MBAP头:Modbus Application Protocol头是Modbus TCP特有的,用于封装传统Modbus请求和响应报文,以便在TCP/IP网络上传输。

MBAP头结构

MBAP头由以下几部分组成:

  • 事务标识符(2字节):用于同步请求和响应之间的消息。
  • 协议标识符(2字节):用于Modbus协议,固定为0x0000。
  • 长度字段(2字节):标识后续字段的长度(包括单元标识符、功能码、数据)。
  • 单元标识符(1字节):标识远程服务器,对于Modbus TCP通常设置为0xFF。

功能码

Modbus TCP支持的功能码与Modbus RTU相同,包括但不限于:

  • 读线圈(01)
  • 读离散输入(02)
  • 读保持寄存器(03)
  • 读输入寄存器(04)
  • 写单个线圈(05)
  • 写单个寄存器(06)
  • 写多个线圈(15)
  • 写多个寄存器(16)

通信示例

假设有一个操作要求读取从设备的保持寄存器,从寄存器地址100开始,读3个寄存器。

读取保持寄存器请求

  • MBAP头 + PDU(协议数据单元)

    请求示例(十六进制):00 01 00 00 00 06 01 03 00 64 00 03

    • 00 01:事务标识符。
    • 00 00:协议标识符。
    • 00 06:长度(6字节,不包括MBAP头的长度)。
    • 01:单元标识符。
    • 03:功能码,表示读保持寄存器。
    • 00 64:起始寄存器地址(100)。
    • 00 03:读取的寄存器数量(3个)。

读取保持寄存器响应

  • MBAP头 + PDU(协议数据单元)

    响应示例(十六进制):00 01 00 00 00 09 01 03 06 02 2B 00 00 00 64

    • 00 01:事务标识符(与请求相匹配)。
    • 00 00:协议标识符。
    • 00 09:长度(9字节,不包括MBAP头的长度)。
    • 01:单元标识符。
    • 03:功能码。
    • 06:字节计数(3个寄存器×2字节/寄存器 = 6字节)。
    • 02 2B:第一个寄存器的值。
    • 00 00:第二个寄存器的值。
    • 00 64:第三个寄存器的值。

报文规则

Modbus TCP的报文规则确保了在TCP/IP网络上可靠地传输Modbus命令。事务标识符允许同步请求与响应,即使在异步通信环境中也能匹配。长度字段确保接收方能够正确地解析后续的PDU部分。通过单元标识符,可以在同一网络上与多个远程设备通信,尽管在大多数实现中,此字段通常被设置为0xFF。

Modbus TCP使得Modbus协议能够在现代的网络环境中使用,扩展了其在工业自动化领域的应用范围。