Modbus常用功能码协议有哪些

发布时间:2021-12-27 11:06:24 作者:小新
来源:亿速云 阅读:182
# Modbus常用功能码协议有哪些

## 一、Modbus协议概述

Modbus是一种**串行通信协议**,由Modicon公司(现为施耐德电气)于1979年开发,广泛应用于工业自动化领域。它采用**主从架构**,支持多种物理层(如RS-232、RS-485、TCP/IP),具有简单、开放、易实现的特点。协议的核心是通过**功能码(Function Code)**定义操作类型,实现数据读写和设备控制。

---

## 二、Modbus功能码分类

Modbus功能码分为三类,用1字节表示(十进制1~127):  
1. **公共功能码**:公开定义且标准化的操作(最常用)  
2. **用户自定义功能码**(65~72、100~110):厂商可扩展用途  
3. **保留功能码**:协议保留或历史遗留代码  

以下重点介绍**公共功能码**及其应用场景。

---

## 三、常用功能码详解

### 1. 读取数据类功能码
| 功能码 | 名称                     | 数据类型       | 作用                          |
|--------|--------------------------|----------------|-------------------------------|
| 01     | Read Coils               | 位(Bit)      | 读取离散量输出(DO)状态      |
| 02     | Read Discrete Inputs     | 位(Bit)      | 读取离散量输入(DI)状态      |
| 03     | Read Holding Registers   | 字(16-bit)   | 读取保持寄存器数据(如PLC变量)|
| 04     | Read Input Registers     | 字(16-bit)   | 读取输入寄存器数据(如传感器)|

**示例场景**:  
- 用`03`功能码读取变频器的当前频率(保持寄存器地址40001)  
- 用`02`功能码检测急停按钮状态(离散输入地址10001)

---

### 2. 写入数据类功能码
| 功能码 | 名称                     | 数据类型       | 作用                          |
|--------|--------------------------|----------------|-------------------------------|
| 05     | Write Single Coil        | 位(Bit)      | 单点写入线圈状态(ON/OFF)    |
| 06     | Write Single Register    | 字(16-bit)   | 单点写入保持寄存器            |
| 15     | Write Multiple Coils     | 位(Bit)      | 多点写入线圈状态              |
| 16     | Write Multiple Registers | 字(16-bit)   | 多点写入保持寄存器            |

**示例场景**:  
- 用`05`功能码控制继电器吸合(线圈地址00001写入FF00)  
- 用`16`功能码批量设置PID参数(寄存器地址40010~40012)

---

### 3. 诊断与特殊功能码
| 功能码 | 名称                     | 用途                          |
|--------|--------------------------|-------------------------------|
| 07     | Read Exception Status    | 读取设备的异常状态            |
| 22     | Mask Write Register      | 对寄存器指定位进行掩码修改    |
| 23     | Read/Write Registers     | 同时读写多个寄存器(高效操作)|

---

## 四、功能码使用注意事项

1. **地址映射规则**  
   - Modbus地址通常以偏移量表示(如40001对应协议中的地址0x0000)  
   - 不同设备厂商可能自定义地址范围(需查阅设备手册)

2. **错误响应机制**  
   - 若请求失败,从站返回**异常码**(功能码+0x80,如`83`表示`03`功能码错误)  
   - 常见异常码:  
     - `01` 非法功能码  
     - `02` 非法数据地址  
     - `03` 非法数据值  

3. **数据格式处理**  
   - 寄存器数据可能采用大端序(Big-Endian)或浮点编码(IEEE 754)  
   - 需根据设备规范解析(如`03`功能码返回的4字节浮点数)

---

## 五、不同传输模式下的功能码差异

| 传输模式       | 特点                                                                 |
|----------------|----------------------------------------------------------------------|
| **Modbus RTU** | 功能码直接通过二进制传输,需CRC校验(典型波特率9600/19200)          |
| **Modbus TCP** | 功能码封装在TCP帧中,增加MBAP头(事务标识符、协议标识等)            |
| **Modbus ASCII** | 功能码转换为ASCII字符传输,效率低但可人工调试(起始符`:`,结束符`CRLF`)|

---

## 六、总结

Modbus功能码是协议实现设备交互的核心,掌握常用功能码可覆盖90%的工业通信场景。实际应用中需注意:  
- 优先使用标准功能码(01~04、05~06、15~16)  
- 严格遵循设备文档中的地址定义  
- 通过异常响应排查通信问题  

附:完整功能码列表参考[Modbus官方协议规范](https://www.modbus.org/specs.php)

注:本文约1050字,采用Markdown格式,包含表格、代码块、层级标题等元素,可直接用于技术文档发布。如需扩展具体功能码的报文示例或编程实现,可进一步补充。

推荐阅读:
  1. modbus-master-读写
  2. JavaScript有什么常用功能

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

modbus

上一篇:laravel如何使用RabbitMQ

下一篇:C语言怎么绘制圣诞水晶球

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》