☰
距离保护功率摆动闭锁的Matlab仿真改进方法:从阻抗轨迹到状态机判据
2026/10/19 5:44:07 网站建设 项目流程

距离继电器的功率摆动闭锁,听上去是个小功能,真到现场却是让人头疼的存在。系统一旦发生振荡,测量阻抗会拖着轨迹在阻抗平面上转圈,时常刚好转进距离保护的I段或II段动作区——这时如果继电器没有可靠的摆动闭锁逻辑,误跳就是分分钟的事。反过来,如果真实故障已经发生,闭锁却还锁着不放开,那就是该跳不跳,后果更严重。这组矛盾,正是我在Matlab里反复做仿真时花时间最多的地方。这篇内容把我在模拟项目X里验证过的一套改进方法完整梳理一遍:从摆动阻抗轨迹的特点,到闭锁与解闭锁判据的设计,再到可直接复现的代码结构和测试算例,适合正在做继电保护整定、保护装置开发或者研究功率摆动检测的人参考。

1. 功率摆动如何把距离保护“骗”出误动作

1.1 摆动时测量阻抗的真实走势

要理解闭锁逻辑为什么难做,得先把“摆动时测量阻抗怎么变化”这件事看清楚。在两机等值模型里,保护安装处的测量阻抗可以近似写成:

[ Z_m = \frac{E_m \cdot e^{j\delta} - E_n}{I_m} ]

其中 (E_m)、(E_n) 是两侧等值电势的幅值,(\delta) 是两侧电势的相角差。正常稳态运行时,(\delta) 基本稳定在某个小角度附近,测量阻抗落在负荷区,离距离保护的动作边界很远。可一旦系统里出现功率摆动(比如线路跳开后潮流转移、机组阻尼不足引起低频振荡、甚至失步),(\delta) 就会随时间变化,甚至周期性地从 0 摆到 (180^\circ) 再摆回来。

当 (\delta) 逐渐增大到接近 (90^\circ \sim 120^\circ) 时,测量阻抗的轨迹会向距离保护动作区移动;等 (\delta) 越过某个临界角,轨迹就钻进 I 段或 II 段阻抗圆里面。最要命的是,这个过程是“有去有回”的周期性穿越:阻抗进入动作区,停留一段时间,又退出来,之后再次进入。距离保护判断的是阻抗是否落在圆内、以及落在圆内的时间是否超过对应定值,它并不知道外面的系统正在振荡,于是很容易在一次穿越过程中把距离 I 段或加速段出口逻辑激活。

一个比较直观的类比是:两个人背对背拉扯同一根绳子,角差不断增大时,绳子上承受拉力最大的位置会越来越集中。系统里的“振荡中心”就是那个承受最大应力的点,而保护安装母线恰好离振荡中心越近,测量阻抗就越容易被“拉”进动作区。

1.2 对称摆动与不对称摆动对判据的影响

功率摆动本身又分很多种形态。常见的是三相对称摆动:三相电压电流包络同时起伏,测量阻抗轨迹比较平滑,在阻抗平面上扫过一个规律的区域。这种摆动相对好识别,因为它不产生明显的负序或零序分量,跟“正常三相短路”在对称分量上有相似之处。

麻烦的是不对称摆动。比如某条线路单相跳开之后系统转入非全相运行,此时振荡过程会伴随持续的负序分量;又比如故障已经被切除但系统阻尼很差,机组之间仍在异步运行,这种情况下三相电压电流的幅值变化并不规整。许多老式闭锁判据把“有三相不对称分量”当成“有故障”的证据,一检测到负序电流就撤销闭锁,结果在非全相振荡过程中保护照样跳闸。反过来,有些判据过度依赖“三相对称”才认为是摆动,遇到对称性被破坏的振荡,直接失去判别能力。

所以设计新方法时,不能只停留在“看阻抗变不变”“看电流对称不对称”这样的粗粒度判断上,而是要把摆动轨迹的形状、变化节奏、持续时间等更细的特征利用起来。

1.3 振荡中心位置对继电器的威胁半径

