
先说一个非常典型的误动片段一条220kV线路的区外三相短路被保护正确切除之后重合闸流程还没走完距离保护II段却跟着跳了闸。事后调出波形大家发现短路切除后的系统电压和电流并没有立刻恢复稳定而是出现了明显的功率摆动测量阻抗沿着R-X平面里的轨迹缓慢滑进了距离保护的动作区。这就是距离继电器在功率摆动下误动作的经典场景。功率摆动阻塞PSB和随之而来的解阻塞功能就是用来解决“摆动期间该不该闭锁距离保护、以及闭锁后怎么识别真故障”这两个问题的。这篇博文我用Matlab把一套改进的功率摆动阻塞/解阻塞方法完整搭出来做了验证下面把原理、代码思路、仿真结果和整定经验都说清楚。1. 功率摆动为什么会让距离继电器“看走眼”1.1 摆动信号在阻抗平面的演化规律功率摆动本质上是同步发电机之间转子角差的往复变化。系统发生短路并切除故障后各台发电机的出力平衡被打破发电机之间会出现频率接近0.1~2 Hz的机电振荡这个频段远低于工频50/60 Hz但会给线路上的电压和电流带来周期性的包络起伏。对保护安装处来说电压电流的基波相量会随着功角差δ变化测量阻抗自然也就不再是一个稳定的负载阻抗而是一条连续移动的轨迹。在忽略电阻、考虑两端等值系统的简化模型下继电器测量阻抗与功角差δ之间有明确的解析关系。设保护背后系统等值阻抗为Zb线路阻抗为Zl对端等值阻抗为Zf三者之和即为Ztotal设对端电势与本端电势的幅值比为k那么测量阻抗可以写成Z_m(δ) Ztotal / (1 - k·e^(-jδ)) - Z_b当k1时这个复变函数对应的轨迹是一个圆圆心在Ztotal/2 - Zb附近半径约为Ztotal/2。随着功角差从0逐渐增加测量阻抗从负荷区出发沿着这个圆向继电器方向移动。如果系统阻尼不足δ会摆过很大的角度轨迹一旦穿进mho圆或四边形动作特性内部而且停留时间长于距离保护的时间整定保护就会动作造成越级跳闸或者无故障跳闸。1.2 传统判别手段的先天不足为了识别摆动工程上最常用的思路有三类。第一类是同心圆/透镜判据在动作区外再整定一个更大的圆或透镜先看到测量阻抗进入外侧圆再检测它是否穿越内侧动作区如果从外侧圆到内侧圆的时间明显大于故障时那种“瞬跳”时间就认为正在发生摆动并发出闭锁信号。第二类是阻抗变化率判据直接计算每周期测量阻抗的位移量dZ/dt摆动下这个值通常不大而故障瞬间测量阻抗会在半个周期内跳变到低阻值所以设定一个高速阈值就能把大部分故障与摆动分开。第三类是对称分量判据利用摆动过程本质上仍是对称的三相过程负序和零序分量很小而不对称故障会产生明显的负序或零序分量。这三类方法在实际工程里都有比较要命的短板。同心圆法需要整定的参数多动作区边界附近的灵敏度差而且一旦摆动轨迹的初始位置离内圆太近时间判别会失效。变化率判据对整定值最敏感重负荷线路发生负荷突增、或者发电机励磁系统扰动时测量阻抗也会快速移动很容易超过阈值被误判成故障。对称分量法对付单相接地、两相短路没有问题但遇到三相故障就完全失效——三相故障和功率摆动在序分量特征上几乎一样都是纯对称量这是传统方法里最难啃的一块。2. 改进思路从单一判据走向多参数联合决策2.1 三个核心特征量的选取我这次搭建的改进方法目标很直接不用单一门槛去硬切而是把几个相互独立、互补性强的特征量放在一起做联合判断。经过比对最终选了三个特征量。第一个是阻抗轨迹速度Vz定义为一个工频周期内测量阻抗模值的位移量。摆动时Vz大致落在某个缓慢区间故障时Vz会突然变成数十倍的跳变量。这里的关键不是只设一个阈值而是把“快”和“慢”分成两个阈值Vz_slow用于确认摆动Vz_fast用于确认故障候选。第二个是轨迹连续性指标我称之为拐点指数。取相邻的两个阻抗差向量d1和d2计算cross imag(d2·conj(d1))这个值的符号代表轨迹在R-X平面上是左转还是右转。真实功率摆动轨迹是平滑曲线的采样拐点指数在一段时间内保持同号或者缓慢交替而故障发生时测量阻抗从负载点直接跳到低阻抗故障点前后两段位移方向近乎反向拐点指数符号会瞬间翻转。这个“方向突然反转”的特征是负荷突增等线性变化不具备的用来补速度判据非常有效。第三个特征量是用于解阻塞的故障特征——负序电流幅值比I2/I1以及三相电流的暂态高频能量。摆动本身是纯对称的I2/I1几乎为零摆动期间若发生单相接地或两相短路I2/I1会迅速超过门槛。高频能量用于检测摆动期间的三相短路因为故障瞬间会产生很高的暂态分量而0.1~2 Hz的机电摆动在这个频段几乎没有能量。2.2 自适应阈值与决策逻辑直接把固定阈值用于所有工况并不现实。系统运行方式变化时同样的摆动幅度产生的阻抗变化速度可能相差很大。所以我把阈值设计成自适应形式故障前0.5秒内持续统计Vz的滑动平均值和最大值Vz_slow取统计最大值的2倍Vz_fast取统计最大值的5倍再加上一个最低保护下限。这套思路实现起来不复杂在Matlab里用一个滑窗就能够实时更新长期运行也不会被运行方式变化带偏。决策逻辑采用“故障优先、摆动次之、多条件确认”的框架。在没有闭锁时如果测量阻抗进入距离动作特性区先检查是否满足故障候选条件Vz超过Vz_fast或拐点指数发生明显翻转满足就直接开放保护如果只是Vz处于Vz_slow和Vz_fast之间且拐点指数平稳就判定为摆动并置PSB1。在闭锁状态下重点放在解阻塞若负序突变量或高频能量超过门槛并持续一个工频周期以上立即解除闭锁并开放保护同时设置2秒超时防止摆动结束后继电器被永久锁死。特征量组合判断结论处理动作Vz Vz_fast拐点翻转故障候选不阻塞直接开放Vz_slow Vz Vz_fast拐点平稳功率摆动置PSB1闭锁距离保护PSB1I2/I1突增持续一个周波摆动中不对称故障解阻塞允许保护动作PSB1高频能量突增持续数十毫秒摆动中三相对称故障解阻塞允许保护动作t_block到2s轨迹恢复摆动结束复位PSB3. 用Matlab搭出可验证的仿真框架3.1 两机等价系统的相量模型Matlab环境下不需要一开始就上电磁暂态模型。我建议先用相量级仿真把核心判别算法跑通再考虑接入EMTP数据做精细化验证。相量级模型的好处是快速、可控每种测试场景都能精确指定功角振荡曲线。系统等值结构按单回线两端电源来组织。保护安装处背后阻抗取Zb 5∠75°线路阻抗取Zl 20∠80°对端等值阻抗取Zf 8∠80°于是Ztotal 33∠78°左右电压幅值比k取1.0。这些参数只是示例算例用来验证算法逻辑不是针对某条实际线路的整定结果。功角振荡曲线我用解析式生成便于控制摆动幅值和频率。默认公式为δ(t) δ0 A·sin(2π·fswing·t)·exp(-t/τ)其中δ0是初始功角A是摆动幅值fswing是机电振荡频率τ是阻尼时间常数。把δ(t)代回测量阻抗公式就能得到整个摆动期间的相量序列。Matlab里生成曲线只需几行f0 60; % 工频 Zb 5*exp(1j*75*pi/180); Zl 20*exp(1j*80*pi/180); Zf 8*exp(1j*80*pi/180); Ztotal Zb Zl Zf; k 1.0; t 0:0.001:6; % 采样步长1ms delta0 35*pi/180; Amp 70*pi/180; fswing 0.5; tau 5; delta delta0 Amp*sin(2*pi*fswing*t).*exp(-t/tau); Zi Ztotal./(1 - k*exp(-1j*delta)) - Zb;这里需要说明的是稳态功角35°对应的测量阻抗通常处于负荷区摆动幅值70°会把功角推动到105°附近此时测量阻抗进入mho动作区的概率很高能够覆盖我要验证的误动情形。3.2 距离继电器与mho动作区建模距离继电器用偏移mho圆来做动作特性。设定Zset25Ω作为主保护范围对应的整定阻抗线路阻抗角φL取80°动作判据是测量阻抗是否落在以Zset/2处为圆心、半径Zset/2的圆内Zset 25; phiL 80*pi/180; Zc Zset/2 * exp(1j*phiL); in_mho abs(Zi - Zc) Zset/2;需要注意的是摆动轨迹进入mho动作区不一定立刻动作还要看它在区内持续的时间。距离II段一般有几百毫秒延时距离I段虽然是瞬时但功率摆动时的测量阻抗变化相对慢通常需要一个逐步逼近的过程。本文仿真以距离I段为例进区即视为满足方向由判别算法决定是否开放。3.3 场景注入逻辑为了验证阻塞和解阻塞逻辑我设置了三个对照场景。场景一稳定摆动。初始功角35°摆动幅值70°阻尼时间常数5秒。没有故障注入理想情况下保护应被阻塞且不动作。场景二摆动中A相接地。仍然使用场景一的功角曲线在t3s时注入A相接地故障。故障点阻抗设为Zfault 3 j1Ω位于距离I段动作区内同时在三相电流相量上叠加负序分量I2/I1从接近0跳到0.25左右持续到仿真结束。这个场景用来验证“摆动中真故障必须解阻塞”的核心需求。场景三负荷突增扰动。不注入故障但在t2.5s时把功角运行点从35°突然推到45°同时把负载电流抬高15%。这个场景用来模拟负荷变化扰动、外部扰动引起的测量阻抗快速移动检验算法会不会把它误判为故障而错误开放保护。此外为了验证三相故障高频能量解阻塞可以在场景二基础上增加一个无负序分量的三相故障注入。三相故障与摆动在对称性上完全相同此时I2失效只能靠高频能量和速度突变量来判别。仿真中用一个持续一个周波的暂态突变信号叠加到三相电流上模拟高频分量。4. 新方法与故障判据的实现细节4.1 相量测量与预处理如果直接从瞬时值采样开始做需要一个全周傅里叶相量提取模块。Matlab里写一个40行左右的函数就能完成核心是正弦/余弦相关系数计算。以每工频周期N64个采样点为例基波相量可以这样算function ph ft_window(x, N) n (0:N-1); a 2/N * sum(x .* cos(2*pi*n/N)); b 2/N * sum(x .* (-sin(2*pi*n/N))); ph a 1j*b; end实际使用中要对相量做直流分量抑制。最简单可靠的做法是把当前窗的计算结果与前一个计算结果的差值作为输出相当于一个差分滤波器能去掉缓慢直流分量也不会给速度判据引入过多延迟。4.2 摆动轨迹速度与连续性判据在相量序列上计算Vz和拐点指数非常直接。设Z(k)为第k个工频周期的测量阻抗采样周期间隔为TcVz(k) abs(Z(k) - Z(k-1)) / Tc; d1 Z(k) - Z(k-1); d2 Z(k1) - Z(k); turn_index(k) imag( d2 * conj(d1) );这里turn_index的绝对值反映转折角度符号代表转动方向。摆动平稳段内d1和d2的夹角小turn_index值小且符号稳定故障发生时的采样点d1仍指向原负载点d2指向故障低阻点夹角接近180°turn_index绝对值会非常大并且正负翻转。我用一个跟随自适应基线的方法设置门槛取故障前200个周波的turn_index绝对值的均值当新样本超过该均值15倍时标记为“方向翻转”。4.3 负序分量与高频能量解阻塞模块负序分量在Matlab里直接用三相电流相量计算alpha exp(1j*2*pi/3); I2 (Ia alpha^2*Ib alpha*Ic)/3; ratio abs(I2) / max(abs(I1), 1e-6);摆动时ratio正常在0.01以下A相接地的过程中这个值会立刻超过0.1。阈值取0.05并且要求持续至少10ms再确认用持续确认时间可以抑制单点扰动和测量噪声。高频能量模块用简化差分能量实现取最近一个工频周期的瞬时电流采样计算连续两点差值的平方和再与滑动基线比较。严格做法是用离散小波变换的细节系数比如db4小波的第三层细节重构能量效果更稳定。在Matlab里可以直接调用wavedec函数但对于算法演示差分能量已经足够说明原理xdiff diff(x_cycle); EHF sum(xdiff.^2);4.4 主决策循环最后把这些子判定组合进一个主循环逻辑和状态转移如下% 简化状态机完整版本视测量窗口而定 % baseline_turn 取自故障前200个周波的拐点均值 for k 2:length(Z) Vz_curr abs(Z(k)-Z(k-1))/Tc; turn_flip abs(turn_index(k)) 15*baseline_turn; if PSB 0 if in_mho(k) if Vz_curr Vz_fast || turn_flip trip_flag 1; % 直接开放 elseif Vz_curr Vz_slow ~turn_flip PSB 1; % 进入摆动闭锁 t_block t(k); end end else % sustained(T)为一个判断持续时间的辅助逻辑 if (ratio_I2 0.05 sustained(0.01)) || ... (EHF 3*baseline_E sustained(0.02)) PSB 0; trip_flag 1; end if t(k) - t_block 2.0 PSB 0; % 超时复位 end end end这里的关键设计是进入动作区的瞬间先快速判断一次如果速度足够快或者方向翻转就直接按故障处理不给这个样本进入摆动区判定。这样可以避免“先锁后解”的过程中丢失故障动作机会。5. 仿真结果与动作时序对比5.1 场景一稳定摆动下的正确闭锁场景一运行下来测量阻抗在t2.6s附近开始进入mho圆一直到t3.1s左右才退出动作区在区内停留接近500ms。传统距离保护在摆动的第一瞬间并不会动作因为时间整定没有满足但距离II段如果整定400ms它会在这条轨迹进入后400ms触发造成误动。改进算法给出的结果是在t2.61s识别出轨迹进入动作区Vz处于Vz_slow和Vz_fast之间拐点平稳于是立即置PSB1。整个区内停留期间PSB始终保持不输出跳闸信号。t3.1s后退区PSB在2秒超时后自动复位。与传统相比新方法不需要等轨迹“穿过外圆再穿过内圆、再确认”的冗长流程识别发生得更早闭锁也更干净。5.2 场景二摆动中A相接地故障的快速解锁场景二在t3s时注入A相接地故障此时测量阻抗还在区内PSB已经置位。故障发生后的第0.02s负序电流比值I2/I1从0.01跳到0.25同时Vz短时超过Vz_fast拐点出现翻转。在满足“负序突增持续10ms”条件下t3.012s左右解除PSB并开放保护。距离I段在下一个数据窗内完成跳闸逻辑整体动作时间约35ms能够满足线路主保护对快速性的要求。值得说明的是这个解阻塞过程并没有等2秒超时而是通过故障特征实时触发所以不会因为摆动闭锁而延误故障清除。对于要求更严格的场景可以将持续确认时间从10ms下调到半个周波但要权衡噪声带来的误触发风险我的建议是至少10ms不变。5.3 场景三负荷突增的抗扰动表现场景三的负荷突增让Vz在短时间内超过Vz_slow按传统单速度判据可能被当作故障候选。改进算法在此时检查拐点指数由于负荷突变是连续的线性变化轨迹方向没有发生180°翻转turn_index远低于故障门槛同时故障检测期间的三相电流虽然也出现了短时不对称但它没有持续到10ms负序确认条件不满足。因此最终保持PSB0保护不动作。这个结果说明“多条件联合”的价值速度高不一定是故障只有速度高且方向反转、或者速度高且不对称分量化持续出现才能确认为故障。盲用速度判据是现场误动的常见原因。5.4 与传统方法的动作时延对比把三种方法放在同一组算例里比较动作时延差异很明显方法场景一是否正确闭锁场景二解锁动作时间场景三抗干扰经典双圆法能但有额外确认延时约300ms需等待穿越判断一般单一速度判据能但阈值难调约100ms较弱负荷突增易误动多参数联合判据能提前识别约35ms强以上数字是本文算例中的相对参考不是普适指标。实际现场的动作时延还取决于相量算法窗口、保护装置中断周期和出口回路时间但趋势是清楚的多判据联合能显著缩短摆动中的故障切除时间同时抑制非故障扰动带来的误动。6. 参数整定经验与现场工程化避坑6.1 判据阈值如何跟着系统“走”Vz_slow和Vz_fast的选取是整套算法里最需要花时间的地方。理论上可以用测量阻抗公式对δ求导结合功角振荡的最大角速度估算出摆动期间的最大Vz再留出2到3倍余量作为Vz_fast。但没有系统动态数据时更实用的做法是在正常负荷波动时间段采集200个周波的Vz统计值Vz_slow取统计最大值2倍Vz_fast取统计最大值5倍同时给一个最低下限防止异常数据把基线抬得过大。I2/I1的门槛建议取线路正常运行时最大负序不平衡度的5倍左右。变压器励磁涌流期间负序分量也会增大且伴有二次谐波如果解阻塞算法没有谐波制动很可能会被涌流误触发这在我做的仿真实例中已经复现过。加入二次谐波闭锁或方向闭锁后再投运会稳妥很多。高频能量门槛最怕的干扰源是断路器操作、重合闸放电和电容投切这些事件都会产生短时暂态能量。目前的做法是把门槛设为滑动基线3倍并要求持续20ms单点放电干扰通常维持不了这么长可以有效滤除。6.2 避坑清单第一坑相量测量窗选得太长。全周傅里叶天然会把突变平滑掉Vz在故障发生那一周波可能被拉到很低导致故障漏判。建议测量窗限制在一个周波必要时对输出做短窗差分而不是直接采用两个周波的滤波结果。第二坑闭锁后没有超时复位。摆动结束但闭锁信号仍保持线路后续发生真实故障时距离保护被永久压住后果很严重。务必加入超时复位同时把复位时间与线路摆动特性匹配不能随便取一个很小的数否则会在一次摆动尚未结束时就复位失去闭锁意义。第三坑解阻塞条件过于简单。只靠负序突变量一个条件在励磁涌流、非全相运行以及TA二次回路瞬态饱和场景下都很容易误开锁。我建议至少两个相互独立的条件同时满足并且都有持续确认时间才能跳过闭锁。第四坑把仿真参数直接搬到现场。Matlab相量模型得到的动作时间通常偏乐观现场装置还有滤波、出口继电器动作时间、断路器分闸时间。仿真阶段验证的是算法逻辑整定阶段必须用现场实测的动态过程和波形回放做校核。我做这类仿真最大的感受是PSB和解阻塞逻辑很难用一个绝对可靠的公式一劳永逸地解决它的价值在于把“快、连续、对称”这几个看似矛盾的特征组合起来互相补充。读者如果拿这套代码做复现建议先从场景三这样的扰动案例开始调阈值把误动压住再逐步收紧解阻塞时间这样出来的逻辑在工程上会更能站得住脚。后面我打算把电磁暂态波形接入这套相量判别框架用真实故障录波数据继续验证有结论了再来更新。