☰
Simulink三段式电流保护仿真模型搭建与避坑指南
2026/10/15 9:11:52 网站建设 项目流程

简介:面向电力系统继电保护教学与研究的Matlab/Simulink仿真模型资源,完整演示三段式电流保护(瞬时电流速断、定时限过电流、反时限过电流)与零序电流保护的建模思路,适合电气工程专业学生、教师及从事继电保护设计的工程人员用来理解整定值配合、延时逻辑与接地故障检测。压缩包仅含1个PDF文件,整体约984KB,PDF中归纳了从电力系统元件搭建、电流互感器配置、比较单元设计到零序电流提取、故障注入验证的完整流程。已有1560人浏览学习,属于入门门槛较低、可直接对照上手的继电保护仿真参考资料。读者可借此掌握Simulink环境下电流保护模型的搭建方法,同时了解零序电流的产生、检测与保护配合逻辑,用于课程设计、毕设仿真或现场保护方案验证前的快速预研。

1. 先说结论:这套 Simulink 模型把三段式电流保护的「动作时序」从课本搬成了可调试的实物

我在拆这套基于 Matlab/Simulink 的三段式电流保护(含零序)仿真模型时,第一感受是:它把继电保护课里最绕的「三段配合 + 零序判别」变成了能直接改参数、注故障、看断路器动作的实物。速断、限时速断、定时限过电流和零序电流保护四条通路分开搭,各有独立整定值和跳闸出口,拿过来就能往里扔故障。适合三类人:做继电保护课程设计的学生、刚接整定计算想验证配合关系的运行人员、要给培训做直观演示的讲师。下文按拆解顺序讲:保护逻辑怎么映射到 Simulink、一次系统和保护链路怎么搭、故障怎么注入验证,以及五个常见翻车点。

2. 三段式电流保护的动作逻辑:先弄清四条保护通路的分工,再谈模块映射

2.1 三段式保护的阶梯配合:速断、限时速断、定时限各管一段

很多初学者拿到模型第一反应是「三个比较器并联,谁先满足谁就跳」,这是错的。三段式电流保护是围绕同一条线路、按「范围 + 时间」两个维度分工的阶梯配合,三段串联起来,各有各的保护区,谁都不能越级。

I 段瞬时电流速断,按躲过本线路末端最大三相短路电流整定,动作时间接近继电器和断路器的固有时间,工程上按 20~40ms 估计。它的保护范围只有线路全长的 20%~80%,代价是范围短,换来的是近端故障快速切除。II 段限时电流速断,按与下级线路 I 段配合整定,保护范围伸到本线路全长再延伸到下级线路一部分,动作时间与下级 I 段差一个时间阶梯 Δt,常规取 0.3~0.5s。III 段过电流保护,按躲过最大负荷电流并校核返回系数整定,覆盖本线路和相邻线路,是本线路的近后备和相邻线路的远后备。动作特性有两种:定时限是固定延时,反时限是电流越大动作越快。这套模型的三个比较环节,第二路走的定时限逻辑,第三路走反时限逻辑,两种特性都在。

段别整定依据动作时间保护范围存在意义
I 段 速断躲过本线路末端最大短路电流固有时间 20~40ms本线路 20%~80%快速切除近端故障
II 段 限时速断与下级线路 I 段配合0.3~0.5s本线路全长 + 部分下级线路切除本线路剩余范围
III 段 过电流躲过最大负荷电流0.5s 起逐级增加 Δt本线路 + 相邻线路近后备 / 远后备

映射到 Simulink 时,这三段的差异其实只集中在「比较器之后的出口逻辑」:I 段比较器输出直接进跳闸链路;II 段比较器后接一个固定延时模块;III 段按反时限特性做积分累计,电流越大积分越快。我一般把三段各封装成一个子系统,整定值做成子系统输入口,调参数不用打开模型内部结构,现场改定值也不会翻车。

2.2 零序电流保护:接地故障特有的第三路电流,必须单独一条判别通路

零序电流的本质是三相电流瞬时值向量和不为零。正常对称运行时,三相电流各差 120°,Ia + Ib + Ic = 0;发生接地故障时,故障相经故障点与地构成通路,三相不再平衡,出现 3I0。继电保护现场说的零序电流,通常指的就是三相 CT 二次侧按同极性并联得到的 3I0,数值上等于三相电流之向量和。零序保护只反映接地故障,不反映负荷电流和相间短路,所以在中性点有效接地系统里灵敏度很高,是接地故障的主保护。