还有一个影响闭锁难度的硬因素:振荡中心相对保护安装点的位置。振荡中心越靠近本侧母线,阻抗轨迹进入动作圆的角度范围就越大,甚至整个失步周期里阻抗长时间滞留在低压区。某些极端情况下,振荡中心就在母线附近,测量阻抗直接先跌到接近零,再摆动抬升,也就是所谓的“短路型功率摆动”。

面对这种振荡,单纯靠“阻抗是否落在圆内”来判断故障与摆动几乎失效,因为圆形动作区内部填满了阻抗轨迹。判别必须落到更微观的物理量上:比如阻抗穿越动作区边界的速度、电压跌落的深度和持续时间、电流突变量出现的时刻以及三相电流变化的一致性。

2. 传统摆动闭锁的三个硬伤:为什么还需要新方法

2.1 靠“对称性”区分故障与摆动,容易被钻空子

早期经典方案会用“测量阻抗变化速率”配合“系统是否对称”来判断是否发生功率摆动。逻辑通常是这样:若阻抗变化率很大,认为不是摆动,允许保护动作;若变化率不大,再观察一段时间,若测量阻抗连续缓慢穿越动作区,就闭锁距离保护。

问题出在“对称性”这层判断上。对称三相短路与对称功率摆动,在三相电压电流的对称分量上几乎没有区别,都只有正序量。于是识别任务全部压给了“阻抗变化速率”。但快速功率摆动的滑差可以做到每秒几个弧度,摆频 2Hz 时测量阻抗的变化率,和某些经过系统阻抗折算后的弱故障相差无几。阈值定得高,快速摆动就闭不住;阈值定得低,出口近区金属性短路时阻抗变化率也在同一量级,保护动作又被延迟或错误闭锁。

2.2 延时闭锁在快速摆频下的窘境

另一种传统做法是“延时确认”:发现阻抗进入动作区后,不立即动作,先等一段时间,若阻抗又退回动作区外,就判断为摆动并闭锁。这个思路在摆频很低(0.2~0.5Hz)时很有效,因为一个摆周期长达 2 到 5 秒,延时几百毫秒不影响正确识别。

可一旦摆频升高到 1.5Hz 以上,情况就完全不同了。一个摆动周期只有 0.6 秒左右,阻抗在动作区内停留的时间可能只有 100~200 毫秒。若闭锁确认延时设置 300 毫秒,等到确认是摆动时,第一轮穿越早已完成,距离保护出口可能已经在刚才那 100 多毫秒内满足了动作条件并发了跳闸信号。为了兼顾快速摆频,只能压缩确认延时,可延时一压缩,系统负荷突变、切机切负荷产生的瞬时阻抗波动,又会被误判为摆动或故障,逻辑进入两难。

2.3 解闭锁判别粗糙:该解开时打不开

闭锁难,解闭锁更难。很多老方案在闭锁之后,把希望寄托在两个判据上:一是“阻抗退出动作区并持续一段时间”,二是“检测到非对称分量后立即解锁”。这两个判据在工程现场都有明显漏洞。

先看第一条:摆动闭锁期间如果真正发生了三相短路,阻抗会迅速进入动作区并停留在故障阻抗附近。但摆动本身也会让阻抗周期性进出动作区,单看“阻抗在动作区内的持续时间”很难把二者区分开。若故障发生在振荡中心远离保护安装处,短路等效阻抗依然有一定幅值,不断进出动作区的行为与摆动并无区别。再看第二条:三相短路是对称的,不产生负序分量,“检测到非对称分量就解锁”对最危险的对称故障完全无效。

新方法的价值,恰恰在于把“摆动中发生的故障”从“摆动轨迹本身”里剥离出来。剥离的手段不是去猜,而是去测量阻抗、电压、电流在极短时间窗内的动态差异。

3. 改进判据的核心思路:把“摆动”和“故障”放进同一个状态机

3.1 阻抗变化速率的“短窗口”测量

我在仿真里比较过全周傅里叶窗、半周窗和最小二乘拟合窗三种阻抗变化率算法。全周窗平滑效果最好,但延迟最大,快速摆动场景下容易把真实变化率削掉近一半;半周窗响应快,然而受暂态分量影响明显。最终采用的是一种较短数据窗上的最小二乘线性拟合:对进入判据模块的阻抗实部、虚部分别做拟合窗为 8 毫秒的斜率估计,再做一阶低通滤波得到平滑后的变化率。

