同样是Simulink里的一个短路故障,有人跑出来是一条干净的功角摇摆曲线,有人跑出来是三条乱跳的红线——差别往往不在故障设置,而在你没搞懂2机5节点系统里谁先谁后。暂态稳定性仿真不是"放个故障看结果"那么简单,它考察的是大扰动之后发电机转子能不能继续同步旋转,而这个"能不能"在2机5节点系统里会被放大得非常直观。很多教程喜欢直接丢给你一个现成的MATLAB/Simulink模型,但模型跑完,你依然不知道为什么功角要这样摆、为什么切除晚0.05秒系统就崩了。
这篇文章就以基于MATLAB/Simulink平台的2机5节点系统暂态稳定性仿真为对象,从模型搭建、故障注入到结果判读,把整个环节拆开讲清楚。适合刚接触电力系统动态仿真、打算用Simulink做课程设计或论文预研的读者,也适合那些已经跑过案例但总调试不出来的人。
1. 2机5节点系统为什么是暂态稳定仿真的"最小完备模型"
暂态稳定仿真的核心是研究系统在遭受大扰动(最常见是三相短路)后,各发电机转子之间能否继续保持同步。你要观察的物理量不是系统频率、不是电压,而是发电机转子角度的相对变化。这就带来一个实验平台需求:至少要能看到两台发电机之间"你追我赶"的动态过程,而不是像单机无穷大系统那样只有孤零零的一台机对着一个理想电压源。
1.1 系统拓扑与各母线的分工
市面上常见的2机5节点系统,拓扑上一般这么划分:母线B1是发电机G1的机端,母线B5是发电机G2的机端,中间B2、B3、B4是230kV输电网络的节点。B2上带一个负荷,B3上带一个负荷,B4作为中间联络节点把网络串起来。两台发电机各经一台升压变压器接入高压网络,然后通过双回或单回线路相连。
选5个节点而不是2个节点,不是拍脑袋决定的。如果只有两个母线,两台发电机就变成"一个点看另一个点",根本没有中间网络可以放故障位置。3节点系统又太对称,看不到不同故障地点的差异化响应。5节点系统刚好留出足够的"电气距离",让你能在线路中点、母线出口、负荷节点旁分别放故障,考察故障位置对暂态稳定的影响。
我测试时用的基准参数如下:G1额定900MVA、20kV,惯性常数H=6.5s;G2额定800MVA、20kV,H=5.0s;升压变压器变比均为20/230kV;输电线路采用分布参数π模型,单回线路长度在80到150km之间。负荷按恒阻抗处理。这个参数配置不算严格对应某个IEEE标准算例,但用来演示暂态稳定机理完全足够。
1.2 暂态稳定到底在判断什么
暂态稳定问题的物理本质,是发电机的摇摆方程。对每台发电机,转子运动可以写成:
2H/ωs * d²δ/dt² = Pm - Pe
其中H是惯性常数,δ是转子角度,Pm是机械功率,Pe是电磁功率,ωs是同步角速度。正常运行时Pm等于Pe,转子角度静止;短路故障瞬间,电磁功率Pe大幅跌落到很低甚至接近于零,而汽轮机或水轮机的机械功率Pm短时间内根本来不及变化,于是右侧出现正的加速功率,两台发电机的角度都开始超前。
但问题来了:两台机的惯性常数不同、电气距离故障点远近不同,它们加速的程度也不同。G1如果离故障点远,故障期间电磁功率跌得少,角度增加得就慢;G2如果离故障点近,电磁功率几乎跌光,角度就飞快往前冲。于是两机之间的相对功角δ12=δ1-δ2被拉大。故障切除后,输电能力恢复,电磁功率重新建立,两台机之间又有了"拉着对方往回走"的同步力矩。能不能拉得住,取决于加速期间积累的动能有没有在减速期间被完全消化,这正是等面积法则的内容。
在Simulink里做暂态稳定仿真,本质就是把这个摇摆方程用数值积分跑出来,让软件替你算清楚加速面积和减速面积的胜负。如果相对功角最后收敛到某个恒定值并平息下来,系统暂态稳定;如果它单调发散,或者越过不稳定平衡点之后整周旋转,就是暂态失稳。理解这一点之后,你再看后文的模型参数、故障时序、求解器选择,就全都串起来了。
2. 从空白模型到能跑的Simulink模型搭建
基于MATLAB/Simulink平台搭2机5节点模型,用的不是纯Simulink基本库,而是Simscape Electrical的Specialized Power Systems子系统。旧版本叫SimPowerSystems,R2021a之后并到Simscape Electrical里。元件查找路径变了,但核心模块名称差别不大。
2.1 需要拉进模型的元件清单
我整理了一份最简清单,照着搭就行:
- 2个Synchronous Machine pu Standard模块:同步电机标准标幺值模型,参数是pu制,不用自己折算SI,唯一的坑我是到第三节再讲。
- 2个Three-Phase Transformer(Two Windings):升压变压器。
- 5个母线:直接用Three-Phase Port模块,或者用电力系统库里的Busbar,后者可视化更友好,能显示电压标签。
- 若干Pi Section Line:输电线路模型,每条线路拆成两段的情况会在故障注入时出现。
- 2个Three-Phase Series RLC Load:恒阻抗负荷。
- 1个Three-Phase Fault:故障模块,放在你想短路的位置。
- 1个Powergui:这个必须拖进模型,否则整个Simscape Electrical模型根本编译不了。Powergui里选Continuous模式。
我见过不少人从网上下载到一个现成的2机5节点模型,打开之后发现元件名字全是乱码或版本升级后找不到——因为R2019b和R2023b的库路径确实有变化。最稳妥的做法是自己从空白模型搭一次,照着上面的清单走一遍,比什么都管用。
2.2 发电机参数设置中的隐含公式
Synchronous Machine pu Standard的参数页里,你需要填的包括额定视在功率Sn、额定线电压Vn、额定频率fn,以及惯性常数H、摩擦阻尼F。机械功率输入端m通常在第一个版本里直接用一个常数模块给0.8到0.9pu的恒定机械功率,励磁电压Ef输入端同样先用常数。
这里藏着一个很多教程不点破的逻辑:暂态稳定的时间尺度通常在几秒到几十秒,汽轮机调速器的时间常数是秒级的,在首摆阶段基本来不及动作,所以恒定机械功率假设完全合理。励磁系统的作用更复杂一些,IEEE Type I励磁会影响故障切除后的电压恢复和功角阻尼,但如果你刚开始学,先接一个恒定Ef把机理搞明白,再加励磁系统看差异。
有一个基本功需要练:H值的本质。H是发电机额定容量下的惯性时间常数,代表转子存储动能与额定容量的比值。两台机的H差越大,故障后相对功角摆得越快,系统越难稳住。如果仿真中系统特别容易失稳,很多新手怀疑故障设错了,其实往往是G2的H值设得太小——单机对无穷大还好说,多机系统里惯性差异是最敏感的稳定因子之一。
2.3 负荷模型和网络参数的设定细节
负荷我建议用恒阻抗模型(Series RLC Load),因为它能直接在线路导纳矩阵里等效成接地阻抗,数值稳定性最好。你要是用恒功率负荷模型,在电压跌到零点几pu时会出现数值冲击,Simulink常常报错或者算出负的有功功率,又得花时间排查。
输电线路的Pi Section Line参数分两部分:正序参数和零序参数。在暂态稳定研究中如果只做三相短路故障,理论上只要正序参数准确,零序参数不影响对称短路结果。但我建议还是把零序填上,因为后期你可能想对比单相接地短路,到那时候再回来补参数会非常痛苦。典型正序参数:R=0.02Ω/km,X=0.35Ω/km,C=0.011μF/km,零序电阻一船取正序的3倍左右,电抗2~3倍。
还有一个容易犯迷糊的地方:变压器参数页里的阻抗标注。它给的pu值是基于变压器自身额定容量,如果你的两台变压器容量不同,在230kV网络里做潮流计算时必须按系统基准容量归一。硬记一个公式:X_pu_sys = X_pu_machine * (S_sys / S_machine),后文还会用到。
3. 故障注入与切除时序:最有操作含量的一环
模型搭好、潮流初始化通过之后,接下来就是暂态稳定仿真的灵魂:在哪个时间、什么位置、以什么方式把故障放进去,然后什么时间让断路器把它切除。这一步没做对,前面所有参数设置都白费。
3.1 故障点选择:为什么放在线路中点而不是母线出口
我推荐把三相短路故障放在线路中点,这是教科书分析用的经典位置,也是物理上比较"合理"的工况。为什么?因为故障点离母线越远,故障期间发电机端测到的残余电压越高,电磁功率Pe残留越多,故障对稳定的冲击越小;放母线出口的话,相当于直接短路到母线上,整个区域电压几乎为零,故障冲击最强,实际上更接近"极端工况"。线路中点介于两者之间,用它做主案例,既不把系统搞得瞬间崩溃,又能让你看到明显的功角摆动。
Simulink里在线路中点放故障,需要把这条线路拆成两段。比如B2到B3之间总长100km,你就放两段各50km的Pi Section Line,中间接Three-Phase Fault模块。这样做的意义在于:短路故障切除后,线路两端断路器如果只跳一侧,另一侧还会往故障点供电,故障后的网络拓扑会完全不同。你要模拟这种情况就得用断路器配合,而不是只用一个故障模块。
3.2 Three-Phase Fault模块与断路器配合的时序设计
Three-Phase Fault模块本身有内部时序控制:勾选Fault A、Fault B、Fault C三项, Transitional Fault里设Transition Time。一个典型设置是:
- 0.1s:故障发生
- 0.3s:故障消除(模拟断路器清走故障线路)
但注意,只用一个故障模块的Transition Time来控制切除,实际上等价于"故障凭空消失",没有模拟断路器动作前后的网络结构变化。更专业的做法是用一个Three-Phase Breaker串在故障模块前面,Breaker的Switching Times控制它的断开时刻。我实测下来,故障初始用Transitional Fault的Transition Time就够了,反正Simulink把故障清除瞬间的数值冲击处理得很好;如果你想观察断路器开断顺序对稳定的影响,再上Breaker。
我常用的一组时序是:0~0.1s系统稳态运行;0.1s故障出现;0.2s近故障线路首端断路器跳开;0.22s末端断路器跳开;0.3s故障模块完全退出。这么做会在功角曲线上砸出两个小台阶,这是真实保护动作过程的体现。初学者可以先从单一时序0.1s发生、0.25s消失跑起,先把稳定/失稳的分界印象建立起来,再叠加断路器时序。
3.3 求求解器和步长选不好,结果一定难看
Simulink暂态稳定仿真最大的隐藏坑,就是求解器。很多新手保留默认的ode45,然后发现在0.1s故障发生的瞬间,仿真步长突然缩到1e-6,跑了半天进度条纹丝不动;或者干脆报错说求解器不收敛。这不是模型问题,而是系统刚性太强。
同步电机模型里既有高速电磁暂态(毫秒级),又有转子运动这种机械动态(秒级),时间常数跨度可以达到几个数量级。这种stiff系统必须用隐式求解器。我的配置是:Powergui选Continuous,Simulink求解器选variable-step ode15s(stiff/NDF),Max step size设为0.001,相对误差1e-4。这套组合在2机5节点规模下,仿真30秒大概就是十几秒到几十秒的事,完全不卡。
还有一个小细节:如果你把Powergui设为Discrete(离散模式),还需要设置采样步长Ts,通常是1e-5到1e-4。离散模式在含电力电子开关的模型里很好用,但对纯同步机暂态稳定来说,连续模式更自然。我个人绝不推荐在这个项目里用ode45,也最好不要用ode23——一个简单公式:看到输出开始高频抖动,先怀疑求解器,其次才是参数。
4. 从仿真曲线上判断系统暂态稳定性
模型跑起来之后,Scope里的波形铺天盖地都是。新手最容易犯的错误是看发电机输出有功功率曲线、看母线电压波形,然后凭感觉说"好像是稳定的"。稳定的判据从来不在这些量上,而在相对功角上。
4.1 相对功角曲线:最直接、最不可替代的判据
从两台同步电机的测量输出里,取转子角Rotor Angle(单位通常为度),用Scope或者To Workspace导出后做差:δ12 = δ1 - δ2。这个差值才是决定系统是否同步的物理量。
稳定工况下的δ12曲线上,你能看到清晰的三个阶段:故障前是一条水平直线(角度差恒定,比如10度左右,这是潮流工作点的反映);故障期间曲线向上弯曲,两台机开始相对加速,角度差被逐渐拉大;故障切除后,曲线继续上升一段,因为转子动能还有惯性,但加速度已经变负,曲线走完一个最大摆角后掉头回落,经过几次衰减振荡最终稳定在一个新的平衡角上。
不稳定工况的表现则完全不同:δ12越过某个峰值后继续加速上升,最后变成一条斜向上的直线。这里必须提醒一句:Simulink输出的角度是相位角度,范围在-180°到+180°之间。如果系统真的失稳,角度每隔360°跳变一次,Scope里画出来就是锯齿波,看起来像"反复振荡"但其实已经失步。你需要在MATLAB后处理里用unwrap函数消掉360°跳变,再判断是否单调发散。不处理这个细节,80%的人会把失稳误判成稳定。
4.2 母线电压与功率曲线的辅助观察
虽然功角是核心判据,电压和功率曲线在定位问题起因时也是必要的。故障期间,故障点附近母线电压会跌得很深,我通常关注B3和B4两个节点,如果故障在线路中点,这两个母线电压会掉到0.2pu附近甚至更低。清除故障后,电压应该快速回升到0.95pu以上。如果电压回升得非常慢,说明励磁系统弱或者负荷过重,系统处于稳定边缘,此时功角曲线往往表现为长时间大振幅振荡而不是立刻收敛。
有功功率曲线则能看到"功率摇摆"的过程:故障瞬间两台机输出功率突然下降,清除后出现大幅摆动,摆动频率通常在0.5到1Hz量级,对应机电振荡模式。如果在没有PSS的情况下功率振荡能逐渐衰减,说明系统阻尼尚可;如果振荡幅度不降反增,就是负阻尼现象,这时系统虽然还没立刻失步,但也不具备合格的动态品质。
4.3 临界切除时间CCT的二分法逼近思路
暂态稳定分析里最经典的量化指标是临界切除时间CCT——在给定故障点和故障类型下,系统保持稳定所允许的最长故障切除时间。超过它,加速面积大于最大可用的减速面积,第一摆就失步;低于它,系统能熬过最艰难的第一摆,后续即使阻尼很差,至少短时间内不失步。
在Simulink里求CCT不需要算等面积积分,直接扫参数就行。思路是这样的:固定故障发生时间0.1s,把切除时间t_clear从0.1s开始逐步推后,每次增加0.02s或0.01s跑一次仿真,记录δ12的最大值或是否发散。稳定与失稳的边界值落在哪个区间,用二分法再加密扫描,精确到0.01s就足够工程使用了。
我以自己这套参数为例:故障点在B2-B3线路中点,切除时间0.2s时系统稳定安心,0.28s时勉强稳在第一摆但振荡时间很长,0.30s时彻底失稳——CCT大概就在0.29s附近。如果你搭的模型参数和我不同,CCT会变,但规律一致:故障点离发电机电气距离越近、两机惯性差异越大、故障切除越慢,CCT越小。这个扫参数的过程很适合写成脚本循环跑,两机5节点规模单次仿真几十秒,扫几十次也不过一个下午。
5. 新手最常踩的坑,以及我的排查清单
这一节是我最想写的部分。带过不少学生做暂态稳定仿真,模型搭不出来或者跑出离谱波形的案例里,有九成栽在这几个坑里,而且全都不是高深理论问题。
5.1 初始化是90%跑不通的元凶
Simscape Electrical里的同步电机模型不是冷启动的,它必须先被"摆"到某个稳定工作点上。如果你不做潮流初始化,直接在0时刻把发电机扔在额定电压上,积分器一开始就会疯狂调整,功角曲线前几秒全是乱跳。你甚至看到发电机功率从几十个pu往下掉,以为系统失稳了。
正确操作顺序是:在Powergui里打开Load Flow工具,设好各台发电机的输出有功功率和机端电压,设好负荷功率,运行潮流计算,确认没有告警后点击Machine Initialization完成同步电机内部状态赋值。然后才关闭工具、开始仿真。我自己的验证习惯是:初始化完成后先跑一段0到0.1s的仿真,此时系统还没有故障,功角、功率曲线必须完全是水平直线。哪怕有一丝斜率,初始化就没完全收敛,此时放故障必炸。
5.2 标幺值基准没统一,结果就全错了
同步电机模块的参数页里,H、Xd、Xq等等全部基于电机自身额定容量。但是输电线路、负荷和潮流计算往往基于全系统基准(通常100MVA),或者基于你自己设的某个基准。这两个基准如果不换算,就相当于把两台发电机接到一个电抗值算错了好几倍的网络上,功角摆幅、CCT自然全错。
这里有一个我踩过不止一次的坑:惯性常数H的归算。假设G1的H=6.5s是基于900MVA额定容量,当系统基准为100MVA时,归算后的H_sys = 6.5 * 900/100 = 58.5s。这个数值看起来大得离谱,但它是对的。很多人在两台基准容量不同的发电机之间比较H时,直接用原值比较,结论完全相反。记住一句话:所有标幺值在接入同一系统前,必须先统一到同一个基准容量上。
5.3 我的仿真实战检查清单
最后分享一个我自己每次做暂态稳定仿真之前都会过的清单,照着做基本能排除80%的"灵异问题":
- Powergui Load Flow能弹出正常结果,发电机功率方向和预设一致。
- 故障前0~0.1s的功角、母线电压曲线全平,没有任何漂移。
- 求解器确认是ode15s,Max step size不超过0.001,仿真时长至少20s。
- 故障切除时间先设一个保守值(比如0.2s),跑一遍确认功角能收敛,再逐渐推迟切除时间逼近CCT。
- 输出波形用unwrap处理,区分"真失稳"和"角度跳变假振荡"。
- 每一次改参数,只改一个量,用同一组基准记录功角峰值,否则你根本不知道是哪个改动导致稳定裕度变化。
这个清单听起来琐碎,实际省的时间却非常可观。很多同事看我调试视频,觉得我"运气好总是跑得稳",其实只是清单里的规矩执行得彻底,模型从一开始就被盯得死死的,自然不会出现那种跑完30秒仿真、最后发现初始潮流就是错的悲剧。