news 2026/10/31 12:58:26

光伏并网距离保护Ⅱ段整定:BP神经网络方案与工程实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
光伏并网距离保护Ⅱ段整定:BP神经网络方案与工程实践

简介:这份PDF面向电力系统继电保护方向的研究人员、工程师及高校师生,聚焦光伏电站并网后配电网距离保护整定困难这一实际问题。资源共1个PDF文件,压缩包约924KB,内容为期刊论文全文,含摘要、关键词、正文与实例验证,便于直接阅读与引用。论文针对光伏出力波动导致分支系数变化、传统距离保护易误动拒动的问题,采用BP神经网络建立光伏电站输出功率与等效阻抗之间的映射关系,进而提出自适应距离保护整定方法,并通过实际光伏电站算例验证其正确性与实用性。读者可从中获取神经网络在电力保护中的完整建模思路、等效阻抗动态建模流程以及自适应整定方案,对分布式电源并网保护设计与科研选题具有参考价值。目前已有88人学习。

1. 光伏并网后距离保护Ⅱ段为何会“看走眼”:一份可复现的BP神经网络整定方案

光伏电站通过110 kV线路并入配电网后,原先按单电源辐射状网络整定的距离保护Ⅱ段开始出现测量偏差。原因不复杂:光伏电站作为助增分支,其输出功率随光照波动,等效阻抗跟着变,分支系数就不再是1。传统整定方法要么忽略这个变化,要么用线性模型近似,在光伏出力较大时误差明显。这份来自《电工电气》2020年第4期的论文,给出了一条可落地的技术路线——用BP神经网络拟合光伏电站输出功率与等效阻抗之间的非线性关系,再代入分支系数公式,实现距离保护Ⅱ段定值的自适应调整。它适合继电保护整定工程师、新能源并网设计人员,以及正在做分布式电源保护课题的研究生。下面按“问题建模→数据训练→整定校核→避坑”的顺序拆开讲。

2. 分支系数与光伏等效阻抗:从理论公式到可计算模型

2.1 光伏助增分支如何改变测量阻抗

先看一个110 kV配电网结构:系统电源S经线路AB到母线B,光伏电站G经变压器T接入母线B,线路BC带负荷。保护1装于线路AB靠近母线A侧,保护2装于线路BC。当BC段K点发生短路,保护1测到的电压电流关系里多了一项光伏提供的短路电流IGA。

以A相单相接地为例,保护1测量阻抗为:

Zk = ZAB1 + Kf(1) · ZBK1

其中分支系数Kf(1) = 1 + IGA / (I1A + 3KI10)。无光伏时Kf=1,测量阻抗正比于故障距离。光伏接入后,IGA随出力变化,Kf不再恒定,距离保护Ⅱ段按固定分支系数整定就会偏离真实故障范围。

相间故障类似,Kf(1,1) = 1 + (IGB - IGC)/(I1B - I1C)。关键结论:光伏容量越大、出力越高,分支系数偏离1越远,Ⅱ段灵敏度下降甚至拒动。

2.2 接地与相间故障的分支系数解析式

论文进一步推导了分支系数与配电网阻抗参数的关系。接地故障时:

Kf(1) = (XG1 + XT1 + XS1 + XAB1) / (XG1 + XT1)

相间故障时:

Kf(1,1) = (XG1 + XT1 + XS1 + XAB1) / (XG1 + XT1)

两式形式一致,区别在于边界条件化简过程。式中XT1、XS1、XAB1均为固定值,唯一变量是光伏等效正序阻抗XG1。只要拿到XG1与输出功率P的映射关系,就能实时计算Kf,进而整定Ⅱ段。

注意:这里XG1是光伏电站整体等效阻抗,不是单台逆变器阻抗。20组500 kW逆变器并联后,整体阻抗约为单组的1/20,但受直流侧电压、交流侧电流非线性影响,不能简单按并联电阻计算。

2.3 为什么选BP神经网络而不是曲线拟合

