Industrial Meter Topology Verification & Data Governance System
在石家庄基地的能源管理数字化过程中,我们需要接入约 2000 块电力仪表。然而,由于历史建设原因,现场存在三套完全独立的命名体系,导致数据无法贯通:
- 上位机报表名 (Name A):基地运营部门使用的业务名称。
- 数采采集名 (Name B):底层 IoT 接口返回的原始 TagCode。
- 图纸机柜名 (Name C):电气原理图和现场机柜标签上的物理位置名称。
如何在大规模(2000+节点)、高混淆度的环境下,准确建立这三套名称的映射关系,并构建正确的能源计量拓扑网络(父子级联关系)?依靠人工逐一核对不仅效率低下,且极易出错。
本项目开发了一套基于**“数据反向校验拓扑”的自动化工具链。其核心逻辑是利用能量守恒定律**:在任意统计周期内,父级电表的耗电量应近似等于其所有子级电表耗电量之和(Parent_Value ≈ Σ Children_Values)。
通过系统自动化比对“物理层级”的聚合数据与“采集层级”的实际读数,我们可以:
- 验证映射准确性:如果公式成立,说明 Name A/B/C 的映射关系正确;
- 发现计量故障:如果映射无误但数据偏差巨大,则定位硬件计量故障或线损异常;
- 发现电表错位:如果两块电表交换一下位置,数据就对得上了(或者,至少有一个对得上了),说明是寄存器地址错位;
本项目包含从数据采集、清洗、拓扑构建到可视化校验的完整闭环:
- 核心脚本:
get_data_from_api.py - 功能:
- 对接 IoT 原始接口(Name B),批量拉取高频时序数据。
- 异常处理: 自动识别并清洗脏数据(混合的 Boolean/Float/String 类型)。
- 特征工程: 对原始累计读数进行差分计算(Diff Calculation),并按 5min/15min 粒度重采样对齐,生成标准化的耗电量切片。
- 核心脚本:
find_parent_node.py - 功能:
- 解析扁平化的 Excel 设备清单(包含 Level0-Level5 层级列)。
- 实现回溯算法,自动识别每个节点的直接父节点(Parent Node),将非结构化表格转化为树状邻接表(Tree Structure),为后续聚合计算提供数学基础。
- 核心脚本:
tree.py - 技术栈: PyQt5
- 功能:
- 可视化树形导航: 动态加载重构后的设备树,直观展示 2000+ 电表的层级关系。
- 实时聚合计算: 选中任意父节点或一组子节点,系统自动计算指定时间段内的 Diff 总和。通过对比父节点的读数与子节点选中项的总和,操作员可秒级完成一组映射关系的校验。
- 多视图切换: 支持在“采集名”、“报表名”之间切换,方便跨部门协作对照。
- 核心脚本:
anomalous_data_points.py - 功能:
- 利用 Z-Score 统计分析,识别读数突变、死值等异常点,排除由数据质量问题导致的拓扑校验误判。
pip install -r requirements.txt
- 配置映射表: 更新
data_inputs/电表结构化清单和名称映射.xlsx。 - 拉取数据: 运行
get_data_from_api.py获取指定时间窗口的基准数据。 - 启动校验终端:
python tree.py
- 执行校验:
- 在左侧树状图中展开层级。
- 选中所有子表,观察左上角
总和。 - 点击父表,对比其
Diff值。 - 若误差 < 1%,标记为映射通过。
- Language: Python 3.12
- GUI Framework: PyQt5
- Data Analysis: Pandas, NumPy, SciPy
- Visualization: Plotly
- Protocol: RESTful API (Requests)