简介:小电流接地系统单相接地故障选线是电力运维中的常见难题,这份PDF论文以MATLAB/Simulink为核心工具,面向电气工程专业学生、继电保护研究人员及配电网运维人员,系统讲解故障选线的仿真研究方法。由于中性点不接地或经消弧线圈接地系统故障电流小、选线特征弱,该论文搭建三回路统一仿真模型,对零序电流比幅法、零序功率方向法、五次谐波法、注入信号法四种选线方案进行对比分析,并结合仿真波形说明各方法的适用场景与局限。资源为1个PDF文件,约327KB,适合作为课程设计、毕业设计或故障选线课题的参考文献。内容源自佳木斯大学学报,包含建模思路、SimPowerSystem分布参数线路模型设置、仿真参数配置及选线波形分析,可提供完整的仿真研究路线参考。目前已有601人学习浏览,对关注小电流接地选线技术或MATLAB电力仿真的读者有较好参考价值。
1. 小电流接地系统故障选线难在哪:故障信号微弱,判断要求却很高
在10kV配电网里,单相接地大约要占到全部故障的八成,但真正让运行人员头疼的不是跳闸,而是“找不出是哪条线”。故障电流只有几安到几十安,而负荷电流随随便便就是几百安,故障特征被系统噪声整个淹没,选线装置误报、拒报都是家常便饭。小电流接地系统的故障选线,本质就是把一个微弱信号从强噪声里抠出来,还要在几十毫秒内给出哪条馈线接地的结论。用MATLAB做这件事,常见路径就是两步:先在Simulink里把配电网、消弧线圈和故障点搭出来,再用MATLAB脚本分析故障后的暂态零序电流,通过极性、能量或相关系数锁定故障线路。这套内容适合配电自动化、继电保护调试的工程师,也适合正在做选线方向课题的研究生。
2. 从判据到算法:稳态法为何失效,暂态零序电流与小波极性比较为何能选线
2.1 五大主流选线原理的物理源头与失效边界
小电流接地系统的选线方法看着多,但本质上都在挖掘同一个方向:单相接地后,非故障线路流过的是本线路对地电容电流,故障线路则流过了“所有非故障线路电容电流之和”,而且方向相反。谁在幅值上异常、谁在方向上和别人相反,谁就是故障线路。
围绕这个物理基础,工程上出现过几类方法,我习惯先把它们按测量特征量分成五类,再逐个说边界条件。因为选线算法的鲁棒性,往往取决于你有没有提前想清楚“它在哪种场景下会失效”。
| 方法 | 主要特征量 | 适合的接地方式 | 典型失效场景 |
|---|---|---|---|
| 零序电流比幅比相法 | 基波零序电流幅值和方向 | 中性点不接地系统 | 消弧线圈投入后,故障电流被补偿 |
| 五次谐波法 | 零序五次谐波分量 | 不接地、经消弧线圈接地 | 系统里非线性负荷谐波源较多时无法分辨 |
| 零序有功分量法 | 零序有功功率方向 | 经消弧线圈接地、高阻接地 | 系统对地泄漏电流太小,有功分量测不准 |
| S注入法 | 注入信号沿线路的传播路径 | 不带电或可短时停运的线路 | 线路分支多、信号衰减大,需要额外设备 |
| 暂态量法 | 故障后暂态零序电流首半波极性、能量 | 各类小电流接地系统 | 采样率不足、窗口过长时判断会漂 |
前四类有一个共同麻烦:稳态量在消弧线圈系统里被严重削弱。中性点经消弧线圈接地后,消弧线圈的感性电流会补偿掉系统的容性电流,使故障线路的基波零序电流不再满足“比其他线路大”的条件。比幅比相法在这里基本性失效;五次谐波法虽然受消弧线圈影响小一些,但电网里变压器、整流设备产生的五次谐波背景噪声又常常盖过故障特征。有功分量法需要系统本身有一定的有功泄漏,纯电缆线路或者干燥天气下往往达不到测量精度。
2.2 暂态首半波和极性特征:消弧线圈也挡不住的高频分量
为什么暂态法能扛住消弧线圈?关键在于消弧线圈的阻抗是随频率变化的。稳态下它工作在工频50Hz,感抗大致在几百欧姆量级,可以稳定地补偿电容电流;但故障瞬间产生的暂态分量频率往往在几百赫兹到几千赫兹,此时电感感抗按 ωL 线性增大,几千赫兹下的消弧线圈阻抗会升高到稳态时的几十倍,基本上等同于开路。
所以故障后头几个毫秒的暂态零序电流,实际上是在一个“不带消弧线圈”的回路里流动的。非故障线路的暂态零序电流仍然保持同一方向,故障线路则因为要通过接地点回流,方向与非故障线路相反。这就是暂态首半波极性比较法的核心假设。
还有一个容易被忽略的有利条件:单相接地故障通常发生在相电压接近峰值的时刻,故障瞬间的对地电容放电电流可以比稳态电容电流大几倍到十几倍。故障信号虽然时间短,但幅值可观,远比稳态基波分量更容易从负荷噪声里分离出来。这也是选线算法选暂态量而不是稳态量的主要原因。
2.3 主算法定为“小波细节分量 + 相关极性比较”的理由
确定用暂态量之后,还面临一个实现层面的问题:直接拿原始暂态零序电流波形做极性比较,波形里混着负荷波动、系统扰动和测量噪声,故障特征容易被污染。常见做法是用小波分解把宽带暂态信号按频带拆开,先把与故障最相关的细节分量挑出来,再做极性或相关性判断。
我一般用db4小波,因为它不是对称小波,但紧支撑特性好、计算量适中,在配电网暂态分析里用得最广;分解层数根据采样率调整,重点把高频细节 d1、d2 保留下来。高频细节保留了故障暂态的方向信息,又滤掉了工频基波和缓慢变化的负荷波动。最后用相关系数矩阵代替简单的正负极性判断,因为相关系数对波形畸变不敏感,当首半波不是理想正弦形状时,相关性比“取符号”更稳定。这就是本文采用的算法主线。
3. 用Simulink搭一个10kV谐振接地配电网:出线参数、消弧线圈整定与故障注入
3.1 模型骨架与最小模块清单
仿真模型不需要过度复杂,但要保证三个要素完整:能提供中性点的电源与变压器、带分布电容的多条出线、可调参数的消弧线圈。我推荐搭建一个110kV/10kV变电站模型,低压侧引出4条馈线,其中至少包含一条电缆出线和一条架空出线,这样算出来的对地电容电流才有混合电网的味道。
Simulink里最低限度的模块清单如下:Three-Phase Source提供110kV系统电源;Three-Phase Transformer (Two Windings)用YNd11连接,容量31.5MVA,低压侧中性点引出;四条出线用Three-Phase PI Section Line搭,架空线和电缆分开设置;负荷用Three-Phase Parallel RLC Load挂在每条出线末端;消弧线圈用单相Series RLC Branch接在变压器中性点与地之间;故障用Three-Phase Fault模块,可以设置故障相、故障时间和过渡电阻。
接线顺序我习惯这样走:先把变压器二次侧接到母线上,母线上用四条PI线段分别拉出去,末端接负荷;然后在变压器中性点与地之间接消弧线圈支路。故障模块放在某一条出线上时,要把它串在线路中间而不是线末端,这样故障路径才真实。
3.2 线路参数表和消弧线圈的计算过程
线路参数直接决定对地电容电流大小,进而决定消弧线圈参数。下表是一组实际工程里常见的10kV配电线路参数,架空线取LGJ钢芯铝绞线的典型值,电缆取YJV22三芯电缆的典型值:
| 线路类型 | R1 (Ω/km) | L1 (mH/km) | C1 (μF/km) | R0 (Ω/km) | L0 (mH/km) | C0 (μF/km) |
|---|---|---|---|---|---|---|
| 架空线 | 0.45 | 1.06 | 0.0097 | 1.38 | 3.68 | 0.006 |
| 电缆 | 0.10 | 0.30 | 0.43 | 0.27 | 0.82 | 0.43 |
参数说明:Pi Section Line模块里所填的电容值,要在正序和零序的C1/C0上都体现;对于10kV配电网,架空线的对地电容主要是导线与地之间的分布电容,所以C0比C1小;而电缆的三相线芯彼此贴近,金属屏蔽层也近,正序和零序电容差异小很多。这是配电网仿真最容易出错的地方之一,我给四回出线分别设定参数,架空线按C0=0.006 μF/km,电缆按C0=0.43 μF/km。
以一个典型模型为例,四条馈线分别为:F1是12km架空线,F2是3km电缆,F3是8km架空线,F4是5km架空线加2km电缆。系统的总对地电容估算为各出线C0乘长度的总和,结果约2.3μF。零序电容电流按经验公式计算,即三相总对地电容电流:
I_C = 3 × ω × C0Σ × U_ph
其中ω=314,U_ph取相电压5770V,计算得I_C约12.5A。消弧线圈采用过补偿10%,即补偿电流I_L=1.1×I_C≈13.75A,电感值L=U_ph/(ω×I_L),算出来约1.34H。阻尼电阻R_d按消弧线圈感抗的5%取值,即R_d≈20Ω,与电感串联接到地。
3.3 故障模块与数据导出配置:录波才是调试的起点
Three-Phase Fault模块配置时,先把故障相选为A相,故障类型选Single Phase Fault,故障电阻先设0.01Ω模拟金属性接地。故障发生时间我一般设0.1s,持续0.1s,仿真总时长设0.3s,这样前面有足够长的稳态时段,后面有足够宽的暂态数据可以切窗。
数据导出环节直接影响后续MATLAB脚本的可读性。每条出线的三相电流要用Three-Phase V-I Measurement模块或Current Measurement模块测量,接到To Workspace模块,保存格式在R2018b之后我习惯选Timeseries,变量名分别命名iA1、iB1、iC1直到iA4、iC4。母线零序电压可以从三相电压测量后自行相加得到,也可以在模型里加一个零序电压模块。保存格式选Timeseries时,脚本里能直接访问Data属性,省去squeeze的麻烦。
提示:仿真求解器务必改成定步长,推荐固定步长2e-5秒,对应采样率50kHz。后面做小波分析时,定步长能保证时间轴严格均匀,避免变步长在故障瞬间给录波带来额外的时间误差。
4. MATLAB选线代码落地:故障时刻对齐、db4小波重构与相关性判据
4.1 从simout提取零序电流与故障时刻对齐
Simulink仿真结束后,数据会统一存在out工作区间里。第一步是把四条馈线的三相电流取出来,合成零序电流,并找到故障发生的准确时刻。故障时刻不直接用Fault模块的触发时间,而是看母线零序电压的突变位置,这样更贴近现场录波分析的习惯。
%% 从Simulink导出结构读取三相电流与母线零序电压 t = out.iA1.Time; % 时间轴,定步长下严格均匀 n_line = 4; iA = zeros(length(t), n_line); iB = zeros(length(t), n_line); iC = zeros(length(t), n_line); for k = 1:n_line iA(:, k) = out.(['iA' num2str(k)]).Data; iB(:, k) = out.(['iB' num2str(k)]).Data; iC(:, k) = out.(['iC' num2str(k)]).Data; end I0 = (iA + iB + iC) / 3; % 各馈线零序电流矩阵,列对应线路序号 u0 = (out.uA0.Data + out.uB0.Data + out.uC0.Data) / 3; %% 故障时刻对齐:取母线零序电压突变最大的采样点 [~, kf] = max(abs(diff(u0))); t_fault = t(kf); %% 只取故障后10ms作为暂态分析窗 win = (t >= t_fault) & (t <= t_fault + 0.01); tw = t(win) - t_fault; I0w = I0(win, :);逻辑说明:代码里用动态字段名out.(['iA' num2str(k)])读取四条馈线的A相电流,比手动敲out.iA1、out.iA2更省事,后续加线路时只需要改n_line。零序电流是三相电流的算术和除以3,在MATLAB里直接按列相加即可。故障时刻用diff对零序电压求差分,电压突变最大的位置就是接地发生点,因为故障前母线电压是对称的,零序电压接近零,故障瞬间零序电压会立刻抬起来。
可能需要注意,如果Simulink配置成Array格式保存数据,out.iA1.Data会变成三维数组,这时需要加一句squeeze转换。用Timeseries格式时不需要。
4.2 用wavedec/wrcoef把暂态分量从负荷噪声里分离
暂态窗取好后,下一步就是用db4小波把每条馈线的暂态零序电流分解,重构出高频细节分量。这一步的目的不是挑某个频带,而是把故障暂态里能量最集中的高频部分(对应首半波极性信息)提取出来,同时丢开工频基波和缓慢的负荷波动。
%% 小波分解:db4小波,3层分解,重构d1+d2高频细节 wname = 'db4'; level = 3; d_use = zeros(size(I0w)); for k = 1:n_line [c, l] = wavedec(I0w(:, k), level, wname); d1 = wrcoef('d', c, l, wname, 1); % 最高频细节分量 d2 = wrcoef('d', c, l, wname, 2); % 次高频细节分量 d_use(:, k) = d1 + 0.5 * d2; % 加权重构,d1权重更高 end参数与选择逻辑:wavedec返回的小波系数c和长度向量l,需要成对传给wrcoef;wrcoef的输入参数中,前面的'd'表示重构细节分量而不是近似分量,后面的1和2分别对应分解层级的序号。这里把d1和d2加权相加,是因为单独看d1容易受采样噪声影响,单独看d2对暂态突变响应又略钝,加权重构可以在灵敏度和稳定性之间折中。采样率更高时也可以把d3加进来,但窗口内d3已经包含较明显的消弧线圈低频影响,不适合极性比较。
如果观察重构后的波形,正常情况下故障线路的d_use波形幅度明显大于非故障线路,且与非故障线路的相位关系正好相反。现场录波存在噪声时,可以先做一次smooth或medfilt1,但不要过度平滑,否则首半波极性会被削掉。
4.3 相关系数矩阵与选线结果输出
极性直观判断可以用plot画出来,但要批量处理和自动判线,就要用相关系数。相关系数矩阵的每一列代表一条馈线相对其他馈线的波形方向一致性,故障线路与其他线路的相关系数通常为负,而非故障线路之间的相关系数则明显为正。
%% 取暂态窗内前5ms做极性相关分析 pwin = tw <= 0.005; Dp = d_use(pwin, :); R = corrcoef(Dp); % 相关系数矩阵 avgR = (sum(R, 2) - 1) / (n_line - 1); % 每条线与其他线的平均相关系数 E = sum(Dp .^ 2); % 各线路高频细节能量 [~, line_by_corr] = min(avgR); % 平均相关系数最小值 [~, line_by_eng ] = max(E); % 暂态能量最大值 if min(avgR) < -0.2 % 存在实质性反向极性关系 if line_by_corr ~= line_by_eng fprintf('注意:能量判据指向第%d线,极性判据指向第%d线\n', ... line_by_eng, line_by_corr); end fault_line = line_by_corr; % 极性判据优先 else fault_line = 0; % 全部正向相关,视为母线侧故障或未接地 end fprintf('选线结果:第%d条馈线\n', fault_line);核心逻辑说明:相关矩阵R的行列都代表线路序号,R(i,j)在第i条线与第j条线波形方向一致时接近1,反向时接近-1。平均值avgR把对角线的1去掉后求每条线与其余三条线的平均相关性,故障线路的平均相关值会明显低于非故障线路。设min(avgR)<-0.2这个阈值,是考虑到三条及以上线路时,非故障线路互相正相关,故障线路与它们负相关,平均下来故障线路的avgR通常在-0.5以下;如果全部线路的avgR都接近正数,则说明故障点在母线上或根本没有发生单相接地。
代码中保留了能量判据与极性判据不一致的输出信息。短线路高阻故障时,能量判据常常因为故障信号太弱而指向长电缆,但极性判据仍然能给出正确方向,所以最终以极性判据为准。
5. 避坑指南:故障选线调试里最常翻车的5个细节
5.1 采样率不足:小波d1细节变成“噪声形状”,选线结果随机漂
现象:把采样步长设成1e-4秒(10kHz)跑仿真,一小波分解后的细节d1波形看不出规律,出来的选线结果每次都不一样,甚至同一故障点重跑两次结论还会漂。 原因:故障暂态信号里含有数千赫兹的高频分量,10kHz采样率下奈奎斯特频率只有5kHz,高频分量混叠后污染了d1频带,极性信息被破坏。 解决:把仿真定步长改到2e-5秒,对应50kHz采样率。改正后d1、d2的波形规则很多,选线结果也稳定下来。这个坑最容易出现在Simulink默认变步长配合自动输出采样的时候,我现在一律在模型配置里强制锁定定步长。
5.2 故障电阻设成0,算法太“天真”,换高阻接地就翻车
现象:金属性接地故障时选线准确率接近100%,但把过渡电阻改成500Ω或者1000Ω后,能量判据一下子失效,误报率明显上升。 原因:过渡电阻越大,故障电流越小,故障线路的暂态能量优势被削弱;而电缆线路本底电容电流本来就大,能量判据容易指向长电缆。 解决:不要只用0.01Ω做仿真验证,至少跑一组0Ω、50Ω、200Ω、500Ω、1000Ω的过渡电阻矩阵。选线算法以极性判据为主,能量判据只做辅助参考;同时增加母线零序电压幅值条件,零序电压低于设定门槛时直接判为“无法选线”,避免硬选一条线路反而误导运行人员。
5.3 消弧线圈补偿后第二半波极性翻转,窗口长度必须设上限
现象:消弧线圈系统里,故障后前2ms的极性判断正确,但把相关分析窗口放到整个10ms或20ms后,某些场景下故障线路和非故障线路的相关系数符号反转。 原因:消弧线圈的感性补偿电流在故障后半段逐渐建立,产生了低频反向分量。首半波极性的“时间标签”只在暂态初始阶段成立,随着时间推移,补偿电流会把故障线路的零序电流方向“拉”回与其他线路一致的方向。 解决:相关分析窗口严格限制在故障后5ms以内,同时只对高频细节分量做相关计算。这也是我在第4章代码里用pwin = tw <= 0.005的原因,不是偷懒,而是现场录波和仿真都验证过这个边界。
5.4 高阻接地时单判据不足,需要多判据投票
现象:当过渡电阻超过500Ω时,极性判据虽然还能指对方向,但可靠程度下降;某些馈线波形上出现明显的上升沿畸变,平均相关系数不再稳定指向故障线路。 原因:高阻接地时故障暂态幅值很低,故障特征量与非故障线路的本底暂态量处于同一量级,单一特征不再具有统计显著性。 解决:这种场景下不要单靠极性一个判据,建议把“暂态能量最大值”“五次谐波幅值”和“极性相关系数”三个判据做成投票机制,两个及以上判据指向同一线路时再输出结果;否则输出“待人工确认”。牺牲一点自动化程度,换回的是现场可信度。
5.5 电流互感器极性反接:仿真里一条负号,结果从第1线跳到第4线
现象:把某一回出线的电流测量极性在模型里反接后,选线结果不再指向真实故障线路,而是变成“镜像”方向的一条线,像是算法突然失灵。 原因:零序电流方向的定义依赖参考方向。现场不同厂家、不同间隔的电流互感器接线可能存在差异,算法默认所有线路都以“母线指向线路”为正方向,一旦有某个间隔接反,故障线路的暂态方向就失去了统一参考。 解决:在代码入口处增加极性校准步骤,用正常负载运行时的三相电流相位关系确认各间隔极性是否一致;或者直接在脚本里加一个sign矩阵,对已知反接的通道乘以-1。仿真验证时故意把其中一条线路加负号跑一轮,看看选线结果是否跳变,提前观察算法对极性错误的敏感程度。
6. 进阶验证:把选线代码包成函数,批量跑不同故障场景的准确率统计
验证选线算法最有价值的一步,不是跑通单条线路,而是把整个故障场景矩阵批量跑完,得到正确率统计。做法是把第4章的处理流程封装成一个函数,输入Simulink的simOut输出,输出选线结论,然后通过两层循环自动切换故障线路和过渡电阻。
%% 批量故障场景仿真:切换故障线路与过渡电阻,统计选线准确率 mdl = 'resground_sim'; fault_lines = [1 2 3 4]; % 依次设置不同出线故障 fault_res = [0 50 200 500 1000]; % 过渡电阻扫描 acc = zeros(numel(fault_lines), numel(fault_res)); for fl = 1:numel(fault_lines) for fr = 1:numel(fault_res) set_param([mdl '/Fault'], 'FaultR', num2str(fault_res(fr))); simOut = sim(mdl, 'StopTime', '0.3'); line = fault_line_select(simOut); % 封装后的第4章选线函数 acc(fl, fr) = (line == fault_lines(fl)); end end acc_line = mean(acc, 2); % 每条出线的平均准确率仿真过程中的细节值得注意:set_param修改故障模块电阻后,下一次sim之前要确保模型已经停止仿真,否则参数修改不会生效;多次循环仿真会积累大量out数据,建议每轮循环后清理一次工作区变量,或者用simOut覆盖写入。统计结果里最典型的规律是电缆出线准确率普遍较高,因为电缆电容大、暂态信号强;短架空线路在500Ω以上高阻故障时正确率会掉下来,这也是下一步改进算法时的重点方向。
对比跑完不同场景的准确率矩阵后,再回到现场录波文件检验一次,通常会发现高阻接地场景的处理逻辑还需要进一步优化。我现在的习惯是把这类数据当作模型回归测试集,每次改动算法都重新跑一遍,防止改了高阻判据又把金属性接地场景的准确率拉低。选线这件事,真正让人放心的不是某一套算法有多“聪明”,而是你知道它在哪些场景下可靠、在哪些场景下会失败,并把这个边界提前写进判据里。希望这些调试思路帮到正在做这个方向的人。
本文还有配套的精品资源,点击获取