☰
MATLAB小电流接地系统故障选线仿真:暂态判据与实战避坑指南
2026/10/11 1:05:42 网站建设 项目流程

简介:一份基于MATLAB的小电流接地系统故障选线方法研究论文,面向电力系统相关专业学生、工程师及MATLAB仿真学习者。文档以35kV小电流接地系统为对象,利用Simulink建立统一模型,系统比较零序电流比幅法、零序功率方向法、五次谐波法与注入信号法四种自动选线方案,并结合仿真波形分析各类方法的适用范围与优缺点,可作为故障选线课题的参考文献和仿真建模参考。资源为1个PDF文档,体积仅327KB,便于下载后随时查阅。已有601人学习/下载。内容来自佳木斯大学学报2009年论文,包含完整的建模思路、仿真参数设置、选线原理对比及结论,对理解小电流接地系统单相接地故障特征和MATLAB仿真实现有直接帮助。

1. MATLAB小电流接地系统故障选线:这份研究资料值不值得花时间复现

10kV配电网里,单相接地故障占了所有故障类型的八成以上。麻烦的是故障点电流通常只有几安到几十安,经过消弧线圈补偿之后,稳态特征被削弱得几乎测不到,常规过流保护根本分不清哪条出线出了问题。MATLAB小电流接地系统故障选线方法的研究这份资料,解决的就是这个“黑匣子”问题:它把暂态零序电流、五次谐波、小波包分解这几类主流选线判据的原理讲透,同时给出了完整的仿真建模路径。

对正在做毕业设计的学生、搞配网运维的工程师、或者准备做选线装置预研的人来说,这份资料相当于一份可以直接照着复现的参考文献底稿。它不是软件安装包,也不是泛泛的教程,而是把“方法研究”落到“仿真验证”的完整思路。下面我按自己复现这份资料的过程,把模型搭建、判据实现、参数整定和踩过的坑逐层展开。整个过程不需要额外的硬件,一台装着MATLAB的电脑就能跑通,适合静下心来推一遍。

2. 暂态零序电流法:选线原理与Simulink建模的关键参数

2.1 选线判据的物理基础:故障线路与健全线路的极性差异

先讲清楚为什么选线要盯着暂态量看。单相接地发生的瞬间,母线零序电压突然升高,各条出线的对地电容会经故障点形成充放电回路。健全线路的零序电流方向是从母线流向线路,故障线路则相反,而且故障线路的零序电流幅值约等于所有健全线路零序电流之和。这是所有选线方法的物理基础:方向相反、幅值最大。

问题在于稳态下消弧线圈会把工频电容电流补偿掉,尤其是过补偿运行时,故障线路的稳态零序电流方向可能发生翻转,幅值优势也不再明显。所以单纯比较稳态基波分量来做选线,在谐振接地系统里可靠性很低。暂态分量则不同,它不受消弧线圈补偿的直接影响,故障瞬间的暂态零序电流可以达到稳态值的几倍到几十倍,极性特征也更稳定。这就是为什么资料里把暂态零序电流法放在核心位置。

用一句话概括选线的基本逻辑:找那条零序电流方向和大多数线路相反、幅值明显偏大的线路。后面的所有判据,本质都是把这个“相反”和“偏大”用不同的数学工具量化出来。

2.2 Simulink模型怎么搭:10kV中性点经消弧线圈接地系统

模型我按最常用的结构搭:10kV三相电源、中性点经消弧线圈接地、三条出线、单相接地故障模块。仿真模型里用到的模块和关键参数如下表所示。

模块关键参数设置说明
Three-Phase Source线电压10kV,频率50Hz模拟10kV配电网系统侧电源
Series RLC Branch(消弧线圈)R=10Ω,L按过补偿10%整定接在变压器中性点与地之间
PI Section Line ×3正序参数与零序参数分别填入三条出线长度可设不同
Three-Phase FaultPhase A Fault + Ground Fault设置故障相、接地电阻、故障时刻
Three-Phase V-I Measurement输出至To Workspace采集各线路三相电流
To Workspace采样时间设为1e-4s对应10kHz采样率,保证暂态分辨率

模型参数初始化我习惯写成脚本,避免每次在界面里手动改,代码如下。