模型里取零序有两条路。一条是用 Simscape Electrical 的 Sequence Analyzer 模块,输入三相电流,输出正序、负序、零序分量;另一条更直接——用一个 Sum 模块把 Ia、Ib、Ic 相加,输出就是 3I0,除以 3 才是每相零序分量 I0。我习惯用 Sum 方式,中间少一个模块,想对比三相合成波形也更方便。

这里有个关键前提:零序电流的大小与中性点接地方式强相关。中性点有效接地系统里,单相接地零序电流大,零序过电流保护才能可靠动作;中性点不接地或经消弧线圈接地系统,单相接地时零序电流只有很小的电容电流,零序过电流保护基本无法动作,得改走零序电压或方向元件。所以拿到模型先确认变压器中性点有没有接地,别在错误的系统结构下测零序,测出来的数据会让你怀疑人生。

2.3 模型总览:一次系统、测量、保护逻辑、断路器四层信号流

把整套模型的信号流理顺,搭建顺序就出来了:

一次系统层:三相电源(Three-Phase Source)→ 输电线路(Three-Phase PI Section Line,分段是为了模拟不同故障点)→ 负荷(Three-Phase Series RLC Load);变压器按需放在电源和线路之间。

测量层:线路首端接 Three-Phase V-I Measurement,输出三相相电压和相电流瞬时值,信号一路送保护逻辑,一路送示波器。

保护逻辑层:四个比较环节——速断、限时速断、定时限/反时限、零序——各自输出动作条件,经延时和自保持合成一个 Trip 跳闸信号。

执行层:Trip 信号送到 Three-Phase Breaker 的跳闸输入,断路器分闸切断故障电流。故障注入层用 Three-Phase Fault 模块,布置在线路各分段上。

最容易搞反的一步:测量层必须先做 CT 变比折算,再做幅值比较。不要拿一次侧的大电流直接进比较器,否则整定值要跟着波形幅值走,换个系统参数就全乱。3.2 节给出折算的具体处理方式。

3. 搭建一次系统与保护逻辑:初始化脚本、测量折算、三段出口一次说清

3.1 一次系统参数脚本:用 MATLAB 初始化脚本管理所有可调参数

我一般会先在模型外用脚本把所有参数集中管理。原因很实际:Simulink 模型里的常数模块不好改,用 set_param 一条条改又繁琐;把所有参数写成工作区变量,模型里的模块直接引用变量名,调整定值时只改脚本,重跑 sim 就行。这套模型同样适合这种组织方式,拿到手先把参数集中起来,后续验证能省一半时间。

% 一次系统参数:110kV 单电源辐射网 Vn = 110e3; % 额定线电压,V fn = 50; % 工频,Hz Sn = 100e6; % 系统短路容量,VA,用于折算系统阻抗 Zsys = (Vn^2/Sn)*(0.08 + 1j*0.92); % 系统等效阻抗(折到 110kV 侧),Ω % 线路参数(LGJ-240 型导线典型值) L_line = 20e3; % 线路全长,m R1 = 0.13; X1 = 0.40; % 正序电阻/电抗,Ω/km R0 = 0.28; X0 = 1.20; % 零序电阻/电抗,Ω/km % CT 变比与保护整定值 nCT = 600/5; % CT 变比:一次 600A / 二次 5A Iset1 = 1800; T1 = 0.05; % I 段整定值(一次值 A),按固有动作时间 50ms Iset2 = 650; T2 = 0.5; % II 段整定值,延时 0.5s Iset3 = 420; % III 段反时限启动值 Tset = 0.5; % 反时限时间整定系数 Iset0 = 150; T0 = 0.5; % 零序整定值,延时 0.5s % 故障时间窗 t_fault = 0.2; % 故障起始时刻,s t_clear = 0.8; % 故障切除时刻,s(要大于保护动作时间)

这段脚本里最需要注意的是单位统一:电压用 V、电流用 A、阻抗用 Ω,模型里的 Three-Phase Source 和 Line 模块直接填这些变量,模块里就不会出现一团来历不明的数字。整定值我习惯先写一次值,在比较器前统一除以 CT 变比折算成二次值,这样和现场保护定值单的习惯完全一致,改起来顺手。

模块关键参数取值
Three-Phase SourcePhase-to-phase voltage (Vrms)Vn
Three-Phase PI Section LineFrequency、正序/零序 R/L/C 每公里值、Lengthfn、R1/X1/R0/X0、L_line
Three-Phase Series RLC LoadActive/Reactive power按负荷水平设
Three-Phase FaultFault type、Fault resistance、Transition times见第 4 章
Three-Phase BreakerInitial status、Transition times0、[0 0]

3.2 测量与折算:相电流转幅值、CT 二次折算、零序分量提取