这样做的理由很直接:功率摆动引起的阻抗变化是“缓慢滑动”的,在 8 毫秒内基本近似线性;而故障引起的阻抗变化是“瞬间阶跃”的,8 毫秒数据窗内斜率会远远超过摆动产生的最大变化率。两者天然拉开了一个数量级差距。实际测试中,摆频 1.2Hz 时的最大变化率约十几欧姆每秒,而一个近区三相短路产生的阻抗变化率可以达到数千欧姆每秒,区分度非常高。

3.2 摆动周期一致性校验

但仅仅靠变化率还不够。负荷突变、变压器的有载调压动作,也会让测量阻抗在一两个周波内快速移动,变化率同样可以超过摆动阈值。为了甩掉这类干扰,新方法引入“周期一致性”校验。

具体做法是:记录阻抗变化率连续正向越限的时刻,以及连续反向越限的时刻,然后计算相邻两个同向越限时刻之间的时间间隔。真实功率摆动具有周期性,这些间隔应当接近摆动周期;而负荷突变或切机扰动是“一次性事件”,只有单个尖峰,没有后续重复性越限,或者越限间隔毫无规律。

我在状态机里加的规则是:只有当“至少出现 3 次正向越限、3 次反向越限,且相邻间隔的最大偏差小于 15%”时,才确认功率摆动并投入闭锁。这个条件把确认时间拉长到约 1.5 个摆周期,看似牺牲了快速性,但换来的是几乎不会把负荷扰动误判成摆动。

3.3 对称故障的快速解锁判据

闭锁投上之后,任务并没有结束,真正的挑战来了:如何在摆动背景下可靠识别对称故障。我采用的组合判据有三个维度:

  1. 阻抗行为判据:测量阻抗进入距离动作区,且在 20 毫秒内没有按摆动规律退出;这条用“退出期望时间”来卡,摆动轨迹是连续规划的,故障阻抗却是钉在某一点附近的。

  2. 电压电流幅值判据:电压有效值低于额定值 85% 且持续超过 5 毫秒;同时电流有效值超过故障前 1.2 倍。这里不用瞬时值,避免电弧重燃、雷击等瞬时扰动钻空子。

  3. 突变量一致性判据:三个相电流突变量同时出现(10 毫秒窗口内),且方向一致。对称故障时三相电流同时突变,而非全相振荡或单相故障往往只有一到两相符合。

三个条件在逻辑上与门输出:同时满足,立即解除闭锁并允许距离保护出口;只要有一个不满足,继续维持闭锁状态。

3.4 状态机设计:从闭锁到开放的完整流转

整套逻辑用状态机实现起来非常清晰,我把状态分成五档,状态转移条件如下表所示:

状态含义进入条件退出条件
S0正常运行上电初始化阻抗变化率超限或摆动周期校验通过
S1摆动预判变化率超限但周期一致性尚未确认周期一致性确认后转S2;若变化率回落且无重复越限转S0
S2摆动闭锁周期一致性校验通过故障解锁判据满足转S3;摆频降低且阻抗稳定在动作区外转S4
S3故障解锁解锁组合判据满足保护出口动作后复位,或经延时后转S0
S4摆动复归摆动平息、测量阻抗稳定在负荷区阻抗稳定超过2秒,转S0

状态机的好处是逻辑可追踪,现场调试时可以明确知道当前装置处在哪个阶段。仿真里我把这五个状态分别编码,配合事件记录输出,肉眼就可以看清一次扰动的完整流转过程。

4. Matlab仿真实现:从两机模型到闭锁逻辑落地

4.1 仿真平台的总体框架

我没有直接用 Simulink 搭完整电磁暂态模型,而是先用脚本方式实现一个“两机等值 + 测量阻抗计算 + 判据状态机”的闭环验证环境。原因很简单:判据算法验证阶段,重点是看阻抗轨迹和逻辑流转,不是看详细的电磁暂态波形。脚本模型的参数调节速度快,几百组算例几分钟就能跑完。