% 小电流接地系统仿真参数初始化 clear; clc; % 系统侧参数 U_ll = 10e3; % 线电压有效值,单位V,10kV系统 f = 50; % 工频50Hz % 线路单位长度参数(10kV电缆典型值) r1 = 0.17; l1 = 1.2e-3; c1 = 9.7e-9; % 正序:电阻、电感、电容 r0 = 0.32; l0 = 4.2e-3; c0 = 6.1e-9; % 零序 L1_len = 8; L2_len = 5; L3_len = 3; % 三条出线长度,单位km % 消弧线圈电感计算:过补偿10%,按所有线路对地电容总和整定 C0_total = c0 * (L1_len + L2_len + L3_len); L_arc = 1 / (1.1 * 3 * (2*pi*f)^2 * C0_total); % 故障设置 R_fault = 500; % 接地电阻,单位Ohm,500欧姆模拟高阻接地 t_fault = 0.08; % 故障时刻,单位s,放在仿真进入稳态之后 t_end = 0.2; % 仿真结束时间 fs = 10000; % 采样率,单位Hz

代码里消弧线圈的电感整定值得单独说。过补偿10%就是为了让补偿后的残余电流呈感性,避免发生全补偿谐振。如果L_arc的计算结果和实际系统不匹配,仿真里可能会出现中性点电压异常抬高,先检查这一项。故障时刻t_fault放在0.08s而不是0.02s,是为了让仿真在故障发生前至少经过两个完整工频周波,这样后面做零漂处理时有足够的“正常段”数据可以用。采样率fs直接决定了后续FFT和小波分析能看到的频带上限,10kHz对应奈奎斯特频率5kHz,覆盖配电网暂态信号的主要频段。

2.3 数据准备:从仿真导出零序电流并做零漂处理

模型跑完之后,把数据从工作区拿来做处理。零序电流可以由三相电流相加除以3得到,也可以在模型里直接用零序电流测量模块输出。仿真启动瞬间往往有不衰减直流分量,这个不处理的话,后面所有频域分析都会失真,代码如下。

% 从仿真工作区提取数据并计算各线路零序电流 % 假设ia1/ib1/ic1为第一条线路三相电流,其他线路类似 i0_1 = (ia1 + ib1 + ic1) / 3; i0_2 = (ia2 + ib2 + ic2) / 3; i0_3 = (ia3 + ib3 + ic3) / 3; i0_all = [i0_1(:), i0_2(:), i0_3(:)]; t = t_out(:); % 仿真输出的时间向量 % 去零漂:取故障前一个周波的数据均值作为直流偏置,分别减去 pre_idx = t >= 0 & t < t_fault; % 故障前时间段 for k = 1:size(i0_all, 2) dc_offset = mean(i0_all(pre_idx, k)); i0_all(:, k) = i0_all(:, k) - dc_offset; end % 截取故障后两个周波作为分析窗:0.08s到0.12s ana_idx = t >= t_fault & t <= t_fault + 0.04; i0_ana = i0_all(ana_idx, :); t_ana = t(ana_idx);

这段代码里有几个细节关乎后面判据的可靠性。去零漂用的是故障前一个周期的均值,而不是整个仿真段的均值,原因是故障发生后零序电流本身含有衰减直流分量,会把均值拉偏。分析窗取故障后两个周波,是因为暂态分量主要集中在接地发生后的最初几个周波内,时间窗拉太长反而引入稳态分量干扰。如果你用的是固定步长离散求解器,时间向量t_out可以直接从To Workspace模块拿到;如果用了变步长求解器,建议在To Workspace模块里设置固定采样时间,否则后面做FFT时数据点不均匀,频谱会很难看。

3. 五种选线判据的MATLAB实现:从五次谐波到小波包分解

3.1 五次谐波幅值比较法:窄带滤波与极点设置

原理很简单。消弧线圈只补偿工频基波,对五次谐波(250Hz)基本没有补偿作用。故障线路的五次谐波阻抗路径和健全线路不同,所以故障线路的250Hz电流分量明显大于健全线路。这个方法对高阻接地的适应性比基波法好,但在谐波源较多的环境里会有误判风险。

实现时我用带通滤波器把250Hz分量提出来,然后比较各线路幅值。

% 五次谐波幅值比较:提取250Hz分量 wp = [245, 255] / (fs/2); % 带通范围245~255Hz,归一化频率 [bb, ab] = butter(4, wp, 'bandpass'); i5_1 = filtfilt(bb, ab, i0_ana(:, 1)); i5_2 = filtfilt(bb, ab, i0_ana(:, 2)); i5_3 = filtfilt(bb, ab, i0_ana(:, 3)); A5 = [max(abs(i5_1)), max(abs(i5_2)), max(abs(i5_3))]; [~, fault_line_5th] = max(A5); disp(['五次谐波法选线结果:第', num2str(fault_line_5th), '条线路']);

