
电力系统三相短路故障是电力系统中最严重的对称故障类型直接关系到系统稳定性评估、短路电流计算、继电保护整定以及断路器选型。很多电气工程专业的同学和刚接触电力系统仿真工程师都会选择 Matlab/Simulink 来完成三相短路暂态过程的建模与分析原因很简单Simulink 的 Simscape Electrical 工具箱提供现成的三相电源、变压器、线路、故障模块不需要从零开始推导微分方程搭建速度快、波形可视化直观还能配合脚本做批量工况扫描。这次我们围绕“电力系统三相短路 Matlab Simulink 仿真”这个主题完整走一遍三相短路暂态仿真的流程从 Simulink 仿真环境准备、三相短路故障模型搭建、故障参数设置到短路电流与电压波形的分析再到使用 Matlab 脚本批量修改故障时间、故障电阻等参数最后给出常见的仿真报错排查思路。无论你是正在做课程设计、毕业设计还是在做电力系统保护相关的项目预研这篇文章都能直接帮你少走弯路。文章会保持一个原则先讲清楚能不能做、需要什么环境再给出具体操作步骤和验证方法。涉及 Simulink 内部参数的地方我会给出工程上常用的设置思路但具体数值需要根据你实际建立模型的电源容量、电压等级和线路参数来确定不能照搬一个固定的“标准答案”。如果你之前没接触过 Simscape Electrical 库建议先把环境检测部分看完避免后面模型搭建时找不到模块。1. 三相短路 Simulink 仿真核心能力速览能力项说明仿真工具Matlab / Simulink配合 Simscape Electrical 工具箱原 SimPowerSystems / Specialized Power Systems故障类型支持三相短路ABC、AB、AC、BC、单相接地、两相接地等核心模块Three-Phase Fault、Three-Phase Source、Three-Phase Transformer、Three-Phase V-I Measurement、powergui数学本质求解暂态微分方程包含次暂态、暂态和稳态阶段典型输出三相短路电流波形、母线电压跌落波形、功率波形、断路器动作时序批量仿真能力支持通过 Matlab 脚本调用 sim()批量修改故障参数导出数据硬件要求无特别 GPU 需求CPU 主频和内存影响仿真速度普通办公电脑即可运行教学规模模型工具箱依赖Simulink、Simscape、Simscape Electrical适合场景课程设计、毕业设计、电力系统故障分析、继电保护整定计算、短路电流计算学习成本低到中等熟悉 Simulink 基本建模即可上手这里要特别提醒Simscape Electrical 在较新版本 Matlab 中位于 Simscape 分支下老版本可能叫 SimPowerSystems。如果你找不到 Three-Phase Fault 模块优先检查工具箱是否安装完整而不是怀疑模块名称被改掉了。2. 适用场景与使用边界三相短路 Simulink 仿真最常出现在这几类需求中电力系统课程设计和毕业设计比如“某区域电网三相短路暂态过程仿真”“不同故障点短路电流对比分析”。继电保护原理验证比如观察距离保护、纵联差动保护在短路瞬间感受到的电气量变化。短路电流数值估算通过仿真验证手算短路电流是否合理辅助断路器开断能力校验。教学演示把抽象的电抗、时间常数、暂态分量变成可视化波形方便理解。但这类仿真也有明显边界Simulink 中的三相短路模型是集中参数模型不能完全代替 PSCAD/EMTP 这类电磁暂态程序中分布参数线路模型在超高压长线路场景下的精度。仿真结果精度取决于元件参数准确性特别是线路阻抗、变压器漏抗、电源内阻抗和故障过渡电阻。如果想验证保护装置实际逻辑还需要把 Simulink 导出数据接入继电保护测试设备或控制保护装置闭环平台单纯仿真波形不能代替动模实验。使用 Matlab 和 Simulink 时请使用正版权限遵守所在单位的软件授权要求。模型文件、仿真数据如果需要公开或商用注意不要包含真实电网敏感拓扑和机密参数。3. 环境准备与前置条件3.1 软件安装与工具箱检测三相短路仿真依赖以下工具箱MATLABSimulinkSimscapeSimscape Electrical安装 Matlab 后在命令行窗口执行ver(Simscape) ver(SimscapeElectrical)如果返回版本信息说明工具箱可用。如果提示找不到需要重新运行 Matlab 安装程序勾选 Simscape Electrical 后补装。也可以通过命令行直接测试能否打开自带的三相短路示例模型power_3phshort这个示例模型是三相短路仿真的标准教学案例包含电源、线路、故障模块和示波器。如果它能在你的环境中正常打开并运行说明环境没有问题后面可以按自己的参数改造。3.2 硬件与环境建议三相短路仿真属于动态系统数值求解吃的是 CPU 单核性能和内存不需要独显。一个教学规模的简单模型2 核 CPU、8GB 内存就能跑。如果模型包含多机系统、详细发电机组、长线路分布参数模型内存建议 16GB 以上仿真步长设置不合理时计算时间会明显拉长。操作系统方面Windows、Linux、macOS 都有对应 Matlab 版本但 Simscape Electrical 官方支持力度在 Windows 上最完整建议课程设计优先用 Windows。运行 Matlab 时如果遇到启动特别慢、仿真卡顿可以先关闭后台占用 CPU 的软件再把 Simulink 画布缩放比例调到默认状态避免模型显示渲染消耗额外资源。3.3 建立工作目录建议每个仿真项目单独建文件夹按下面结构组织project_root/ ├── model/ % 存放 .slx 模型文件 ├── script/ % 存放 Matlab 脚本 ├── data/ % 存放仿真输出数据 ├── fig/ % 存放波形导出图片 └── report/ % 存放计算结果和说明文档在 Matlab 中把当前目录切换到项目根目录所有脚本路径尽量使用相对路径避免换电脑后路径失效。4. 三相短路 Simulink 仿真模型搭建4.1 三相短路仿真系统结构一个基础的电力系统三相短路仿真模型通常由以下几个部分串联或并联组成三相交流电源用于提供系统电压和短路容量。变压器可选用于模拟电压等级变换。输电线路通常用集中参数 RL 支路或 PI 型线路模块等效。三相短路故障模块作为故障注入点。负载根据短路点位置决定是否接在故障点之后。测量与显示模块包括电压电流测量、功率测量、Scope 示波器。powergui 模块用于设置仿真模式、求解器、初始状态。对于三相短路暂态仿真短路点通常设置在负载侧或输电线路末端故障模块接地模拟金属性三相短路或经过渡电阻短路。4.2 新建模型并添加模块在 Matlab 命令行输入simulink打开 Simulink 起始页新建空白模型保存为three_phase_short_circuit.slx。在 Simulink Library Browser 中依次查找以下模块并拖入画布Simscape Electrical Specialized Power Systems Fundamental Blocks Electrical Sources Three-Phase SourceSimscape Electrical Specialized Power Systems Fundamental Blocks Elements Three-Phase Transformer (Two Windings)可选Simscape Electrical Specialized Power Systems Fundamental Blocks Elements Three-Phase Series RLC Branch 或 PI Section LineSimscape Electrical Specialized Power Systems Fundamental Blocks Faults Three-Phase FaultSimscape Electrical Specialized Power Systems Fundamental Blocks Measurements Three-Phase V-I MeasurementSimscape Electrical Specialized Power Systems powerguiSimulink Sinks Scope如果找不到 Fault 模块确认 Library Browser 顶部搜索框输入Three-Phase Fault后能否出现结果。如果没有检查工具箱安装。4.3 模块参数基本设置这里给出常用的参数设置思路实际数值需要根据仿真对象确定Three-Phase SourcePhase-to-phase RMS voltage根据你的系统电压等级设置比如一次侧 110kV、二次侧 10kV。Frequency50 Hz国内系统。Internal connection通常选择 Yg方便后续接地短路仿真。指定短路容量或直接使用默认内阻如果做短路电流精确计算应填入正确的电源等效阻抗。Three-Phase Transformer额定功率、频率与系统一致。一次侧和二次侧接线方式常见 Yg-D 或 Yg-Yg。励磁电阻和电抗如果主要关注短路电流可以先保持默认值。Three-Phase Series RLC Branch用于模拟线路阻抗。先确定电阻 R 和电感 L电感可以通过线路电抗 X 2 * pi * f * L 换算。如果是高压线路建议使用 PI Section Line 模块输入单位长度正序、零序参数和线路长度。Three-Phase FaultFault type选择 ABC三相短路。Fault resistance0.001 欧姆或更小用于模拟金属性短路。Ground resistance根据系统接地方式设置三相短路时通常设为很小值或 0。Transition time设置故障起始时间比如 0.1s。如果希望故障在某时刻切除需要勾选 External control 或设置 Fault break times比如 [0.1 0.3] 表示 0.1s 故障投入0.3s 故障切除。powerguiSimulation type选择 Continuous。Solver建议使用 ode23tb这个求解器对电力电子和故障暂态这类刚性系统比较友好。Sample time如果你的模型里有离散控制模块需要按控制周期设置。4.4 连接模型按照电源 - 线路 - 故障点 - 负载的顺序连接。在故障点位置用 Three-Phase V-I Measurement 把三相电压电流引出来接到 Scope 上。如果使用了变压器注意电压等级和绕组连接方式避免 Simulink 因连接错误报错。连接完成的模型从原理上讲应该是一个闭合回路电源端提供电能中间经过线路阻抗故障点可以接地短路线路之后可以保留负载也可以断开。故障模块并联在故障点与地之间故障期间产生很大的短路电流。4.5 设置求解器在模型窗口菜单 Simulink - Model Configuration Parameters 中Solver 选择变步长 ode23tb。Max step size 不要设置太大建议设为一个工频周期的 1/100 到 1/20 之间。50Hz 系统工频周期是 0.02s如果最大步长设 0.01s波形精度会非常差。一般取 0.0001s 到 0.0005s 可以兼顾精度与速度。仿真停止时间根据故障过程设定比如故障 0.1s 开始、0.3s 结束那么总仿真时长设为 0.5s 到 1s可以看到故障前、故障中、故障切除后的暂态过渡过程。5. 三相短路暂态仿真功能测试与效果验证5.1 仿真前模型一致性检查点击模型工具栏的 Run 按钮之前先在 Simulink 编辑器中按 CtrlD执行模型更新。如果模块参数有错误、接线不完整、变量未定义这一步会直接报错。网络搜索里常看到有人问“Simulink 模型 update diagram 报错怎么处理”核心就是参数没填完整或工具箱未安装。5.2 运行三相短路仿真并观察短路电流在模型窗口点击 Run仿真结束后双击 Scope可以看到如下典型波形短路发生前负载电流很小幅值由负载大小决定。短路瞬间电流突然增大出现很大的冲击电流峰值。故障持续期间电流包含周期分量和非周期分量非周期分量按指数规律衰减时间常数由系统阻抗的 X/R 决定。故障切除后电流恢复到正常负载电流水平同时可能伴随电压恢复的暂态振荡。判断仿真是否成功的标准短路瞬间电流有没有明显突变。波形中没有出现数值溢出或 NaN。电流波形在经历暂态后趋于稳定。三相电流幅值在对称短路时保持一致相位互差 120 度。如果三相短路波形幅值不对称优先检查 Three-Phase Fault 的 Fault type 是否选择了 ABC而不是单相故障或两相故障。5.3 母线电压暂态跌落观测将 Three-Phase V-I Measurement 的电压输出接到另一个 Scope可以看到短路期间母线电压跌落。金属性三相短路时故障点附近电压几乎为零距离电源越远的节点电压跌落越明显。这个结果对理解“短路点附近电压最低”这一概念非常有帮助。如果你的模型接了变压器可以分别看一次侧和二次侧电压波形观察变压器对短路电流的影响。5.4 改变短路位置对比短路电流大小把 Three-Phase Fault 放在不同位置比如电源出口处、线路中段、负载侧分别仿真对比短路电流大小。理论上故障点越靠近电源短路电流越大。这个实验常用于课程设计中的“短路电流随距离变化分析”。具体操作复制模型保存为不同文件。修改线路长度参数。分别运行仿真保存 Scope 数据。在 Matlab 脚本中用toWorkspace导出电流数据绘制对比曲线。5.5 使用 power_3phshort 示例快速体验如果自己搭模型遇到困难先用自带示例跑通流程power_3phshort打开模型后直接点击 Run观察短路电流波形。然后在这个模型基础上修改电源电压、短路故障时间、线路参数逐步替换成自己的系统参数比从空白模型开始搭更稳。6. Matlab 脚本驱动 Simulink 批量短路仿真三相短路仿真如果只做一次直接在模型中改参数就行。但在实际项目中经常需要分析不同故障时刻、不同故障电阻、不同短路位置对短路电流的影响。这时用 Matlab 脚本批量控制 Simulink 仿真可以大幅提升效率。6.1 使用 sim 函数运行仿真模型文件保存为three_phase_short_circuit.slx在脚本中调用sim% 打开模型并确保模型已加载 mdl three_phase_short_circuit; load_system(mdl); % 设置仿真停止时间 set_param(mdl, StopTime, 1); % 运行仿真结果保存到变量 simOut sim(mdl); % 如果模型中使用 To Workspace 模块导出电流这里可以读取 % t simOut.tout; % i_a simOut.i_a.Data;如果你的模型里只用 Scope 看波形脚本没法自动导出数据。建议在模型中添加 To Workspace 模块把三相电流和电压分别以数组形式导出到工作区。例如给三相电流测量模块输出接一个To Workspace变量名设为i_abc格式设为 Array。这样每次仿真后i_abc就是一个 N×3 的矩阵第一列是 A 相电流、第二列是 B 相、第三列是 C 相。6.2 批量修改故障时间假设模型中的 Three-Phase Fault 模块名为Three-Phase Fault故障投入时间在参数FaultBreakers中控制。可以用set_param批量修改mdl three_phase_short_circuit; load_system(mdl); fault_times [0.02, 0.05, 0.1, 0.15]; for i 1:length(fault_times) ft fault_times(i); % 设置故障开始时间为 ft故障切除时间为 ft 0.2 set_param([mdl /Three-Phase Fault], FaultBreakers, ... mat2str([ft ft0.2])); simOut sim(mdl); % 在这里保存数据建议用变量名加后缀区分不同工况 end运行前需要确认FaultBreakers参数名称是否正确。不同 Matlab 版本中参数名可能略有差异可以通过在命令行执行get_param([mdl /Three-Phase Fault], DialogParameters)查看 Three-Phase Fault 模块全部可配置参数名。这个方法同样适用于批量修改 Fault resistance、Ground resistance 等参数。6.3 批量修改故障电阻工程实际中短路不一定是金属性短路经常需要看经过渡电阻短路的情况。批量修改故障电阻的脚本思路和修改故障时间一致mdl three_phase_short_circuit; load_system(mdl); Rf_values [0, 0.01, 0.1, 0.5, 1.0, 5.0]; % 故障电阻 results cell(length(Rf_values), 2); for i 1:length(Rf_values) Rf Rf_values(i); set_param([mdl /Three-Phase Fault], FaultResistance, num2str(Rf)); simOut sim(mdl); % 读取电流数据 i_abc simOut.i_abc.Data; % 假设 To Workspace 导出了 i_abc t simOut.tout; % 计算故障期间 A 相电流有效值或峰值 peak_i_a max(abs(i_abc(:,1))); % 记录 results{i,1} Rf; results{i,2} peak_i_a; end % 显示结果 disp(table([Rf_values], cell2mat(results(:,2)), VariableNames, {Rf, Peak_A}));注意simOut.i_abc的访问方式取决于模型导出数据的格式。如果 To Workspace 使用 Timeseries 格式需要用i_abc.Data和i_abc.Time。如果使用 Array 格式直接用矩阵。6.4 统计短路电流峰值和衰减时间常数短路电流暂态过程最重要的两个指标一个是冲击电流峰值一个是非周期分量衰减时间常数。通过脚本数据可以这样提取% 假设 t 和 i_abc 已从仿真结果中取出 t simOut.tout; i_a i_abc(:,1); % A 相电流 % 找短路开始后电流绝对值的最大值 % 先确定故障起始时间索引例如 0.1s [~, idx_start] min(abs(t - 0.1)); % 从故障开始后取 0.05s 的数据找峰值 window (t 0.1) (t 0.15); [peak, idx_peak] max(abs(i_a(window))); peak_time t(window); fprintf(短路冲击电流峰值: %.2f A\n, peak); % 用寻峰函数找第一个局部极大值点这里不展开具体项目可以结合 findpeaks 分析课程设计报告中通常需要列出短路点、故障电阻、短路电流峰值、稳态短路电流这几个数据用脚本批量计算后填入表格工作量会大幅下降。7. 资源占用与性能观察7.1 仿真速度与步长关系三相短路暂态仿真在故障瞬间变化剧烈求解器需要缩小步长来维持精度。如果在 Simulink 设置中把 Max step size 拉得太大仿真速度会快但波形可能出现严重失真甚至跳过冲击电流峰值。如果设得太小仿真时间会成倍增加。建议的调整方法先用默认求解器 ode23tbMax step size 设为 0.0002s。观察仿真时长如果太慢逐步放大到 0.0005s对比波形峰值变化。如果波形峰值变化超过 1%说明步长过大需要回调。7.2 模型复杂度对仿真耗时的影响一个简单单电源模型仿真 1 秒的暂态过程通常只要几秒到十几秒。如果模型包含多台发电机、调速器、励磁系统、详细输电线路仿真时间可能延长到几分钟甚至更久。如果发现仿真卡死优先检查是不是存在代数环。Simulink 中电源模块、变压器模块和故障模块如果直接闭环连接可能出现代数环求解时会非常慢甚至报错。可以在 Model Configuration Parameters 中勾选 Algebraic Loop 诊断让 Simulink 提示代数环位置。更稳妥的做法是在测量环节加上很小的滤波时间常数或使用单位延迟打断代数环。7.3 如何直观观察仿真进度运行长仿真时可以在模型底部加一个 Display 模块显示时间或者使用sim命令的SimulationOutput中的诊断信息。如果批量仿真多个工况建议在每个工况仿真前用fprintf打印当前进度fprintf(正在仿真工况 %d/%d, 故障电阻 %.2f ohm\n, i, length(Rf_values), Rf);这样即使仿真跑很久也能知道当前卡在哪一步。8. 常见问题与排查方法问题现象可能原因排查方式解决方案找不到 Three-Phase Fault 模块Simscape Electrical 工具箱未安装执行ver(SimscapeElectrical)重新安装工具箱仿真开始后报错“Cannot locate model”模型文件路径不在当前目录检查当前文件夹路径用cd切换到模型目录或使用绝对路径加载仿真结果全是 NaN 或 Inf参数设置错误或模型发散检查电源参数、故障电阻是否为 0设置极小接地电阻如 0.001 欧姆避免纯零阻抗波形严重失真峰值跳变最大步长太大观察步长设置减小 Max step size 到 0.0002 或更小三相电流幅值不对称故障类型选错或电源绕组接线不对称检查 Three-Phase Fault 的 Fault type选择 ABC 三相短路检查电源 Internal connection 是否统一为 Yg仿真很慢一直卡住代数环或模型过复杂检查诊断报告是否提示 Algebraic Loop在测量环节加延迟或小时间常数或用powergui的离散模式使用 set_param 改参数时提示参数不存在模块名写错或参数名与版本不一致用get_param查看可用参数根据实际 DialogParameters 名称修改脚本Scope 中没有波形To Workspace 未配置或仿真时间过短检查 Scope 是否连接测量模块重新连线或增加仿真停止时间短路电流没有暂态衰减过程模型使用 phasor 仿真模式打开 powergui查看 Simulation type使用 Continuous 模式才能观察暂态和非周期分量批量仿真过程中 Matlab 内存不断增加每次 sim 输出对象未及时清理查看工作区变量循环末尾调用clear simOut或关闭模型视图使用sim(mdl, StopTime, ...)精简输出8.1 求解器相关错误“Solver was unable to reduce the step size without violating minimum step size” 属于刚性系统常见报错。处理办法换用 ode15s 或 ode23tb。增大允许的最小步长限制但这只是绕过问题需要先排查模型是否正确定义。检查模型中是否有数值很大的串联电感和很小的电阻组合导致时间常数差异过大。8.2 模块连接错误Simulink 中电气模块连线不能像普通 Simulink 信号线一样随意连接。Three-Phase Source 输出的是电气物理连接端口Scope 输入是信号端口。如果你把电源输出直接连到 Scope会报连接错误。正确做法是中间加 Three-Phase V-I Measurement 模块这个模块把电气量转换成 Simulink 信号量再接 Scope。这是新手最容易犯的错误。9. 最佳实践与使用建议9.1 分阶段搭建模型不要一次性搭完整模型再仿真。建议按以下顺序搭电源 负载先不接故障模块跑通正常负载仿真。加线路阻抗观察电压降和负载电流变化。在线路末端加 Three-Phase Fault设置故障时间观察短路波形。加变压器对比有无变压器时短路电流变化。最后加批量脚本和 To Workspace 导出。每增加一个模块就运行一次仿真这样出问题时定位很快。9.2 参数命名与模板保存模型保存后在脚本中使用set_param时模块名必须完全匹配模型画布上的名字。例如你拖动了一个 Three-Phase Fault默认名字是“Three-Phase Fault”如果画布上还有第二个名字就是“Three-Phase Fault1”。建议在搭建模型时就把模块改名改成容易识别的名称如Fault_Line1、Source_110kV、Transformer_110_10这样脚本可读性更高也方便别人接手你的模型。9.3 数据导出与报告生成课程设计报告经常需要大量波形图和表格。建议每个仿真案例跑完后把关键结果保存到.mat文件save([data/case_Rf_ num2str(Rf) .mat], t, i_abc, v_abc);之后写报告时写一个绘图脚本统一读取这些.mat文件生成对比图figure; hold on; for i 1:length(Rf_values) data load([data/case_Rf_ num2str(Rf_values(i)) .mat]); plot(data.t, data.i_abc(:,1), DisplayName, [Rf num2str(Rf_values(i))]); end xlabel(时间 (s)); ylabel(A 相电流 (A)); legend; grid on;这样可以减少重复仿真也方便对数据做进一步分析比如计算短路电流冲击系数。9.4 敏感数据与版权合规如果你使用的是真实电力系统参数注意对关键数据进行脱敏处理。公开发布模型文件、仿真报告或论文时应避免泄露具体站点接线方式、真实负荷曲线和保护定值。Matlab 本身是商业软件如果你使用的是试用版或实验室授权公开发布仿真数据和模型时需要遵守软件许可协议不要传播盗版破解工具。9.5 仿真模型做版本管理一个课题会多次修改模型建议每完成一个阶段就另存为带日期的版本three_phase_short_circuit_v0_1.slx three_phase_short_circuit_v0_2.slx three_phase_short_circuit_final.slx配合脚本的git仓库可以随时回退到之前能跑的版本。这个习惯在批量仿真报错后特别有用。10. 总结与下一步三相短路 Matlab Simulink 仿真入门不难核心是把 Simscape Electrical 的模块连接方式理解清楚尤其是电气端口与信号端口的区别再掌握powergui的求解器设置和 Three-Phase Fault 模块的参数配置就能得到比较理想的暂态波形。如果你刚开始做这个课题第一步不是直接拖模块而是先运行一遍power_3phshort自带示例然后在这个示例上修改故障时间、故障类型和线路阻抗。跑通之后再按自己的系统参数搭建独立模型。这样做的好处是有一个已知正确的基线参考不会因为模型连接问题挡住后续分析。接下来可以继续扩展的方向包括改用 PI 型分布参数线路对比集中参数与分布参数对短路暂态过程的差异。加入发电机励磁系统和调速器模型观察故障期间发电机功角变化。把短路电流仿真结果用于继电保护整定计算研究不同短路点对保护范围的影响。通过 Matlab App Designer 写一个简单的交互界面让用户在界面上输入故障电阻、故障时间点击按钮后自动运行 Simulink 仿真并把波形显示在界面上。功率系统短路仿真最重要的是“故障越严重系统响应越剧烈”这一物理概念。建议先把单电源简单模型玩透再去研究多电源和环网模型这样遇到波形异常时更容易判断是模型参数问题还是仿真设置问题。文章里给的脚本模板可以直接复制到你的项目里修改使用。如果仿真中遇到报错优先检查工具箱、求解器、故障模块参数这三项大多数问题都能解决。收藏这篇文章搭模型的时候对照来看能省不少时间。