简介这份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)。无光伏时Kf1测量阻抗正比于故障距离。光伏接入后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 √(nl) αn1l1α在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], dtypenp.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], dtypenp.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(), lr0.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(fEpoch {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公式。以系统阻抗XS115 Ω、变压器XT110 Ω、线路XAB120 Ω50 km×0.4 Ω/km为例def calc_Kf(XG1, XT110, XS115, XAB120): 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 MWXG1从约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.8ZⅠ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.4541.04229.331.4761.06429.621.4881.08929.941.50101.10730.171.51表4给出系统阻抗150 Ω时的结果光伏功率/MW分支系数KfⅡ段整定值/Ω灵敏度21.10730.171.5141.20231.381.5761.31232.791.6481.43134.311.71101.52235.481.77两张表对比可见系统阻抗从15 Ω增至150 Ω同样10 MW出力下Kf从1.107跳到1.522整定值从30.17 Ω增至35.48 Ω。如果仍按固定Kf1整定弱系统下Ⅱ段范围会严重缩小灵敏度可能跌破1.25。3.2 用训练好的模型做在线整定工程落地时把训练好的网络权重导出嵌入保护装置或整定计算软件。下面代码模拟在线整定循环import torch # 假设model已训练好并加载权重 def online_setting(P_measured, model, ZAB20, ZBC20, K_rel0.8): # 归一化输入 P_norm (P_measured - P_min) / (P_max - P_min) x torch.tensor([[P_norm]], dtypetorch.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(fP{p}MW, Kf{Kf:.3f}, ZⅡset{Z_set2:.2f}Ω, Ksen{Ksen:.2f})逻辑说明输入实测功率网络输出等效阻抗再算分支系数和整定值。参数ZAB、ZBC按线路实际长度和单位阻抗填写。K_rel可靠系数取0.8ZⅠ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_points20): 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]], dtypetorch.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(fP{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]], dtypetorch.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(fP{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以内。查表法还有一个好处网络重新训练后只需重新生成表保护装置逻辑不变。从那以后我每次做神经网络整定都强制走一遍“训练→查表→误差验证”流程不再直接把模型塞进装置。希望帮到你。本文还有配套的精品资源点击获取