这里用filtfilt而不是filter,是因为零相位滤波不会让信号产生相位偏移,后面如果要做波形的极性比较,相位偏移会直接导致判据失效。滤波器的带宽选了±5Hz,这个值够窄,能把250Hz分量和247Hz、253Hz的间谐波大致隔离开。注意fs=10000时归一化频率用采样率的一半做分母,别写成fs。

3.2 暂态零序电流特征频带能量法:谁的能量大谁就是故障线路

在配电网单相接地暂态过程里,零序电流的暂态能量并不是均匀分布在整个频带,而是集中在几百赫兹到几千赫兹之间。把各条线路的零序电流做频带分解,然后比较同一特征频带内的能量,故障线路会显著占优。这个判据比幅值比较更稳定,因为它综合了信号在整个频带内的分布,对噪声不那么敏感。

我用三层小波包分解来做频带划分,代码如下。

% 特征频带能量法:三层小波包分解 wavelet = 'db4'; level = 3; for k = 1:3 wpt = wpdec(i0_ana(:, k), level, wavelet); cfs = wprcoef(wpt, [3, 0]); % 取第3层0号节点 energy(k) = sum(cfs.^2); end [~, fault_line_energy] = max(energy); disp(['能量法选线结果:第', num2str(fault_line_energy), '条线路']);

采样率10kHz时,第3层小波包共有8个节点,每个节点的频带宽度是625Hz,节点[3,0]对应0~625Hz,正好覆盖暂态零序电流能量最集中的低频段。选能量最大的线路作为故障线路,这个判据对消弧线圈过补偿状态不敏感,很适合作为第一个粗判依据。

3.3 小波包分解与模极大值极性判别:选小波基和分解层数

能量法告诉我们哪条线路能量大,但还不够。有些工况下健全线路的暂态能量也不小,这时要靠极性来区分。故障线路暂态零序电流的初始极性和健全线路相反,这个特征在小波变换的模极大值上表现得非常清楚。

选小波基我一般用db4,不用haar。haar小波时域分辨率好但频域泄漏严重,db4在时频局部化之间做了较好的折中,工程上最常见。分解层数选3层而不是更高,因为层数过高会把暂态能量摊薄到各个频带里,模极大值反而变弱,容易误判。

% 小波模极大值极性判别:取各线路暂态起始段的细节系数 [c1, l1] = wavedec(i0_ana(:, 1), 3, 'db4'); [c2, l2] = wavedec(i0_ana(:, 2), 3, 'db4'); [c3, l3] = wavedec(i0_ana(:, 3), 3, 'db4'); % 取第一层细节系数d1,故障初始段的模极大值 d1_1 = detcoef(c1, l1, 1); d1_2 = detcoef(c2, l2, 1); d1_3 = detcoef(c3, l3, 1); % 找到最大幅值点所在位置 [~, idx_max] = max(abs(d1_1)); % 比较三条线路在对应时刻的极性符号 polarity = sign([d1_1(idx_max), d1_2(idx_max), d1_3(idx_max)]); fault_line_polarity = find(polarity ~= polarity(1)); disp(['极性判别选线结果:第', num2str(fault_line_polarity), '条线路']);

这段代码的前提是三条线路里至少有两条健全线路极性一致。实际仿真时你会发现,如果三条线路长度差别很大,健全线路的暂态幅值差距也会很大,这时候直接比较极性符号比比较幅值更可靠。注意代码里的idx_max取了第一条线路的模极大值位置,如果第一条线路恰好是故障线路,这个位置处健全线路的信号幅值可能很小,极性判断会不稳定。更稳的做法是取所有线路模极大值点位置的并集,再逐个位置做极性投票。

3.4 零序有功分量与相关系数法:两条相对冷门但稳定的判据

零序有功分量法利用的是接地电阻消耗的有功功率。金属性接地时有功分量很小,高阻接地时有功分量反而明显,而且方向稳定:故障线路的零序有功功率方向和其他线路相反。这个判据在高阻接地场景下很有价值,正好弥补五次谐波法和能量法的不足。

