做电力系统继电保护这块的同行应该都有共识:输电线路上超过80%的故障都是瞬时性的,雷击闪络、风偏、鸟害、树枝搭接,这类故障在断路器跳闸之后电弧会自然熄灭,故障点绝缘往往能自行恢复。如果每次都要等调度员手动送电,故障停电时间轻松十几分钟起步,对用户和电网稳定都是不小的冲击。于是自动重合闸这个装置出现在保护里,目的只有一个——在故障切除后的零点几秒内自动尝试恢复供电,把故障后的用户停电时间压缩到1秒以内。这段时间我在MATLAB/Simulink环境下完整搭了一套自动重合闸仿真模型,从输电线路建模到保护动作逻辑全部跑通,前前后后也踩了不少坑。今天把整个建模思路、参数计算和实操步骤整理出来,正在学电力系统继电保护、或者用MATLAB做电力系统仿真的朋友,可以直接参考这套流程。
1. 自动重合闸:给电网装一个“失败重试”机制
1.1 为什么80%的线路故障都能靠它解决
要理解自动重合闸的价值,可以先把它类比成电脑上的“重启”。程序卡死了,你第一反应不是重装系统,而是重启试试——因为大部分卡死都是瞬时状态问题,重启就能恢复。电力系统也一样,雷击闪络这类故障在断路器跳闸后,电弧在几十毫秒内熄灭,故障点周围的空气绝缘强度随时间去游离恢复,通道又变成可用的了。如果此时重新合闸,完全可以继续送电。
从统计数据看,架空线路的故障里瞬时的比例非常高,所以自动重合闸的成功率普遍在70%到90%之间。这意味着十次跳闸里有七八次是可以在1秒左右就恢复送电的,对供电可靠性的提升非常可观。在继电保护的配置里,重合闸通常不单独存在,而是和距离保护、电流保护配合使用。保护负责跳闸,重合闸负责二次尝试,两者协同才能实现“瞬时故障自动恢复、永久故障最终切除”的效果。
1.2 重合闸的分类选型:单相、三相、还是综合?
按操作对象分,重合闸最常见的是三类:三相重合闸、单相重合闸和综合重合闸。
三相重合闸最简单,不管故障是单相还是多相,断路器三相一起跳开,延时后再三相一起合上。优点是逻辑简单、控制方便,在110kV及以下电压等级的线路里用得非常多。缺点是对于单相瞬时故障,它把非故障的两相也一起断开了,这对系统稳定和用户供电的影响会更大一些。
单相重合闸则只跳开故障相,非故障的两相继续送电。这在220kV及以上电压等级的电网里是标配,因为大电网对稳定性的要求更苛刻,三相全跳可能引起功率振荡甚至稳定破坏,只跳单相可以维持大部分功率传输。实现复杂度和成本也相应提高,因为你还得考虑故障相断开后,健全相与故障相之间的电容耦合和电磁耦合。
综合重合闸相当于前面两种的合集,根据故障类型自动选择单相或三相的重合策略。再往下细分,还有一个重要维度是重合闸与两侧电源的配合:单侧电源线路可以用无压检定重合闸;双侧电源或多电源线路则必须考虑同期检定,否则合闸瞬间两侧电动势相位差太大,会产生巨大的冲击电流和冲击力矩,严重时直接损坏断路器或发电机。MATLAB仿真里,这种情况一般用PLL锁相环检测母线侧和线路侧电压的相位差、频差和幅值差,满足整定条件后才允许合闸。
我在下面这个仿真项目里选的是110kV单侧电源、单相接地故障加单相重合闸的配置,既能覆盖最典型的工程场景,逻辑又不会太绕,适合把重点放在保护配合和时序控制上。
2. 建模前的准备:MATLAB/Simulink怎么选型、搭什么框架
2.1 为什么用Simscape Electrical而不是自己写微分方程
很多初学电力系统仿真的朋友会纠结一个问题:用MATLAB做暂态仿真,到底应该手写数值积分(比如用ode45去解微分方程),还是直接拖Simulink的模块?
我的观点很直接:如果是做工程验证和逻辑验证,无脑选Simscape Electrical(早期版本里叫SimPowerSystems)。它的元件库已经把发电机、变压器、输电线路、断路器、故障模块都封装好了,你只需要设置参数和接控制信号,不需要自己推导每个元件的状态方程。手写微分方程更适合做研究算法、验证某个新理论模型,效率完全不是一回事。
自动重合闸这个课题,核心难点不在电磁暂态的数学求解,而在于保护逻辑的时序配合:故障发生、保护动作、断路器开断、无流间隙、重合闸计时、合闸后再判断。这套东西在Simulink里用逻辑模块就能搭得非常清晰,这也正是MATLAB生态的优势——电力系统元件库加控制逻辑库在同一套环境里无缝连接。
2.2 系统模型整体架构和三类核心模块
整个仿真系统从建模角度可以拆成三层:
- 第一层是主电路层,包括三相电源、输电线路、故障发生点、断路器和负载。
- 第二层是测量层,主要用三相电压电流测量模块把母线电压、线路电流等电气量采样出来,供保护逻辑判断。
- 第三层是控制与保护逻辑层,负责故障识别、跳闸/合闸信号生成、后加速逻辑,这部分在Simulink里用普通逻辑模块或Stateflow实现。
主电路层需要从Simscape Electrical里的Specialized Power Systems库中取以下核心模块:
- Three-Phase Source:三相电源模块,可设电压、频率、内阻。
- Three-Phase PI Section Line:输电线路集中参数模型,可设线路长度、单位长度电阻电感电容。
- Three-Phase Fault:故障模块,可以设定各类短路(单相接地、两相、三相等),用外部定时信号来控制故障时刻。
- Three-Phase Breaker:三相断路器,由外部逻辑信号控制分合闸。
- Three-Phase Series RLC Load:负载模块。
- Powergui:电力系统仿真专用的求解器配置模块,作用类似一个“总控台”。
值得强调的一点是,Powergui是整个Specialized Power Systems仿真的必备模块,没有它模型根本跑不起来。它负责把电路网络整理成状态方程,并选择离散或连续求解方式。对于线性元件的动态行为、非线性元件(如变压器饱和)的处理,全在Powergui里设置。
2.3 关键参数计算:线路阻抗与短路电流
参数整定是重合闸仿真的地基。我用的是110kV等级配电线路,实际仿真参数如下:
系统频率50Hz,电源线电压110kV、容量按无穷大系统处理,内阻设得很小。输电线路长度取100km,单位长度参数用典型架空线数据:正序电阻R1=0.01273Ω/km,正序电感L1=0.9337mH/km,正序电容C1=12.74nF/km。零序参数大约是正序的3到4倍,这里取R0=0.3864Ω/km,L0=4.1264mH/km,C0=7.751nF/km。
这些参数看着眼熟吗?它们是MATLAB官方文档里常用的一组数据,在Simulink的“power_lineparam”相关例程里出现过,工程上对应一根中等截面的钢芯铝绞线,性能曲线和电气数值都比较典型。
先估算一下线路末端三相短路的短路电流:每相线路阻抗的模大约
Z = sqrt(R^2 + (2πfL)^2) × 距离 = sqrt(0.01273^2 + (2×π×50×0.9337e-3)^2) × 100 ≈ sqrt(0.00016 + 0.086) × 100 ≈ 0.293×100 ≈ 29.3Ω
考虑电源内阻很小,近似短路电流
I = (110kV / √3) / 29.3Ω ≈ 63.5kV / 29.3Ω ≈ 2168A ≈ 2.17kA
这个数值可以作为后续保护定值整定和仿真波形验证的参照。比如你设置了过流保护的动作电流,就不能高于这个短路电流,否则动作不了;也不能低于最大负荷电流,否则正常运行时误动。
3. 手把手搭建自动重合闸仿真模型
3.1 电源、线路与负载模型参数设置
打开一个空白的Simulink模型,我先搭主电路。拖入Three-Phase Source,设置相电压110kV/sqrt(3),也就是约63.5kV(这里填的是RMS线电压110k和频率50Hz,在模块内部会处理)。内阻参数我设置为R=0.1Ω、L=0.01H,模拟一个内阻抗很小的强电源。
然后是Three-Phase PI Section Line。双击打开设置:
- Frequency used for RLC specification:50Hz
- Resistance per unit length (Ohms/km):0.01273
- Inductance per unit length (H/km):0.9337e-3
- Capacitance per unit length (F/km):12.74e-9
- Line length:100
- 勾选Display units of measurement,方便观察。
线路末端接Three-Phase Series RLC Load,负载设置成有功10MW、无功3Mvar,电压110kV。这个量级对110kV线路来说是比较典型的配电负荷水平。
故障点和断路器怎么放?我选择把故障设置在距线路首端60%的地方,约60km处,这也是线路中最常见、对保护判断最敏感的位置。断路器放在电源侧线路的入口,相当于线路首端断路器。当然,为了更真实,也可以在线路两端各放一个断路器,但单端模型能把重合闸的完整时序演示得更直白。
接线方式按顺序:电源A → 断路器B → 线路C → 故障点F → 负载D。为了观察线路电流和母线电压,在断路器与线路之间接入一个Three-Phase V-I Measurement模块,输出端子接给Scope或记录模块。
3.2 三相故障模块与断路器模型配置
故障模块Three-Phase Fault在Specialized Power Systems库的Elements里。双击设置:
- Fault type选择Single Phase Fault(A相接地)。
- Fault resistance设置成0.001Ω,模拟金属性短路。
- 在Switching control部分,选中External control of fault timing,并用一个Step模块控制故障发生时间。
这里要特别注意时序设置,很多第一次做的人在这里就翻车了。我的做法是单独建一个Signal Builder或者用两个Step模块组合:给故障模块的Step信号设置成0.5s时从0跳到1,仿真总时长3s,故障就一直存在。如果是瞬时性故障,需要在1.1s左右撤销故障信号,但更常见的做法是:故障一直挂着,让断路器跳闸切断故障电流,然后再在某个时刻让故障模块的信号归零,模拟“故障点自行消失”。在瞬时性故障场景里,0.6s断路器跳开后,0.9s撤掉故障信号;在永久性故障场景里,故障信号全程保持1。
断路器用Three-Phase Breaker模块,初始状态设为closed(合闸)。这个模块有两个重要的参数:Breaker resistance Ron(导通电阻),默认0.001Ω;Open circuit conductance Goff(断开电导),默认1e-6S。这两个参数直接决定断路器开断后漏电流大小,默认值够用。
断路器控制端我接一个外部信号。它是通过一个或多个Step信号组合出来的:1表示合闸命令,0表示分闸命令。这里要理解Simscape Electrical中断路器模型的一个特点:开关动作是通过Simulink逻辑信号控制的,但开关的实际状态变化不是瞬间完成的,模块内部会考虑机械动作时间(默认是2个采样周期或指定值),这跟真实断路器跳闸时间约0.02-0.06s的量级是一致的。
3.3 重合闸控制逻辑的实现(含双重判断)
自动重合闸的控制逻辑是整个模型的核心,也是最能体现项目价值的部分。我的思路是把控制逻辑拆成几个阶段,用离散逻辑模块实现:
- 阶段1:正常运行,断路器保持闭合。
- 阶段2:故障发生,保护判断动作,发出跳闸信号,断路器跳开。
- 阶段3:断路器跳开后,进入“无流间隙时间”计时,也就是等待电弧熄灭和介质恢复。
- 阶段4:计时结束,发出合闸命令,断路器合上。
- 阶段5:合闸后立即检测是否还有故障电流,如果还有,说明是永久性故障,立刻发出加速跳闸信号,再次三相跳闸并闭锁重合闸。
在Simulink里最直观的实现方式就是用几个Timer模块配合比较器。具体操作是:
- 用一个延时模块On-Delay Timer,设置延时0.9s(这是跳闸到重合的时间间隔)。输入是跳闸信号,当跳闸信号为1时,延迟0.9s后输出1。
- 把这个延时输出经脉冲生成模块转成一个窄脉冲,作为合闸Step信号。
- 断路器控制信号=初始状态1,然后跳闸信号为1时变0,再然后延时输出1时又变回1。这个用SR触发器或简单的算术组合就能实现。
实际操作中,我更推荐用状态机。如果你对Stateflow不熟,用MATLAB Function块写一版状态机逻辑最直观。代码大致长这样:
function y = recloser_logic(fault_current, enable, t) % 状态定义: 0=运行态, 1=跳闸态, 2=重合等待, 3=重合成功, 4=闭锁 persistent state timer_start if isempty(state) state = 0; timer_start = 0; end y = 0; % 断路器控制,默认合 switch state case 0 if fault_current > threshold state = 1; timer_start = t; y = 0; % 跳闸 end case 1 y = 0; if t - timer_start > 0.1 state = 2; timer_start = t; end case 2 y = 0; if t - timer_start > 0.8 state = 3; y = 1; % 重合 timer_start = t; end case 3 y = 1; if fault_current > threshold state = 4; y = 0; % 永久故障加速跳闸 elseif t - timer_start > 0.2 state = 0; % 重合成功 end case 4 y = 0; % 闭锁重合 end end这段代码把整个重合闸的时序完整串起来了:保护跳闸等待0.1s(断路器开断时间),再等待0.8s(重合间隔),重合后0.2s内如果电流又超限,判定永久故障加速切除。这种方式比纯Simulink模块搭一堆连线要清楚得多,也方便调试。
3.4 保护动作与后加速逻辑配合
光有重合闸控制还不够,整套系统需要配合保护模块。我在这套模型里没有去搭复杂的距离保护算法,而是用一个简化过流判断逻辑:检测线路电流,超过整定值Iset且持续超过20ms,判断为故障,输出跳闸信号。
后加速逻辑是重合闸保护配合里最容易忽略但最重要的部分。想象一下:如果重合于永久性故障,常规的过流保护如果在重合后又按正常延时动作,故障存在时间会大大延长。工程上解决办法是“后加速保护”——重合闸动作的同时,把电流保护的动作时间压缩到零或极短延时,一旦检测到故障就立即跳闸。
在仿真里实现后加速其实很简单:我设置了一个“重合闸出口信号”,这个信号在重合瞬间置1,持续0.3s。在这个窗口内,过流动作延时从0.3s降为0.01s,也就是立即动作。这样一旦重合于故障,马上就跳闸并闭锁再次重合。
4. 仿真结果解读:瞬时性故障与永久性故障对比
4.1 瞬时性故障:跳闸-熄弧-重合-成功
先跑瞬时性故障场景。故障模块故障信号在0.5s置1,A相单相接地;0.6s保护动作断路器A相跳开;0.9s故障信号撤掉(模拟瞬时故障消失);1.4s重合闸命令发出,断路器A相合上。
看示波器输出:
- 0到0.5s,三相电压正弦稳定,电流是正常的负荷电流,大约40A左右。
- 0.5s故障发生瞬间,A相电压迅速跌落,由于是金属性接地,A相电压几乎降到0,同时A相电流快速上升,故障电流峰值达到数千安,完全符合前面计算的2.17kA短路电流量级。
- 0.6s断路器A相跳开,A相电流立刻变为0,A相电压在跳闸后仍然保持0,因为故障点还在接地。
- 0.6到1.3s这段时间是无电流间歇时间,A相电压一直为0,此时相当于线路A相被切除。
- 1.3s重合闸命令发出,断路器合上,如果此时故障已经消失,可以看到A相电压恢复正弦波形,A相电流恢复到正常负荷水平,系统完全恢复运行。
我建议在Scope里同时加上A相电压、A相电流和断路器状态信号,这样一眼就能看出时序关系。重合成功的标志是合闸后0.2s内没有再次检测到故障电流。
4.2 永久性故障:重合-后加速切除
然后跑永久性故障场景。故障信号0.5s置1后全程保持,0.6s保护跳开A相,1.3s重合闸动作合上断路器,但由于A相接地故障仍然存在,合闸瞬间线路再次短路。
注意看这个波形特征:重合瞬间,A相电流出现一个很大的冲击电流,A相电压再次跌落。此时后加速逻辑检测到电流超限,在0.01s内再次发出跳闸信号,断路器第二次跳开。与第一次跳闸不同的是,这次跳闸后重合闸闭锁,不会再自动合闸。
如果把永久性故障场景的波形放到同一张图里,你会明显看到“重合失败 → 快速切除”的两个跳闸脉冲:第一个脉冲是故障后0.1s保护正常动作,第二个脉冲是重合后0.01s后加速动作。这种快速切除设计非常关键,因为如果后加速没有投入,故障要在重合后0.3s甚至更久才被切除,相当于给系统额外引入了一次冲击,可能让邻近设备和系统稳定承受不必要的风险。
4.3 波形怎么读、怎么导出报告
仿真结束后,除了直接在Scope里看,我更推荐把数据导出到MATLAB工作区做后处理。方法是在Scope窗口选择Logging,把输出存成timeseries,然后在MATLAB命令行里用plot函数重画。
一个我常用的做法:
% 假设已经从Scope导出了A相电流数据到变量Ia_measure、时间轴t figure; plot(t, Ia_measure); xlabel('时间 (s)'); ylabel('A相电流 (A)'); title('自动重合闸过程 A相电流波形'); xlim([0.4 1.6]); grid on;这样画出来的波形可以直接导出成png或pdf,放到论文、报告里都很清晰。我习惯把瞬时性故障和永久性故障两张图放在上下两个子图里做对比,评审和答辩的时候效果最好。
5. 实操中遇到的坑与排查方案
5.1 断路器模型不动作或时序错乱
这个问题我在不同项目里遇到过好几回,排查起来说难不难,但特别容易忽略。最常见的现象是:设置了断路器在0.6s跳闸,但波形显示断路器根本没有开断,或者开断时间比设定晚了很多。
根因一般出在两个地方。第一是控制信号的时序,没有把Step模块的时间设置对,导致断路器以为一直有“合闸命令”而保持闭合。第二是断路器模块的“Switching of”参数没有选对,Three-Phase Breaker如果选择的是“Switching only at zero crossing”,它的动作必须等到电流过零点才会真正开断。对纯阻性负载这没问题,但对感性负载,断路器开断会延迟到电流过零,最大能延迟半个周波也就是10ms。这个延迟在考虑重合闸整套时序时必须算进去,否则你会发现保护明明0.6s发了跳闸命令,故障电流却断得更晚。
排查技巧:给断路器状态输出信号接一个Scope,看它到底是没收到信号,还是收到信号但动作延迟。如果是后者,你的重合闸等待时间就要留足断路器实际开断时间,建议在0.1s基础上再加10-20ms的裕度。
5.2 仿真不收敛与求解器设置
Simscape Electrical在连续模式下求解时,遇到故障投入和断路器开断这种强非线性时刻,非常容易出现“仿真中途停止”或步长太小无法收敛的报错。
我的经验是:先切换到离散模式,用Powergui里设置Sample time=50us或者更小。离散模式虽然牺牲一点精度,但稳定性好得多,尤其适合这种关注控制逻辑时序的场景。如果你坚持用连续模式,求解器一定要选ode23tb,最大步长限制在1e-4s以下,否则断路器开断瞬间的数值突变足以让求解发散。
还有一个容易踩的坑是初始平衡条件。如果模型里带了电机或变压器,Powergui会建议你点击“Powergui → Tools → Initial State Setting”做一次初始稳态计算。初值没算好,仿真一启动就乱跳,重合闸逻辑根本没法正常工作。
5.3 参数整定的3个关键注意点
第一个是重合闸间隔时间。这个时间不能太短,否则故障去游离不够,重合还是会跳;也不能太长,否则失去自动恢复的意义。110kV系统一般取0.3到0.8s,我做模型时用了0.8s,主要是为了更清晰地展示各阶段波形,实际工程里可以按整定计算来定。
第二个是电流保护定值。整定要按“躲过最大负荷电流、低于最小短路电流”的原则计算。比如最大负荷电流600A,最小短路电流1800A,定值取1200A是合理的。这个定值直接输进过流判断逻辑里,如果太小,重合后正常负荷就被误判;如果太大,短路电流都到了还触发不了保护。
第三个是后加速窗口的延时。重合闸出口后,后加速窗口不能太长,一般0.2到0.3s就够了,否则如果在系统扰动下电流波动较大,也可能误跳。窗口太短又可能来不及判断故障是否真的存在。我的模型里取0.3s,波形跑下来效果比较稳定。
仿真做完后,我用这套模型做了多组参数对比:不同的故障位置、不同的故障类型(单相接地、两相短路、三相短路)、不同的重合闸时间。测试下来,最让我意外的是故障位置对重合闸成功判定的影响——如果故障点靠近线路末端,故障电流和首端短路电流差别很大,保护定值如果按首端短路电流来整定,末端故障根本检测不到。这提醒我,在实际工程中保护定值必须配合线路全长范围内的灵敏度校验,仿真模型里也一样,不能只测一个故障点就下结论。
最后再分享一个调试小技巧:重合闸逻辑调试时,可以在Scope里同时显示故障信号、断路器状态信号、重合闸计时信号和电流信号。每次修改参数后,先看时序逻辑对不对,再去看电流波形大小,这样定位问题会快很多。仿真不是一次就能跑得完美的,但一旦把时序理顺,整套重合闸动作过程会非常直观,对理解继电保护配合的底层逻辑帮助非常大。