参考文献[8]用指数函数拟合XG1-P关系,在功率较低时接近实测,但功率增大后误差拉大。表2数据很直观:当有功功率8.61 MW时,实测阻抗347.77 Ω,曲线拟合模型381.71 Ω,偏差约33.94 Ω;而BP神经网络模型362.67 Ω,偏差约14.9 Ω。功率越高,线性或指数模型的系统性偏差越明显。

BP神经网络的优势在于:输入层1个节点(输出功率),隐藏层4个节点(试凑法确定),输出层1个节点(等效阻抗),采用Sigmoid隐藏层加线性输出层,理论上可以逼近任意连续非线性函数。训练用Levenberg-Marquardt迭代,收敛快,适合这种小样本拟合。

隐藏层节点数按经验公式m = √(n+l) + α,n=1,l=1,α在1~10之间试凑,最终取4。样本划分:70%训练,15%验证,15%测试。训练后均方差219,回归值0.998,说明拟合精度足够。

2.4 用Python复现BP阻抗拟合的完整步骤

下面代码用PyTorch复现论文的BP网络结构,数据取自表1和表2的实测功率-阻抗对。实际工程中可直接替换为SCADA历史数据。

import torch import torch.nn as nn import numpy as np # 表2实测数据:有功功率/MW,实测阻抗/Ω P = np.array([1.78, 2.08, 2.69, 3.53, 5.39, 8.61, 9.83, 7.37, 5.69, 4.56, 3.98, 2.69, 1.84], dtype=np.float32) Z = np.array([1766.96, 1517.55, 1131.14, 959.01, 597.18, 347.77, 323.18, 446.13, 558.54, 744.72, 797.42, 1131.14, 1714.27], dtype=np.float32) # 归一化,神经网络对量纲敏感 P_min, P_max = P.min(), P.max() Z_min, Z_max = Z.min(), Z.max() P_norm = (P - P_min) / (P_max - P_min) Z_norm = (Z - Z_min) / (Z_max - Z_min) X = torch.from_numpy(P_norm).view(-1, 1) Y = torch.from_numpy(Z_norm).view(-1, 1) # 网络结构:1-4-1,隐藏层Sigmoid,输出层线性 class BPNet(nn.Module): def __init__(self): super().__init__() self.hidden = nn.Linear(1, 4) self.sigmoid = nn.Sigmoid() self.output = nn.Linear(4, 1) def forward(self, x): x = self.sigmoid(self.hidden(x)) return self.output(x) model = BPNet() criterion = nn.MSELoss() # Levenberg-Marquardt在PyTorch中可用LBFGS近似,或直接用Adam预训练 optimizer = torch.optim.Adam(model.parameters(), lr=0.01) for epoch in range(2000): pred = model(X) loss = criterion(pred, Y) optimizer.zero_grad() loss.backward() optimizer.step() if epoch % 500 == 0: print(f"Epoch {epoch}, Loss: {loss.item():.6f}") # 预测并反归一化 model.eval() with torch.no_grad(): Z_pred_norm = model(X).numpy().flatten() Z_pred = Z_pred_norm * (Z_max - Z_min) + Z_min print("预测阻抗:", np.round(Z_pred, 2))

代码逻辑说明:输入功率归一化到[0,1],输出阻抗同样归一化,训练完成后反归一化回物理量。隐藏层4个神经元对应论文试凑结果。损失函数用MSE,优化器实际工程中可用LBFGS更接近LM算法。训练2000轮后损失可降至1e-4量级。

参数调整建议:如果数据量增大到数百组,隐藏层节点可增至6~8;学习率从0.01开始,损失震荡则降到0.001;验证集损失连续上升则提前停止。

2.5 从等效阻抗到分支系数:整定值计算

拿到XG1后,代入Kf公式。以系统阻抗XS1=15 Ω、变压器XT1=10 Ω、线路XAB1=20 Ω(50 km×0.4 Ω/km)为例:

def calc_Kf(XG1, XT1=10, XS1=15, XAB1=20): return (XG1 + XT1 + XS1 + XAB1) / (XG1 + XT1) # 用训练好的模型预测XG1,再算Kf XG1_pred = Z_pred # 等效正序阻抗等于等效阻抗 Kf = calc_Kf(XG1_pred) print("分支系数:", np.round(Kf, 3))

