
做配电网故障仿真这几年我最大的感触是一提到小电流接地系统的单相故障仿真很多人第一反应就是打开Matlab拖几个三相电源、变压器、线路模块再塞一个故障模块进去跑出波形就收工。但真到做课程设计、写论文或者参加数学建模竞赛的时候会发现真正的难点从来不是“把图连起来”而是系统等值怎么做、参数怎么定、故障电阻怎么设、运行结果怎么解读。这篇文章围绕“Matlab小电流接地系统的建模与单相故障仿真分析”这条主线从设计思路、参数设定、等值电路推导、核心代码到不同故障条件下的运行结果对比一步步写成一份可以直接参考的实操记录。内容适合电气工程专业的本硕学生、继电保护方向初学者以及准备在数学建模竞赛里碰电力系统题目的人。1. 为什么先要搞懂小电流接地系统再谈仿真1.1 小电流接地系统的工程背景国内10kV配电网里绝大部分采用中性点不接地或者经消弧线圈接地的方式这就是我们常说的小电流接地系统。和110kV及以上大电流接地系统不同小电流接地系统最突出的特点是单相接地之后故障电流非常小往往只有几安到几十安。这个特点带来了一个巨大的工程红利——单相接地时三相线电压仍然保持对称系统可以带故障继续运行1到2小时供电可靠性明显提高。但代价也很现实故障后零序电压升高非故障相电压会升高到线电压水平对电缆和绝缘子是个考验更重要的是故障特征微弱选线、定位都非常麻烦。所以我在做单相故障仿真之前脑子里始终带着一个问题仿真的目标不是把故障波形画出来而是要把“故障后系统到底发生了什么”这个物理过程还原清楚再把故障电阻、消弧线圈补偿度、故障位置这些变量对电气量的影响定量算出来。这也是Matlab仿真相比手算公式最大的价值。1.2 中性点接地方式怎么选仿真里就要怎么设小电流接地系统不是一个固定模型它包含至少两种典型状态一是中性点不接地二是中性点经消弧线圈接地。这两种方式在零序网络里差别很大Simulink模型和Matlab脚本里的参数设定也必须区分。从工程选型逻辑看是否装设消弧线圈主要看系统单相接地电容电流。对于10kV架空线路如果单相接地电容电流超过10A一般就要考虑消弧线圈纯电缆网络因为对地电容大通常直接配置消弧线圈。这个判断依据同样可以放到仿真里作为参数计算的出发点。仿真时我一般把系统设置为三条馈线长度分别取10km、8km、12km。这样设置不是为了堆数据量而是让三条线路的零序电容电流不同这样才能在结果里体现“故障线路非故障相电流大、非故障线路电流小”的选线判据。消弧线圈这边常见的做法是过补偿运行脱谐度取-5%到-10%防止全补偿状态下的谐振过电压。1.3 单相故障的典型特征决定了仿真观察量单相接地故障发生后最值得观察的电气量有这么几个中性点位移电压、零序电压、故障相电流、非故障相电压、各馈线零序电流。对于消弧线圈接地系统还要额外观察残流和消弧线圈电流。仿真里我建议把观测点分成两类。第一类是母线处的零序电压和三倍零序电压这是判断系统是否发生单相接地的最直接依据。第二类是各馈线的零序电流尤其要看故障线路与非故障线路在相位和幅值上的差异。如果只盯着故障相电流在小电流接地系统里经常一无所得因为故障电流实在太小了。2. 建模思路与等值电路拆解2.1 系统等值结构与参数设定依据搭建仿真模型前我习惯先画一张系统等值结构图。这里说的等值结构不是Simulink模型图而是计算等值电路。因为如果连等值电路都画不完整后面参数设置就是无源之水。我采用的典型结构是110kV进线经过主变压器降压到10kV母线母线带三条出线出线通过Π型等值线路接到负荷。故障点设置在1号馈线上故障类型为A相单相接地故障点经过渡电阻Rf接地。中性点不接地时变压器中性点悬空经消弧线圈接地时中性点对地接一个电感L。线路参数按架空线典型值选取具体数值如下表参数数值说明正序单位阻抗0.17 j0.38 Ω/km决定负荷潮流和正序短路计算零序单位阻抗0.35 j1.30 Ω/km故障时零序电流分布相关每相对地电容6.5 nF/km单相接地电容电流的主要来源主变等值正序阻抗0.1 j2.5 Ω折算到10kV侧简化处理这样的参数选取是有依据的架空线路的每相对地电容通常就在几纳法到十几纳法之间6.5nF/km属于典型值。三条线路加起来每相对地总电容大约是195nF对应单相接地电容电流大约在2A左右属于典型的小电流。如果换成电缆线路对地电容会大一个数量级那个时候消弧线圈的容量算法又不一样了。2.2 对称分量法与零序网络的关系小电流接地系统的单相故障分析最核心的工具是对称分量法。很多初学者卡在这里所以我把关键点拆开讲。单相接地故障的边界条件是故障相电压被强制为等于故障电流乘过渡电阻非故障相电流为零。用对称分量法表达就是正序、负序、零序网络在故障点串联起来外接3倍过渡电阻。于是故障点零序电流可以写成一个非常简洁的表达式$$I_0 \frac{U_{ph}}{Z_{1\Sigma}Z_{2\Sigma}Z_{0\Sigma}3R_f}$$其中$U_{ph}$是相电压$Z_{1\Sigma}$、$Z_{2\Sigma}$、$Z_{0\Sigma}$分别是正序、负序、零序等值阻抗。这个式子虽然简单但几乎所有稳态相量仿真都建立在它上面。对于中性点不接地系统零序网络主要由三相对地电容决定。工程计算里这个零序等值阻抗约为容抗幅值很大。所以$I_0$很小故障电流$I_f3I_0$也很小但中性点位移电压会很高接近相电压。这就是小电流接地系统“故障特征微弱但零序电压明显”的数学本质。2.3 消弧线圈补偿的建模要点如果系统接入了消弧线圈零序网络就不是纯电容了而是电容和电感并联。这里有一个特别容易踩坑的3倍关系问题。工程上消弧线圈接在中性点和地之间但在零序等值网络里它的等效阻抗不是$j\omega L$而是$3j\omega L$。配套的零序导纳形式是$1/(j3\omega L)$。这个系数来自零序分量的定义很多同学直接放个电感进去就仿真结果补偿效果怎么都对不上多半就是漏了这个3倍关系。基于这个关系仿真里的电感L是有明确计算依据的。系统每相对地总电容$C_g$已知单相接地电容电流$I_C 3\omega C_g U_{ph}$。全补偿时需要的电感满足$$L \frac{1}{3\omega^2 C_g}$$代入$C_g195nF$$f50Hz$得到全补偿电感约为17.4H。如果采用过补偿10%电感要再小一点约15.8H。这个数值不是瞎估的而是可以直接作为Simulink或者脚本仿真的初始参数。过补偿10%的好处是避免系统运行在谐振点附近。全补偿时零序网络接近并联谐振阻抗极大理论残流为零但实际系统中三相对地电容不可能完全对称反而容易激发谐振过电压所以工程上坚决不搞全补偿。仿真时我看到有人把脱谐度设成零结果波形里出现长时间振荡这就是典型参数设置问题。2.4 为什么用相量法而不是只靠Simulink搭图做这类仿真很多人默认要用Simulink。我并不反对Simulink它适合做暂态波形观察比如故障后几十毫秒内的电压电流瞬态过程。但如果目的是做故障电阻扫描、补偿度对比、参数寻优Simulink的效率就很低了。我在实际项目中更常用的做法是先用Matlab脚本写一套基于序网络的相量法计算程序用于快速扫描上百组参数得到结果后再挑出最关键的场景放到Simulink里验证波形。这个思路和数学建模比赛里的做法是一致的——先建立可解析的数学模型再做数值仿真而不是一开始就陷入庞大模型调参。相量法仿真的适用前提是系统按正弦稳态分析单相故障的基波分量占主导。对于稳态选线研究、故障电阻影响分析这个精度完全够用。如果要做暂态选线比如利用故障初始行波那就要再走电磁暂态仿真路线属于另一个层面的问题。3. Matlab仿真实现从搭建到运行3.1 仿真环境与总体流程我的仿真环境是Matlab R2023b新版本R2026b在这些基础语法和复数运算上没有任何兼容问题。脚本不需要装Simscape Electrical工具箱只要Matlab基础环境就能跑。如果后面打算看波形可以升级到Simulink配合Simscape Electrical但核心计算逻辑不会变。整体流程分四步。第一步定义系统级参数包括额定电压、频率、线路阻抗、对地电容、消弧线圈补偿方式。第二步计算故障点的序等值阻抗尤其是零序阻抗。第三步设定故障场景包括故障相、过渡电阻、故障位置。第四步用对称分量法求出各个电气量输出表格并画图。这个流程看起来简单但每一步都有隐藏细节。比如故障位置改变时正序等值阻抗会变而零序电容则是全系统统一的。如果故障发生在馈线末端零序电容电流几乎不变正序阻抗却明显增大。这一点在做故障距离分析时很关键。3.2 核心代码实现与注释下面给出一段健壮可运行的核心脚本我把它压缩成了可读性比较高的版本。每一步对应的物理含义我都写在注释里方便你照着自己改。%% 小电流接地系统单相接地故障仿真(相量法) clear; clc; close all; % 系统级参数 Un 10e3; % 额定线电压10kV f 50; w 2*pi*f; Uph Un/sqrt(3); % 相电压约5773.5V a exp(1j*2*pi/3); % 对称分量法旋转因子 % 线路参数 z1 0.17 1j*0.38; % 正序单位阻抗Ω/km z0 0.35 1j*1.30; % 零序单位阻抗Ω/km c0 6.5e-9; % 每相对地电容F/km len [10, 8, 12]; % 三条馈线长度km % 电源与主变等值阻抗 Zg1 0.1 1j*2.5; % 正序等值阻抗折算到10kV侧 % 故障点设在1号馈线距母线5km处 xf 5; Z1eq Zg1 z1*xf; % 故障点正序等值阻抗 Z2eq Z1eq; % 负序近似等于正序 % 实际工程中负序与正序差异很小可以这样近似 % 零序网络参数 Cg c0 * sum(len); % 全系统每相对地总电容约195nF % 消弧线圈模式过补偿10% mode 2; % 1-不接地2-经消弧线圈过补偿 if mode 1 Lt Inf; % 中性点不接地电感无穷大 else % 先算全补偿电感再缩小10%实现过补偿 L_full 1/(3*w^2*Cg); Lt L_full / 1.1; % 过补偿10% end if isinf(Lt) Y0 1j*w*Cg; % 只有对地电容 else Y0coil 1/(1j*3*w*Lt); % 注意这里的3倍关系 Y0 1j*w*Cg Y0coil; end Z0eq 1/Y0; % 零序等值阻抗 % 参数扫描故障电阻 RfList [0.1, 10, 100, 500, 1000]; fprintf( 故障电阻扫描结果 \n); for k 1:length(RfList) Rf RfList(k); % 对称分量法核心公式 I0 Uph / (Z1eq Z2eq Z0eq 3*Rf); If 3*I0; % 故障电流 % 故障点的序电压 V1 Uph - I0*Z1eq; % 正序电压 V2 -I0*Z2eq; % 负序电压 V0 -I0*Z0eq; % 零序电压 % 合成三相电压 Va V1 V2 V0; % A相故障相 Vb a^2*V1 a*V2 V0; Vc a*V1 a^2*V2 V0; fprintf(Rf%6.1fΩ | If%8.3f A | U0%7.1f V | |Va|%.1fV | |Vb|%.1fV | |Vc|%.1fV\n, ... Rf, abs(If), abs(V0), abs(Va), abs(Vb), abs(Vc)); end这段代码的运行逻辑是先算各种等值阻抗然后对每组故障电阻解一次对称分量方程。因为代码是相量法所以无论扫描多少组运行时间都在几十毫秒以内可以轻松扩展为上千组参数扫描。3.3 参数扫描方案设计实际做仿真研究时单一工况没有说服力。我一般会设计三组维度扫描故障电阻、故障位置、中性点接地方式。故障电阻从金属性接地开始取值0.1Ω、10Ω、100Ω、500Ω、1000Ω。设置这个序列的目的是模拟从直接接地到高阻接地的全过程。高阻接地是目前配电网故障选线最头疼的场景很多算法在1000Ω以上直接失效所以仿真结果里必须保留这一档。故障位置方面我的做法是在1号馈线分别取25%、50%、75%三个位置观察故障距离对正序阻抗和故障电流的影响。这里有个容易被忽略的规律故障位置影响的主要是正序和负序阻抗零序电容几乎不受影响因此故障电流的变化幅度远小于故障电阻变化带来的影响。运行完整组扫描后会自动生成一个结构化的结果表格内容包括故障电流、中性点电压、零序电压、故障相电压、非故障相电压。这个表格我建议直接导出成CSV方便后续和实测录波数据对比。4. 运行结果分析与波形解读4.1 金属性接地时的典型结果先用最经典的金属性接地工况看结果。当故障电阻Rf0.1Ω中性点不接地时典型运行结果大致是这样电气量数值物理含义故障电流If约1.8A很小的电流这就是“小电流”的由来中性点位移电压接近5773V几乎等于相电压零序电压U0接近5773V与中性点位移电压基本一致A相故障相电压接近0V金属性接地特征B相非故障相电压约10000V升高到线电压水平C相非故障相电压约10000V同样升高到线电压水平这个结果和理论分析完全对得上。金属性接地时故障相电压被强制压到零中性点被迫整体偏移于是两个非故障相的电压从相电压升高到线电压。B相和C相电压虽然幅值都接近10000V但相位不同等于线电压。很多人看到这个结果会误以为故障电流应该很大毕竟电压有10kV级别。但实际上正因为零序回路是容性高阻故障电流就只有几安培。这个反直觉的结果正是小电流接地系统最核心的特征也是后续保护方案设计的根本约束。4.2 故障电阻变大的趋势性规律把故障电阻从0.1Ω逐步提高到1000Ω结果会发生明显变化。我这里整理了一份典型趋势供你对照自己的仿真输出故障电阻Rf故障电流If零序电压U0故障相电压Va0.1Ω约1.8A约5770V约0V10Ω约1.5A约5300V约30V100Ω约1.0A约3200V约300V500Ω约0.5A约1100V约530V1000Ω约0.4A约700V约600V这里最值得关注的是随着故障电阻增加故障电流和零序电压都在下降但下降速度并不是线性的。故障电阻从0.1Ω升到1000Ω零序电压下降了接近十倍故障相电压却从接近0升到几百伏。这说明高阻接地时故障点不再是严格的“接地”更像一个经过高阻的泄漏通道故障特征明显变弱。这个趋势对选线算法设计影响很大。如果算法只依赖零序电压幅值高阻接地时很容易拒动如果只依赖零序电流幅值也会因为故障电流太小而失灵。所以现在主流的选线方法都会引入零序有功分量或者暂态分量而不是只看幅值。4.3 消弧线圈补偿前后的对比接下来看消弧线圈的作用。我们把中性点从“不接地”切换到“过补偿10%”保持其他条件不变观察金属性接地的变化。补偿后的典型结果最明显的变化是故障点残流明显减小。不接地时故障电流约1.8A经消弧线圈过补偿10%后残流可能降到0.2A以下。这就是消弧线圈的核心价值——把容性电流补偿掉让接地电弧更容易自行熄灭。但同时也有一个副作用故障线路和非故障线路的零序电流方向差异变得不明显传统基于零序电流幅值或方向比较的选线方法会失效。这一点在仿真里体现得特别直观。因此这几年研究故障选线的团队几乎都在消弧线圈接地系统里引入了“零序有功分量选线”或者“主动注入信号法”。如果在仿真中去掉3倍关系直接用$j\omega L$参与计算消弧线圈的补偿效果会完全对不上理论值。我建议每个做这个方向的仿真的人都亲手改一次这个参数看看结果变化有多大这样你对“3倍关系”的记忆会比看十遍公式都牢固。4.4 从相量结果延伸到暂态波形相量法给出的是稳态值适合做参数扫描和趋势分析。但实际故障录波里看到的都是瞬态波形故障初瞬会有一个明显的电容放电和充电过程。要把这个过程仿真出来需要用到Simulink。Simulink里的建模结构其实和相量法等值电路是一一对应的三相电源负责提供基波电势三相变压器要设置合适的连接组别线路用三相π型等值参数故障模块选择相间故障A相接地过渡电阻填对应的Rf。关键的一个设置是消弧线圈要在三相变压器中性点和地之间串一个电感元件电感值用前面算出的15.8H。仿真时间步长我一般设为20微秒仿真时长取0.1到0.2秒故障在0.04秒投入。这样波形里可以看到故障前后的完整过渡过程。如果你发现波形出现持续振荡第一个要查的必然是消弧线圈补偿度看看是不是被误设成了全补偿。5. 常见问题与排查技巧实录5.1 仿真不收敛或波形震荡这是单相故障仿真里最常遇到的问题我刚开始做的时候也被折腾过好久。Simulink不收敛的原因通常有两个一是模型里有纯电感回路但没有串联电阻二是求解器的最大步长设得太大。解决第一个问题的方法很土但很有效在电感或变压器支路里串一个小电阻比如0.001Ω数值上几乎不影响结果但能让求解器避免奇异矩阵。第二个问题更直接把最大步长从默认值改到1e-4秒左右求解器选ode23t大部分收敛问题都能解决。如果相量法脚本里遇到复数结果异常比如零序电压接近无穷大那多半是零序网络趋近于并联谐振。检查消弧线圈的电感是否把补偿度设成了100%如果是把它改成过补偿10%再看。5.2 序分量计算最容易错的地方我见过太多人在对称分量法这一步翻车而且翻车点出奇一致。第一个高频错误是遗忘3倍过渡电阻。单相接地故障的边界方程里接地电阻进入序网时是$3R_f$不是$R_f$。代码里漏掉这个3仿真结果在低阻接地时看起来还像回事一旦Rf变大全错。第二个高频错误是旋转因子方向。对称分量法里正序B相滞后A相120度所以旋转因子应该取$e^{-j120^\circ}$也就是代码里的aexp(-1j*2*pi/3)。有些资料习惯用$a$表示$e^{j120^\circ}$如果你同时参考两份资料很容易混。第三个最高频的错误就是消弧线圈在零序网络中的3倍关系。这个前面已经强调过这里再重复一次中性点接地阻抗在零序网络中要乘3因为中性点流过的电流和零序电流之间存在3倍比例关系。5.3 参数单位与命名规范电力仿真里单位错误不会报错但结果会非常离谱。我遇到过最尴尬的一次是线路电容单位写成微法结果单相接地电容电流算出来几百安培和实测差了几十倍。为了避免这种问题我给自己定了一条铁律所有参数先换算成标准单位再写进代码。长度用km阻抗用Ω/km电容用F/km功率用W电压用V。代码里专门加一个参数定义区每一项都写清楚单位和注释。这样做也许看起来啰嗦但在扫描几百组参数的时候能省去无数排查时间。5.4 实用排障清单最后整理一份我在调试这类仿真时常用的排查清单按优先级排序先确认中性点接地方式是否和预期一致不接地时电感是否已置为Inf。核对消弧线圈电感计算值是否有3倍关系和补偿度正负号错误。核对故障电阻进入序网时是否乘了3。核对零序电压的参考点是以地为参考还是以中性点为参考。在Simulink里先跑一个Rf0.1Ω的金属性接地用相量法结果校核稳态值。最后再检查单位换算尤其是电容和阻抗。按照这个顺序排查绝大部分问题都可以在半小时内定位。不要一开始就怀疑求解器或者仿真算法绝大多数错误都出在参数和边界条件上。做完这套仿真我个人最大的体会是小电流接地系统的建模难度不在操作软件而在等值电路的理解。Matlab只是工具真正的门槛是你能不能把系统“压”成一个清晰的序网络。先把这一层想明白无论后面是用脚本相量法还是Simulink做暂态都会顺很多。如果这篇文章帮你少走了一两次弯路那这个记录就值了。