Three-Phase V-I Measurement 模块默认输出三相电流瞬时值(一次侧安培)。但保护比较器需要的是幅值,不是瞬时值,所以在电流进比较器之前,要先用 RMS 模块把每相电流的有效值算出来,再取三相最大值作为相间保护的判据。RMS 模块的计算窗口要设成一个工频周期 0.02s,太小会抖动,太大会延迟,0.02s 正好。

折算这一步直接决定整定值准不准。模型里保护逻辑层都按二次值工作,所以比较器的阈值要用二次整定值:

% 二次侧整定值 = 一次整定值 / CT 变比 Iset1_2nd = Iset1 / nCT; % 速断二次整定值 Iset2_2nd = Iset2 / nCT; % 限时速断二次整定值 Iset3_2nd = Iset3 / nCT; % 过电流二次启动值 Iset0_2nd = Iset0 / nCT; % 零序二次整定值

对应到模型里:V-I Measurement 之后接 Gain 模块,Gain = 1/nCT,之后才是比较器。这个 Gain 放这里的好处是,换 CT 变比时只改脚本里的 nCT,模型结构完全不用动。零序提取放在 Gain 之前,用 Sum 模块把三相电流相加得到 3I0(一次值),再走同一个 Gain 折算成二次零序电流。

注意:如果模型里直接用了一次电流比较,你会发现同样的整定值在不同故障电流水平下动作时间完全对不上。先确认信号路径上有没有这个 1/nCT 的 Gain,没有就先补上。

3.3 三段比较与跳闸出口:速断直跳、限时延时、反时限积分

比较环节用 Simulink 的 Relational Operator(>=)模块,输入是折算后的电流幅值,阈值是二次整定值。三段区别全在出口:

I 段速断:比较器输出直接作为跳闸条件,进自保持回路。没有延时,唯一要考虑的是继电器固有动作时间,所以整定值里我一般预留 50ms 左右的固有时间概念,实测动作时间只要在 50ms 内就算正常。

II 段限时速断:比较器输出先经过一个延时模块,延时整定为 T2 = 0.5s。Simulink 里可以用 On-Delay 模块,也可以用一个 Enabled Timer 自己搭:比较器输出为 1 时计时器积分,累计达到 T2 就输出 1。后一种方式更接近继电器实现原理,也方便观察计时过程。

III 段反时限:这是最容易做错的一段。反时限不能用固定延时模块,必须按 IEC 标准反时限公式算理论动作时间,再积分累计。公式是 t(I) = K × Tset / ((I / Is)^α - 1),标准反时限取 α = 0.02、K = 0.14,Is 是启动整定值。在模型里用一个 MATLAB Function 模块算 t(I),再用积分器累计 1/t,累计值到 1 就触发。关键是积分器要加使能:只有电流大于启动值 Is 时才累计,电流回落就清零,否则会误动。

% 模型里 MATLAB Function 模块内容:输入 I(二次值),输出 tt function tt = inv_time(I) alpha = 0.02; K = 0.14; % IEC 标准反时限常数 Is = 420 / 600 * 5; % 启动值二次值,视实际折算调整 tt = K * 0.5 / ((I/Is)^alpha - 1); end

四个跳闸条件(I 段、II 段、III 段、零序)最终进一个 OR 门合成。OR 门输出不能直接接断路器,必须先经过 SR 触发器做自保持,set 端接 OR 输出,reset 端接手动复归信号。为什么必须自保持,第 5 章细讲,但搭模型时记得先把这个 S-R 触发器放进去,不然后面每次仿真都要回来补。

4. 故障注入与仿真验证:三相短路、两相接地、单相接地各跑一遍

4.1 Fault 模块参数与故障位置:故障类型、过渡电阻、动作时序

Three-Phase Fault 模块是验证的核心。它有三个参数组:Fault type 勾选哪几相、Fault resistance 过渡电阻、Transition times 故障投入和退出时刻。勾选组合直接决定这次故障考验哪条保护通路:

验证目标Fault type 勾选预期动作通路
I 段速断动作ABC 三相短路I 段 20~50ms 跳闸
II 段限时速断线路末端附近 ABC 短路II 段 0.5s 跳闸
III 段反时限/定时限负荷侧 AB 相间短路III 段按曲线或固定延时跳闸
零序 I 段动作A-G 单相接地零序通路 0.5s 跳闸
零序 + 相间后备AB-G 两相接地零序与 II/III 段配合

故障位置的设置方式:在 PI Section Line 上把线路拆成几段,每段末端放一个 Fault 块。例如 20km 线路拆成 4 段,每段 5km,四个 Fault 块依次代表 25%、50%、75%、100% 处故障。同一时刻只激活一个故障块,其余块的 Transition times 设成 [10 11],晚于仿真结束时间,等于没投入。

