ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

自动重合闸MATLAB仿真:原理、模型搭建与波形分析

自动重合闸MATLAB仿真:原理、模型搭建与波形分析 简介电力系统自动重合闸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 SourceSimscape Electrical Specialized Power Systems SourcesPhase-to-phase voltage: 10kV; Frequency: 50HzThree-Phase PI Section LineSimscape Electrical Specialized Power Systems ElementsLength: 20km; R10.15Ω/km; L10.35mH/km; C10.01μF/kmThree-Phase BreakerSimscape Electrical Specialized Power Systems Circuit BreakersSwitching of: External control; Initial state: 1Three-Phase FaultSimscape Electrical Specialized Power Systems Circuit BreakersFault type: Phase A-B-C; Transition Times: [0.2 0.45]Three-Phase V-I MeasurementSimscape 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 配电网场景下常用的基准配置对象参数项数值设置依据电源相电压RMS10kV配电网典型电压等级电源频率50Hz工频电源短路容量500MVA对应 X/R 约 7模拟中等强度系统线路长度20km中压线路典型长度线路R1 / L1 / C10.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 断路器、故障模块与保护出口信号的联动表整个模型的时间轴上存在四个关键时刻故障发生、保护出口跳闸、断路器分闸完成、重合闸动作。它们之间的关系适合用一张“事件-模块-参数”的联动来表示仿真时刻触发条件承担模块关键参数/信号t0.20s系统正常运行突然发生三相短路Three-Phase FaultTransition Times(1)0.2t0.35s故障电流超过保护整定值外部 Step 信号模拟保护出口Step time0.35; Final value1t0.35s断路器收到跳闸命令分闸Three-Phase Breaker外部控制口输入跳转 0t0.85s重合闸延时结束发合闸命令Matlab Functiont_reclose0.5; y 输出跳转 1t1.50s永久故障组二次短路/再次跳闸Three-Phase FaultTransition 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 参数栏里电感数量级差了上千倍故障电流波形会立刻变成尖刺状。遇到这种情况把线路参数全部调成前面表格里的推荐值再逐个放大缩小看波形变化趋势就能判断究竟是参数漂移还是求解器问题。定位到具体模块后优先把该模块的连续状态改为离散化处理往往一次就能把发散压下去。本文还有配套的精品资源点击获取
返回列表