MODBUS应用协议详解:功能码与数据模型

需积分: 12 0 下载量 198 浏览量 更新于2024-07-19 收藏 795KB PDF 举报
Modbus应用协议规范(V1.1b3)是针对工业自动化领域的一种通信标准,由Modbus组织于2012年4月26日发布,它定义了设备间的通信机制,使得不同厂商的设备能够相互通信和交换数据。这个规范主要关注于串行和并行接口,但其中的Serial Line部分更为详尽。 1. **范围与目标**: 该规范的目的是为了明确Modbus协议在工业控制环境中的使用,包括设备的地址分配、数据编码以及各种功能码的定义。它适用于各类自动化系统,如PLC(可编程逻辑控制器)、SCADA( supervisory control and data acquisition)系统等,允许设备读取(如读取寄存器值、状态)、写入(如设置参数或控制动作)以及进行诊断操作。 2. **缩略词与术语**: 规范中提到的"Coils"指的是二进制输入寄存器,"Discrete Inputs"表示离散输入,"Holding Registers"和"Ignition Registers"分别指存储持续数据和瞬时数据的寄存器。"Function Codes"则是执行特定操作的指令代码。 3. **数据模型与地址模型**: Modbus数据模型描述了数据是如何被组织和存储在设备上的,包括区(Blocks)和地址的分配。地址模型则规定了设备如何通过这些地址来识别和访问不同的数据区域。 4. **交易定义**: 每个Modbus交易包括一个请求者(通常主设备)发送一个包含功能码、寄存器地址和数据的报文,以及响应者(从设备)的应答。交易过程遵循请求-响应模式,确保数据的一致性和可靠性。 5. **功能码分类**: 功能码分为公共类和专用类,共16种。这些代码涵盖了基本的数据读取(01-04)、写入(05-06)、状态查询(07)、诊断(08)、事件计数器获取(0xB)和事件日志获取(0xC)以及批量操作(0xF-0x10)等。 6. **具体功能码描述**: - **Read Coils (0x01)**:用于读取二进制输入寄存器的状态。 - **Read Discrete Inputs (0x02)**:读取离散输入的状态,如按钮、开关等。 - **Read Holding Registers (0x03)**:读取存储持续数据的寄存器。 - **Read Input Registers (0x04)**:读取瞬时数据寄存器,如传感器测量值。 - **Write Single Coil (0x05)**:设置单个二进制输入寄存器。 - **Write Single Register (0x06)**:设置单个数值寄存器。 - **Read Exception Status (0x07)**:只在串行线路上,用于检测设备异常。 - **Diagnostics (0x08)**:诊断功能,可能包括硬件状态查询。 - **Get Comm Event Counter (0x0B)**:获取串行通信事件计数。 - **Get Comm Event Log (0x0C)**:获取串行通信事件日志。 7. **高级功能和示例**: 对于某些功能(如0x08和0x0B-0x0C),文档提供了子功能码支持、示例和状态流程图,帮助用户理解和实施这些更复杂的通信操作。 Modbus应用协议规范V1.1b3详细阐述了如何通过Modbus通信协议在工业控制系统中进行数据交换,无论是设备配置、数据采集还是故障诊断,都提供了明确的操作指南。理解并遵循这些规范是实现设备间无缝通信的关键。