Transition times 的第二个时间要大于整条保护链路完成动作的时间。如果 toff 设得太早,断路器还没跳完故障就消失了,测不到动作时序。我一般设 [0.2 0.8],给 0.6s 的观察窗口,足够让 1s 以内的保护段完整动作。过渡电阻也不要直接设 0,给 0.01Ω 的弧光电阻,既接近实际,又避免理想短路导致求解器卡死。

4.2 求解器与步长:选错 solver,速断能给你算出 60ms 延迟

Simscape Electrical 的模型建议用变步长隐式求解器,我一般用 ode23tb,相对误差 1e-3,最大步长限到 1e-3s。如果你的模型是离散化的(采样保持加离散积分器),那就用 discrete solver,步长取 1e-4 到 1e-5s。

为什么强调这个:零序分量和反时限积分对步长很敏感。步长太大,反时限积分一步跨过去直接触发,动作时间虚小;步长太小,仿真慢到怀疑人生。我见过有人用 ode45 跑这个模型,故障瞬间步长崩到 1e-9,一个 1.5s 的仿真挂机跑了一晚上,这是典型的 solver 玄学问题。solve 换回 ode23tb,问题立刻消失。

% 仿真参数统一设置 set_param('model_name', 'Solver', 'ode23tb'); set_param('model_name', 'StopTime', '1.5'); set_param('model_name', 'MaxStep', '1e-3'); set_param('model_name', 'RelTol', '1e-3');

4.3 动作时间判读与验证清单:从 Trip 波形读动作时刻

仿真完成后,Trip 信号用 To Workspace 模块存到工作区。判读动作时间不靠肉眼盯波形,写两行脚本读首个上升沿:

% 读取 Trip 信号首次动作时刻 SimOut = sim('model_name'); Trip = SimOut.trip_signal; % trip_signal 是 To Workspace 输出 idx = find(Trip.Data > 0.5, 1); % 阈值取 0.5,滤掉数值抖动 t_trip = Trip.Time(idx) - t_fault; % 相对故障时刻的动作时间 fprintf('保护动作时间: %.3f s\n', t_trip);

阈值取 0.5 是因为 Trip 是逻辑 0/1 信号,取半值能稳定抓到第一次跳变。用 t_trip 跟整定值对照,就能判断是哪一段起的动作。完整的验证清单我一般按五步走:近端三相短路看 I 段是否 50ms 内跳;线路中段故障看 II 段是否 0.5s 跳;末端故障看 III 段是否按反时限曲线动作;单相接地看零序通路是否动作;最后确认动作时间和整定值误差在 10% 以内。五条全过,这个模型才算真的能拿去用。

5. 避坑指南:六个让跳闸逻辑翻车的细节与解决

这套模型踩坑点高度集中在信号处理和保护出口这两块,以下六条是按实际拆解中「现象 → 原因 → 解决」整理的血泪经验。

5.1 速断保护怎么都不动作

现象:三相短路故障电流远超整定值,I 段比较器输出明明是 1,断路器就是不跳,电流波形一直挂着。

原因:最常见的两种。一是 Fault 块的 Transition times 用了 [0.2 0.8],但仿真 StopTime 只设了 0.5s——故障还没结束仿真就停了,示波器里看到的是故障持续但不是保护没动。二是 Fault 块误勾了 External control,外部控制信号一直是 0,故障块从未被触发。

解决:先确认 Fault 块内部触发模式,再看 StopTime。我一般把 StopTime 设 1.5s,故障窗 [0.2 0.8],留足 0.7s 观察窗口。检查顺序是:Fault 触发 → 比较器输出 → Trip 信号 → 断路器跳闸,用 Scope 逐级看,哪一级断了补哪一级。

5.2 零序电流恒为零

现象:单相接地故障,零序通路输出一直是 0,零序保护纹丝不动。

原因:三个典型。一是测量模块取的是线电流/线电压而不是相电流,零序计算的前提就没有了;二是 Fault 块没勾选接地 G,单相接地变成了相间开路,没有入地回路;三是零序提取用的 Sequence Analyzer 输入接反而把零序分量算到负序里去了。

解决:先用 Sum(la、lb、lc) 直接相加的方式替代 Sequence Analyzer,看 3I0 有没有值。没值就从 Fault 块 G 端开始查:接地勾选了吗?中性点接地了吗?测量输出是相电流吗?这三处查完,零序恒为零的问题基本能定位。

5.3 反时限曲线变成固定延时

现象:III 段在大电流故障下动作时间和预期反时限曲线完全不符,不管电流多大都固定 1s 跳。