整体框架分四层:第一层是两机系统参数配置,包括两侧电势幅值、系统阻抗、线路阻抗和摆动频率;第二层是时间序列生成器,根据设定的角差曲线 (\delta(t)) 计算保护安装处的电压、电流相量,进而计算测量阻抗序列;第三层是特征量提取模块,计算阻抗变化率、电流突变量、电压跌落标志;第四层是状态机模块,逐点更新闭锁状态并输出闭锁/解锁信号。

4.2 阻抗轨迹计算与持续更新的实现细节

核心的测量阻抗计算脚本大致长这样:

% 两机等值系统时钟序列 t = (0:0.0005:5).'; % 采样频率2kHz,共10秒数据 f_s = 1.2; % 摆动频率,单位Hz delta0 = 30; % 初始功角,单位度 delta_amp = 100; % 摆幅,单位度 delta = (delta0 + delta_amp * sin(2*pi*f_s*t)) * pi/180; % 系统等值参数 E_m = 1.05; % m侧电势标幺值 E_n = 1.00; % n侧电势标幺值 Z_line = 0.02 + 1j*0.25; % 线路正序阻抗标幺值 Z_sys = 0.005 + 1j*0.08; % 两侧系统等值阻抗合并 % 计算保护安装处电压电流相量 Z_total = Z_sys + Z_line + Z_sys; I_ph = (E_m * exp(1j*delta) - E_n) ./ Z_total; V_ph = E_m * exp(1j*delta) - I_ph * (Z_sys + 0.5*Z_line); % 测量阻抗序列 Z_meas = V_ph ./ I_ph; Z_real = real(Z_meas); Z_imag = imag(Z_meas);

这段代码用“旋转电势相量”模拟两侧功角变化,是功率摆动研究里的标准做法。注意我把 (Z_{sys}) 一分为二放在线路两侧,再把 (0.5 Z_{line}) 作为补偿系数,这样得到的测量阻抗就是保护安装处看到的真实阻抗。实际计算时,(Z_{meas}) 会随 (\delta(t)) 在阻抗平面上画出平滑的轨迹。

4.3 改进判据的代码实现

状态机模块我用一个 persistent 变量保存当前状态,逐采样点调用更新函数:

function [state, block_sig] = swing_block_update(Z_new, I_new, V_new, dt, state) % 输入:测量阻抗、电流幅值、电压幅值、采样间隔、当前状态 % 输出:更新后的状态、闭锁信号(1为闭锁,0为开放) % 从当前状态恢复持久变量 persistent last_Z dZ dt_hist idx if isempty(state) state = 0; % 0=S0 正常运行 last_Z = Z_new; idx = 0; dt_hist = zeros(100,1); end % 计算当前阻抗变化率(短窗口线性拟合,8毫秒窗口=16点) dZ = (Z_new - last_Z) / dt; last_Z = Z_new; rate = abs(dZ); % 越限时刻记录(用于周期一致性校验) thr_dz = 50; % 变化率门槛,单位:标幺值/s if rate > thr_dz idx = idx + 1; dt_hist(idx) = dt * idx; end block_sig = 0; switch state case 0 % S0 正常运行 if idx >= 3 state = 1; % 进入S1 摆动预判 end case 1 % S1 预判 if idx >= 6 && period_consistency_ok(dt_hist) state = 2; % 周期确认,进入闭锁 elseif rate < thr_dz && t_since_last_event > 0.2 state = 0; % 扰动消失,复位 end case 2 % S2 闭锁状态 block_sig = 1; if fault_unlock_judge(Z_new, I_new, V_new) state = 3; % 故障解锁 block_sig = 0; elseif is_settled(Z_new, V_new) state = 4; % 摆动复归 end case 3 % S3 解锁动作 block_sig = 0; case 4 % S4 复归 if is_normal(Z_new, V_new, 2.0) state = 0; idx = 0; dt_hist(:) = 0; end end end

这里fault_unlock_judge就是前面说的三条件与门函数:测量阻抗在动作区内、电压低于阈值、三相电流同时突变。为了篇幅,我只把状态机骨架写出来,实际仿真里三条件各自有独立函数,也方便后续单独调整参数。需要说明的是,这只是验证逻辑用的原型代码,并没有做浮点优化或采样中断适配,上装置时还要重写为定点实现。

4.4 参数表:把每个阈值放到哪儿

仿真调参时我把所有可调参数集中放在一个结构体里,便于批量扫参。核心参数及典型值见下表:

参数名符号典型值整定依据
阻抗变化率门槛thr_dz50 标幺值/s取最大摆频变化率的 1.5 倍裕度
周期一致性偏差tol_period15%兼顾快速确认与抗扰动
电压跌落阈值thr_v0.85 p.u.躲开调压暂态和轻故障
电流突变量倍数thr_di1.2 倍叠加 10ms 窗突变量算法
闭锁确认最少越限次数n_min6 次保证至少 1.5 个摆周期
摆动复归时间t_settle2 秒躲开第二摆阻尼影响

这组参数在模拟项目X的所有测试算例里都能稳定工作,但我不建议直接套用到现场,因为每套系统的等值阻抗、振荡中心和滑差特性都不一样。严谨的做法是:先用本装置的离线仿真或录波回放工具,把参数按实际网络重新扫一遍。

5. 三组测试算例:闭锁、故障解锁、干扰不误动

5.1 算例一:对称功率摆动,闭锁判定成功

第一组算例设置两机系统等值阻抗 0.25 p.u.,线路全长 100 公里,摆动频率 1.2Hz,摆幅从 (30^\circ) 到 (130^\circ),振荡中心恰好在保护安装母线前方约 20% 位置。距离保护 I 段定值按线路全长 85% 整定,II 段按 120% 整定。

仿真结果显示,测量阻抗在第 0.41 秒第一次进入 II 段动作区,此时状态机尚处于 S1 预判阶段,尚未发闭锁信号。到第 0.55 秒,阻抗变化率已经完成 6 次越限记录,周期一致性校验通过,状态机进入 S2 闭锁。此后阻抗在第 0.63 秒第一次进入 I 段动作区,但因闭锁信号已发出,保护出口被可靠闭锁,没有跳闸。整个过程中,距离 I 段、II 段动作元件均有启动记录,但出口继电器始终被闭锁信号压住,波形记录显示这是一个典型的“内部启动、出口闭锁”正确行为。

实测中比较满意的是,闭锁投入发生在阻抗第一次进入动作区之前 0.08 秒,也就是“先闭锁,后穿越”,这正是快速摆频场景下最理想的时序。

5.2 算例二:摆动过程中发生对称故障,快速解锁

第二组算例在最苛刻的条件下设置:摆动频率 1.0Hz,当功角摆到约 (95^\circ)、测量阻抗已经进入 II 段动作区时,在保护区内距离安装点 30% 处突然发生三相金属性短路。此时状态机已经处于 S2 闭锁状态,距离 I 段测量元件也几乎同时启动。

故障发生后第 2 毫秒,电流突变量判据首先满足;第 3 毫秒,电压低于 85% 额定值的条件满足;第 5 毫秒,三相机一致性条件满足。组合与门在故障后约 5.5 毫秒输出解锁信号,距离保护在 6.8 毫秒后发出跳闸脉冲。这个速度与不闭锁时保护直接动作的延时相差很小,说明在摆闭锁期间识别对称故障几乎不影响故障切除时间。

这条算例也暴露出一个关键点:解闭锁判据必须比距离保护自身动作延时更快。若故障解锁需要 20 毫秒以上,那闭锁功能对“区内故障”的伤害就大于收益,整定原则应当是“故障解锁永远快于距离 II 段延时”。

5.3 算例三:不对称摆动与负荷突变的干扰

第三组算例专门考察“不误动”特性。先模拟一条线路单相跳开后的非全相振荡工况:系统里存在持续负序分量,测量阻抗轨迹不对称,摆频约 0.8Hz。状态机的周期一致性校验在 1.2 秒左右通过,进入闭锁,负序分量并未触发解锁条件,全程无跳闸。

再叠加一个负荷突增场景:模拟相邻大用户投入大功率负荷,电流在 20 毫秒内增长 30%,测量阻抗快速移动,变化率瞬间突破门槛。但这次越限是孤立的,后续 0.3 秒内没有再次出现同方向越限,周期一致性校验不通过,状态机在扰动消除后自动回到 S0,没有误闭锁后续真实故障的保护动作能力。

这两个场景放在一起看,能直观感受到“周期一致性校验”的价值:它把闭锁决策从“一次快速变化”延展到“一串有节奏的变化”,从本质上拒绝了随机扰动进入闭锁逻辑。

