# Modbus RTU 协议模块(`modbusrtu`) 本目录实现 **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/modbusrtu/...` 为准。 ## 配置提示 在 `daemon_config.json` 的 `plugins.framers` 中配置 `libmodbus_rtu.so` 路径即可加载成帧插件;解析插件加载方式与 `PluginHost` / 工程内注册逻辑一致。 ## 扩展其它协议时的参考 新增协议(如 Modbus TCP、CANopen)时,建议沿用类似分层:**types → codec/framer → parser**,并在各自 `plugin_stub` 中导出统一 ABI 工厂函数,由 `PluginHost` 注册到 `PluginManager`。