做电力系统仿真的同学,十个里面有八个绕不开“39节点”这个经典算例。我最早接触它是在研究多机系统暂态稳定的时候,当时导师直接丢给我一套“10机39节点的仿真任务”,说得很简单:“把故障跑出来,看看功角曲线。”真做起来才发现,这个模型看着数据齐全,但仿真参数设置、初始化流程、控制器搭配处处都有大坑。后来我在多个项目里反复用它做过故障分析、极限切除时间扫描、低频振荡研究,才慢慢摸清楚它的脾气。
这篇文章就围绕“基于10机39节点系统的Matlab/Simulink仿真”这件事,把从拿到算例数据到搭出能跑的仿真模型、再到解读结果和排查问题的完整路径讲一遍。适合刚开始接触多机系统仿真、卡在参数设置或者仿真跑不收敛的朋友,也适合想从单机无穷大系统往多机复杂电网过渡的研究者。内容全是我在实操中踩过的坑和验证过的方法,可以直接照着做。
1. 为什么选10机39节点:建模方案与仿真目标拆解
1.1 39节点算例在电力系统仿真里的定位
10机39节点系统是电力行业公认的测试算例,很多论文、教材、算法验证都拿它当基准。它规模不大,但结构特点非常贴近实际电网:39条母线、34条交流线路、12台变压器,发电机集中在10个节点上,其余节点全是负荷或联络节点。这就是一个非常典型的多机互联电网缩略版。
学习单机无穷大系统时,可能感觉发电机参数、励磁、调速器都很好理解,但一到多机系统,发电机组之间的互相影响、区间振荡模式、故障后机组失步的过程,立刻变得复杂起来。39节点算例恰好能把这些现象都容纳进来,又没复杂到一眼看不到头的程度,所以特别适合用来建立“全局电网”的感觉。
从行业应用角度看,这个算例常被用来做三类事情:
- 算法验证:比如潮流算法、稳定判据、参数辨识方法,先跑39节点看结果是否符合公认规律,再推广到大规模系统。
- 控制策略验证:比如PSS参数整定、励磁控制改进、切机切负荷策略,在39节点上可以先快速验证效果。
- 教学和培训:多机系统教材里的经典案例、期末课程设计,基本都从它起步。
我自己的体会是,39节点是“从单机思维过渡到系统思维”的最好跳板。它不算复杂,但包含了足够多的动态交互,能让仿真结果既有参考价值又有分析深度。
1.2 仿真目标拆解:稳态校验和动态稳定两件事
拿到这个任务,首先要分清楚自己到底要做什么。很多新手直接上来就搭模型,搭完跑一条曲线,也不知道结果对不对,这是最大的误区。
做10机39节点仿真,目标至少可以拆成两层:
- 稳态层:先跑出正常潮流分布,校验各节点电压幅值都在合理范围内,通常在0.95到1.05pu之间,各支路功率不越限,发电机出力在容量范围内。这一步是动态仿真的前提,稳态都不对,动态结果没有任何意义。
- 动态层:在某一时刻在指定母线施加三相短路故障或负荷突变,观察发电机组功角、转速、电压的变化,分析系统能否在故障切除后重新回到稳定运行状态,判断系统是否暂态稳定,观察振荡的阻尼情况。
这两层目标决定了建模方式完全不同。只用做潮流,根本不需要搭发电机动态模型,用静态负荷和恒压源就够了。但要做暂态稳定,就必须把同步发电机、励磁系统、调速器、PSS这些控制器全部考虑进去。
所以项目开始前,先问自己:我是要看到“系统失稳”的临界切除时间,还是要评估某个PSS参数对阻尼的影响?不同目标,模型细节程度差别非常大。合理演绎一下:如果你的目标是故障后功角摇摆分析,那么发电机采用次暂态模型,控制器配置AVR和调速器是基本盘,PSS视研究重点决定要不要加。
1.3 为什么选Matlab/Simulink,而不是别的工具
做电力系统动态仿真,可选工具其实不少,比如BPA、PSS/E、DigSilent等专业电力系统软件。但我个人强烈推荐在Matlab/Simulink里搭建,理由是几个很现实的问题:
| 对比维度 | Matlab/Simulink | 专业电力系统软件 |
|---|---|---|
| 上手速度 | 模块化拖拽,图形界面直观 | 需要熟悉特定命令风格和数据库结构 |
| 自定义控制逻辑 | Simulink里可以随便搭PID、PSS、自定义模型 | 扩展功能受软件内置模型库限制 |
| 数据分析 | 直接出图、跑FFT、算模态、导出数据 | 后处理相对封闭,导出再用其他工具 |
| 版本兼容 | 有较完善的Simscape Electrical库 | 版本切换和算例兼容有时很麻烦 |
| 科研可信度 | 很多论文都用它验证,指数高 | 工具本身可信,但算例移植成本高 |
我见过不少人在PSS/E里搭建39节点模型,后期想加一个自定义的储能控制策略,折腾得很难受,最后还是回到Simulink来搭。Matlab生态的价值在于,控制算法、参数优化、结果分析都在同一个环境里,不需要来回切软件。
但这里也要泼一盆冷水:Simulink搭39节点,更多是“手动活”,没什么一键生成的魔法。你需要把母线、线路、发电机一个个拖进去接线,填参数,做初始化,这个工程量是逃不掉的。我的建议是把它当成一次“仿真建模基本功训练”,做完一遍,你对电力系统模型的理解会提升一个台阶。
2. 建模前的数据准备与核心参数解析
2.1 算例数据三件套:母线、支路、发电机动态参数
一套完整的39节点算例数据,通常包含三大部分:母线数据、支路数据、发电机动态数据。我拿到数据后,第一步绝不是直接往Simulink里拖模块,而是先在Excel或者MATLAB脚本里把数据整理成一张清晰的表,标注好每个字段的含义。
母线数据里最关键的字段是节点类型和电压基准。节点类型一般有三类:平衡节点、PV节点、PQ节点。39节点算例里,通常有一个大容量发电机节点作为平衡节点,负责吸收系统的不平衡功率,其它发电机节点设置为PV节点,给定有功出力和电压幅值。
支路数据分成两类:输电线路和变压器。每条输电线路给的是串联电阻、串联电抗、对地电纳。变压器支路还要额外给变比和阻抗。这里有个特别容易踩坑的地方:标准算例给的数据通常已经是标幺值,但参考基准不一定是100MVA,有些数据手册会给在100MVA基准下,有些会给在各自发电机额定容量基准下,必须仔细核对原始说明。
发电机动态参数包括惯性时间常数、阻尼系数、直轴和交轴电抗、暂态电抗、次暂态电抗,以及对应的时间常数。这些参数直接决定了功角摇摆的频率和衰减特性。对于39节点来说,发电机数据大体上各机组差异明显,惯性时间常数大的机组在故障时功角变化相对缓慢,这是解读结果时很重要的直觉。
2.2 同步发电机模型与控制器的协同逻辑
在Simulink里建模时,发电机的选择直接决定了仿真精度和计算时间。最常用的有两种:
- 经典模型:只有一个暂态电抗和电动势,忽略了励磁调节作用,适合极快粗略估计,但无法反映励磁系统的影响。
- 次暂态模型:包含直轴和交轴的多阶绕组效应,能更准确反映短路瞬间的电流特性和后续的动态过程。
做10机39节点暂态稳定,我建议直接用次暂态模型,也就是Simulink里比较完整的同步发电机模型。原因很简单,39节点本身规模不大,也不差这点计算量,但如果用太简化的模型,励磁系统、PSS这些控制器的效果根本没法体现出来。
控制器方面,励磁系统是必须的。电力系统要维持电压稳定,必须依靠励磁调节。Simulink里可以用自带的励磁模型,也可以自己搭一个带电压反馈的PI控制器,区别在于自带灵活性差一些,自己搭可以实现更多控制逻辑。
调速器模型也很重要,尤其是做故障后频率和功率分配分析时。如果只做几十秒内的暂态稳定,调速器的影响相对弱一些,但长期过程中必须考虑。
PSS电力系统稳定器则看情况。如果你想重点研究低频振荡和阻尼增强,PSS是核心研究对象。如果只是做故障功角分析,初始阶段可以先不加,等基础仿真跑顺了再加。
2.3 标幺值设置和基准容量换算
标幺值是电力系统仿真的命根子,这话一点不夸张。在Simulink里,发电机模块的输入参数单位往往要求你给出实际值或者标幺值,Powergui工具里也要设置基准量。
标准39节点算例的电压等级通常设定为345kV作为主网基准,发电机端电压可能是20kV,中间通过升压变压器连接。所以你必须在变压器模块里正确设置两个绕组的额定电压,否则潮流计算结果一定会出错。
看不到实际数据的,就按常见做法来处理:先设定系统基准容量为100MVA,在Powergui里把频率设为50Hz或者60Hz。由于我们做的是大电网典型算例,实际算例数据出处不同,频率基准可能不同,我建议以你拿到的那份数据说明为准。如果原始数据没有明确说明,就按60Hz来,这也是很多39节点算例资料的默认设置。
发电机参数的换算公式很简单:
新标幺值 = 旧标幺值 × (新基准容量 / 旧基准容量) × (旧基准电压 / 新基准电压)²
举个例子,某发电机额定容量为800MVA,电抗标幺值0.3,现在要归算到100MVA系统基准,那么新电抗就是0.3 × (100 / 800) = 0.0375pu。很多新手容易忽略这个步骤,直接把发电机参数填进去,结果跑出来的短路电流完全对不上。
2.4 仿真精度与模型简化的平衡
另一个我特别想提醒的是,Simulink里要控制仿真精度,不是模型越详细越好。39节点系统如果每台发电机都用全套励磁、调速、PSS再加上变压器饱和特性,模型会变得很笨重,仿真速度极慢,而且非线性程度太高后收敛困难。
合理的简化思路是:主研究发电机用完整模型,非研究机组可以用经典模型近似;负荷模型先用恒阻抗模型,等研究负荷特性时再换成恒功率或综合负荷模型。这种“重点细化、其余适度等效”的做法,实际项目中非常常见,能把精力集中在真正想分析的问题上。
3. Simulink建模仿真实操:一步步搭起39节点系统
3.1 电网拓扑层搭建顺序和方法
用Simulink搭建39节点系统,我的顺序是这样:先搭电网拓扑,再挂发电机模型,然后接控制器,最后接测量和故障模块。顺序乱了会出现很多莫名其妙的错误。
电网拓扑层的搭建核心是母线、线路、变压器和负荷四类模块。在Simulink的Simscape Electrical库里,可以找到“Three-Phase Bus Bar”、“Three-Phase Series RLC Branch”、“Three-Phase Transformer”、“Three-Phase Parallel RLC Load”这些基础模块。先用“Three-Phase Bus Bar”把第1到39条母线全部拉出来,编号对应的位置排布好。
然后按照支路数据,把线路模块接到对应的两段母线之间。这里我建议一条一条接,接完一条就在数据表里打一个勾,避免漏掉。39节点系统有几十条支路,一旦漏接或者错接,潮流结果根本对不上。
变压器模块要注意两点:一是变比要设置正确,二是连接组别不能错。标准算例的联络变压器一般接在两个不同电压等级之间,用Y-D接法很常见,但具体设置一定要看数据手册。接错组别后,电压相位关系错了,潮流计算会出现很大的相位偏差。
负荷模块可以直接按原始数据给定有功和无功的标幺值,在初始仿真阶段设为恒阻抗模型最稳,动态特性以后再改。恒阻抗模型说白了就是等效成一个Z,偏离额定电压时功率会随电压平方变化,与恒功率负荷模型有本质区别。
3.2 发电机组参数的具体填写方式
拖入同步发电机模块后,双击打开参数面板,你会发现参数非常多,容易看花眼。我的经验是分四组填:
第一组是额定值:额定视在功率、额定线电压、额定频率。这些必须与你设定的系统基准一致,或者通过换算保持一致。
第二组是电抗参数:直轴同步电抗、直轴暂态电抗、直轴次暂态电抗、交轴同步电抗、交轴暂态电抗、交轴次暂态电抗。这一组参数直接决定稳态运行特性和暂态响应特征。
第三组是时间常数:直轴暂态开路时间常数、直轴次暂态开路时间常数等。时间常数影响故障后磁链变化的快慢,功角摇摆的初始形态主要由它们塑造。
第四组是机械参数:惯性常数、阻尼系数。阻尼系数的作用比较微妙,它影响振荡衰减速度,零阻尼下系统振荡不衰减,这是坏消息。
填完参数后,发电机的初始状态还没法直接用,必须经过初始化。这一块是新手最容易卡死的地方:没有正确初始化的发电机模块,仿真一开始就会报“Initialization failed”,或者直接输出NaN。
在Simulink里做初始化的标准方式是在Powergui工具中选择“Initial Conditions”,让软件根据潮流结果自动计算各发电机的初始电动势和转子位置。前提是潮流必须先收敛,并且各发电机的电压幅值和有功出力设置与潮流数据一致。
3.3 故障注入与断路器动作设置
做暂态稳定研究,最核心的就是故障设置。Simulink里有一个“Three-Phase Fault”模块,可以直接设置故障类型、故障电阻、故障时间和持续时间。
以我在39节点上的典型实验为例:研究某关键输电线路附近发生三相短路时系统的稳定性。我将故障模块放在某条主要联络线路的母线侧,设置故障时间窗口为1.0秒到1.1秒,短路电阻设为0.001欧姆,模拟金属性短路。故障持续0.1秒后,断路器动作切除线路。
断路器的动作可以通过时控开关实现。具体做法是给断路器模块设置一个打开时间和闭合时间。彻底切除线路的仿真逻辑,就是在故障发生一段时间后打开对应断路器,并保持断开状态。如果只研究故障清除后的系统响应,这样设置足够了。
还有一个小技巧是:故障模块和断路器尽量分开建模,故障模块用于制造短路事件,断路器用于改变电网拓扑,不要混在一起。这样后面对故障位置、故障时长、切除时间做参数扫描时,操作起来非常灵活。
3.4 求解器配置与仿真步长选择
Simulink仿真跑不跑得出来、跑得快不快,求解器配置占一半因素。针对39节点这种含连续动态和开关事件的混合系统,我的配置思路如下:
- 仿真类型设置为可变步长,求解器选用ode23tb或者ode45。电力系统机电暂态通常不是特别刚性,ode45够用,但如果感觉跑得很慢、老是被步长限制卡住,换成ode23tb会有惊喜。
- 最大步长建议限制在1e-3秒。如果不限制,有些快速励磁动态可能被跳过,暂态细节丢失,但限制难免造成速度下降,需要平衡。
- 如果考虑使用离散求解器,一般电力电子仿真用得更多。纯粹做机电暂态稳定,连续求解器就够,离散化反而需要额外考虑采样时间。
Powergui模块里也要选择仿真类型。我喜欢设置为“Continuous”,并且勾选“Phasor simulation”的话就不适合做暂态波形分析了,所以做10机39节点故障仿真就用“Continuous”,简单直接。
仿真时间的设置也有讲究。做故障动态分析,总时长通常设10到20秒就足够看到多个振荡周期。如果设太短,第一摆都看不完整,如果设太长又浪费时间。
3.5 搭模过程中容易翻车的几个细节
这一节我纯粹分享踩坑经验,每一条都是真金白银换来的。
第一个坑:三相输电线路的导线模型需要用“Three-Phase PI Section Line”而不是“Series RLC Branch”。后者没有线路分布电容,对长线路的输电特性模拟完全不对,潮流结果和暂态响应都会失真。39节点系统里,较长的联络线路必须用带对地电容的线路模型。
第二个坑:变压器中性点接地方式。Simulink里变压器模型有多个绕组节点,如果某侧绕组标了Yg,说明中性点需要接地。不接地或者接错位置,零序网络完全错误,单相短路故障的分析就没法进行。
第三个坑:测量模块的接线方向。电压测量模块要并联在母线和地之间,电流测量模块要串联进线路里,方向反了测出来的相位不对,后续分析功角差就会得出完全错误的结论。
第四个坑:不要把所有发电机拖动到一个大系统里不管初始化。每台发电机在运行前都要有正确的转子初始角。如果某台机组的初始角差很大,仿真开始的一瞬间就会产生剧烈的功率冲击,结果完全不可用。
4. 仿真结果怎么看、常见问题怎么排查
4.1 稳态电压和功率分布校验方法
仿真模型跑通以后,先把稳态结果拿出来和原始潮流数据对比。这是我的习惯:先不急着做故障分析,先跑一段无故障的纯稳态仿真,看各母线电压是否稳定在合理范围内。
39节点标准算例的稳态电压通常在0.95到1.05pu之间,某些重负荷母线可能略低。如果某条母线电压明显异常,比如低于0.9pu或者高于1.1pu,说明该区域的潮流平衡或无功补偿设置有误。
另一步是看发电机出力。稳态运行各发电机的有功出力和无功出力应该和原始数据基本一致。如果不一致,通常是发电机的电压设定值或者出力基准设置不对。通过负荷潮流计算器可以辅助校验。
还有一种情况是某些节点电压虽然合理,但线路输送功率超出线路容量。39节点算例设计时通常不会刻意让线路满载,如果你发现某条线路功率特别大,可能支路电抗参数填错了,再回头核对一下r和x的数值。
4.2 暂态稳定曲线怎么读
故障扰动后,最重要的输出是各发电机的相对功角曲线。我一般以平衡节点机组作为参考,把其它机组的功角减掉参考机组的功角,得到相对功角差。
暂态稳定的判断标准很简单:故障切除后,所有机组的相对功角差能逐渐衰减到一个稳定值,说明系统是稳定的。如果某些机组之间的相对功角差不断增大,甚至超过180度,就代表系统失步了。
实际的波形通常长这样:故障瞬间,故障点附近的发电机有功功率剧烈变化,转子开始加速,功角快速拉开。故障切除后,功角先冲到最大摆角,然后开始回摆。如果系统阻尼良好,功角曲线就会像衰减振荡一样逐渐收敛;阻尼差的话,振荡幅度基本不衰减,这种情况往往对应用户看到母线电压持续波动、低频振荡等问题。
读取曲线时我特别关注两点:第一摆的最大摆角,它反映系统承受扰动的能力;振荡收敛速度,它反映阻尼强弱。如果第一摆就把某机组推到超过150度的位置,那即使最终没有失步,系统也处于不稳定边缘了。
4.3 常见报错与根因排查速查表
自己在仿真过程中遇到的典型报错,整理成一张速查表,方便直接对照:
| 报错现象 | 可能原因 | 解决办法 |
|---|---|---|
| Initialization failed | 发电机参数与潮流数据不一致 | 检查电压幅值、有功出力和发电机模型参数 |
| 仿真一开始输出NaN | 代数环未断开,或初始状态未正确赋值 | 使用Powergui的Initial Conditions重新初始化 |
| 电压太低或发散 | 线路模型缺少分布电容,或者负荷类型错误 | 换用PI Section Line,检查负荷模型设置 |
| 功角曲线不衰减 | 缺少阻尼或PSS未配置 | 暂态过程检查阻尼系数,研究振荡时加PSS |
| 求解器报“singular”错误 | 网络中有无源节点或无电气连接回路 | 检查母线是否漏接线,尤其接地和节点连接 |
| 开关动作瞬间脉冲尖峰 | 断路器没有与相控逻辑配合 | 检查开关闭合角度,或者并联合适的阻尼电阻 |
| 仿真速度极慢 | ODE容差太小或步长上限太小 | 放宽相对容差,适当增加最大步长 |
表格里的问题,我基本都遇到过,其中初始化失败最常见。后来养成了一个习惯:每次修改完发电机参数,都立刻重新跑一次初始化,不要等整体模型搭完了再回头去找是哪台机组的问题。
4.4 提升收敛性和仿真速度的几个技巧
仿真跑不收敛,首先要怀疑数值问题。我自己常用的手段有三个:
第一,给发电机注入一个小的阻尼。有些算例数据里阻尼系数其实是零,仿真时振荡难以衰减,加上小阻尼系数后数值收敛性会明显改善,物理上也更合理。
第二,把故障电阻设大一点。金属性短路电阻为零,数值上容易出现剧烈不连续。实际工程中短路弧光电阻也不为零,设为0.001到0.01欧姆,既能模拟真实情况,也能降低数值难度。
第三,采用阶段性仿真。先跑小时间步长,等系统进入稳定状态后再切换到大时间步长,避免在高频动态阶段就累积误差。这种思路在长期动态仿真里尤其节约时间。
有个读者朋友模仿我的做法,把最大步长调到1e-2秒,仿真速度显著提升,罚准确度没下降多少。要注意的是,如果模型中有PSS和励磁这类快速动态环节,步长放太大可能误跳振荡,需要谨慎。
5. 从39节点模型继续扩展:能做的事还很多
5.1 加入新能源和储能系统的改造思路
把39节点系统的某一台传统同步发电机替换成新能源场站模型,是现在很常见的研究方向。在Simulink里做这件事,主要是把一个同步机模块和一个电压源变流器模型互换,然后在变流器控制部分加入虚拟同步机控制或者跟网型控制策略。
替换之后,你马上会发现系统惯量明显下降,同样的故障时长下,系统更容易失稳。这就是“新能源弱电网”问题的直观体现。这个方向用来做课题,很容易就能向前推进:比如比较不同新能源渗透率下系统的临界切除时间变化,或者设计附加阻尼控制器来改善振荡特性。
我自己做扩展时,喜欢先不替换发电机,而是在某一负荷节点附近并联一个储能装置,观察它对暂态电压恢复的支撑作用。这种改造工程量小,却能让模型具备出成果的潜力。
5.2 用参数扫描研究极限切除时间
39节点系统做暂态稳定,极限切除时间是绕不开的分析点。做法是:保持故障位置不变,不断调整断路器切除时间,观察系统从稳定变成失步的临界点。
比如在一个固定位置发生三相短路,分别设置切除时间为0.1秒、0.15秒、0.2秒等,把各组长曲线放在同一张图里。你就能看到临界切除时间大概在哪,如果切除时间再晚一点,某台机组的相对功角就会发散。整个过程可以写成脚本调用Simulink批量仿真,几分钟就能得到完整的扫描曲线。
这个结果在论文里通常呈现为一条“临界切除时间走廊”,含金量很高。对整个项目而言,它把仿真从“能跑”提升到了“能支撑结论”的水平。
5.3 与实测数据或文献结果相互印证
做工程仿真,最忌讳的就是“自己的仿真,自己的参数,自己说稳定就稳定”。我的习惯是把仿真结果和文献里别人公布的同算例结果做对比,验证模型的正确性。
比如39节点系统某母线发生单相短路故障后的暂态电压曲线,如果有已发表论文做过同样算例,只要波形形态、幅值、时间尺度基本一致,就说明参数初始化没问题。如果不一致,优先检查励磁参数和故障类型设置。
没有文献数据比对的话,还可以退而求其次,和自己写的潮流计算结果对比。确保Simulink的稳态出力与潮流计算的结果一致,这是万无一失的验证方法。
5.4 一点实操后的心得体会
最后聊几句我自己的感受。39节点系统在Simulink里搭建,难度其实不在于模块本身,而在于把“电网思维”和“软件操作”融会贯通。很多人搭这个模型失败,不是不会拖模块,而是不理解为什么变压器中性点要对地短接、为什么发电机必须先做潮流初始化、为什么故障切除后功角不应该突变。
我建议初次接触这个项目的人,先完整跑通一遍不加PSS、不加调速器的最简模型,看到功角曲线输出之后,再一步步加入控制器,体会每一层模型对结果的影响。这个过程虽然慢,但值得,它能帮你真正理解多机系统暂态过程的物理本质。
如果仿真过程中遇到参数填了不对、曲线发散、初始化失败之类的问题,也别急。那个瞬间,再回头检查接线、标幺值和初始条件,基本上百分之八十的问题都能定位到这三个地方。做完了这个项目,你的电力系统动态仿真能力会真正上一个大台阶。