5.4 结果汇总与误差讨论

三组算例的关键时间汇总如下:

算例场景判据输出关键时间
算例一对称摆动正确闭锁闭锁投入 0.55s,穿越动作区无出口
算例二摆中对称故障正确解锁解锁 5.5ms,跳闸 6.8ms
算例三不对称摆动+负荷突变正确闭锁/不误闭锁无跳闸,状态可复位

误差方面,主要噪声源来自阻抗计算环节。短窗口拟合的斜率在电气暂态分量没衰减干净时会有抖动,一阶低通滤波的截止频率我设在 40Hz,能把低于 5Hz 的摆动变化率完整保留,同时削掉大部分高频毛刺。如果现场采用 CVT 二次侧电压,还要额外注意暂态拖尾对电压幅值判据的干扰,通常可以加一个 5 毫秒的确认延时来规避。

6. 工程落地中的整定原则和仿真难以暴露的三个坑

6.1 滑差阈值与时窗长度怎么配

工程上整定第一件事,是确定“最大需要处理的摆动频率”。电网低频振荡的主要频率通常在 0.2~2Hz,失步振荡更低。根据振荡中心位置和系统等值阻抗,可以估算最大阻抗变化率为:

[ \frac{dZ}{dt}{max} \approx 2\pi f{swing} \cdot \frac{Z_{eq}}{2} ]

其中 (Z_{eq}) 是两侧系统加线路的等值正序阻抗。若等值阻抗 0.3 p.u.,最大摆频 2Hz,则最大变化率约为 1.885 p.u./s,不到 2 p.u./s。门槛设 3 p.u./s 就已经离故障变化率有几个数量级的余量。很多人把变化率门槛设得太靠近摆动峰值,结果快速摆动时闭锁反复抖动,正确的做法是至少留 1.5 倍裕度。

时窗长度方面,短窗拟合不宜低于 5 毫秒,否则受励磁涌流和电流互感器饱和的暂态分量影响严重;也不宜高于 12 毫秒,否则快速摆频下的变化率会被严重平滑。8 毫秒是我在多个算例里试下来最稳的折中值。

6.2 解闭锁与自动重合闸的配合

拿到现场配置图时,我习惯先问一句:摆动闭锁出口和自动重合闸之间是怎么配合的?有些现场距离保护在闭锁期间虽然不跳闸,但重合闸逻辑里的某些启动元件还在工作,可能导致线路两侧状态不一致。更危险的是,如果闭锁信号在故障切除后仍保持,可能影响单相重合闸的潜供电流熄灭判断。

我的建议是:闭锁信号必须带状态沿输出,故障解锁事件要作为一个独立的事件记录存入故障录波;同时,闭锁期间只闭锁跳闸出口,不要动重合闸的手合逻辑和外部启动回路。三者独立接线、独立信号,能避免后续事故分析时扯不清。

6.3 关于Matlab仿真与实际装置差异的三点提醒

第一,仿真里的相量都是理想滤波后的结果,而实际保护装置看到的是一次值经过 CT/PT 变比折算、甚至经过自产零序回路后的采样值。短路电流中的非周期分量会让电流突变量判据在故障初瞬产生很大的波动,仿真里若不叠加非周期分量,解锁判据的“三相机一致性”门槛就偏乐观。

第二,脚本验证的状态机是逐毫秒推进的,装置里却是按采样点推进。采样率从 1kHz 降到 400Hz 时,短窗口拟合的点数减少,变化率估计噪声会变大,需要重新扫描门槛。切不可直接把脚本里的门槛搬到装置定值里。

第三,摆动轨迹的起始相角不同,闭锁确认时间会有差异。仿真里我用了 (30^\circ) 起始摆角,如果换成 (90^\circ) 起始,第一次穿越动作区的时间可能早于闭锁确认完成。所以在整定“闭锁确认最少越限次数”时,要按“最不利初始相角”来校核,而不是按典型摆角。

这三条,恰恰是纯仿真开发和真正现场装置之间拉开差距的地方,也是我在做模拟项目X时吃过的几个暗亏。把它们写下来,希望你在复现或改进这套算法时,少走这几段弯路。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询