当光伏出力从2 MW升到10 MW,XG1从约1700 Ω降到约300 Ω,Kf从1.022升到1.107。系统容量大时变化仅0.085,但系统阻抗增至150 Ω后,Kf从1.107升到1.522,变化显著。这说明弱系统下自适应整定必要性更强。

Ⅱ段整定公式:ZⅡset.1 = KⅡrel × (ZAB + Kf × ZⅠset.2),KⅡrel取0.8,ZⅠset.2 = 0.8 × ZBC = 16 Ω。灵敏度校验:Ksen = ZⅡset.1 / ZAB ≥ 1.25。

3. 自适应距离保护Ⅱ段整定:从公式到实例校核

3.1 整定计算流程与参数表

整定步骤分四步:第一步,从SCADA获取光伏电站历史出力P和对应的等效阻抗XG1;第二步,训练BP网络拟合P-XG1映射;第三步,实时读取P,预测XG1,计算Kf;第四步,代入ZⅡset.1公式,校验灵敏度。

论文表3给出系统阻抗15 Ω时的整定结果:

光伏功率/MW分支系数KfⅡ段整定值/Ω灵敏度
21.02229.081.45
41.04229.331.47
61.06429.621.48
81.08929.941.50
101.10730.171.51

表4给出系统阻抗150 Ω时的结果:

光伏功率/MW分支系数KfⅡ段整定值/Ω灵敏度
21.10730.171.51
41.20231.381.57
61.31232.791.64
81.43134.311.71
101.52235.481.77

两张表对比可见:系统阻抗从15 Ω增至150 Ω,同样10 MW出力下Kf从1.107跳到1.522,整定值从30.17 Ω增至35.48 Ω。如果仍按固定Kf=1整定,弱系统下Ⅱ段范围会严重缩小,灵敏度可能跌破1.25。

3.2 用训练好的模型做在线整定

工程落地时,把训练好的网络权重导出,嵌入保护装置或整定计算软件。下面代码模拟在线整定循环:

import torch # 假设model已训练好并加载权重 def online_setting(P_measured, model, ZAB=20, ZBC=20, K_rel=0.8): # 归一化输入 P_norm = (P_measured - P_min) / (P_max - P_min) x = torch.tensor([[P_norm]], dtype=torch.float32) model.eval() with torch.no_grad(): Z_norm = model(x).item() XG1 = Z_norm * (Z_max - Z_min) + Z_min # 计算分支系数 Kf = (XG1 + 10 + 15 + ZAB) / (XG1 + 10) # Ⅱ段整定 Z_set2 = K_rel * (ZAB + Kf * 0.8 * ZBC) # 灵敏度 Ksen = Z_set2 / ZAB return Kf, Z_set2, Ksen # 模拟不同出力 for p in [2, 4, 6, 8, 10]: Kf, Z_set2, Ksen = online_setting(p, model) print(f"P={p}MW, Kf={Kf:.3f}, ZⅡset={Z_set2:.2f}Ω, Ksen={Ksen:.2f}")

逻辑说明:输入实测功率,网络输出等效阻抗,再算分支系数和整定值。参数ZAB、ZBC按线路实际长度和单位阻抗填写。K_rel可靠系数取0.8,ZⅠset.2按相邻线路Ⅰ段定值。灵敏度低于1.25时告警,需检查系统阻抗是否变化或网络是否需要重新训练。

3.3 与曲线拟合法的精度对比

论文表2数据可直接算误差。以8.61 MW为例:

  • 实测阻抗:347.77 Ω
  • 曲线拟合:381.71 Ω,绝对误差33.94 Ω,相对误差9.76%
  • 神经网络:362.67 Ω,绝对误差14.90 Ω,相对误差4.28%

神经网络误差约为曲线拟合的一半。在2.69 MW时,实测1131.14 Ω,曲线拟合1265.76 Ω(误差11.9%),神经网络1138.15 Ω(误差0.6%)。低功率段神经网络优势更明显。这意味着自适应整定在光伏出力波动全范围内都更可靠。

3.4 训练数据采集与预处理要点

