做配电网继电保护的人,几乎都被小电流接地选线折磨过,这个说法一点不夸张。单相接地故障在配电网总故障里能占到八成左右,而小电流接地系统(中性点不接地或经消弧线圈接地)的故障电流往往只有几安到几十安,三条出线、五条出线的零序电流差之毫厘,选线装置稍有犹豫或误判,运维人员就得逐条线路拉闸试找,甚至为一次误判跑遍整条馈线。这是一个非常典型、非常现实,又长期没有完美答案的工程问题。MATLAB仿真在这个问题里的价值,不是给你一个“完全正确的选线神器”,而是用Simulink把配电网、接地故障、消弧线圈、候选选线判据完整搭起来,用可控的方式反复“制造故障”,从而把选线原理、算法边界、参数影响全部看清楚。这篇文章我就围绕小电流接地故障及故障选线,完整讲讲我在MATLAB里做仿真探究的思路、模型搭建方法、几种主流选线算法的实现细节,以及我踩过的坑和调试心得。无论你是刚接触这个方向的在校学生,还是正在做选线装置算法验证的工程师,这套流程都值得参考。
1. 为什么小电流接地选线是老大难,以及MATLAB仿真能帮上什么忙
1.1 小电流接地故障到底难在哪
先梳理一下问题背景。我国6-35kV配电网大量采用中性点不接地或经消弧线圈接地的方式,统称小电流接地系统。这种接地方式的初衷是:发生单相接地故障时,故障点电流被中性点对地回路限制得很小,系统线电压仍然保持对称,可以带故障继续运行一到两个小时,为调度争取处理时间。但“能带故障运行”的另一面,就是“故障特征太微弱”,微弱到常规过流保护根本没有办法可靠识别。
具体难在三个层面。第一,故障电流小。金属性接地时,故障电流就是全系统对地电容电流之和,通常在几安到几十安,消弧线圈投入后还会被进一步补偿,稳态基波分量几乎被抵消干净。第二,故障特征不稳定。实际接地故障里电弧接地占很大比例,电弧的燃弧、熄弧过程会产生大量非周期分量和高频分量,波形乱、特征飘,用固定阈值判断很容易失效。第三,现场扰动大。电磁干扰、负荷波动、互感器误差叠加在一起,零序电流互感器二次侧往往只有毫安级信号,信噪比很低。
所以这个问题的本质是“弱信号下的可靠模式识别”。这决定了我们不能只靠单一判据,而是要把稳态特征、暂态特征、注入信号特征结合起来,在不同工况下做对比验证。而真机实验很难做,故障点不好布置、故障类型不可控、重复性差,实验室里造一个真实的弧光接地故障代价很高。这时候仿真就成了最现实的研究手段。
1.2 MATLAB仿真在这个问题里的定位
用MATLAB/SIMULINK做小电流接地故障仿真,行业内已经是非常主流的方式了。它最大的优势是可控性和重复性。你能精确控制故障时刻、故障相、过渡电阻、故障距离、消弧线圈补偿度、线路参数,几个小时之内就能跑出上百组故障样本,这是现场实验完全做不到的。
另一个优势是算法验证链路完整。从Simulink里把零序电压、零序电流波形导出来,可以直接进MATLAB脚本做FFT、小波分析、特征提取、选线判别,整个流程在同一个环境里闭环,不需要来回导数据。你还可以借助MATLAB的批量仿真能力,把过渡电阻从1欧扫到5000欧,把故障初相角从0度扫到90度,自动统计选线准确率,这相当于给选线算法做了一次系统性的压力测试。
当然,仿真也有它的局限性,这一点我后面会专门说。仿真模型再精细,也不可能完全复现现场的电弧物理过程、线路分布电容的复杂耦合、互感器的饱和特性。所以我的定位一直很明确:仿真用来验证原理、评估算法、暴露边界,但它代替不了现场录波数据和动模实验。把MATLAB仿真当作“放大镜”而不是“铁证”,这个心态很重要。
2. 配电网仿真模型搭建:从参数整定到故障控制
2.1 模型总体结构设计
Simulink里搭配电网接地故障模型,我建议按“电源-变压器-母线-多条出线-故障模块-接地方式”的标准结构来组织。电源用Three-Phase Source,变压器用Three-Phase Transformer(Two Windings),出线用Three-Phase PI Section Line,故障用Three-Phase Fault,测量用Three-Phase V-I Measurement,然后把零序分量计算模块、波形输出模块挂在后面。
为什么用PI Section Line而不用分布参数线路?我的经验是:对于10kV配电网、几十公里以内线路,集中参数π型模型已经足够反映零序电流的主要特征,而且仿真速度更快、收敛性更好。如果你想研究行波法选线,那才需要考虑更精确的分布参数模型或频变模型。选线研究里90%的场景,π型模型就够了。
系统规模方面,我常用的配置是三条出线,长度分别取10km、15km、20km。三条线长度拉开的好处是让各线路零序电流大小有明显差异,方便观察幅值比较法的判别逻辑。如果你想研究“线路参数相近导致选线困难”的场景,可以把三条线长度都设成接近的数值,比如12km、13km、14km,这时候幅值差异很小,对算法分辨能力的要求会明显提高。
2.2 线路参数与消弧线圈的整定计算
线路参数直接决定零序电流的大小和相位,不能随便填。我习惯用一组典型的10kV架空线路参数:
- 正序电阻R1 = 0.01273 Ω/km,正序电感L1 = 0.9337e-3 H/km,正序电容C1 = 12.74e-9 F/km
- 零序电阻R0 = 0.3864 Ω/km,零序电感L0 = 4.1264e-3 H/km,零序电容C0 = 7.751e-9 F/km
这组参数在电力系统分析教材和IEEE测试系统里都很常见,用来做原理性验证完全靠谱。你在Simulink的Three-Phase PI Section Line模块里直接填这几组R、L、C就行。
消弧线圈的参数需要计算。线圈接在变压器中性点和地之间,作用是补偿系统对地电容电流。系统总的对地电容是三条线路零序电容之和,即CΣ = C0 × (10+15+20) km = 7.751e-9 × 45 = 3.488e-7 F。全补偿时电感为L = 1/(3ω²CΣ),代入ω = 2π×50 = 314.16 rad/s,得到L ≈ 9.68 H。工程上为了避免谐振过电压,实际运行采用过补偿方式,补偿度取5%-10%,也就是脱谐度v = 1.05-1.1,对应的电感L = 9.68 / 1.08 ≈ 8.96 H(按8%过补偿算)。在Simulink里直接用串联RLC支路,填这个电感值就行,阻尼电阻可以并联一个相当于消弧线圈有功损耗的电阻,一般取系统容抗的10倍以上,具体取值对选线结果影响不大。
2.3 故障模块与测量环节的设置要点
Three-Phase Fault模块要特别注意两点。第一是过渡电阻,通过设置Fault Resistance来实现,金属性接地填0.001Ω,实际研究时把它定义成变量Rf,方便批量扫描。第二是故障时序,模块里的Transition Time参数是一个向量,分别对应A、B、C三相的故障开始时间,例如我要在第0.05s让A相接地、0.15s切除,就设为[0.05 0 0]?不对,要仔细想清楚。
这里容易踩坑。Three-Phase Fault的Transition Time向量表示每相“状态切换的时间点”,但到底是切到故障还是切回正常,取决于你选择的开关方式。如果要模拟持续0.1s的单相接地故障,更稳妥的做法是设置两组时间:一组让A相在0.05s由断开状态切到接地状态,另一组在0.15s恢复。实际操作中我会用外部控制信号来驱动故障模块,或者直接用两个并联的故障模块配合不同时间点,这样逻辑更直观。总之,务必先跑一个短仿真确认故障模块的动作时序符合预期,再开始正式批量仿真,否则后面所有数据都是错的。
测量环节要用Three-Phase V-I Measurement分别测量母线侧的三相电压和各出线首端的三相电流。零序分量不要直接在Simulink里用数学模块拼,建议把三相波形送到工作区,再用MATLAB脚本算零序,步骤更清晰,也方便后续做FFT和小波分析。从公式上看,零序电压u0 = (ua+ub+uc)/3,零序电流i0 = (ia+ib+ic)/3,这个变换在MATLAB脚本里一行代码就出来了。
3. 几种主流选线算法在MATLAB中的实现
3.1 稳态选线法:幅值比较与相位比较
稳态选线法的逻辑基础是:中性点不接地系统发生单相接地时,非故障线路的零序电流等于本线路对地电容电流,方向从母线流向线路;故障线路的零序电流等于所有非故障线路对地电容电流的相量和,方向从线路流向母线。换句话说,故障线路的零序电流幅值最大、相位与非故障线路相反。
基于这个原理,最直接的做法就是幅值比较法。仿真得到各线路零序电流波形后,取故障后第二到第三个周波的稳态段数据,做FFT提取基波幅值,选幅值最大的线路作为故障线路。我实测下来,在不接地系统、过渡电阻较小(小于500Ω)的情况下,这个方法选线准确率相当高,基本不会出错。但一旦过渡电阻增大到几千欧,或者故障点距离很远导致零序电流很小,幅值差异就会被噪声淹没,误选率明显上升。
相位比较法和零序功率方向法本质上思路一样,都是利用“故障线路与非故障线路零序电流方向相反”这一特征。实现时先通过FFT求出各线路零序电流的相位,再和零序电压的相位作比较,功率方向与众不同的那一条就是故障线路。在Simulink里可以直接用PLL锁相环模块提取相位,但我更推荐在MATLAB脚本里用angle函数计算,因为离线分析时可以直观检查每条线路的相位关系,方便定位问题。幅值和相位两个判据组合起来,就是工程上常说的“群体比幅比相法”。
这里必须强调稳态法的致命弱点:一旦中性点经消弧线圈接地,且采用过补偿运行方式,故障线路的稳态零序电流会被消弧线圈补偿得很小,而且相位发生反转,不再和非故障线路相反。这时候幅值最大、相位相反的规律被破坏,稳态法直接失效。我在仿真里第一次看到这个现象时印象非常深刻——故障线路的零序电流幅值比非故障线路还小,相位也“站到”了非故障线路那边,整个判断逻辑被彻底颠覆。
3.2 暂态选线法:首半波与五次谐波
暂态法观察的是故障发生瞬间的暂态过程,而不是稳态信息。单相接地发生时,故障相电压突变,通过故障点向系统注入一个近似阶跃的电压扰动,在零序回路中激发高频振荡电流。这个暂态电流的幅值比稳态电容电流大几倍到十几倍,而且消弧线圈在暂态高频下感抗很大,几乎不会对暂态分量产生补偿作用,所以暂态法在消弧线圈接地系统中依然有效。
最简单的是首半波法。故障后的第一个半波内,故障线路零序电流的极性和非故障线路相反,利用这个特征可以在故障后极短时间内完成选线。实现思路是:截取故障后半个周波(10ms)内的零序电流,检测第一个峰值的方向,故障线路的峰值符号与其他线路相反。不过首半波受故障初相角影响很大——如果故障发生在电压过零点附近,暂态能量很小,首半波特征不明显;如果故障伴随电弧重燃,首半波可能出现多次翻转,判据可靠性下降。
五次谐波法处理的是消弧线圈补偿问题。消弧线圈只在基波频率下发生谐振补偿,对五次谐波(250Hz)而言,它的感抗是基波时的5倍,而系统对地容抗是基波时的1/5,所以消弧线圈对五次谐波的补偿作用可以忽略。换句话说,五次谐波分量下系统近似于不接地状态,原来的幅值和相位规律又回来了。实现时先对零序电流做FFT,提取250Hz分量的幅值和相位,再按不接地系统的判据选线。这个方法原理上很漂亮,但工程上有个现实问题:正常运行时五次谐波含量不稳定,非故障线路自身也可能产生不小的五次谐波,导致误判率偏高。所以在我的仿真探究里,五次谐波法更适合作为辅助判据,而不是独立选线手段。
3.3 暂态特征强化:小波变换选线的实现细节
小波变换是我个人最推荐的暂态选线手段,也是我在这个项目里花时间最多的部分。小波分析的优势在于它同时保留时域和频域信息,能把故障暂态分量按频率尺度分解开,提取出最能体现故障特征的高频分量。
具体实现步骤是这样的:仿真结束后,把故障后一个周波(20ms)的零序电流序列拿出来,用小波函数做多层分解。我常用db4或db10小波,分解层数取3到5层。MATLAB里核心代码就是wavedec和detcoef:
% 小波分解:i0_each 为某条线路的零序电流信号 [C, L] = wavedec(i0_each, 4, 'db4'); % 提取第3层细节系数 d3 = detcoef(C, L, 3); % 计算该层细节系数的能量 energy_d3 = sum(d3.^2);对小波分解后的细节系数计算能量,比较各线路在特征频带的能量大小。故障线路在故障暂态过程中会汇集全系统对地电容的放电能量,其高频暂态能量通常明显大于非故障线路,据此即可判别故障线路。
在实现时要特别注意两个问题。第一,特征频带的选择不是固定的。采样频率、线路长度、故障电阻都会影响暂态主能量的分布频率。我习惯先画出各线路零序电流的小波系数图,肉眼观察哪个尺度的差异最明显,再固定下来用于批量测试。第二,小波系数的符号也有判别价值。在特定频带内,故障线路的小波系数模极大值极性与非故障线路相反,极性和幅值两个特征可以联合使用,进一步提高选线置信度。
还有一个实用的小技巧:批量仿真时,不要每次都在Simulink里跑完再用脚本分析,而是写一个主脚本,用循环或parfor批量修改故障电阻、故障初相角、故障线路编号等参数,依次调用sim(‘mdl_name’),把各线路零序电流保存到结构体里,最后统一做特征提取和选线判别。这套流程跑通后,你可以在几分钟内完成上百组故障样本的选线统计,这也是MATLAB做这项研究最大的效率优势。
4. 典型仿真结果与选线效果对比
4.1 中性点不接地系统的仿真特征
先看不接地系统。以三条出线(10km、15km、20km)为例,第0.05s令第2条线路A相经10Ω电阻接地。故障发生后,母线零序电压迅速升高,接近相电压幅值,三条线路的零序电流都出现明显的暂态冲击,随后进入稳态。
这个场景下,三条线路的稳态零序电流幅值呈现出很清晰的规律:非故障线路(10km和20km)的零序电流分别约为1.1A和2.2A,故障线路(15km)的零序电流约为3.3A,正好约等于两条非故障线路之和,这就是“故障线路零序电流等于非故障线路零序电流之和”的直观体现。相位上,两条非故障线路的零序电流超前零序电压约90度,而故障线路滞后零序电压约90度,方向完全相反。此时用群体比幅比相法,选线结果非常明确,不会产生歧义。
把过渡电阻升高到1000Ω后,稳态电流整体下降,故障线路与非故障线路的幅值比值基本保持不变,选线依然有效。这说明在不接地系统中,稳态法在相当大的过渡电阻范围内都有较好的可靠性。但当我继续把过渡电阻升高到3000Ω以上时,各线路零序电流的幅值差异变得很小,加上仿真模型里的数值噪声,误选概率开始上升。这时候需要结合暂态分量来辅助判别。
4.2 经消弧线圈接地系统的仿真特征
把中性点对地接入按8%过补偿整定的消弧线圈(L ≈ 8.96H),重复上述故障设置,你会看到完全不同的现象。故障线路15km的稳态零序电流明显减小,因为消弧线圈补偿掉了大部分系统对地电容电流,剩余部分只有补偿残流。更关键的是,故障线路零序电流的相位从“滞后电压90度”变成了“超前电压90度”,与非故障线路不再相反,幅值也不再是最大。你如果用幅值比较法去选,会直接误选到20km那条线上去。这个仿真结果完美解释了为什么早期基于稳态量的选线装置在消弧线圈接地系统里表现很差。
但看故障瞬间的暂态过程,差异依然显著。用db4小波对故障后20ms的零序电流做4层分解,提取第3层细节系数(对应频带约625-1250Hz),故障线路的细节系数能量大约是两条非故障线路的3到5倍,极性也明显相反。这说明暂态法在消弧线圈接地系统里依然有很强的判别力,这也是小波选线、暂态选线在工程上被广泛研究的原因。
需要特别注意的是,故障初相角对暂态选线效果的影响非常大。我在仿真里对比了A相电压峰值时刻和过零时刻发生故障两种情况:峰值时刻故障,暂态冲击强烈,小波能量差异显著,选线毫无压力;过零时刻故障,暂态能量急剧下降,各线路小波能量差异变小,选线可靠性明显下降。工程上为了应对这种工况,通常会结合稳态分量或注入信号法来做兜底,而不是单独依赖暂态判据。
4.3 批量测试与选线效果统计
为了系统评估算法性能,我用批量脚本做了这样的测试:故障线路依次设为第1/2/3条,过渡电阻取1Ω、100Ω、500Ω、1000Ω、3000Ω、5000Ω,故障初相角取0度、30度、60度、90度,每个组合跑一次仿真,分别用幅值比较法、五次谐波法和db4小波暂态能量法做选线,统计各自的准确率。
结果和理论分析高度吻合。在不接地系统中,幅值比较法在过渡电阻小于1000Ω时准确率接近100%,超过3000Ω后下降到70%左右;五次谐波法在消弧线圈接地系统中表现出一定的稳定性,但整体准确率只有85%左右;小波暂态能量法在两种接地方式下准确率都维持在95%以上,但在故障过零时刻附近准确率会掉到80%以下。这些数字说明,没有一种方法是万能的,实际装置里多判据融合是必须的。
仿真中我还发现一个值得注意的现象:在消弧线圈接地系统里,如果消弧线圈的补偿度从8%调整到5%或者10%,故障线路的稳态残流会变化,但小波暂态能量法几乎不受影响,因为暂态过程主要由系统电容放电决定,与消弧线圈的工频补偿关系不大。这从物理上解释了为什么暂态选线法在工程上比稳态法更有生命力。
5. 常见问题与调试实录
5.1 Simulink仿真层面的坑
这个项目里最常见的仿真问题有三个。第一个是仿真速度慢。模型本身不大,但如果你把仿真步长设得太小、仿真时长设得太长,计算量会成倍增加。我常用的配置是:仿真时长0.2s,变步长求解器用ode23tb,最大步长设为1e-4s,这样既能捕捉到暂态高频分量,又不会慢到让人失去耐心。如果你的模型里有多个PI线路段串联,尽量合并成少数几个较长的PI段,也能明显提升速度。
第二个问题是故障模块时序混乱。我前面提到过,Three-Phase Fault的Transition Time向量对新手很不友好,经常出现“想模拟0.05s单相接地,结果三相都跳了”或者“故障根本没发生”的情况。建议在正式仿真前先用Scope确认故障模块的输出波形,或者用外部控制信号驱动故障模块,这样时序完全可控,也方便设置不同的过渡电阻。
第三个问题是零序分量计算错误。很多人直接用Simulink的加法器做三相求和再除以3,结果发现波形不对。原因通常是三相信号来自不同的测量模块,采样时刻或单位不一致。我建议统一用Three-Phase V-I Measurement的Output units选项,并把三相电流用Demux拆开,确认单位和采样时间一致后再做运算。实在不放心,可以把计算出的零序电流和理论值对比一下:不接地系统正常运行时零序电流应该几乎为零,故障后才出现明显分量。
5.2 算法层的调试心得
小波分析这块,新手最容易犯的错是分解层数不经过验证就固定下来。不同采样频率下同一物理频带对应的尺度层完全不同,照搬论文里的参数往往会得到很差的结果。我的做法是:对故障波形做多层分解,把每一层的细节系数都画出来,比较故障线路和非故障线路的差异,选择差异最明显的1-2层作为特征层,再把这个配置固化到批量测试脚本里。这个过程虽然费点时间,但能帮你深入理解你的数据。
还有一个常被忽视的问题是边界效应。用小波分解有限长度的信号时,首尾会出现明显的边界畸变,而故障初始时刻恰好是我们最关心的位置。建议在截取数据时,在故障时刻前后多保留一点裕量,或者用wextend做信号延拓,减少边界效应对模极大值检测的影响。否则你计算出的“首个峰值极性”可能根本不是真实的暂态方向。
幅值比较法里,FFT分析时要把故障后的稳态段和暂态段严格分开。我一般取故障后60ms到120ms之间的数据做FFT,这段时间既能避开合闸暂态,又能避开故障切除过程,得到的基波幅值和相位比较稳定。如果你把故障刚发生那一段也算进去,FFT结果会受到暂态分量的污染,相位计算会偏得离谱。
5.3 快速排查速查表
| 现象 | 可能原因 | 排查方法 |
|---|---|---|
| 仿真速度极慢 | 步长过小,或求解器配置不合理 | 改用ode23tb,最大步长设1e-4 |
| 零序电流为零 | 测量模块接线错误或故障模块未触发 | 先用Scope检查三相电流和故障时序 |
| 波形出现明显毛刺 | 采样时间设置不一致,或存在代数环 | 统一采样时间,加入Rate Transition模块 |
| 小波能量差异不明显 | 分解层数或特征频带选择不当 | 画出各层细节系数,重新选择特征层 |
| 幅值法误选 | 消弧线圈补偿导致稳态特征反转 | 改用暂态法或五次谐波法辅助判别 |
| FFT相位不稳定 | 混入了暂态段或边界效应 | 严格截取稳态段,延拓后再分析 |
| 批量仿真中断 | 某组参数导致仿真不收敛 | 用try-catch包裹sim调用,记录失败参数组 |
5.4 还有几个值得注意的细节
我在做这个项目的过程中,有一个体会特别深:不要过度追求模型的精细程度。Simulink模型不是越复杂越好,复杂的电弧模型、频变线路模型虽然看起来高级,但会引入大量难以解释的中间变量,反而不利于验证选线算法本身的逻辑。先把简单模型下的选线原理搞清楚,再逐步增加复杂度,这是最稳健的路线。
关于电弧接地故障,如果后续想深入研究,可以在Simulink里用Simscape Electrical的Arc模块或自行搭建可控电弧电阻模型,把弧光电压、重燃过程加进去。这一步会显著增加模型复杂度,但能更真实地模拟间歇性电弧接地场景。我建议在完成本文描述的线性故障仿真并跑通全部算法之后,再考虑这个扩展方向。
另外,所有的仿真结果,强烈建议同步保存原始波形数据到MAT文件。选线研究经常需要反复审视不同算法对同一组数据的表现,如果每次都要重跑仿真,非常浪费时间。我自己的习惯是:把仿真参数和波形数据打包存储,命名规则如case_uf_1_l2_rf500_angle90.mat,这样后续做任何新的算法验证,都可以直接取用历史数据,做一个公平的横向对比。
最后说几点个人体会
仿真做了一轮又一轮,我最大的体会是:选线算法真正难的不是数学推导,而是对信号特征的物理感知。小波变换的层数怎么选、特征频带怎么定、幅值阈值取多少,这些看似是“调参”,实际上都依赖于你对故障暂态过程的理解。只有亲自看过不接地系统和经消弧线圈接地系统的零序电流波形差异,明白消弧线圈是如何“吃掉”稳态特征、又对暂态特征无能为力的,你才会真正理解为什么工程上要采用多判据融合,而不是迷信某一个“完美算法”。
MATLAB仿真带给我的另一个价值是“快速试错”。在仿真里你可以大胆地让消弧线圈补偿度从5%一路扫到15%,观察稳态残流和暂态能量的变化规律;你也可以故意把故障初相角设在过零时刻,看看算法在极限工况下的表现。这种高密度试错在真机实验里几乎不可能实现,而在MATLAB里只需要几行循环代码。做仿真探究,就是要充分利用这个优势,把算法的边界摸透,而不是只展示几个“看起来效果很好”的案例。
最后分享一个小建议:如果你正在做相关研究或产品验证,别急着上复杂算法。先花时间把两种接地方式下的暂态和稳态波形老老实实看熟,跑通一套从仿真到特征提取再到选线判别的完整流程,再逐步加入小波、注入信号、机器学习的进阶玩法。基础打牢之后,你会少走很多弯路。
这个方向后续可以扩展的空间其实很大。比如把消弧线圈换成可变电抗器模型,研究动态补偿对选线的影响;或者把选线结果和实际故障录波数据做迁移验证;再或者用MATLAB的App Designer做一个选线仿真平台,把参数设置、仿真运行、结果展示集成到一个界面里,方便做演示和教学。这些都是从这套基础仿真流程上长出来的枝丫,关键是先把根扎稳。