Repository navigation
v1.16.0
✨ 新增 — 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.py13 例):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