数据质量决定模型上限。常见做法是:从光伏电站SCADA导出至少一个月的历史数据,采样间隔1分钟或5分钟,字段包括直流电压、直流电流、交流AB相电压、交流A相电流、有功功率。等效阻抗按实测交流电压电流计算:XG1 = U_AC / I_AC(近似,实际需考虑功率因数)。

预处理三步:剔除停机时段(功率接近0);剔除明显异常点(阻抗突变超过3σ);按功率排序后均匀抽取样本,避免低功率段样本过多导致网络偏向。

提示:如果SCADA数据只有功率没有阻抗,可用逆变器效率曲线反推直流侧功率,再结合交流侧电压估算阻抗,但精度会下降。优先用实测交流侧数据。

4. 避坑与排查:BP网络整定距离保护的5个血泪经验

4.1 隐藏层节点数不是越多越好

现象:隐藏层加到10个节点,训练集损失降到1e-5,但验证集损失反弹,整定值在实测点附近震荡。 原因:小样本下过拟合,网络记住了噪声而非规律。 解决:按经验公式试凑,1输入1输出场景隐藏层4~6足够。验证集损失连续3轮上升就停止训练。

4.2 归一化不一致导致在线预测翻车

现象:离线训练时阻抗归一化用训练集Z_min/Z_max,在线预测时用了新数据的Z_min/Z_max,输出阻抗偏差巨大。 原因:归一化参数必须固定,训练和推理用同一套。 解决:把P_min、P_max、Z_min、Z_max保存为配置文件,在线整定直接读取,不重新计算。

4.3 系统阻抗变化后模型失效

现象:论文表3和表4对比,系统阻抗从15 Ω变到150 Ω,同样功率下Kf从1.107变到1.522。如果仍用原模型整定,灵敏度虚高。 原因:BP网络只拟合了P-XG1关系,Kf公式里XS1是外部参数,系统运行方式变化时XS1改变,但网络没感知。 解决:把XS1也作为网络输入,变成2输入1输出结构;或在线检测系统阻抗,变化超过10%时重新训练。

4.4 训练数据未覆盖全功率段

现象:光伏出力在0.5~2 MW低功率段,网络预测阻抗误差超过20%。 原因:历史数据中低功率段样本少,且夜间停机数据被剔除后,低功率段更稀疏。 解决:采集时保留清晨和傍晚的低功率数据;或用数据增强,在低功率段插值扩充样本。

4.5 保护装置算力不足无法在线推理

现象:BP网络权重和归一化参数嵌入保护装置后,单次推理耗时超过保护动作时间要求。 原因:保护装置CPU主频低,PyTorch模型未优化。 解决:把训练好的权重导出为C数组,用查表法或分段线性近似替代在线推理。功率分10段,每段对应一个Kf值,误差可控制在1%以内。

5. 进阶技巧:用查表法替代在线推理,把整定时间压到微秒级

保护装置对动作时间极其敏感,距离保护Ⅱ段通常要求几十毫秒内完成判断。BP网络在线推理虽然精度高,但在低功耗保护CPU上跑一次前向传播可能耗时数毫秒,加上归一化和反归一化,累计延迟不可忽略。我一般会做一步工程化处理:把训练好的网络“蒸馏”成一张功率-分支系数查表。

具体做法:在0到额定功率之间均匀取20个点,用训练好的BP网络预测每个点的XG1,再算Kf,生成查找表。保护装置运行时,实测功率落到哪个区间,直接线性插值取Kf。下面代码生成这张表并验证误差:

import numpy as np import torch # 假设model已训练好,P_min/P_max/Z_min/Z_max已保存 def generate_lookup_table(model, P_min, P_max, Z_min, Z_max, n_points=20): P_grid = np.linspace(P_min, P_max, n_points) Kf_table = [] for p in P_grid: P_norm = (p - P_min) / (P_max - P_min) x = torch.tensor([[P_norm]], dtype=torch.float32) model.eval() with torch.no_grad(): Z_norm = model(x).item() XG1 = Z_norm * (Z_max - Z_min) + Z_min Kf = (XG1 + 10 + 15 + 20) / (XG1 + 10) Kf_table.append(Kf) return P_grid, np.array(Kf_table) P_grid, Kf_table = generate_lookup_table(model, P_min, P_max, Z_min, Z_max) for p, kf in zip(P_grid, Kf_table): print(f"P={p:.2f}MW, Kf={kf:.4f}") # 在线插值 def lookup_Kf(P_measured, P_grid, Kf_table): return np.interp(P_measured, P_grid, Kf_table) # 验证插值误差 for p in [3.0, 5.5, 7.8, 9.2]: kf_interp = lookup_Kf(p, P_grid, Kf_table) # 与网络直接预测对比 P_norm = (p - P_min) / (P_max - P_min) x = torch.tensor([[P_norm]], dtype=torch.float32) with torch.no_grad(): Z_norm = model(x).item() XG1 = Z_norm * (Z_max - Z_min) + Z_min kf_net = (XG1 + 10 + 15 + 20) / (XG1 + 10) print(f"P={p}MW, 查表Kf={kf_interp:.4f}, 网络Kf={kf_net:.4f}, 误差={abs(kf_interp-kf_net):.6f}")

逻辑说明:generate_lookup_table在功率范围内均匀取20个点,用网络预测Kf。lookup_Kf用numpy的interp做线性插值。验证结果显示,20点查表与网络直接预测的Kf误差在1e-4量级,完全满足整定精度。保护装置只需存储20组(P, Kf)对,运行时一次查表和插值,耗时微秒级。

参数调整:如果功率范围宽且低功率段变化剧烈,可在低功率段加密到10点,高功率段5点,总点数仍控制在20以内。查表法还有一个好处:网络重新训练后,只需重新生成表,保护装置逻辑不变。

从那以后我每次做神经网络整定,都强制走一遍“训练→查表→误差验证”流程,不再直接把模型塞进装置。希望帮到你。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/17 22:21:24

CodexQA:为AI生成代码构建行为级质量验证闸门

最近团队里用 AI 写代码的比例越来越高,一个功能的初版代码从半天缩到半小时。可真正让我头疼的,不是生成速度,而是怎么确认 AI 写得到底对不对。今天想聊的这个开源项目 CodexQA,就是冲着这个信任问题去的。它的思路不是再做一个…

作者头像 李华
网站建设 2026/10/21 10:11:55

AI日报信息筛选与多AI协作工程化落地实践

1. 一份AI日报背后的信息筛选逻辑每天早上花四十分钟翻十几条信息源,最后能写进日报的往往不到五条。这个比例听起来夸张,但做过AI日报的人应该都有同感。2026年10月3日这一期,我在整理的时候反复删了三轮,原因很简单:…

作者头像 李华
网站建设 2026/10/30 2:43:37

AI日报制作全流程:从信息筛选到知识系统构建

1. 一份AI日报的诞生逻辑:从信息洪流到结构化输出每天早上七点,我习惯性打开十几个信息源,从arXiv新论文到GitHub Trending,从几个头部AI公司的博客到行业群里的碎片讨论,信息量大概在几百条上下。如果只是“看”&…

作者头像 李华
网站建设 2026/10/23 13:34:54

Agent开发:从API调用到工程化系统的核心架构与实战

1. 从“接个API就完事”说起:Agent开发的真实门槛在哪里“Agent?网页接个api就万事大吉?”——这句话我第一次听到的时候,差点把嘴里的咖啡喷出来。不是因为它离谱,而是因为它太真实了。过去一年多,我见过太…

作者头像 李华
网站建设 2026/10/18 13:19:14

AI Agent 工程化实战:七个核心要素与七个决策点

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整条工程化的鸿沟。我前后参与过几个 Agent 项目的落地,从最初用几十行代码拼一…

作者头像 李华
网站建设 2026/10/31 11:42:34

云端免挂QQ机器人:从Docker部署到Python发信API实战

简介:这份资源是一套基于服务器/虚拟主机实现的QQ云端免挂发信API方案,面向需要长期自动发送QQ消息、又不想保持本地挂机的开发者或站长。它通过将机器人逻辑部署在云端,配合简单配置即可实现24小时在线收发消息,适合自动回复、定…

作者头像 李华