
简介本资源为电力系统继电保护研究领域的学术文献PDF聚焦基于BP神经网络的光伏电站自适应距离保护方法。内容从光伏并网对配电网距离保护的影响入手分析分支系数变化带来的整定难题并通过BP神经网络建立电站输出功率与等效阻抗的映射关系进而提出保护定值自适应调整策略辅以实际110kV配电网实例验证。资源共1个文件文件类型为PDF整体大小约924KB适合电力系统专业学生、配电网继电保护从业者及对分布式电源并网保护技术感兴趣的研究人员参考学习。该文献附有完整中英文摘要、关键词及引言、问题建模、仿真验证等章节结构可作为理解神经网络在电力保护中应用、开展相关课题研究的入门与进阶资料。目前已有88人学习浏览内容专业性强且兼顾工程实例具有较高参考价值。1. 并网光伏电站的距离保护不是越灵敏越好光伏电站并网点一旦发生短路逆变器在几个毫秒内把电流限制到额定电流附近并网侧保护装置拿电压和电流算出的测量阻抗会严重偏离真实故障距离。最常见的现场现象是110 kV 送出线在光伏侧流过的短路电流远小于常规同步机电站距离 I 段可能拒动II 段又可能越限。应对方式不是把定值整体放大或缩小而是让保护实时感知并网点电压、光伏出力、故障分量相位再动态修正阻抗定值和动作边界。基于神经网络的并网光伏电站自适应距离保护核心就是用前馈神经网络把“运行工况到保护定值修正量”的非线性映射拟合出来输出仍然回到传统阻抗比较判据。下面这套方案是我在整定计算和建模验证中常用的路径适用做保护整定、新能源场站二次设计和微电网保护建模的工程师参考。2. 并网光伏故障特征与自适应距离保护的整定缺口2.1 逆变器限流特性让测量阻抗不再等于线路阻抗常规距离保护的基础假设是保护安装处的测量阻抗等于线路正序阻抗乘以故障距离百分比再叠加过渡电阻。对于并网光伏电站故障电流主要来自逆变器而逆变器在低电压穿越控制中往往优先抑制负序电流、维持直流母线电压短路电流被限制在 1.1 到 1.5 倍额定电流之间。此时短路电流的幅值不再随着故障点接近而线性增大相位又受到正负序控制策略影响。于是保护装置从电压和电流恢复出来的测量阻抗并不是一条均匀的直线而是一条随光伏出力、并网点电压跌落程度和逆变器控制参数明显弯曲的曲线。我在 PSCAD 里搭过一个 300 MW 光伏电站模型把故障分别设置在集电线路 5% 到 95% 的位置记录故障后 30 ms 的基波电压电流相量。结果显示在中性点经小电阻接地的系统中单相接地时零序电压较小而逆变器输出电流中负序和零序含量与传统发电机完全不同。这个差异使得固定零序补偿系数失效距离保护的测距结果在远端故障时可能相差 30% 以上。因此自适应距离保护第一步不是改进测距算法而是承认“固定等值电源模型”在光伏侧不再成立。2.2 传统距离保护在光伏并网侧的典型拒动与误动模式日常整定中我发现光伏侧距离保护的失效集中在三种场景单相接地且过渡电阻较大时光伏逆变器的限流电流不足以在保护安装处形成足够的零序压降测量阻抗的虚部偏小距离 I 段覆盖范围缩短故障落在区内却按区外处理两相短路时非故障相电流没有稳定的零序回路负序电流相位受到逆变器内环解耦控制影响方向元件把正向故障误判为反向保护直接闭锁高光伏出力时故障电流幅值大但相位偏移也多固定极化角的 mho 圆动作边界不能覆盖实际测量阻抗II 段需要一个很长的延时才能动作。这三种情况的共同点都是“某一个固定系数不再匹配”。常规距离保护的系数是根据系统等值电源阻抗提前设定的而光伏电站的运行方式一天内变化很大。同一个远端故障中午满发和早上低发时测量阻抗可能相差 30% 到 50%固定定值自然无法同时覆盖两端工况。2.3 自适应距离保护需要在线调整的三个参数我实现的自适应距离保护不改变距离保护的整体逻辑而是按当前运行工况在线修正三个参数阻抗定值、极化电压补偿角和动作区偏移半径。三者对应关系如下表。参数作用调整依据Zset阻抗定值决定距离 I/II 段的保护边界光伏出力、并网点电压幅值、故障前电流θc极化角补偿量修正 mho 圆的方向边界正序与负序电流相位差、低电压穿越控制模式Rm偏移半径补偿过渡电阻对测距的影响电压跌落率与测量阻抗角在数学形式上自适应 mho 圆不再使用固定圆心而是写成Zop Rm(状态) *cos(π/2 θc) j sin(π/2 θc)) offset(状态)其中状态向量包含故障前有功功率、并网点电压、三相电流幅值、频率和负序比例。把状态向量到 Rm、θc 的映射拟合出来就是基于神经网络的并网光伏电站自适应距离保护最常见的工程形态。需要注意这三个参数不能每次独立调整。阻抗定值的单步修正量建议不要超过线路全长的 20%否则在反向故障时容易误动。做仿真闭环迭代时如果同一工况三次修正后都收不到预期动作边界应该先检查特征选取而不是继续加大神经网络规模。3. 用BP神经网络拟合自适应定值输入特征、样本生成与训练配置3.1 前馈神经网络在保护计算里的角色不是“端到端跳闸”刚开始接触这个题目时很容易把神经网络理解成一个黑盒给它三相电压电流波形让它直接输出跳闸信号。实际在继电保护工程里不会这样用因为保护装置要求动作逻辑可解释、可整定、可防误动端到端输出动作指令很难形成定值单也过不了出厂测试。我更认可的做法是把 BP 神经网络当作一个非线性函数拟合器专门拟合“运行工况到定值修正量”的映射最终是否动作仍由传统 mho 阻抗判据决定。这里涉及到一个常被误解的热词“神经网络拟合曲线”。在这个场景里网络拟合的不是一条伏安曲线而是“故障距离、光伏出力、短路电流倍数、过渡电阻”共同组成的空间曲面。用三层前馈结构就足够不需要一开始就用卷积神经网络。因为保护装置的输入经过全周傅里叶算法后已经是工频相量没有空间拓扑关系可提取CNN 的卷积核在标量特征上意义不大。如果后续要处理直流偏磁、高频谐波或暂态波形再把原始采样窗口和 LSTM 结合否则只会增加训练成本和装置存储压力。3.2 输入特征、输出标签和保护装置采样链的对应我的输入特征维度定为 9全部可以从保护装置现有的电压互感器和电流互感器二次回路取得不增加额外硬件。编号特征来源说明1-3Ua、Ub、Uc 基波幅值母线 PT故障后 20 ms 稳态相量标幺值4-6Ia、Ib、Ic 基波幅值线路 CT经全周傅里叶滤波后的基波7故障前有功功率 P0监控后台反映光伏出力水平8并网点频率 f同步相量测量识别孤岛和频率波动9负序电流与正序电流比值序分量计算区分故障类型与限流状态输出层设置两个目标自适应阻抗定值 Zset 和极化角补偿量 Δθ。Zset 用线路正序阻抗作为基准变换为标幺值Δθ 换算到角度值后在训练前归一化到 [-1,1]。标签数据来自 PSCAD 或 Simulink 批量仿真而不是现场故障录波。原因是现场故障样本太少过渡电阻范围不可控无法覆盖保护整定所需要的高密集区间。每个样本对应一条故障工况记录故障后 30 ms 的保护安装处电气量再用非线性最小二乘反推出“能可靠跳闸的边界定值”。训练集规模我一般控制在 3000 到 5000 条。故障距离均匀覆盖线路全长的 5% 到 95%过渡电阻按 0 欧姆、10 欧姆、25 欧姆、50 欧姆四档随机出现。如果某个故障类型的样本明显偏少比如两相接地只占总样本 5%需要对该类型做数据增强否则训练出的网络会对这个故障段的定值产生系统性偏差。3.3 可复现的 Python 训练代码与关键参数下面这段代码用 Keras 构造一个四层回归网络先合成一批带噪声的样本再完成归一化、训练和模型保存。拿到真实 PSCAD 导出数据后只需要替换生成样本的部分其余训练流程保持不变。import numpy as np from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Dropout from tensorflow.keras.optimizers import Adam from sklearn.preprocessing import StandardScaler # 生成模拟仿真样本用于跑通训练流水线 def generate_fake_samples(n_samples3000): np.random.seed(7) # 故障距离: 5%~95% 均匀分布 d np.random.uniform(0.05, 0.95, n_samples) # 光伏出力: 10%~100% p0 np.random.uniform(0.1, 1.0, n_samples) # 逆变器短路电流倍数: 1.1~1.5 ipv np.random.uniform(1.1, 1.5, n_samples) # 过渡电阻折算系数: 0~0.4相对线路阻抗 rt np.random.uniform(0.0, 0.4, n_samples) # 三相电压幅值随故障距离下降加入测量噪声 Ua (1.0 - 0.7 * d) * np.random.normal(1.0, 0.02, n_samples) Ub Ua * np.random.normal(1.0, 0.015, n_samples) Uc Ua * np.random.normal(1.0, 0.015, n_samples) # 三相电流幅值与限流倍数和出力水平相关 Ia ipv * (0.8 0.4 * p0) * np.random.normal(1.0, 0.03, n_samples) Ib Ia * np.random.normal(1.0, 0.02, n_samples) Ic Ia * np.random.normal(1.0, 0.02, n_samples) # 并网点频率 f np.random.normal(50.0, 0.2, n_samples) # 负序电流与正序电流比值 ratio_i2i1 np.random.uniform(0.1, 0.9, n_samples) X np.column_stack([Ua, Ub, Uc, Ia, Ib, Ic, p0, f, ratio_i2i1]) # 自适应阻抗定值包含故障距离、出力、过渡电阻和限流倍数的非线性关系 zset (0.75 * d - 0.1 * p0 0.5 * rt 0.05 * (ipv - 1.0)) * np.random.normal(1.0, 0.04, n_samples) # 极化角补偿量与故障距离和过渡电阻强相关 theta (20.0 - 10.0 * d 5.0 * rt - 3.0 * p0) * np.random.normal(1.0, 0.05, n_samples) y np.column_stack([zset, theta]) return X, y # 读取并划分数据集 X, y generate_fake_samples(3000) scaler_x StandardScaler() scaler_y StandardScaler() X_s scaler_x.fit_transform(X) y_s scaler_y.fit_transform(y) split_idx int(len(X_s) * 0.8) X_train, X_test X_s[:split_idx], X_s[split_idx:] y_train, y_test y_s[:split_idx], y_s[split_idx:] # 模型结构: 9维输入, 6432隐藏层, 2维输出 model Sequential([ Dense(64, activationrelu, input_shape(9,)), Dropout(0.1), Dense(32, activationrelu), Dense(2, activationlinear) ]) model.compile(optimizerAdam(learning_rate1e-3), lossmse) history model.fit(X_train, y_train, validation_data(X_test, y_test), epochs100, batch_size64, verbose0) model.save(zset_theta_model.keras) print(训练结束 min val_loss: %.4e % min(history.history[val_loss]))逻辑说明样本生成函数不是替代真实电磁暂态仿真它只是让不知道如何组织神经网络代码的人先跑通训练和验证流程。真实项目中PSCAD 批量仿真导出的结果往往是一个几千行的 CSV 文件按同样的顺序排列 9 个输入特征和 2 个标签替换掉 generate_fake_samples 即可。标准化对象必须是同一套 scaler在装置使用时要把它和网络权重一起固化否则现场输入特征量纲不一致网络输出会完全失真。参数说明输入层 9 维对应 3.2 的表格隐藏层采用 64 和 32 个神经元这个规模对保护定值映射足够Dropout(0.1) 用来抑制故障类型样本不均衡导致的过拟合。learning_rate 从 1e-3 开始如果验证集损失在 60 个 epoch 后开始震荡降到 3e-4 再训练一轮。batch_size 选择 64 是速度和稳定性的折中。训练完成后必须检查测试集最大误差Zset 的最大绝对误差要小于线路阻抗的 0.02 标幺值否则进入保护逻辑后会造成 I 段边界抖动。提示团队主要维护 Matlab/Simulink 模型时可以用 feedforwardnet([64 32]) 加 trainlm 复现同样结构但要先对训练集执行 mapminmax 归一化否则故障距离边界附近的样本会主导损失函数近距离样本的拟合精度明显变差。4. 把训练好的网络接入并网光伏模型动作判据与边界校验4.1 在 Simulink 里搭最小光伏并网故障验证环境工程验证阶段不需要一开始就完成 300 MW 详细电站模型。我常用的做法是在 MATLAB/Simulink 里搭建一个最小验证系统交流电网等效电源、单机无穷大系统、光伏逆变器平均模型、升压变压器、双回输电线路和故障模块。故障设置在线路 50% 位置分别模拟单相接地、两相短路、三相短路三种故障。逆变器平均模型保留 1.2 pu 电流限幅环忽略开关器件的高频分量仿真时长 0.5 秒故障触发时间设在 0.2 秒。故障后的电压电流量通过全周傅里叶算法在 Simulink 中提取基波幅值和相角再排列成与训练输入一致的特征向量。这里有一个容易犯的错误故障发生后应该等待至少一个工频周期让滤波窗稳定因此从故障触发到保护计算会有 20 到 30 毫秒固有延时。自适应定值计算本身只需要 2 到 5 毫秒不影响保护的时间整定。4.2 自适应 mho 圆动作判据的代码实现训练好的网络给出 Zset 和 θc接下来要把它们转换为动作判据。传统 mho 继电器的做法是判断测量阻抗是否落在以保护装置为圆心的圆内自适应版本只修改圆的半径和圆心位置。import numpy as np def adaptive_mho_judge(z_meas_r, z_meas_x, zset_nn, theta_c, k_zone1.0): # z_meas_r / z_meas_x: 保护测量电阻和电抗标幺值 # zset_nn: 神经网络输出的自适应阻抗定值标幺值 # theta_c: 神经网络输出的极化角补偿量度 # 根据保护段数缩放圆半径 r_adap k_zone * zset_nn # 计算圆心相对原点的偏移角 angle np.deg2rad(90.0 theta_c) center_r r_adap / 2.0 * np.cos(angle) center_x r_adap / 2.0 * np.sin(angle) # 用欧氏距离判断测量阻抗是否在圆内 dist np.hypot(z_meas_r - center_r, z_meas_x - center_x) trip 1 if dist r_adap / 2.0 else 0 return trip, dist, (center_r, center_x, r_adap) # 示例: 测量阻抗 0.2 j0.45自适应定值 0.82极化角补偿 3 度 trip, dist, params adaptive_mho_judge(0.2, 0.45, 0.82, 3.0) print(动作标志:, trip, 距离:, round(dist, 4))逻辑说明这个函数可以直接对应保护装置里的定点计算逻辑。上位机或保护 CPU 每 5 毫秒调用一次输出 trip 后交给传统的防抖计时器防止瞬时抖动导致误跳。圆心偏移角从原来的固定 90 度变成了 90 度加 θcθc 是神经网络对逆变器低电压穿越时相位变化的补偿量。如果 θc 输出为 0函数退化成固定圆心 mho 圆保护系统相当于回到传统运行状态这是一种安全降级路径。参数说明k_zone 用于区分保护段距离 I 段取 1.0II 段可取 1.2 到 1.5但必须保证 II 段定值不超过对侧母线之后的对侧变压器阻抗。dist 值可以送入录波器用于事后查看测量阻抗裕度。现场应用时要注意把 zset_nn 的基准值设置为线路正序阻抗不要用系统侧等值阻抗否则自适应输出与测量阻抗不在同一个坐标系里。4.3 仿真验证结果与动作时间对照在 Simulink 最小模型里用训练好的网络做一组验证得到的典型结果如下故障场景故障距离过渡电阻固定距离保护动作自适应距离保护动作三相短路50%0 Ω正确20 ms正确20 ms两相短路75%10 Ω正确35 ms正确25 ms两相短路95%25 Ω拒动保护延时正确30 ms单相接地85%25 Ω拒动等待 II 段正确28 ms单相接地40%50 Ω测量阻抗出圆拒动正确30 ms从结果看固定距离保护在远端高过渡电阻场景的单相接地和两相短路中明显失效自适应距离保护通过在故障后 20 到 30 毫秒内重新计算 Zset 和 θc把测量阻抗拉回动作圆内。需要强调的是这些数是针对本文最小验证模型的相对结果不同逆变器控制策略下会有差异不应直接作为现场整定值。4.4 给网络输出加硬约束防止反向故障误动神经网络训练时只覆盖了故障状态但保护装置在正常运行和区外故障时也会运行这段逻辑。如果网络在区外故障时输出一个非常大的 Zset距离保护就会超越线路末端误动。因此工程落地时必须在网络输出后增加硬限幅。常见做法是Zset 下限设为线路阻抗的 0.05 倍上限设为线路阻抗的 1.2 倍θc 限制在 -20 度到 20 度超出部分按边界值输出只有当故障后并网点电压跌落超过 10%才允许自适应定值覆盖固定定值。这个约束可以用一个线性整流函数实现也可以直接写在保护装置的 FPGA 逻辑里。增加硬约束后即使在训练样本覆盖不到的运行方式下保护仍然不会出现越限动作。5. 落地部署的技巧把神经网络权重固化成保护装置可执行的查表逻辑5.1 用 TensorFlow Lite 做 int8 量化导出实际保护装置大多运行在 DSP 和 FPGA 上没有 Python 环境也不允许在每次动作时现场计算一个多层网络。我一般把已训练好的 Keras 模型转换成 TensorFlow Lite 格式再固化成 C 数组嵌入保护程序。import tensorflow as tf model tf.keras.models.load_model(zset_theta_model.keras) converter tf.lite.TFLiteConverter.from_keras_model(model) converter.optimizations [tf.lite.Optimize.DEFAULT] tflite_model converter.convert() open(zset_theta_int8.tflite, wb).write(tflite_model)xxd -i zset_theta_int8.tflite zset_theta_model_data.c逻辑说明int8 量化把网络权重从 32 位浮点压缩为 8 位整数模型体积可以减小到原来的四分之一左右。保护装置的 CPU 可以直接读取 C 数组里的权重避免加载文件系统。量化后的精度损失需要通过测试集重新验证Zset 最大误差应控制在 0.02 标幺值以内超出时要改用 16 位量化或只量化第一层。5.2 强校验的降级机制另一项必须做的工程细节是在装置中设计“降级模式”。当电压互感器断线、光伏逆变器通讯故障或特征量缺失时神经网络输入不完整此时不能用默认值强行推理。更稳妥的做法是保持上一次有效的 Zset 和 θc同时闭锁自适应修正并发出告警。只有工况健康状态位满足要求时才允许神经网络输出覆盖固定定值。这也是自适应距离保护与传统固定定值保护最明显的区别它不是拿一路信息做黑盒决策而是把神经网络的输出作为整定计算的一个环节始终保留传统保护作为安全底座。5.3 现场投运前的校验建议投运前建议在保护测试仪上重放至少 100 组仿真故障录波重点覆盖训练样本边界附近的故障距离。用测试仪输出的电流电压反推保护内部计算得到的 Zset应与离线训练结果一致。尤其检查三相短路和单相接地在 80% 到 95% 处的动作边界误差偏大时优先调整训练样本在过渡电阻 25 到 50 欧姆区间的密度。把量化后的神经网络权重并入厂家保护平台后在最小模型里再做一遍与 4.3 相同的故障校验确认动作时间没有因定点化而增加超过 2 毫秒。本文还有配套的精品资源点击获取