Skip to content

南向驱动开发

本章面向二次开发者,目标是给出一套可长期维护的驱动开发方法论:清晰边界、强容错、可观测、可压测

核心原则:驱动只做“协议与设备能力”,不要把业务规则、平台协议、或 UI/存储细节塞进驱动。

驱动的职责边界

一个驱动应当覆盖:

  • 连接与会话:串口/TCP 的连接管理、重连、心跳
  • 读写能力:点位读写、批量策略、超时控制
  • 协议解析:帧编解码、校验、粘包/半包处理
  • 点位映射:协议地址 → 统一 point/value
  • 错误语义:可操作的错误分类(可重试/需重连/不可恢复)

不应该覆盖:

  • 北向 publish、主题/载荷、平台鉴权
  • 业务规则/行业逻辑(应放在 transform/规则层或插件)

推荐的结构(文件/模块)

建议按“可测试”拆分:

  • codec/:纯编解码(输入 &[u8],输出结构体/枚举),便于单测与 fuzz
  • transport/:串口/TCP 读写与重连
  • client/:协议会话与请求响应匹配(含超时/重试)
  • mapping/:点位映射与批量策略

容错与稳定性

  • 严禁 unwrap/expect:所有 I/O 与解析必须返回可诊断错误
  • 指数退避 + 抖动:对重连/重试默认开启,避免雪崩
  • 设备级隔离:每个设备任务独立运行,错误不扩散

性能与吞吐

  • 批量优先:减少 RTT 和帧开销
  • 预分配与复用:热点路径避免频繁分配
  • 零拷贝解析:尽量用 &[u8],必要时用 Bytes 共享缓冲
  • 有界队列:与 core pipeline 协作背压,避免无界缓存

测试策略(最低要求)

  • 编解码单测:黄金用例 + 边界/异常用例
  • 集成测试:模拟设备或回放报文(pcap/录包)
  • 压力测试:点位规模、采集频率、断线重连、噪声数据注入

下一步阅读

基于 MIT 许可发布.