相关系数法则更直接:把故障后第一个周波内各线路零序电流波形做互相关系数计算。因为正常情况下各健全线路零序电流波形形状高度相似(都由系统对地电容决定),而故障线路的波形和它们呈显著差异甚至负相关。实现如下。

% 零序电流波形互相关系数法 i0_win = i0_ana(1:round(0.02*fs), :); % 故障后第一个周波 R = zeros(3, 3); for ii = 1:3 for jj = 1:3 x = i0_win(:, ii) - mean(i0_win(:, ii)); y = i0_win(:, jj) - mean(i0_win(:, jj)); R(ii, jj) = sum(x .* y) / (norm(x) * norm(y) + eps); end end % 计算每条线路与其他线路的平均相关系数,取均值最小者 mean_R = (sum(R, 2) - diag(R)) / 2; [~, fault_line_corr] = min(mean_R); disp(['相关系数法选线结果:第', num2str(fault_line_corr), '条线路']);

相关系数法有个好处:不需要关注幅值差异,只需要波形形状。这意味着即使两条线路长度差异很大、幅值差好几倍,只要波形形状相似,相关系数依然接近1。加eps是防止某条线路零序电流信号差分之后范数为0,导致分母除零。平均相关系数最小的那条线路,就是和大多数线路“不合群”的,也就是故障线路。

3.5 判据参数对照表与融合策略

五种判据各有适用边界,直接在仿真里逐个跑一遍,对比一下效果就能感受到差异,核心参数汇总如下表。

判据适用场景核心参数明显短板
五次谐波幅值比较谐波背景干净的系统带通滤波带宽±5Hz谐波源多时误判率高
特征频带能量法暂态能量集中的场景小波包层数3,节点0高阻接地时能量分散
小波模极大值极性消弧线圈过补偿系统db4,分解3层线路参数差异大时不稳定
零序有功分量高阻接地功率计算窗1个周波金属性接地时分量太小
波形相关系数线路长度差异大的系统相关系数窗20ms采样率过低时波形失真

我在实际仿真中不会只依赖单一判据,而是先用能量法做粗筛,排除掉能量明显偏低的健全线路;再用相关系数法确认“不合群”的那条;最后用极性判别做交叉验证。五个判据全部一致时,结果基本可信。如果出现分歧,优先相信相关系数法和极性判别——它们对系统参数变化的敏感度更低。这段融合逻辑不是资料里直接给出的,而是我多次仿真对比后总结出来的,你可以根据自己的模型参数验证调整。

4. 故障选线仿真实战避坑指南:五处最容易翻车的设置

4.1 仿真波形看不出故障特征:故障时刻和接地电阻的设置问题

现象:模型跑完,打开示波器,三条线路的零序电流波形和正常运行时几乎一样,找不到任何故障特征。原因就两个:要么故障时刻设得太早,仿真还处于启动过渡过程;要么接地电阻设得太大,比如填了10000Ω,故障电流小到在波形上根本看不出来。解决方法是把故障时刻t_fault放到0.08s(确保仿真已进入稳态至少两个周波),做金属性接地仿真时R_fault设成0.1~1Ω,做高阻接地研究时再设500~2000Ω,分场景测试。这个坑第一次做的人很容易踩,因为它不影响仿真报错,只影响结果可信度,而且问题不出在模型结构上,出在参数理解上。

4.2 FFT分析里五次谐波比基波还大:零漂和窗位置的问题

现象:对故障后的零序电流做FFT,频谱图上250Hz分量异常突出,比基波还大好几倍,怎么看都不合理。原因有两个层面:一是没有去掉信号里的直流偏置,直流分量在FFT里会向低频段泄漏,污染整个频谱;二是做FFT时数据窗没有对准故障时刻,把故障前的正常运行数据也包含进了分析窗。解决方法是先按第2.3节的方式,用故障前一个周波的数据均值去零漂,然后严格把分析窗设在t_fault到t_fault+0.04之间。检查数据窗位置和去零漂这两步,是排查这类频谱异常的固定动作。

4.3 小波重构波形和原始信号对不上:相位偏移和节点选错

现象:用小波分解之后重构细节波形,看起来和原始暂态波形对不上,极性判据得出的结果和理论分析相反。原因可能有两个:一是用了filter而不是filtfilt做滤波,滤波器本身会引入非线性相位偏移,把波形整体平移;二是小波包分解之后节点编号对应错了频带。解决方法是滤波一律用filtfilt做零相位处理;在用wpdec之前先对信号做一次频谱图,确认暂态能量集中在哪个频段,再确定该取哪个节点。选错节点这个错误很隐蔽,因为MATLAB不会报错,只是结果不对。

