简介:电力系统自动重合闸MATLAB仿真分析文档,面向电力系统专业学生、继电保护初学者及从事输配电仿真研究的工程技术人员,用于理解单相及三相自动重合闸的工作原理、启动方式,以及基于MATLAB/Simulink的建模仿真方法。资源为1个doc格式文档,压缩包整体约984KB,内容篇幅紧凑,便于快速阅读和参考。已有156人学习浏览,适合配合继电保护课程或电力系统仿真实验使用。文档详细介绍了单相自动重合闸的优缺点与两种启动方式,并以12组350MV同步发电机双电源供电系统为对象,给出断路器故障相设置、转换时间配置及A相接地故障仿真参数;同时结合电压电流波形,分析了故障前、故障时、过渡期和恢复正常各阶段特征,并对比了三相重合闸的成功过程与暂态恢复,可帮助读者掌握自动重合闸仿真建模思路和参数调试方法。
1. 电力系统自动重合闸的 MATLAB 仿真,为什么值得自己搭一遍
电力系统自动重合闸的 MATLAB 仿真,是一个看起来“课程设计味”很重、实际上把电力系统暂态、继电保护配合、断路器控制和数值仿真四个领域拧在一起的题目。配电网里的故障大约有七到八成是瞬时性的,雷击闪络、鸟害、风摆短路,故障点电弧熄灭后绝缘自己恢复。如果不重合,一条线路跳闸就是一次非计划停电;自动重合闸的价值,就是用一次短暂延时换一次供电恢复的机会。
这个题目真正难的不是“重合”本身,而是故障时序、保护动作、断路器分合闸命令这三个时间窗口怎么在 Simulink 里对齐。本次内容面向电气专业学生、电力系统继电保护方向的研发工程师,以及刚接触 SimPowerSystems / Simscape Electrical 的仿真从业者。我们先把重合闸的基本逻辑和前加速、后加速、检同期这些概念落清楚,再用完整的模型搭建步骤、参数表和排错方法,把“能出波形”变成“能说明白波形”。
2. 自动重合闸原理与 Simulink 仿真建模的选型逻辑
2.1 一次、多次与单相自动重合闸:仿真该复现哪一种
自动重合闸按相别可分为三相重合闸和单相重合闸:三相重合闸在故障发生后跳开三相,延时后三相同期合闸;单相重合闸只跳开故障相,另外两相继续运行,多用于 220kV 及以上电压等级的输电线路。按动作次数又分为一次重合闸和多次重合闸。实际电网里,高压线路普遍采用单相或三相一次重合闸,因为多次重合对系统的冲击是叠加的,每合一次闸,发电机轴系就要承受一次转矩冲击,断路器灭弧室也经不起频繁的“合分”循环。仿真里我一般复现三相一次重合闸,逻辑最简单,结果也最容易对照保护教材上的典型波形。
重合闸和继电保护之间还有“前加速”和“后加速”的概念。前加速是第一次故障时靠无选择性的电流速断保护先切除故障,重合后靠有选择性的保护再次切除永久性故障;后加速则是第一次按有选择性动作切除故障,重合到永久性故障时加速保护动作时间。两者的核心区别在于“加速”发生在重合闸之前还是之后。仿真时如果只搭线路、断路器和故障模块,前加速和后加速的差别主要体现在保护出口信号的延时参数上,不必把整条保护逻辑都做出来。
还有一个必须提的配合环节是“检同期”。三相重合闸如果合在两侧电源失去同步的时刻,会产生巨大的冲击电流。典型做法是:线路一侧检无压,另一侧检同期。教学仿真里为了简化,通常把这一环节省略,固定延时后直接发合闸命令,模拟一侧电源供电的辐射状配电网。这是一种合理的简化,但在报告里要写清楚自己做了这个假设,否则评审会问“为什么不考虑合闸角”。
2.2 用 Simscape Electrical 搭电磁暂态模型还是手写微分方程
MATLAB 里做电力系统仿真有两条路线:一是手写状态方程,用 ode45 解微分方程组;二是用 Simulink 的 Simscape Electrical 库(旧版本里叫 SimPowerSystems)直接拖模块。对自动重合闸这种带开关动作的电磁暂态过程,我强烈建议用后者。原因有三个:断路器、故障模块都是库内现成的刚性切换元件,自带 Zero-Crossing 检测和数值阻尼;电源、线路、负荷参数可以直接按电气单位填写,不需要自己推导标幺值;波形测量和 powergui 的稳态初始化工具能省掉大量调试时间。
用 Simscape Electrical 搭模型时,不要把“自动重合闸”想象成一个库里的现成模块。它实际上是一个由断路器外部控制端口、保护跳闸信号和延时逻辑组成的控制系统。Simulink 的断路器(Three-Phase Breaker)有两种控制方式:内部定时控制(直接用 Transition Times 参数指定分闸/合闸时刻)和外部控制(External control 信号引脚)。自动重合闸必须用外部控制,因为“何时分闸”是保护动作的瞬时结果,不是预置的固定时间。我见过不少初学者用 Transition Times 同时写跳闸和重合两个时刻,这样也能出波形,但一旦保护动作时间变了,整个模型就要重新设置,这种模型不值得写到论文里。
线路模型的选择上,Simscape Electrical 里有集中参数的 PI 型线路(Three-Phase PI Section Line)和分布参数的分布式线路模型。重合闸研究的重点是故障后的暂态恢复过程和重合冲击电流,不是行波过程,所以 PI 型线路完全够用。线路长度不超过 50km 时,用一组 PI 段精度尚可;超过 50km 建议把 PI 段数设成 3 到 5 段,否则线路的容性效应会有明显误差。
2.3 解算器选型:ode23tb 与“仿真发散”之间的关系
电力系统自动重合闸模型的数值刚性来自两个层面:线性元件的电气时间常数(毫秒级)和机械/保护逻辑时间常数(秒级)相差很大;断路器分合闸瞬间,电流和电压出现接近阶跃的跳变,局部数值变化率极高。默认的 ode45 在这类问题上经常表现为仿真发散,或者步长被压到极小、仿真实时性极差。我的习惯是优先选 ode23tb,它专为刚性系统设计,能自适应调整步长,对开关事件的处理也比定步长求解器平滑。
求解器之外,Simulink 的 Solver 配置里还有两个容易被忽略的选项:Zero-crossing detection 和 Solver reset 行为。断路器、故障模块在切换瞬间会产生一个“过零事件”,Simulink 默认会在事件点暂停求解、插值定位精确切换时刻。如果模型里存在代数环或者连续但非光滑的信号,过零检测有时会失败,表现出“仿真发散”以外的奇怪现象:电压跳到 1e20 后又弹回来。此时可以把过零检测改成非自适应,或者在断路器动作信号前加一个 Rate Limiter,把 0/1 跳变变成斜坡,但这属于最后的妥协手段,不建议一开始就这么干。
离散化的思路是另一种常见做法:把 powergui 设为离散仿真模式,用 1e-5 到 5e-5 秒的固定步长跑。离散模式下开关动作被强制对齐到采样点,波形会有锯齿,但仿真速度大幅提升,学生作业和初步方案验证通常够用。注意,离散化之后的零序分量和开关暂态峰值会偏小,做精确冲击电流计算时不推荐。
3. 在 Matlab/Simulink 里搭建自动重合闸仿真模型的完整步骤
3.1 最小模型的元件清单与模块连线顺序
一个能跑出自动重合闸动作过程的最小模型,至少需要以下模块:三相电压源、一段 PI 线路、一个三相断路器、一组 RLC 负载、一个三相短路故障模块、一个电压电流测量模块,以及一个 powergui 模块。此外还需要一个阶跃信号源提供保护动作信号,和一个 Matlab Function 块(或 Stateflow 图表)实现重合闸逻辑。模块在库中的位置和关键参数如下表:
| 模块 | 库路径 | 关键参数 |
|---|---|---|
| Three-Phase Source | Simscape > Electrical > Specialized Power Systems > Sources | Phase-to-phase voltage: 10kV; Frequency: 50Hz |
| Three-Phase PI Section Line | Simscape > Electrical > Specialized Power Systems > Elements | Length: 20km; R1=0.15Ω/km; L1=0.35mH/km; C1=0.01μF/km |
| Three-Phase Breaker | Simscape > Electrical > Specialized Power Systems > Circuit Breakers | Switching of: External control; Initial state: 1 |
| Three-Phase Fault | Simscape > Electrical > Specialized Power Systems > Circuit Breakers | Fault type: Phase A-B-C; Transition Times: [0.2 0.45] |
| Three-Phase V-I Measurement | Simscape > Electrical > Specialized Power Systems > Measurements | 勾选 Voltage 和 Current,输出到 Simulink 信号 |
| powergui | 任意模型均需放置一个 | Simulation type: Continuous |
模块连线顺序是:电源 → 线路 → 断路器 → 测量模块 → 负载;故障模块并联在断路器与负载之间的节点上。这个顺序决定了故障位置在断路器下游,与配电网中“保护跳开断路器隔离故障”的物理过程一致。断路器放在电源侧,重合闸合上去之后才恢复供电。
搭建过程中有几个容易忽略的细节。第一,Three-Phase Breaker 的初始状态必须设为“1”(合闸),否则仿真一开始系统就是断开状态,故障和重合的逻辑全部错位。第二,Fault 模块的 Transition Times 指的是故障发生的绝对时刻和消除时刻,初始仿真时不要写 [0 0.2],否则 0 时刻同时发生故障和仿真初始化,容易引起数值振荡。第三,测量模块输出的是 Simulink 信号,不是物理信号,后面接示波器时直接用 Scope 观察,不要再用电压表二次转换。
3.2 用 Matlab Function 写重合闸控制逻辑,而非找现成“重合闸模块”
Simscape Electrical 库里没有直接叫“自动重合闸”的模块。照明弹式地搜模块库不如自己写 20 行控制逻辑。常见做法是用一个 Matlab Function 块,把保护跳闸信号、重合延时和最大重合次数作为输入,输出断路器分合闸命令。下面这段代码是经过整理的三相一次重合闸控制逻辑:
function y = recloser_control(t, trip, t_reclose, max_reclose) % 自动重合闸控制逻辑 % 输入:t 当前仿真时间;trip 保护跳闸信号(1=跳闸) % t_reclose 重合闸延时;max_reclose 最大重合次数 % 输出:y 断路器合闸命令(1=合闸,0=分闸) persistent last_trip n_reclose arm_time if isempty(last_trip) last_trip = -1; % 上一次跳闸沿的时刻 n_reclose = 0; % 已经重合的次数 arm_time = -1; % 允许合闸的时刻 end % 沿检测:trip 从 0 变成 1 时记录一次跳闸事件 if trip > 0.5 && (t - last_trip) > 0.01 n_reclose = n_reclose + 1; last_trip = t; arm_time = t + t_reclose; % 计算允许合闸的绝对时刻 end if trip > 0.5 y = 0; % 保护动作期间,断路器必须分闸 elseif n_reclose <= max_reclose && t >= arm_time && arm_time > 0 y = 1; % 延时结束,自动合闸 else y = 0; end end代码里用了 persistent 变量保存三个状态量:跳闸时刻、重合次数、允许合闸时刻。trip 信号是阶跃量,故障发生期间一直为 1,如果不用沿检测而直接用if trip > 0.5,那么每次求解器走到这一步都会把它当成一次新跳闸,重合次数会瞬间加到上限。所以沿检测用t - last_trip > 0.01做简单过滤,避免同一段持续跳闸信号被重复计数。这个 0.01 秒的阈值不是固定标准,取决于保护动作信号是否存在抖动,如果实际信号里带有噪声,可以把这个阈值提高到 0.05,或者在前面加一个 Hit Crossing 模块再进 Matlab Function。
动作逻辑上,trip 为 1 时强制输出 0,断路器分闸;trip 回零后,等到arm_time时刻才允许输出 1,断路器合闸。这个“先看保护、再看时间”的顺序很重要,能避免在保护动作尚未复归时就抢合。
3.3 瞬时故障与永久故障的时序参数设置
模型搭好后,下一步是区分瞬时故障和永久故障。瞬时故障的物理含义是:故障点电流消失后电弧熄灭,绝缘恢复。仿真里用 Fault 模块的 Transition Times 实现:故障从 0.2s 开始,0.45s 结束。保护在 0.5s 左右出口跳闸,此时故障已经消失,断路器分闸后线路等待去游离,1.0s 重合成功,系统恢复供电。
永久故障则意味着故障点始终存在,仿真上把 Transition Times 写成[0.2 1.5],即保护跳闸后故障仍不消除。1.0s 重合瞬间,系统再次短路,保护再次动作,断路器再次分闸。如果配合max_reclose参数,逻辑会在第二次分闸后保持闭锁,输出的合闸命令不再由高到低变化。如果你想仿真“重合于永久性故障”时保护加速动作的效果,就把第二次保护出口信号的延时从 0.3s 改成 0.1s,这就是后加速的数值体现。
值得注意的是,当瞬时故障设置为[0.2 0.45]时,保护动作时间要设置在 0.45s 之后,否则故障尚未切除,保护先跳闸,逻辑上变成了“保护误跳”,波形里重合闸合上后系统还在故障状态,容易误判为重合失败。延时时间建议设在 0.5s 左右,留出 50ms 的保护动作裕度。
4. 自动重合闸仿真参数表与三组对照实验设计
4.1 电源、线路、负荷参数怎么给才不飘
仿真参数不是随便填的。电源容量与负荷大小不匹配时,重合闸前的空载电压和重合后的负载电压会有明显落差,导致波形分析结论失真。下面这套参数是我在 10kV 配电网场景下常用的基准配置:
| 对象 | 参数项 | 数值 | 设置依据 |
|---|---|---|---|
| 电源 | 相电压(RMS) | 10kV | 配电网典型电压等级 |
| 电源 | 频率 | 50Hz | 工频 |
| 电源 | 短路容量 | 500MVA | 对应 X/R 约 7,模拟中等强度系统 |
| 线路 | 长度 | 20km | 中压线路典型长度 |
| 线路 | R1 / L1 / C1 | 0.15Ω/km / 0.35mH/km / 0.01μF/km | 典型架空线参数 |
| 负载 | 有功 / 无功 | 1MW / 0.2Mvar | 让线路电流在 100A 量级,便于观察重合冲击相对比例 |
| 断路器 | 初始状态 | 合闸 | 仿真前系统处于正常运行态 |
| 故障 | 故障类型 | A-B-C 三相短路 | 三相短路冲击最大,适合验证逻辑,单相接地场景另设 |
电源的内部阻抗如果太小,短路电流会达到几十千安,虽然故障波形更“猛”,但对仿真步长的压力很大,而且重合闸这种场景关注的是故障切除和恢复过程,不是短路电流的最大值。短路容量 500MVA 在 10kV 系统里对应内阻抗大约 0.2Ω,短路电流在 28kA 上下,视觉上有冲击感,也不会让仿真变成纯粹的高频振荡。
负荷参数需要和电源短路容量配套。1MW 负荷在 10kV 下的额定电流只有 57A,短路电流与负荷电流的比值接近 500 倍,重合闸后的电压恢复过程几乎不受负荷影响。如果做的是单相重合闸或功率方向元件配合,就需要加大负荷、拉开两侧的电压相角,才能看出“检同期”的作用。这篇文章里的三相一次重合闸模型,可以回避这个复杂场景。
4.2 断路器、故障模块与保护出口信号的联动表
整个模型的时间轴上存在四个关键时刻:故障发生、保护出口跳闸、断路器分闸完成、重合闸动作。它们之间的关系适合用一张“事件-模块-参数”的联动来表示:
| 仿真时刻 | 触发条件 | 承担模块 | 关键参数/信号 |
|---|---|---|---|
| t=0.20s | 系统正常运行,突然发生三相短路 | Three-Phase Fault | Transition Times(1)=0.2 |
| t=0.35s | 故障电流超过保护整定值 | 外部 Step 信号模拟保护出口 | Step time=0.35; Final value=1 |
| t=0.35s | 断路器收到跳闸命令,分闸 | Three-Phase Breaker | 外部控制口输入跳转 0 |
| t=0.85s | 重合闸延时结束,发合闸命令 | Matlab Function | t_reclose=0.5; y 输出跳转 1 |
| t=1.50s | 永久故障组:二次短路/再次跳闸 | Three-Phase Fault | Transition Times(2)=1.5 |
保护出口信号我在这里用 Step 模块直接给,不走电流互感器和继电保护模型。这样做的好处是时序可以精确控制,要探讨“重合于永久故障”时也只需要把 Step 之后的延时参数改一下。代价是保护启动条件和真实系统不同,属于教学简化的范畴。如果你的课题是研究保护与重合闸的配合,那应该把过流继电器模块也建进去,用故障电流作为保护的输入。
联动设置时最容易犯的错误是:断路器分闸和重合闸命令直接接到同一个信号上。正确做法是,Breaker 的外部控制口只接待 Matlab Function 的输出,保护信号只作为 Matlab Function 的输入。把保护信号直接接到断路器控制口,断路器就只会分闸不会合闸,因为保护复归后信号归零,命令变成了“合闸”,但这样就没有“延时”这个环节了,模型也就和“自动重合闸”四个字不相干。
4.3 三个实验脚本:瞬时重合成功、永久故障重合失败、多次重合闭锁
参数设置最终要用仿真验证。直接在 Simulink 界面上点 Run 也能跑,但要批量对比三组实验,不如写一个 matlab 脚本循环调用。下面这段脚本可以在同一模型下通过修改 Fault 模块的 Transition Times 和 max_reclose 参数,自动跑完三组实验:
% 批量运行自动重合闸三组实验 mdl = 'recloser_model'; mdlopen(mdl); experiments = { 'instant', [0.2 0.5], 0.5, 1; % 瞬时故障,重合成功 'permanent', [0.2 1.5], 0.5, 1; % 永久故障,重合后再次分闸 'blocked', [0.2 1.5], 0.5, 0 % 永久故障,且闭锁重合 }; for i = 1:size(experiments, 1) name = experiments{i, 1}; t_fault = experiments{i, 2}; t_reclose = experiments{i, 3}; max_rec = experiments{i, 4}; set_param([mdl '/Three-Phase Fault'], 'TransitionTimes', ... sprintf('[%g %g]', t_fault(1), t_fault(2))); set_param([mdl '/Recloser Logic'], 't_reclose', num2str(t_reclose)); set_param([mdl '/Recloser Logic'], 'max_reclose', num2str(max_rec)); simOut = sim(mdl, 'StopTime', '2.0'); assignin('base', ['sim_' name], simOut); end这段脚本的关键在于:set_param改的是 Matlab Function 块的 Simulink 参数,这里的t_reclose和max_reclose是在 Matlab Function 块的参数列表里预先定义的参数项。在模块对话框中,把输入列表写出t, trip, t_reclose, max_reclose,前两个来自 Simulink 信号,后两个来自工作区变量或模块参数。脚本里的num2str转换不能少,set_param接受的是字符串,不是数值。
三组实验的结果对照如下:瞬时故障组,电流波形在 0.2s 冲到短路电流,0.35s 降到零,0.85s 重合后一个周波内恢复到正常水平;永久故障组,重合闸在 0.85s 动作后电流又一次冲高,保护再次跳闸,1.2s 后电流归零;闭锁组,断路器保持分闸,后续不再有合闸动作。核对波形时重点看三个时间点:故障起点、断路器分闸点、重合闸动作点,三点都对上,逻辑就算成功了。
5. 波形判读与仿真发散定位的两个实用技巧
5.1 判断重合闸成功:RMS 包络和冲击电流峰值
重合闸是否成功不能只看电压波形“恢复了个大概”,要用数值指标说话。我的做法是在仿真脚本中增加一段“空窗期检测”代码:计算出故障后到重合前的线路电流 RMS 值,如果这段区间 RMS 低于额定电流的 5%,且重合后一个周波内电压 RMS 回到 90% 额定值以上,就判定为成功重合。这段逻辑可以用rms函数配合时间索引实现:
% 取瞬时故障组仿真结果 t = sim_instant.tout; I = sim_instant.current.signals.values(:, 1); % 分闸空窗期:0.35s 到 0.85s idx_trip = find(t > 0.35 & t < 0.85); I_window = I(idx_trip, :); if rms(I_window) < 0.05 * rms(I(t < 0.2)) disp('重合成功:空窗期无故障电流'); else disp('重合失败:空窗期仍有电流'); end这里用了 Matsimulink 数据对象输出的格式,simOut.current.signals.values是测量模块输出到工作区的数据结构。如果你在模型里直接用的是 Scope,可以在 Scope 的 Logging 选项卡中打开“Log data to workspace”,这样脚本才能取到数据。冲击电流峰值直接取重合后一个周波内的最大瞬时值,与重合前的额定电流峰值做比值,这个比值通常被称为重合冲击倍数,三相一次重合闸的典型数值在 2 到 5 倍之间,超过 5 倍说明合闸角或合闸时刻选取有问题,需要回头检查检同期逻辑。
5.2 把仿真发散定位到具体模块的三步排错法
Simulink 仿真发散或显示 Inf/NaN,我一般按三个步骤定位,一步比一步细。第一步看错误信息定位到哪个模块,Simulink 报错时提示的模块名往往就是问题源头,常见的是 Fault 模块的 Transition Times 写了一对完全相同的时刻(如[0.2 0.2]),导致两个事件重叠,求解器找不到唯一切换点。
第二步看收敛前的最后一个时间步。在 Solver 配置里把“Output times”改成tspan,把最大步长Max step size设成 1e-4,然后重新运行。如果发散被推迟或消失,说明是步长过大导致开关事件附近的数值突变没有被精确捕捉,解决办法是把 Max step size 继续减小到 1e-5,并开启 Zero-crossing detection。很多所谓“发散”其实不是方程无解,而是大时间步直接跨过了开关动作时刻。
第三步是检查线路和电源参数的量纲一致性。Simscape Electrical 里面的参数单位是国际单位制,电阻是 Ω,电感是 H,电容是 F。如果把线路电抗 0.35Ω/km 直接填到 L1 参数栏里,电感数量级差了上千倍,故障电流波形会立刻变成尖刺状。遇到这种情况,把线路参数全部调成前面表格里的推荐值,再逐个放大缩小看波形变化趋势,就能判断究竟是参数漂移还是求解器问题。定位到具体模块后,优先把该模块的连续状态改为离散化处理,往往一次就能把发散压下去。
本文还有配套的精品资源,点击获取