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。