4.4 Three-Phase Fault模块的接地方式设置错误

现象:仿真报错,提示Ground Fault相关参数错误,或者故障相电流数值异常,出现NaN。原因通常是故障模块的“Ground Fault”选项没有勾选,同时过渡电阻填了0。MATLAB里单相接地故障要勾选Phase A Fault和Ground Fault,过渡电阻不建议填0,数值奇异会让求解器失败。解决方法是填0.001Ω作为过渡电阻,避免零阻抗接地导致的数值问题,同时又近似金属性接地。这个报错信息在初学者中很常见,模型逻辑没错,纯粹是模块配置界面没有经验。

4.5 同一组参数跑两次结论不同:求解器步长和采样率不匹配

现象:同一组仿真参数,重复跑两次,选线结论居然不一样——一次对了,一次错了。原因基本可以锁定在求解器步长上。默认变步长求解器在暂态过程剧烈变化的地方,步长会自动拉大,导致暂态峰值被采掉,不同次运行时数值误差累积路径不同,结果就“随机”了。解决方法是把求解器最大步长设为1e-5s,或者直接换成固定步长离散求解器(步长1e-5s),让每次运行的采样点数完全一致。To Workspace模块的采样时间也统一设成1e-4s。从那以后我每次做选线仿真,都会先确认求解器设置再跑批量实验,这已经成为固定习惯。

5. 进阶用法:把选线判据封装成批量验证脚本

5.1 批量扫参数:接地电阻与故障角组合

研究选线方法的适应性,光靠单组参数不够。写论文时,审稿人最常问的问题是:你这种方法在接地电阻从几欧到几千欧、故障角从0°到90°变化时,选线准确率还能保证吗?手工一组组去改参数会疯掉,把前面的判据实现封装成函数,批量跑就顺理成章了。

% 批量扫描接地电阻R_fault和故障相角theta R_list = [0.1, 5, 50, 500, 2000]; % 从金属性到高阻接地 theta_list = [0, 30, 60, 90]; % 故障初相角 results = []; for ii = 1:length(R_list) for jj = 1:length(theta_list) % 修改模型参数并启动仿真 R_fault = R_list(ii); theta_f = theta_list(jj); simOut = sim('line_selection_model', 'StopTime', '0.2'); % 提取零序电流并调用选线判据函数 [i0_ana, t_ana] = extract_zero_seq(simOut); fault_line = run_all_criteria(i0_ana, t_ana); results = [results; R_fault, theta_f, fault_line]; end end

这里有两个地方值得注意。一是sim函数加上了StopTime参数,避免每次循环都打开模型界面,批量仿真效率提升明显;二是把零序电流提取和选线判据封装成了两个独立函数,extract_zero_seq负责从仿真输出里截取分析窗数据,run_all_criteria内部按顺序调用五次谐波、能量、极性、相关系数四种判据。这样批量扫描时,新增一种判据只需要动run_all_criteria一个文件,不用改主循环。

5.2 结果判定与可读输出

批量跑完之后,需要把结果汇总成一张可读的表。手动一行行看太费劲,用array2table整理输出更清晰。

% 将批量结果整理成表格输出,并保存为CSV result_table = array2table(results, ... 'VariableNames', {'R_fault', 'Theta_fault', 'Fault_Line'}); disp(result_table); writetable(result_table, 'selection_results.csv');

结果表里Fault_Line的数值,是每种判据在对应参数下的选线结果。如果要统计准确率,就把它和预设故障线路编号做比较,再按R_fault和Theta_fault分组统计。这个脚本最大的价值在于,让你快速看清楚每种判据的适用边界——比如你会发现五次谐波法在小电阻接地时效果很好,但R_fault超过500Ω后结果开始漂移;而相关系数法恰好相反,高阻接地时反而更稳定。这些观察直接决定论文里的结论怎么写,也决定了实际装置研发时该选哪种判据做主保护。

这套批量验证脚本我留了很久,后来做新判据的验证时,都强制自己把参数扫描完整跑一遍再下结论。磨刀不误砍柴工,参数覆盖得够全,仿真结果才真正能说明问题。希望这套方法和这份资料一起,帮你把选线仿真做扎实。

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

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

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

立即咨询