Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

5.5 台区电表运行误差估计

1、案例概况

本案例介绍利用mems实现台区电表运行误差估计算法,包括电表数据获取、误差估计、结果输出。

低压台区电能表运行误差可以根据运行大数据进行估计。根据低压台区树形拓扑结构,以台区所有电能表组成集群,由能量守恒关系可以得到:

台区总表供电量=所有分表用电量之和+台区可变损耗+台区固定损耗

台区可变损耗近似与台区总用电量成正比,同时台区总表精度等级远高于用户表,可合理假设台区总表计量足够准确,计量误差为0,则上述关系可用公式表示如下:

式中:y为台区总表供电量;P为台区用户表数量;φj为第j个用户表的用电量;ej为第j个用户表的运行误差;ey为台区可变损耗与用电量的比例系数;e0为台区固定损耗。

将上式中运行误差变量和常量分离可得:

令:

代入上式,并将上式两侧均除以y进行归一化可得:

通过采集P+2个数量以上时段的台区电表有效运行数据,可对上式进行求解,对电能表运行误差进行估计。将多个时段得到的式子写成矩阵形式如下:

式中:(i)表示时段i的数据。

2、DataFrame流配置方法

规定电表运行数据输入文件格式为:

台区电能表运行误差估计的DataFrame流配置文件如下所示:

在DFF中配置了4个节点和4条边,其中节点1类型为SOURCE_FILE,作用是从文件中读取电能表数据,形成一个DataFrame,边1;2和1;3分别将该DataFrame传到节点2和节点3。

在节点2中进行电能表运行误差估计计算,该节点类型为TensorEval。其中:

  • non_zero_cols = any(meter_data, 0);作用为检测矩阵第0维(即各列)是否存在非零元素,返回值为一个向量,若列中存在非零元素对应元素为1,否则为0;
  • nz_meter_data = select(meter_data, [], find(non_zero_cols));作用为获取存在非零元素的列,避免计算矩阵奇异,find(non_zero_cols)可获取存在非零元素的列编号,select函数可获取给定编号的各列数据;
  • y = select(nz_meter_data, [], 0);作用为获取台区总表供电量数据;
  • norm_nz_meter_data = nz_meter_data./y;作用为对数据进行归一化;
  • dy = select(norm_nz_meter_data, [], 0) - select(norm_nz_meter_data, [], 1);作用为计算 ;
  • t_num = length(dy);作用为获取时段数量;
  • meter_num = get(size(norm_nz_meter_data), 1);作用为获取电表数量;
  • X = horzcat(ones(t_num, 1)./y, select(norm_nz_meter_data, [], 1), -slice(norm_nz_meter_data, [0], [2, meter_num, 1]));作用为形成前文推导得到的矩阵,其中horzcat作用是对矩阵进行水平拼接;
  • err = linsolve(X’*X,X’*dy);作用是利用最小二乘法计算误差估计结果;
  • err_0 = set(non_zero_cols, find(non_zero_cols), err’);作用是将数据均为0的电表误差设为0。
  • 在节点3中为计算结果添加标签,该节点类型为TensorEval,同时在第6列填入4,表示支持Polars操作。其中:
  • meter_id = select(col(‘*’), meter_data_columns);作用为获取输入文件数据中的列标签(包含电表编号信息);
  • res_df1 = concat(horizontal, meter_id, meter_bias);作用为将列标签与电表运行误差计算结果进行水平拼接;
  • h = height(res_df1);作用为获取计算结果中的数值数量;
  • res_df2 = with_columns(alias(when_then_otherwise(arange(0, h) == 0, alias(e0,columns), col(columns)), columns), res_df1);作用为将第1个标签替换为e0;
  • res_df3 = with_columns(alias(when_then_otherwise(arange(0, h) == 1, alias(ey,columns), col(columns)), columns), res_df2);作用为将第2个标签替换为ey;
  • res_df4 = with_columns(replace(col(columns), p, “e_”), res_df3);作用为将标签中的字符“p“替换为“e_“;
  • 边3;4类型为WriteFile,作用为将结果输出到文件。

5. 电表误差估计结果查看

输入电表数据文件示例如下所示:

运行电表误差估计的DataFrame流,输出数据如下所示:

以下附件中提供了上述台区电表运行误差估计DataFrame流的配置文件及测试案例,可参考使用。

附件:台区电表运行误差估计案例.zip