# Modbus RTU 协议模块（`modbus_rtu`）

本目录实现 **Modbus RTU** 的成帧、编解码与解析插件，供守护进程静态编译与 `plugins/protocols/modbus_rtu` 动态库（`.so`）共用同一套源码。

## 目录结构

| 子目录 | 职责 |
|--------|------|
| `types/` | PDU 数据模型：`ModbusRtuPdu` 及各类请求/响应结构体，供编解码与 `ProtocolEnvelope` 使用。 |
| `codec/` | ADU 与 `ModbusRtuPdu` 的互转：`decodeModbusRtu` / `encodeModbusRtu`（依赖 `types` 与 `framer` 中的 CRC 等工具函数）。 |
| `framer/` | 字节流成帧：`ModbusRtuFraming`（长度预测、CRC）、`ModbusRtuFramerPlugin`（Stage1 插件会话）。 |
| `parser/` | Stage2 协议插件：`ModbusRtuProtocolPlugin`，将完整帧解析为 `ProtocolEnvelope` / 兼容 JSON。 |

## 依赖方向（建议遵守）

```
types  （无本模块内依赖）
  ↑
codec、framer  （可依赖 types；codec 使用 framer 中的 crc16/crcOk）
  ↑
parser         （依赖 codec、types；不反向依赖 framer 插件类）
```

成帧与解析在流水线中分属不同阶段；**解析侧只应处理 `CompleteFrame`**，与 `PipelineContext::frameKind` 约定一致。

## 与动态库的关系

- 动态库入口：`plugins/protocols/modbus_rtu/plugin_stub.cpp`，导出 `softbus_create_protocol_plugin` / `softbus_create_framer_plugin` 等符号。
- 主工程 `CMakeLists.txt` 同样列出本目录下源文件，用于无 `.so` 时的内置链接；路径与 include 均以 `plugins/protocols/modbus_rtu/...` 为准。

## 配置提示

在 `daemon_config.json` 的 `plugins.framers` 中配置 `libmodbus_rtu.so` 路径即可加载成帧插件；解析插件加载方式与 `PluginHost` / 工程内注册逻辑一致。

## 扩展其它协议时的参考

新增协议（如 Modbus TCP、CANopen）时，建议沿用类似分层：**types → codec/framer → parser**，并在各自 `plugin_stub` 中导出统一 ABI 工厂函数，由 `PluginHost` 注册到 `PluginManager`。