原因:模型里用固定延时模块实现了反时限,这是原理性错误。反时限的本质是 t 随 I 连续变化,固定延时模块只有两个状态:计时开始、计时到点,中间没有任何电流相关性。

解决:换回第 3.3 节的方案,用 MATLAB Function 算 t(I),配积分器累计 1/t。注意积分器必须加电流大于启动值的使能条件,否则正常负荷电流也会缓慢累计,挂久了照样误跳。

5.4 断路器跳开后马上又合上

现象:示波器里 Trip 信号先是 1,断路器分闸电流归零后 Trip 立刻回落 0,断路器随即重合,故障电流复燃。

原因:比较器输出直接接了断路器,没有自保持。断路器跳开后故障电流消失,比较器条件不再满足,Trip 被撤掉,断路器又按初始状态合回去了。

解决:在比较器和断路器之间加 SR 触发器,set 端接 OR 输出,reset 端接人工复归。这是继电保护现场「跳闸出口必须自保持」的硬要求,不只为了仿真正确,这个习惯带到实际调试里能少烧不少设备。我见过三套模型挂在同一个问题上,全是补了个 S-R 触发器就好了。

5.5 仿真不收敛或步长崩塌

现象:加进故障块后仿真报 Solver stuck,或者时间步长掉到 1e-9 量级,一个 1.5s 的仿真跑不完。

原因:一次系统参数不合理占多数。线路阻抗设得极小导致短路电流巨大,或者 Fault 块过渡电阻设 0 且直接并联在理想电压源上,数值求解直接溢出。

解决:Fault 块的 Fault resistance 给 0.01Ω;系统阻抗 Zsys 不要设 0;solver 换 ode23tb 并限制 MaxStep 为 1e-3。改完这三处,绝大多数收敛问题都会消失。如果还卡,把线路阻抗按真实导线参数复核一遍,别用拍脑袋的小电阻。

5.6 整定值改了但仿真结果没变

现象:脚本里把 Iset1 从 1800 改成 3000,重跑后 I 段动作时间和原来一模一样。

原因:模型里的常数模块写死了数值,没有引用工作区变量。脚本改了,模型纹丝不动,这是最隐蔽的坑。

解决:模型里所有整定值和延时都填变量名而不是数值,Iset1_2nd、T2 这些统一从工作区读。跑仿真前先执行一次初始化脚本,或者用模型的 PreLoadFcn 回调自动加载参数。从那以后我每次拿到模型第一件事就是搜常数模块,看哪些地方写死了数字,写死的一律改成变量引用。

6. 进阶:用脚本批量扫故障位置,把模型变成整定配合验证台

模型单次跑通只是起点,真正有价值的是把它变成批量验证工具。做法是给每个故障段配一个 Fault 块,用循环脚本依次激活,自动采集各段保护动作时间,一次性验证整条线路的保护配合。

% 线路拆成 5 段,每段末端一个 Fault 块 mdl = 'model_name'; fault_blocks = {'Fault_L1','Fault_L2','Fault_L3','Fault_L4','Fault_L5'}; results = []; for k = 1:5 % 只激活第 k 个故障,其余全部设为仿真结束后再触发 for j = 1:5 if j == k tt = [0.2 0.8]; % 本次要考察的故障 else tt = [10 11]; % 晚于 StopTime=1.5s,等于不投入 end set_param([mdl '/' fault_blocks{j}], ... 'TransitionTimes', mat2str(tt)); end SimOut = sim(mdl, 'StopTime', '1.5'); Trip = SimOut.trip_signal; idx = find(Trip.Data > 0.5, 1); t_trip = Trip.Time(idx) - 0.2; results(k, :) = [k*20, t_trip]; % 故障位置百分比、动作时间 end disp(results);

这段脚本跑完,你会得到一张「故障位置 — 动作时间」对照表:25% 处故障 I 段 50ms 内跳,50% 处 II 段 0.5s 跳,100% 处 III 段按反时限曲线动作。把这张表和整定计算书的预期值摆在一起,哪里配合不上立刻暴露。我一般还会顺手画一条 t 随故障位置变化的曲线,保护范围的边界一目了然,比对着波形猜准得多。

这套模型我前后替三个不同场景的同事做过适配,每次改动都强制走一遍「初始化脚本 → 改整定 → 跑五种故障 → 判读动作时间」的标准流程,再也不敢跳步。模型本身不复杂,但保护逻辑这种东西,错一步就是误动或拒动,仿真阶段多花十分钟,现场少折腾一下午。希望帮到你。

本文还有配套的精品资源,点击获取

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

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

立即咨询