资讯动态

功率摆动闭锁与解阻塞的改进方法及Matlab仿真实现

发布时间:2026/10/20 14:53:56 来源:尧图企业网站定制
1. 功率摆动为什么会让距离继电器“犯迷糊”在电力系统里距离保护是输电线路的主保护之一它的核心逻辑其实很朴素实时测量保护安装处的电压和电流算出测量阻抗再看这个阻抗落在不落在整定好的阻抗圆内。落在圆内就认为线路发生了故障跳闸落在圆外就认为系统正常运行不动作。这个思路在系统平稳运行时没有任何问题但一旦系统出现功率摆动事情就变得复杂起来。所谓功率摆动本质上是系统遭受扰动后发电机转子之间出现了相对摇摆。你想象两个发电机之间像用橡胶绳连着一头被拽了一下整个系统会来回晃荡。这种摆动会在输电线路上引起电压、电流的大幅振荡电流一会儿大一儿小电压也跟着起伏。关键问题来了——在这个振荡过程中测量阻抗也会跟着变化而且它会”走”出一条非常复杂的轨迹这条轨迹完全有可能穿过距离保护的阻抗圆。一旦测量阻抗轨迹溜进阻抗圆距离继电器就会把它当成线路故障直接命令断路器跳闸。但实际情况是线路并没有坏只是系统在“打摆子”。这种误动会让本该保持联络的系统被硬生生断开可能进一步恶化系统稳定性甚至引发连锁故障。所以距离保护必须配备一个“闭锁”功能识别出当前是功率摆动而非真实故障时把继电器暂时按捺住不急着跳闸。这就是常说的功率摆动闭锁英文叫 Power Swing BlockingPSB。但闭锁也不是闭死就万事大吉。麻烦的地方在于功率摆动期间完全有可能叠加真实故障比如摆动振荡到最厉害的时候线路上真的被雷击击穿了。这时候如果继电器还傻乎乎地闭锁着就会把真故障漏跳后果比误动还严重。这就要求闭锁功能在检测到故障特征后能立刻“解锁”让保护重新具备跳闸能力这个动作叫解阻塞Unblocking。所以你看功率摆动阻塞和解阻塞本质上是同一枚硬币的两面既要防误动又要防拒动。传统做法里这两者的边界划得非常粗野很多时候靠经验、靠保守参数现场调试经常要反复试。这也是这个方向一直有人在研究改进的原因。就我自己的观察很多刚接触这个领域的同学或者年轻工程师一上来就盯着算法公式看其实入门最应该先搞清楚的是功率摆动到底是什么物理过程它和故障在电气特征上到底有哪些可量化的差异。这些差异才是所有判据的出发点。本文这套改进方法核心也落在这里——找到更稳、更容易实现的区分特征然后把它写进Matlab代码里用仿真验证给你看。2. 传统阻塞方案的原理与其绕不开的坎既然要讲改进就得先把老方案的底裤扒干净。目前工程上用的功率摆动闭锁方案我大概归纳了一下主要就那么几类。2.1 阻抗变化率方案最经典但最头疼的一种这是最老牌的做法。它的基本思想是在功率摆动过程中测量阻抗是慢慢移动的变化率比较低而故障时测量阻抗会瞬间从正常负荷点跳到故障点变化率极高。所以这个方案设置了两个辅助圆或者直接用测量阻抗的连续采样点来计算变化速度速度超过阈值就判故障速度低于阈值就判摆动然后决定闭锁还是解锁。听起来很符合直觉对吧但实际用起来你会非常头疼。首先阈值的选取就很折磨人。摆动速度快慢不是什么定值它与系统惯量、扰动严重程度、振荡频率都有关系。系统大扰动时摆动可能非常剧烈阻抗变化率也会变得很高高到和故障难以区分。你要是把阈值调高了真故障时可能不动作调低了剧烈的摆动又会误判成故障闭锁逻辑形同虚设。而且这个方案还有个隐藏问题启动时刻。功率摆动的初始阶段阻抗轨迹变化往往也很快尤其是从稳定平衡点开始摆出去的那一瞬变化率并不低。这时候判据很容易误判为故障导致闭锁来不及投入。很多实际录波里误动恰恰就发生在这个瞬间。这本质上是一个对时间导数敏感的判据对噪声和采样误差也非常敏感稍微有点谐波畸变导数结果就会抖得没法看。2.2 电流或电压变化特征类方案换个角度但仍有盲区另一类常见做法是观察电流幅值的变化规律。功率摆动时线路电流的包络会呈现一种慢变的正弦振荡形态故障时电流则会发生突变。于是就有方案去计算电流的上升速率、或者电流波形在一定时间窗内的积分值之类用来区分两种状态。这个思路在部分场景下是能工作的但盲区同样明显。功率摆动如果叠加了故障电流在最开始也会出现一个很强的突变特征但之后又会延续摆动的包络形态。你要是只靠电流变化率来解锁是有可能识别出来的但如果故障发生在电流过零点附近或者故障电阻比较大的时候突变量可能不够大解锁就会迟钝。还有系统振荡伴随电压、频率偏移时电流包络本身就会畸变这些基于幅值特征的方案经常搞出乌龙。2.3 传统方案的通用病根靠瞬时值“赌博”我总结了一下传统方案病根在于它们本质上都在用一个时间点或一个极短时间窗内的“瞬时变化”来做判断。这种判断逻辑很脆弱因为功率摆动和故障在短时间内确实都可能导致测量量发生剧烈变化单靠瞬时的斜率、幅值突变来区分好比只看一个人打喷嚏就断定他感冒了——有时候判断是对的但误诊概率也很高。而且这些方法在做闭锁和解闭锁切换的时候普遍缺少一个“状态保持”和“状态确认”的机制。闭锁信号一旦撤销如果判据又觉得像摆动了又重新闭锁这样反复横跳会让保护出口继电器抖动这是现场极不愿意看到的。传统方案的这些局限不是某一家厂商产品的具体问题而是整套设计思路的天花板。要想实质性地提升性能就得换一个更本质的区分维度而不是在原来的维度上把阈值调来调去。3. 改进思路从“像不像故障”转向“是什么动态过程”我在研究这个题目的时候一直在琢磨一个事功率摆动和故障在电气量上的区别最本质的点到底在哪如果你盯着一两个周波的波形看有时候确实很难分但如果把视角拉长去看整个动态过程的形态就会发现两者有明显不同的“气质”。3.1 归一化阻抗轨迹的形态差异第一点差异在轨迹形态上。功率摆动时测量阻抗的轨迹是一段连续、平滑、有方向感的弧线。它从负荷点出发绕来绕去但整体上是受转子运动方程约束的有惯性、有连续性。而线路故障时测量阻抗是瞬跳——从一个点直接跳到故障阻抗点几乎没有任何中间过程。轨迹上会呈现一个非常突兀的“断裂”。基于这个观察改进方法里可以引入一个“轨迹平滑度”指标。具体做法是对一段时间窗内的测量阻抗采样序列做拟合计算实际轨迹与拟合曲线的偏离程度。摆动场景下轨迹平滑偏离程度小故障场景下轨迹突变偏离程度大。这个思路比单纯看变化率稳健得多因为它用的是时间窗内的整体形态而不是两三个点的导数值。3.2 三相电流相位的协同特性第二点差异在三相电流的相位关系上。对称的功率摆动系统振荡但结构对称一般三相电流仍然保持对称关系相位之间相差120度只是幅值统一在振荡。而大多数真实故障都是不对称的——单相接地、两相短路都会打破三相之间的对称关系产生明显的负序分量。传统的方案也看负序但往往只是简单地用负序电流大于某个门槛就判故障。改进的地方在于把负序的时序特征也加了进来。如果负序分量是瞬间冒出来的、阶跃式增长故障概率极高如果负序分量是缓慢增长、随着摆动振荡起伏的那更可能是非对称摆动或系统结构不对称导致的。这里其实是在利用“负序分量的时间演化形态”做二次判别比单纯的门槛法多了一重保险。3.3 双窗口滑动的状态确认机制第三点差异在状态切换的行为特征上。故障一经发生电气量变化通常是不可逆的状态会保持而功率摆动具有周期性状态来回振荡。所以改进方法中一定要设计双窗口机制——一个短窗口负责快速探测变化一个长窗口负责确认变化是不是可持续的。具体而言当短窗口检出疑似故障特征时不立即解锁而是进入一个确认计时如果在确认窗口内特征持续存在且方向一致才真正解锁。反之如果特征在确认窗口内消失了或者变回去了就认为是一次扰动毛刺继续保持闭锁。这个“确认”过程能极大抑制前面提到的闭锁/解锁反复横跳问题代价是解锁时间会稍微慢一二十毫秒——在继电保护的时间尺度上这个代价是可以接受的但换来的是稳定性的大幅提升。这套思路说到底是把单一时刻的“点判断”升级成一段时间窗的“过程判断”。我用一个生活化的类比来说以前你判断一个人在不在跑步只看他某一瞬间脚有没有离开地面现在的改进方法是看他连续几秒内的步态是否协调是冲刺还是被绊了一下。显然后者的误判率低得多。4. Matlab仿真实现从模型搭建到判据落地的完整过程思路讲清楚了接下来就是动手把代码跑起来。我用的仿真环境是Matlab/Simulink配合Simscape Electrical原来的SimPowerSystems工具箱。下面按步骤把整套实现过程拆开讲关键代码思路也会展示出来。4.1 仿真模型选型双机系统是性价比最高的选择要仿真功率摆动最简单的模型也得是双机系统或者单机-无穷大系统。单机-无穷大系统实现最方便但它不能模拟完整的摆动态势因为无穷大母线的电压和频率被钳死了摆动的形态比较单一。我的建议是直接用双机系统两边各带一台同步发电机中间通过双回输电线路连接在母线中间设置一个保护安装点。发电机模型不要用最简化的理想电压源至少要用带励磁系统的同步电机模型这样摆动过程中的电压调节特性才能体现出来。原动机输入可以设一个阶跃扰动比如在0.5秒时突然把其中一台机的机械功率抬升一截这样系统就会开始振荡测量阻抗从初始负荷点摆出去画出一条鱼钩形的轨迹。故障场景的构造更简单在线路中间设一个三相故障模块设置在摆动的特定角度触发比如在摆动角度最大时刻触发这样能模拟“最恶劣的巧合”——系统正在大幅摆动时线路恰巧故障。这种场景最能考验阻塞/解阻塞功能的快速性和可靠性。4.2 测量与预处理从波形到阻抗轨迹的换算仿真模型跑完之后从保护安装处采集的是三相电压u_a、u_b、u_c和三相电流i_a、i_b、i_c。首先要做的是把三相量转成相量。不要直接拿瞬时值算阻抗那结果会跳得没法看。正确的做法是用全周傅里叶算法DFT来提取基波相量这在Matlab里用一个滑窗就能实现。% 全周傅里叶基波提取输入为电压/电流采样序列fs为采样率f0为工频50Hz function phasor fullCycleDFT(signal, fs, f0) N round(fs / f0); % 一个工频周期的采样点数 phasor zeros(length(signal)-N1, 1); for k 1 : length(signal)-N1 win signal(k : kN-1); % 采用余弦和正弦系数分别计算实部和虚部 n 0 : N-1; cosCoeff cos(2*pi*f0*n/fs) * 2 / N; sinCoeff -sin(2*pi*f0*n/fs) * 2 / N; re sum(win .* cosCoeff); im sum(win .* sinCoeff); phasor(k) re 1j*im; end end我一般把采样率设在2000Hz左右也就是每周波40个点这样DFT窗口是40个点计算量小精度也够。采样率高了徒增计算负担低了会丢失故障瞬间的高频细节。提取到相量序列后测量阻抗的轨迹就是V_phasor除以I_phasor逐点算出来Zmeas V_phase ./ I_phase; % 复数阻抗序列单位欧姆有了这条Zmeas序列后续所有判据都建立在它上面。4.3 判据一轨迹平滑度指标的计算轨迹平滑度的定义方式可以有很多种我这里给出一种鲁棒性较好的做法取一个滑动窗长度我一般取15~20个采样点对应约0.3~0.4个工频周期对窗内的阻抗复数点在复平面上做线性回归得到一条拟合直线然后计算窗内各点到这条直线的距离的均值作为平滑度的倒数——距离均值越大说明轨迹越不平滑越像故障。function smoothness trajectorySmoothness(Z, startIdx, winLen) seg Z(startIdx : startIdxwinLen-1); % 将复数序列拆成实部和虚部做线性回归 x real(seg); y imag(seg); p polyfit(x, y, 1); % 一次多项式拟合 yFit polyval(p, x); dev abs(y - yFit) ./ sqrt(1 p(1)^2); % 点到拟合直线的距离 smoothness mean(dev); end这个值在实际摆动场景下通常会小于预设阈值我用的阈值是0.05pu左右具体按阻抗基值归一化而在故障场景下会猛然大出数倍甚至一个数量级。我实测下来这个指标比直接看阻抗变化率要稳得多——因为拟合过程本身就是一种平滑滤波个别采样点的噪声被平均掉了。4.4 判据二负序分量的阶跃检测负序分量直接用Matlab的对称分量法求解即可。从三相电流相量得到负序电流的正变换是a exp(1j*2*pi/3); I2 (I_a a^2*I_b a*I_c) / 3; % 负序电流但光算I2还不够我要算的是I2幅值序列的时间演化形态。做法是对I2幅值序列再做一次差分观察它在最近一个短窗内是“阶跃上升”还是“缓变起伏”。dI2 abs(diff(abs(I2_seq))); % I2幅值序列的逐点差分 stepFlag movmax(dI2, 5) 0.05; % 用滑窗最大值捕捉阶跃特征阶跃标志stepFlag为真说明负序分量在瞬间跳变这是故障的强特征为假则说明即便有负序也是缓慢变化的更可能是摆动过程中的不对称现象。4.5 状态机逻辑把判据组合成完整的阻塞/解阻塞策略有了两个判据还不够最关键的是用一个状态机把它们组织起来。我设计的逻辑分为四个状态正常运行、闭锁等待、闭锁保持、解锁等待。初始状态是正常运行此时阻抗轨迹在整定圆之外保护随时准备动作。一旦检测到阻抗轨迹进入“警戒区”一个比阻抗圆稍大的扩展圆状态机切入闭锁等待。如果等待期间轨迹平滑度指标低、负序阶跃标志为假则认定是功率摆动状态转入闭锁保持此时距离继电器的跳闸逻辑被抑制。在闭锁保持状态下每个采样周期都会重新计算一次判据一旦轨迹平滑度指标或负序阶跃标志变化触发解锁等待并在确认窗10ms左右内持续确认后状态才转入正常运行恢复跳闸能力。这个状态机的核心好处是所有状态切换都需要“确认”而不是“瞬断”避免了判据在临界点附近抖动引发的出口继电器反复动作。代码上可以用一个简单的switch-case结构实现也可以用状态流工具箱做但我个人建议手写因为逻辑量不大手写更容易在论文或报告中把逻辑说清楚。4.6 整定阻抗与圆边界的确定整套逻辑运行之前需要先把距离保护的整定阻抗圆确定好。我用的方法是典型的全阻抗圆取被保护线路正序阻抗的80%~85%作为半径圆心在R-X平面实轴上。整定值用标幺值表示方便在不同电压等级的模型间迁移。以一条100km的220kV线路为例线路正序阻抗按0.4欧姆/km算总阻抗是40欧姆取80%就是32欧姆对应标幺值大约0.08pu以220kV、100MVA为基准折算。这个数值在每个仿真场景里都会用到。值得注意的是警戒圆要比阻抗圆大20%左右这样能在阻抗轨迹正式穿越阻抗圆之前就把闭锁逻辑启动起来提前量很关键。5. 仿真结果分析几种场景下的动作时序实录代码写完并不是终点验证才是重头戏。我在仿真实例里设计了四组典型工况分别考察阻塞、解阻塞以及临界情况。这里直接看数据曲线和动作时序表。5.1 纯功率摆动场景闭锁必须可靠投入场景设置系统初始稳定0.5秒时给其中一台发电机的机械功率加上一个10%的阶跃上升系统开始功率摆动。仿真持续3秒。在这个过程里测量阻抗轨迹从初始位置出发绕了一个大圈在1.1秒左右第一次侵入警戒圆随后在1.3秒左右触碰整定圆边缘。我的改进逻辑中轨迹平滑度指标在整个摆动过程中的均值大概是0.02pu负序阶跃标志始终为假。状态机在1.1秒切入闭锁等待经过10ms确认后进入闭锁保持此后直到2.5秒摆动衰减期间跳闸逻辑一直被可靠抑制。距离继电器始终没有误动保护正确。作为对照我用传统的阻抗变化率方案跑同一场景结果在摆动最尖锐的时刻——也就是常说的“摆动拐点”——阻抗变化率瞬间撞线逻辑误判成故障保护误解锁并出口跳闸。这个对照非常有说服力不是传统方案不努力而是它在快速摆动面前天然有盲区。5.2 摆动伴随故障场景解锁必须比故障发展更快场景设置1.0秒时系统进入剧烈摆动然后在1.5秒摆角接近最大时线路中点触发A相接地故障故障持续100ms后消失。在这种场景下闭锁逻辑首先在1.2秒左右投入纯摆动阶段故障发生后轨迹平滑度指标瞬间从0.02pu跳到0.35pu负序阶跃标志在故障后第三个采样点约1.5ms变真。状态机从闭锁保持切入解锁等待确认窗设置为半周波10ms因此大约在故障后13ms内完成解锁距离继电器恢复跳闸能力。这个速度完全满足继电保护对速动性的要求故障不会因为闭锁而漏跳。我特别关注了解锁之后的状态稳定性故障在1.6秒被切除后系统又从故障后的暂态进入新的摆动这时阻抗轨迹可能会再次进入警戒区、再次闭锁。我的状态机在解锁后设置了50ms的复归延时防止故障刚切除、系统还没有稳定时状态机频繁翻转。实测下来效果很理想。5.3 外部故障被切除后的瞬态摆动最容易被忽视的坑还有一个场景特别值得拿出来说就是区外故障切除后引发的短暂功率摆动。这个工况在现场非常常见线路相邻的并联回路上发生了故障并被切除系统出现短暂的摇摆但本线路自身没有故障。传统方案的典型失败模式是外部故障发生时距离继电器因为看到了阻抗突降而判断为近区故障但紧接着系统开始摆动继电器又进入闭锁导致保护和重合闸配合混乱。改进方案的处理则是外部故障阶段平滑度指标和负序特征都被如实检测但这些特征会被用于触发解锁——注意这个场景下解锁才是正确动作——但重要的是解锁后如果判断出故障位置不在本线路通过方向元件或记忆回路判别闭锁又重新投入整个过程平滑无抖动。这个细节很多论文不写但实际操作中非常关键。我认为判断一个功率摆动阻塞改进方案好不好用就要拿这个场景来考它。6. 调试中的典型问题与排查技巧仿真调试过程中十有八九会遇到一些反直觉的问题。我把自己的踩坑记录整理一下都是能直接拿来参考的实战经验。6.1 平滑度阈值怎么定才不至于乱锁平滑度阈值定小了正常运行时的负荷变化就可能误触闭锁定大了真正的故障特征又会被淹没。我摸索出来的经验是先用纯摆动场景提取出平滑度的最大值记为S_max再用纯故障场景提取出平滑度的最小值记为S_min阈值取两者几何平均值再留20%裕度。这样在大多数场景下都能把两类情况分开。但这个基线方法有一个前提就是你要先跑出两个典型场景的曲线。我强迫自己每次调阈值前都先把这两条曲线画出来挂在屏幕上对比着看比凭空猜阈值靠谱得多。6.2 确认窗长度和速动性的权衡确认窗越长状态切换越稳健但解锁时间越慢。我在调试中发现闭锁投入的确认窗可以设长一些10~15ms因为闭锁本身不急于一时早几毫秒晚几毫秒影响不大但解锁的确认窗必须下调到5~10ms因为这是故障切除的关键通道不能拖。分开设置确认窗是改进方案里值得写进论文的一个细节。6.3 采样率不一致导致相量计算偏差这是我犯过的低级错误之一一开始用2000Hz采样率跑数据后为了快速验证逻辑把数据降采样到1000Hz重跑结果发现傅里叶提取的相量始终有畸变负序分量总是有残余。后来排查才发现降采样后没有加抗混叠滤波器1000Hz采样率下50Hz信号的傅里叶窗系数计算也变了但代码里的是写死的。大家注意采样率和DFT窗系数必须保持一致且降采样前必须滤波。这个坑看似基础但现场调试时很容易被忽略。6.4 摆动周期特别长的情况怎么办某些轻载场景下功率摆动周期可能长达数秒阻抗轨迹在一个方向上爬得很慢平滑度指标一直很低这没问题。但问题是如果这种慢摆动叠加了一个高阻故障故障特征可能被摆动“掩盖”——负序分量不够大阻抗轨迹变化也不够陡。这时我的做法是增加第三重判断零序电流的短窗能量积分。高阻接地故障虽然电流小但总会有零序分量短窗能量积分能捕捉到它和摆动基波的差别。这个补丁逻辑我在代码里用了几行就实现了但关键时刻能救命。zeroSeqEnergy movsum(abs(I0_seq).^2, 10); % 零序电流短窗能量 % 超过负荷基线3倍以上判为故障特征6.5 状态机死锁问题的排查方法状态机最怕的问题就是死锁——比如卡在闭锁保持状态出不来或者解锁之后再也不肯进闭锁。这种问题靠看波形是看不出来的必须记录状态机的转移日志。我在代码里加了每个采样周期的状态记录输出到工作区变量事后用一条plot命令就能画出状态随时间的变化曲线。哪里卡住了一眼就能发现。调试这类逻辑我最大的心得就一句话别急着堆判据先把状态机的转移条件用文本列清楚再动手写代码。判据再多状态机逻辑不清照样乱套。7. 在实际项目中应用时需要额外考虑的几个工程问题仿真模型跑通了离现场应用还有一段路我在这里把工程化阶段要考虑的问题也提一下。这些问题在教科书里很少讲但工程评审时一定会被问到。7.1 与现有保护装置的接口匹配Matlab仿真的代码最终要落到实际装置上通常是微机型保护装置里面用C或C实现。把Matlab代码移植到C语言环境时最容易出问题的是滑窗DFT的实时性——Matlab里写滑窗循环不用担心效率但嵌入式环境下每个采样周期都要算一次40点DFT还要跑拟合和状态机对CPU的负荷不小。建议在移植前先估算一下计算耗时必要时把DFT用递推形式实现能省掉相当多的乘加运算。7.2 定值体系的说明与检修配合新方案引入的平滑度阈值、确认窗时长、警戒圆比例这些新定值需要纳入保护定值单并让运行维护人员理解其含义。尤其要编写详细的技术说明让每个定值的物理含义、整定原则、对保护行为的影响都能被运维人员看懂。我在参与某个示范项目评审时专家们最关心的不是算法性能而是“这个新定值运维人员能不能理解、会不会误整定”。这提醒我们算法研究不能只停留在论文层面实施层面的事同等重要。7.3 高阻故障和小角度故障的边界性能任何算法都有辨识边界。高阻故障比如200欧姆以上的接地电阻和系统振荡角很小的故障在电气特征上和正常摆动非常接近这是所有功率摆动闭锁方案都面临的识别天花板。我的改进方案能改善边界性能但不能完全消除盲区。诚实地讲这也是后续研究可以继续深挖的方向——比如引入行波特征、引入故障初始角判别等都是潜在的提升路径。8. 一点个人实操体会这套改进方案和Matlab实现我前前后后迭代了三个版本才稳定下来。第一版纯粹堆指标结果状态机乱跳第二版把指标做了归一化处理又发现阈值随系统工况变化漂移严重第三版才最终用了“过程判断双窗确认”的结构效果才真正可接受。整个过程最深的一点体会是继电保护算法贵在稳健不在花哨。一个物理概念清晰、逻辑简单、参数整定方便的判据远比一个指标虽然高但行为不可解释的复杂算法更有工程价值。如果你正好也在做功率摆动闭锁方向的研究或工程实践这套代码框架和调试思路可以直接拿去做基座。先把双机仿真模型跑通再把平滑度指标和状态机加上去然后用纯摆动、摆动叠加故障、区外故障切除后瞬态这三个场景去检验性能大多数情况都能获得令人满意的结果。如果遇到特定工况下闭锁不可靠或者解锁迟缓优先检查阈值基值和确认窗的配合关系而不是急着加新判据——多数问题都出在两者的匹配上。到这一步关于功率摆动阻塞与解阻塞功能的新方法从原理、判据、仿真、调试到工程化考虑各个环节就都打通了。这套思路和代码能帮你少走不少弯路。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