Skip to content

v1.16.0

Choose a tag to compare

@github-actions github-actions released this 14 Nov 08:20
· 1 commit to master since this release

✨ 新增 — DNP3 从站(TCP 核心子集)+ 模板市场 v1(同版双主题)

🗼 DNP3 从站(IEEE 1815,电力/水务 SCADA 远动)

新增第 32 种协议 DNP3(TCP,默认端口 20000,纯 Python 零额外依赖):

  • 数据链路层:0x05 0x64 帧定界、LEN、目的/源地址、CTRL、分块 CRC
    (多项式 0x3D65 反射,表运行时生成);CRC 域不含帧头与 LEN 字节
  • 伪传输层:FIR/FIN/SEQ 分帧重组,应用层消息超长自动分段
  • 应用层:Read(Class 0 完整性读 / Class 1/2/3 事件读)、时间同步
    (FC 0x0D + Group 50)、写控制输出(G10V2 二输出 / G41V2 模拟输出,
    经写回调传播到 DeviceInstance)、应用层确认
  • 对象组:静态 G1V2(二输入带标志)/ G20V6(32 位模拟量带标志);
    事件 G2V1 / G22V2(Qualifier 0x01 16 位索引前缀);bool 变化→Class 1、
    数值变化→Class 2 事件缓冲
  • 点位映射:address = DNP3 IOA(0-65535);内置 FTU-DNP3 模板
    (遥测/遥信/遥控三区地址规划)开箱即用
  • 黄金用例门禁(tests/test_wire_golden_dnp3.py 13 例):CRC 逐位参考
    实现互证、帧结构字节级断言、Class 0 响应对象序列断言;链路/应用层
    编解码为纯函数,门禁无需 socket
  • 真机 E2E:真实 socket DNP3 主站读 Class 0,从站返回 G1V2(5 遥信)+
    G20V6(4 遥测)对象序列,IOA/值与 API 读数一致

🛒 模板市场 v1(社区提交 + 管理员审核)

  • POST /templates/contribute:社区提交(结构校验/查重/点位重叠检查 →
    待审队列);GET /templates/contributions 清单;管理员 approve/reject
  • 批准即生效并持久化:批准模板落入 data/plugins/contributed-templates/
    (自动生成的 template-pack 插件),复用 v1.15 插件机制重启自动加载——
    模板市场零独立存储层
  • Web 提交界面排 v1.16.x(API 已完整可用)

🐛 修复

  • DNP3 链路层 CRC 分块剥离在最后一块不足 16 字节时会吞入 CRC 字节
    (校验必然失败)——块切分改为按剩余长度正确计算

Full Changelog: v1.15.1...v1.16.0