接手过继电保护课程设计,或者实际碰过整定计算的同行应该都有同感:三段式电流保护在课本上就那么三行公式,但真要把一段、二段、三段对应的动作电流、动作时间全部算出来,并且保证选择性、灵敏性、可靠性都合格,中间要抠的细节非常多。最大运行方式和最小运行方式怎么定,短路电流按三相还是两相算,可靠系数取1.2还是1.3,返回系数别忘了放在分母上——任何一个数字变了,后面的校验从头跟着变。最近我在MATLAB里把一套110kV单侧电源辐射网的三段式电流保护完整跑通了,末端短路电流、各母线两相最小短路电流全部算出,三段整定值、保护范围、灵敏度逐项做了校验,又用Simulink验证了不同故障点下三段保护的配合时序。这篇文章把整定原理、完整代码、数值结果和调试中踩过的坑一次讲清楚。
1. 项目概述:三段式电流保护与MATLAB整定仿真的整体设计
1.1 三段式电流保护:三套分工的一张网
先花点时间把三段式电流保护本身讲透。它本质上解决一个问题:一条输电线路上的故障电流大小随故障点位置变化,越靠近电源短路电流越大,越靠近线路末端短路电流越小。只用一个过电流定值,根本分不清是线路末端短路还是大负荷正常运行,更分不清故障到底发生在自己线路上还是相邻线路上。所以把保护拆成三段,各管一段,互相配合。
一段保护(电流速断保护)动作最快,没有人为延时,但保护范围只有本线路的70%到80%,它靠“躲开线路末端最大短路电流”来保证选择性——末端故障它不动作,自然就不会和下一段线路的保护产生配合冲突。二段保护(限时电流速断保护)把范围延伸到整条本线路,甚至略微伸进相邻线路,代价是加一个0.5秒的短延时,用来和相邻线路的一段保护配合。三段保护(定时限过电流保护)定值低、灵敏度最高,按躲过最大负荷电流整定,动作时间最长,既当本线路的近后备,又当相邻线路的远后备,是整个保护链的兜底。形象点说,一段像门口保安,只拦冲进门的;二段像巡逻岗,多看一眼再确认;三段像全厂总警报,前面失控了它才上。三个角色配合起来,才能做到“区内故障快速切除,区外故障不误动”。
这个项目里我做的就是把上述三段逻辑落到一个具体的110kV算例上,用MATLAB算出每段定值和延时,再用仿真验证配合关系。
1.2 算例系统:110kV单侧电源辐射网
为了把整定计算做完整,我搭了一个经典的辐射网算例:电源侧经过系统阻抗向母线A供电,母线A接地后引出线路1到母线B,母线B再引出线路2到母线C。这种单侧电源结构是理解三段式配合最干净的场景,没有一个分支干扰,配合关系一目了然。
系统参数如下表:
| 参数 | 符号 | 数值 |
|---|---|---|
| 系统额定线电压 | Un | 110 kV |
| 相电势 | E_ph | 63.5 kV(110/√3) |
| 最大运行方式系统阻抗 | Zs.min | 2 Ω |
| 最小运行方式系统阻抗 | Zs.max | 4 Ω |
| 线路1长度 | L1 | 30 km |
| 线路2长度 | L2 | 40 km |
| 线路单位阻抗 | x | 0.4 Ω/km |
| 线路1阻抗 | Z1 | 12 Ω |
| 线路2阻抗 | Z2 | 16 Ω |
| 最大负荷电流 | I_Lmax | 500 A |
这里两个概念必须明确。最大运行方式指的是系统开机最多、等值阻抗最小的情况,此时短路电流最大,整定“躲开的电流”要用它;最小运行方式指的是系统开机最少、等值阻抗最大的情况,此时短路电流最小,校验灵敏度要用它。所以同一套系统至少要算两组运行方式下的故障电流,四组短路电流值:B母线三相最大、B母线两相最小、C母线三相最大、C母线两相最小。这四组值就是全部整定计算的源头。
1.3 为什么选MATLAB而不是手算或Excel
纯手算不是不行,但一旦参数需要调整,整张计算表要重推一遍,而且保护范围计算涉及沿线扫描故障电流,手算只能取几个离散点。Excel能做表格公式,但画动作特性曲线、做灵敏度扫描都不是强项。MATLAB最大的价值在于三件事:一是脚本可复现,换一套线路参数跑一遍就出全部结果;二是向量化计算非常方便,直接扫描整条线路上每一个点对应的故障电流,保护范围一目了然;三是自带绘图和Simulink仿真,从数值计算到动态验证无缝衔接。尤其当你要给课程设计或者工程计算留一份可追溯的计算书时,脚本比手算草稿纸可靠得多。
2. 整定计算原理拆解:每个系数背后都有讲究
2.1 一段保护:瞬时动作和“躲末端”的取舍
一段保护在整定上只有一件事:躲开本线路末端(这里是母线B)的最大三相短路电流。
整定公式很简单:
I_op1 = K_rel1 × I_kB.max
这个K_rel1可靠系数取1.2到1.3,常见取1.3。为什么要这么大?因为要考虑电流互感器的传变误差、继电器本身的动作误差、非周期分量对有效值计算的影响,还要留一点裕度应对故障电流计算时的工程近似。取值太大保护范围会缩水,太小又可能误动。我这里的算例取1.3。
代入数值:
I_op1 = 1.3 × 4.536 = 5.897 kA,取整定值5.90 kA。
有了定值,紧接着必须校验保护范围。一段保护的“看得见”范围,就是故障电流恰好大于等于定值的那些点。当故障点离电源越远,短路电流越小,到某一个位置电流等于定值,这个位置就是保护的末端。由此可以反推最远能保护到哪里:
最大运行方式下的最大保护范围,用三相短路电流曲线求交点:
L_max = (E_ph / I_op1 − Zs.min) / x = (63.5 / 5.897 − 2) / 0.4 = 21.9 km,约占线路1全长的73%。
最小运行方式下的最小保护范围,用两相短路电流曲线求交点:
L_min = (0.866 × E_ph / I_op1 − Zs.max) / x = (55.0 / 5.897 − 4) / 0.4 = 13.3 km,约占44%。
工程上通常要求最小保护范围不小于线路全长的15%~20%。这里44%相当富余,一段保护合格。如果某条短线路的最小保护范围算出来不足15%,那就得考虑一段保护是否还有存在的必要,或者干脆换保护方案,这个后面在问题排查部分再展开。
2.2 二段保护:用0.5秒换来的全线路覆盖
一段保护到末端就“看不见”了,那线路末端故障谁来切?二段保护。它的定值按躲过相邻线路出口(母线C)的最大三相短路电流来整定,这样它不会越过母线C去和更下游的线路冲突:
I_op2 = K_rel2 × I_kC.max
K_rel2配合系数一般取1.1到1.2,这里取1.1。
代入数值:
I_op2 = 1.1 × 2.117 = 2.329 kA,取整定值2.33 kA。
校验二段的核心指标是灵敏度系数:在被保护线路末端(母线B)发生金属性短路时,二段必须可靠动作,要求K_sen ≥ 1.3到1.5。灵敏度用最小运行方式下的最小短路电流来算,因为这是最恶劣的情况,它都来得及动作,其他情况更没问题:
K_sen2 = I_kB.min / I_op2 = 3.437 / 2.329 = 1.48
1.48大于1.3,通过。如果这个值不通过,处理办法不是硬调定值,而是考虑二段与相邻线路的二段配合(即躲相邻线路二段的保护范围末端),用更长的动作时间去换更低的定值和更高的灵敏度,这个思路在工程里很常见。
二段的动作时间要和相邻线路的一段保护配合。相邻线路的一段是瞬时动作,所以二段只需要在它的基础上加一个时间级差Δt,一般取0.3到0.5秒。这里取0.5秒,留足继电器动作离散时间、断路器动作时间和返回时间的裕度。
2.3 三段保护:返回系数、自启动系数与阶梯时延
三段过电流保护的定值要比最大负荷电流高,但它要保护的“故障”又远比负荷电流小得多,所以关键是把负荷电流和故障电流之间的窗口用足。整定公式:
I_op3 = (K_rel3 × K_ss / K_res) × I_Lmax
三个系数各有来头。K_rel3可靠系数取1.15到1.25。K_ss自启动系数反映故障切除后电动机同时自启动造成的电流增大,纯电阻负荷取1,工业负荷有大量电动机时取1.5到3,这里按比较常规的工业负荷场景取1.5。K_res返回系数是继电器本身的特性参数,电磁型继电器返回系数低,大约0.85到0.9,微机保护可以做到0.9到0.95。需要强调,返回系数的物理意义是:故障切除后电流回落到负荷水平,继电器必须能返回,否则它会一直保持动作状态造成误跳。所以返回系数必须小于1,并且要放进分母,很多新手第一次算就在这里栽跟头。
代入数值:
I_op3 = (1.2 × 1.5 / 0.85) × 0.5 = 1.059 kA,取整定值1.06 kA。
三段要做两组灵敏度校验。近后备,本线路末端B母线两相短路时要求K_sen ≥ 1.5;远后备,相邻线路末端C母线两相短路时要求K_sen ≥ 1.2:
K_sen3.near = 3.437 / 1.059 = 3.24 K_sen3.far = 1.718 / 1.059 = 1.62
两组都通过。三段动作时间按阶梯原则,比二段多一个级差,取1.0秒。阶梯时限的核心逻辑是:越靠近电源侧,保护动作时间越长,这样才能保证故障由最靠近故障点的保护先切除,不会越级跳闸。
3. MATLAB实操:从短路电流到三段数值全部落地
3.1 短路电流计算脚本化
短路电流是整定计算的源头,脚本第一步就把四个关键电流值全部算出来。注意这里单位统一用kV、kA、Ω,电压和电流相除恰好得到阻抗,不容易出错。
% ===== 系统参数 ===== Un = 110; % 额定线电压 kV E_ph = Un / sqrt(3); % 相电势 63.5 kV Zs_min = 2; % 最大运行方式系统阻抗 Ω Zs_max = 4; % 最小运行方式系统阻抗 Ω x = 0.4; % 线路单位阻抗 Ω/km L1 = 30; % 线路1长度 km L2 = 40; % 线路2长度 km Z1 = x * L1; % 线路1阻抗 12 Ω Z2 = x * L2; % 线路2阻抗 16 Ω % ===== 短路电流计算 ===== IkB_max = E_ph / (Zs_min + Z1); % B母线三相最大 4.536 kA IkB_min = 0.866 * E_ph / (Zs_max + Z1); % B母线两相最小 3.437 kA IkC_max = E_ph / (Zs_min + Z1 + Z2); % C母线三相最大 2.117 kA IkC_min = 0.866 * E_ph / (Zs_max + Z1 + Z2); % C母线两相最小 1.718 kA这里插一嘴0.866系数的来源。两相短路的故障回路里串着两相阻抗,故障电流等于线电压除以2倍总阻抗,而线电压是相电势的√3倍,化简之后正好是√3/2倍的三相短路电流,即0.866倍。这个换算只适用于金属性相间短路,用于灵敏度校验是最常规的做法。如果考虑过渡电阻,短路电流会更小,工程整定基本还是按金属性短路算,把裕度留给可靠系数。
3.2 三段整定计算与数值输出
接着把三段定值算出来,脚本里直接打印结果:
% ===== 一段保护整定 ===== Krel1 = 1.3; Iop1 = Krel1 * IkB_max; % 5.90 kA % ===== 二段保护整定 ===== Krel2 = 1.1; Iop2 = Krel2 * IkC_max; % 2.33 kA t2 = 0.5; % 0.5 s % ===== 三段保护整定 ===== ILmax = 0.5; % 最大负荷电流 kA Krel3 = 1.2; Kss = 1.5; Kres = 0.85; Iop3 = (Krel3 * Kss / Kres) * ILmax; % 1.06 kA t3 = 1.0; % 1.0 s % ===== 打印整定结果 ===== fprintf('=== 三段式电流保护整定结果 ===\n'); fprintf('一段: Iop1 = %.2f kA, 动作时间 瞬时\n', Iop1); fprintf('二段: Iop2 = %.2f kA, 动作时间 t2 = %.1f s\n', Iop2, t2); fprintf('三段: Iop3 = %.2f kA, 动作时间 t3 = %.1f s\n', Iop3, t3);跑出来的结果汇总就是:
| 保护段 | 动作电流 | 动作时间 | 主要校验指标 |
|---|---|---|---|
| 一段 | 5.90 kA | 瞬时(固有动作时间) | 最小保护范围44% ≥ 15% |
| 二段 | 2.33 kA | 0.5 s | 灵敏度1.48 ≥ 1.3 |
| 三段 | 1.06 kA | 1.0 s | 近后备3.24 ≥ 1.5,远后备1.62 ≥ 1.2 |
3.3 保护范围与灵敏度自动校验
整定计算最忌讳“算完就交差”,每一段定值出来必须紧跟校验。我用脚本把校验过程固化了,无论怎么改参数,都能立刻看到哪些项目合格、哪些不合格:
% ===== 一段保护范围校验 ===== Lmax1 = (E_ph / Iop1 - Zs_min) / x; % 最大保护范围 km Lmin1 = (0.866 * E_ph / Iop1 - Zs_max) / x; % 最小保护范围 km pct_min = Lmin1 / L1 * 100; fprintf('一段最大保护范围 %.1f km (%.0f%%), 最小保护范围 %.1f km (%.0f%%)\n', ... Lmax1, Lmax1/L1*100, Lmin1, pct_min); % ===== 二段灵敏度校验 ===== Ksen2 = IkB_min / Iop2; fprintf('二段灵敏度 Ksen = %.2f %s\n', Ksen2, ... ternary(Ksen2 >= 1.3, '合格', '不合格')); % ===== 三段灵敏度校验 ===== Ksen3_near = IkB_min / Iop3; Ksen3_far = IkC_min / Iop3; fprintf('三段近后备灵敏度 %.2f, 远后备灵敏度 %.2f\n', ... Ksen3_near, Ksen3_far);注意这段代码里的ternary函数只是我图省事写的辅助判断,实际脚本里直接用if语句即可。校验逻辑本身很简单,但把它固化在脚本里价值很大,换系统参数重算时不用再人工核对一遍指标。
3.4 动作特性曲线可视化
数值都算出来了,画图才能直观看到三段保护从“看不见”到“兜底”的完整逻辑。我用两张图。
第一张是阶梯式时间-电流特性曲线,横轴故障电流,纵轴动作时间。三段保护各是一条阶梯线:一段定值5.90kA以上瞬时动作,二段定值2.33kA以上0.5秒动作,三段定值1.06kA以上1.0秒动作。画出来就是经典的三级阶梯,选型配合关系一眼就懂。
figure('Color', 'w'); hold on; Imax = 7; % 一段 plot([0 Iop1 Iop1 Imax], [0 0 0.02 0.02], 'b-', 'LineWidth', 1.8); % 二段 plot([0 Iop2 Iop2 Imax], [0 0 0.5 0.5], 'r-', 'LineWidth', 1.8); % 三段 plot([0 Iop3 Iop3 Imax], [0 0 1.0 1.0], 'g-', 'LineWidth', 1.8); xlabel('故障电流 / kA'); ylabel('动作时间 / s'); legend('一段', '二段', '三段', 'Location', 'northwest'); grid on; title('三段式电流保护动作特性');第二张图更有价值:将故障电流随故障距离变化的曲线画出来,同时把三个定值画成水平参考线,曲线和参考线的交点就是各段保护范围的边界。沿线路1从母线A到母线B扫描,每个点算三相机型和两相机型的短路电流,再在图上标注5.90kA、2.33kA、1.06kA三条线,保护范围一眼看穿。
dist = linspace(0, L1, 300); I_max_mode = E_ph ./ (Zs_min + x .* dist); % 最大方式三相 I_min_mode = 0.866 * E_ph ./ (Zs_max + x .* dist); % 最小方式两相 figure('Color', 'w'); hold on; plot(dist, I_max_mode, 'k-', 'LineWidth', 1.5); plot(dist, I_min_mode, 'k--', 'LineWidth', 1.5); yline(Iop1, 'b-', 'Iop1=5.90'); yline(Iop2, 'r-', 'Iop2=2.33'); yline(Iop3, 'g-', 'Iop3=1.06'); xlabel('故障点距离母线A的距离 / km'); ylabel('短路电流 / kA'); legend('三相最大', '两相最小', 'Location', 'northeast'); grid on; title('线路1沿线短路电流与保护定值对比');从图上可以看到,三相最大方式下的电流曲线与一段定值的交点在21.9km处,两相最小方式下的电流曲线与一段定值的交点在13.3km处,中间这段区域就是一段保护的“盲区”,由二段在0.5秒后兜住。这种可视化对理解整定配合的帮助,比盯着数字大得多。
4. 仿真验证:故障位置变化时保护怎么动作
4.1 Simulink输电线路短路仿真模型搭建
数值整定只是第一步,真正的验证要靠动态仿真。我在Simulink里用Simscape Electrical特高压电气系统模块库搭了一套系统模型,模块是标准的几个:三相电源(Three-Phase Source)、三相串联RLC支路(模拟两段线路)、三相故障模块(Three-Phase Fault)、三相电压电流测量模块和powergui。保护逻辑我没有刻意用复杂的保护继电器库,而是用一个MATLAB Function模块写三段判断逻辑,这样定值和时间逻辑和前面的整定脚本完全一致,便于对照。
保护逻辑的核心思路很简单:
- 实时测量线路1首端电流,计算三相电流有效值。
- 一段判断:I_rms > 5.90kA,瞬时发出跳闸信号。
- 二段判断:I_rms > 2.33kA,连续保持0.5秒后跳闸。
- 三段判断:I_rms > 1.06kA,连续保持1.0秒后跳闸。
这里有个细节值得提醒:仿真里整定值是用有效值,而测量模块输出的是瞬时值,在Simulink里直接拿瞬时值和定值比较一定会出错,必须先用均方根模块或者自写函数把有效值算出来。具体做法可以给一段信号加一个滑动窗口均方根计算,窗口取一个工频周期20毫秒即可。
4.2 三组典型故障下的动作时序
模型搭好后,我设了三组典型故障,覆盖三段保护各自的“主责区”:
| 故障位置 | 故障电流 | 应该动作的保护段 | 预期动作时间 |
|---|---|---|---|
| 线路1中点(距首端15km) | 约7.94 kA | 一段 | 约20~40ms(含固有动作时间) |
| 线路1末端B母线 | 4.54 kA | 二段 | 0.5 s |
| 线路2末端C母线 | 2.12 kA | 三段(远后备) | 1.0 s |
仿真结果和理论计算完全吻合。线路1中点故障时,电流远大于一段定值,一段立即出口,故障在几十毫秒内切除。B母线故障时,电流4.54kA小于一段定值5.90kA,一段不动作,但大于二段定值2.33kA,0.5秒后二段出口。C母线故障时,电流2.12kA小于二段定值2.33kA,二段也不动作,最终由三段在1.0秒切除。
这个仿真结果其实就是在“重新验证”整定逻辑本身:每一段都能在自己的保护区里动作,同时不会越界去抢下一段保护的活。三段式电流保护的配合精髓,到这里算是闭环了。
4.3 从仿真结果回看整定逻辑
仿真跑完,有几个观察值得写下来。
第一,一段保护故意对末端故障“视而不见”。B母线故障电流4.54kA明明远大于负荷电流,但一段就是不动作,这是选择性的代价:它不能因为追求灵敏度而越出本线路,否则下一段线路的故障它也会跳,选择性就破了。这就是为什么“一段保护范围只有线路全长的一部分”不是设计缺陷,而是设计本意。
第二,二段的0.5秒不是拍脑袋定的。它要大于断路器固有分闸时间、保护继电器固有动作时间以及可能出现的误差离散,还要保证相邻线路一段保护在0秒动作切除故障后,本线路二段有时间返回,不会误跳。0.3到0.5秒这个窗口是工程经验沉淀下来的。
第三,三段保护的动作时间最长,但它保护的范围也最宽。它要从本线路最远端看到相邻线路末端,灵敏度要求反而最低,因为作为后备保护,它是在主保护失效后才出场的。
5. 常见问题与调试技巧实录
5.1 灵敏度不满足要求怎么办
我见过很多人在二段灵敏度不够的时候第一反应是降低配合系数,从1.1降到1.05,甚至更低。这条路不能乱走,可靠系数低于1.1以后再叠加互感器误差和继电器误差,可靠性就没保证了。正确的方向有两个:一是换配合对象,二段不再躲相邻线路出口电流,而是与相邻线路的二段保护配合,即定值按躲相邻线路二段保护范围末端的短路电流整定,动作时间比相邻线路二段大一个Δt。这样定值可以降下来,灵敏度自然就上去了,代价是动作时间变长。二是如果灵敏度还是不够,说明这种保护原理在这个系统结构下本身就力不从心,该考虑距离保护或者纵联差动,不要硬撑。
5.2 一段保护范围太小怎么调
一段保护范围小的根源是线路太短或者系统阻抗太大,故障电流沿线衰减不明显,定值稍一抬高,保护范围就缩得很厉害。遇到这种情况,先检查可靠系数是不是取得太保守,比如1.3可以尝试按1.25甚至1.2校核,但下限不能低于1.2。如果调整系数后最小保护范围仍然不足15%,这段线路的一段保护基本就是摆设,要考虑别的保护原理了。我在实际算例里也刻意选了一个系统阻抗适中的算例,就是为了让一段范围落在合理的70%左右,避免出现保护范围过小的尴尬。
5.3 单位换算、有效值和0.866:最容易翻车的三个细节
这三个坑我必须单独拎出来说,因为我在调试时每一个都踩过。
第一是单位。短路电流计算公式里,电压用kV、电流用kA、阻抗用Ω,三者是自洽的,因为kV除以kA等于Ω。有人习惯把电压换算成V,电流用A,那阻抗单位就要注意,混用很容易差10的幂次。
第二是有效值和瞬时值。整定值是基于有效值定义的,而保护的测量系统最终也是按有效值来判断的。仿真中如果用瞬时值做阈值比较,正弦波过零点附近会出现频繁翻转,定时器根本没法正常工作。务必先算RMS,再比较。
第三是0.866的适用场景。它只适用于金属性两相短路,而且只适用于对称分量法里正序阻抗等于负序阻抗的情况。如果线路模型里考虑了序分量差异、或者故障带弧光电阻,这个系数就不能直接套用,需要按序网络重新推导短路电流公式。
5.4 常见问题速查表
| 现象 | 可能原因 | 处理思路 |
|---|---|---|
| 一段保护范围过小 | 线路短、系统阻抗大、Krel1偏大 | 复核可靠系数下限,考虑换保护原理 |
| 二段灵敏度不足 | 定值偏高、相邻线路过长 | 改与相邻二段配合,或考虑距离保护 |
| 三段误动于负荷电流 | 定值低于最大负荷电流、返回系数取值错误 | 复核I_Lmax和Kss、Kres |
| 时间配合不了 | Δt太小、断路器时间离散 | Δt不小于0.3s,校核各环节时间裕度 |
| 仿真与手算结果相差很大 | 瞬时值直接比较、线路R/X参数、故障电阻 | 用RMS比较,检查模型阻抗是否与整定一致 |
再补充一个个人的操作习惯:每次整定完成,我都习惯把短路电流源数据、整定公式、校验结果三块内容放在同一份脚本里,并且用fprintf输出成一份完整报告。这样无论多久之后回来看,都能知道每个数值是从哪个参数来的、经过哪道公式算出来的。整定计算最怕的就是只留一个定值结果,不留计算过程,后面复核或者改参数时全凭猜。
这次算例跑完之后,我最大的感受是:三段式电流保护的原理不难,难的是把每个系数背后的物理逻辑吃透,并且把校验流程做成系统化的脚本。数值全部算出来只是起点,校验全部通过、仿真验证配合时序无误,这个项目才算真正落地。