IEC 61784-6:现场总线通信系统—Modbus

·4 min read

IEC 61784-6标准中关于Modbus的内容,主要规定了Modbus协议在现场总线通信系统中的应用与要求。Modbus协议是一种广泛应用的工业通信协议,尤其是在自动化、控制系统和设备之间的数据交换中。在IEC 61784-6中,Modbus的数据交换格式主要包括以下几个方面的规定:

1. Modbus RTU与Modbus TCP

IEC 61784-6标准规定了Modbus协议的两种主要变体:Modbus RTUModbus TCP

  • Modbus RTU(Remote Terminal Unit):这是一种基于串行通信的协议,通常使用RS-485、RS-232等串行通信线路。
  • Modbus TCP:这是一种基于以太网的协议,适用于局域网(LAN)中设备之间的通信。

2. Modbus数据帧格式

在IEC 61784-6中,对于数据交换格式的规定,Modbus协议采用特定的数据帧结构。无论是Modbus RTU还是Modbus TCP,数据交换的核心格式是类似的,主要包括以下几个部分:

1) Modbus RTU 数据帧结构

Modbus RTU通信协议的数据帧由以下几个字段组成:

  • 地址字段(1字节):该字段包含目标设备的唯一地址(通常在1到247之间)。
  • 功能码(1字节):功能码定义了要执行的操作(如读取、写入)。常见功能码包括:
    • 0x03:读取保持寄存器(Read Holding Registers)
    • 0x04:读取输入寄存器(Read Input Registers)
    • 0x06:写单个寄存器(Write Single Register)
    • 0x10:写多个寄存器(Write Multiple Registers)
  • 数据字段:该字段包含与功能码相关的操作数据。根据功能码的不同,数据字段的内容也会有所不同。例如,对于读取操作,数据字段通常包含要读取的寄存器的值;对于写操作,则包含要写入寄存器的新值。
  • CRC校验码(2字节):用于检测数据传输中的错误。Modbus RTU使用CRC-16校验来确保数据的完整性。

示例: 读取保持寄存器的Modbus RTU数据帧(请求帧):

| 地址 | 功能码 | 数据(寄存器值) | CRC |
| 0x01 | 0x03   | 0x00 0x02      | CRC |

在此示例中,设备地址为0x01,功能码是0x03(读取保持寄存器),数据字段包含两个寄存器的值,最后是CRC校验码。

2) Modbus TCP 数据帧结构

Modbus TCP的帧结构较RTU稍微复杂一些,因为它基于以太网传输,需要添加更多的头信息。Modbus TCP的数据帧由以下部分组成:

  • TCP头部(7字节):包括事务标识符(Transaction Identifier)、协议标识符(Protocol Identifier)、长度字段(Length)和单元标识符(Unit Identifier)。其中:
    • 事务标识符:用于标识一次请求或响应。
    • 协议标识符:用于标识Modbus协议。
    • 长度字段:指定后续数据字段的长度。
    • 单元标识符:通常为1,用于标识目标设备。
  • Modbus消息头(1字节):与Modbus RTU相同,表示功能码。
  • 数据字段:功能码对应的操作数据字段,与Modbus RTU类似。
  • 错误检查:Modbus TCP不使用CRC校验,而是依赖于TCP/IP协议的内建错误校验机制。

示例: 读取保持寄存器的Modbus TCP数据帧(请求帧):

| TCP头 | 单元标识符 | 功能码 | 数据(寄存器值) |
| 7字节 | 1字节      | 1字节  | 2字节          |

此处,TCP头包含7字节的元数据,单元标识符是1,功能码是读取保持寄存器(0x03),数据字段则是实际读取的寄存器值。

3. 数据交换的常见功能码与格式

IEC 61784-6标准详细规定了Modbus协议中的常见功能码以及它们的数据交换格式。以下是一些常见功能码的示例:

  • 读取保持寄存器(功能码0x03):用于从设备中读取多个寄存器的值。

    • 请求格式:设备地址、功能码、开始地址、寄存器数量、CRC校验。
    • 响应格式:设备地址、功能码、字节数、数据(寄存器值)、CRC校验。
  • 写单个寄存器(功能码0x06):用于将一个寄存器设置为指定的值。

    • 请求格式:设备地址、功能码、寄存器地址、寄存器值、CRC校验。
    • 响应格式:设备地址、功能码、寄存器地址、寄存器值、CRC校验。
  • 写多个寄存器(功能码0x10):用于将多个寄存器设置为指定的值。

    • 请求格式:设备地址、功能码、起始寄存器地址、寄存器数量、字节数、数据(要写入的寄存器值)、CRC校验。
    • 响应格式:设备地址、功能码、起始寄存器地址、寄存器数量、CRC校验。

4. 错误检测与异常响应

在IEC 61784-6中,Modbus协议还规定了错误检测和异常响应的机制:

  • CRC错误:在Modbus RTU中,使用CRC校验来确保数据完整性。若出现CRC错误,接收方将不响应数据请求。
  • 异常响应:如果设备无法执行请求的操作(例如,非法功能码、非法数据等),设备会返回一个异常响应,功能码会设置为原功能码的高位加0x80,并附带异常码。常见异常码包括:
    • 0x01:非法功能码。
    • 0x02:非法数据地址。
    • 0x03:非法数据值。

总结

IEC 61784-6标准中,Modbus协议的数据交换格式主要规定了Modbus RTU和Modbus TCP的帧结构,包括数据字段的格式、功能码的作用和响应方式等。此外,标准还规定了设备之间通信的错误检测机制和异常响应格式。通过这些规定,确保了Modbus协议在现场总线通信中的稳定性、可靠性和互操作性。