搞电力系统仿真的人,基本都绕不过单机无穷大系统暂态稳定性仿真这道坎。我当年第一次在Simulink里搭这个模型时,默认参数没改,故障模块的接地选项也没勾,结果仿真跑出来发电机转速直接飞上天,我还以为是接线错了,排查半天才意识到:两相接地短路被我搭成了两相短路。这个经典的仿真实验,表面上是搭一个模型、看一条曲线,实际上回答的是电力系统最核心的问题——发生大扰动后,发电机转子还能不能保持同步。本文就把这个研究从头到尾拆开讲,包括Simulink建模的具体步骤、两相接地短路故障的设置细节、发电机转速变化的物理含义,以及我这些年踩过的坑和排查思路。
不管你是做毕业设计、课程研究,还是刚接触电力系统动态仿真的工程师,这套流程都能让你在一两个小时内从零跑到正确结果,并且真正看明白转速曲线背后的暂态过程。
1. 为什么用“单机无穷大系统”这根拐杖研究暂态稳定性
1.1 暂态稳定到底在“稳定”什么
很多人第一次听到“暂态稳定性”都会有点懵:系统不是已经稳定运行了吗,还有什么不稳的?这里要先分清两个概念。静态稳定关注的是小扰动,比如负荷缓慢波动、电压轻微变化,系统能不能回到原来的运行点;而暂态稳定关心的是大扰动,比如短路、断线、甩负荷,这类故障会瞬间改变系统的电磁功率,转子转速突然失去平衡,系统能不能在故障后恢复同步。
判断暂态稳定最直观的物理量就是发电机转速。发电机的转子运动方程可以简写成:
J · dω/dt = Tm − Te
左边是转子的惯性加速度,右边是机械转矩和电磁转矩之差。正常运行时两者平衡,转速恒定;一旦发生短路,电磁转矩Te骤降,机械转矩Tm来不及变化,转子就开始加速。转速能不能在故障切除后降回来,决定了系统能不能回到同步运行状态。
这个道理用一句话说就是:暂态稳定研究的本质,是看发电机转子的动能能不能在故障前后被“消化”掉。转速曲线里那个上升的峰,就是转子吸收的动能。
1.2 无穷大系统:把复杂电网简化到只剩一个变量在动
真实电网里几十台发电机同时摇摆,分析起来极其复杂。单机无穷大系统做了一步非常聪明的简化:把整个外部电网等效成一个电压幅值和频率恒定的无穷大母线。这个母线可以吸收或发出任意功率,但自身状态纹丝不动。
这样一来,全系统唯一会“动”的变量就只剩这台上网发电机的功角和转速了。你可以把无穷大母线理解成一个容量无限大的水缸——发电机往里面注水或抽水,水面高度不会变;而真实电网中的其他发电机组,本质上都在相互影响彼此的水位。先用“水缸”搞清楚一台机组的行为规律,再去理解多台机组的相互作用,就顺理成章了。
这也是为什么几乎所有教材、几乎所有电网动态分析的基础,都从单机无穷大系统开始。它剔除了外部网络的影响,让你能单独研究发电机本身的暂态特性,Simulink仿真之所以选这个模型,正是因为它既保留了暂态稳定的核心物理过程,又把实现难度砍到了最低。
1.3 故障类型那么多,为什么选两相接地短路
电力系统故障有单相接地、两相短路、两相接地、三相短路等,它们对系统稳定性的威胁是不同的。我做了个表格,直观对比一下:
| 故障类型 | 严重程度 | 电磁功率跌落 | 典型应用场景 |
|---|---|---|---|
| 单相接地 | 最轻 | 较小 | 实际电网中占比最高 |
| 两相短路 | 中等 | 较大 | 相间故障 |
| 两相接地短路 | 中等偏重 | 较大,但存在零序分量 | 本实验选用 |
| 三相短路 | 最严重 | 几乎降为零 | 最恶劣校核工况 |
选两相接地短路的原因很实际:三相短路太极端,电磁功率几乎完全消失,转速变化过程相对“粗暴”;单相接地又太温和,故障期间转速变化不够明显。两相接地短路正好卡在中间——故障期间电磁功率跌落明显但未必归零,转速出现一个清晰可辨的加速段,加上接地故障涉及零序分量,比单纯的相间短路多了个层次感,是非常合适的暂态稳定教学和研究场景。
2. 建模前的准备:模块选型与参数体系
2.1 同步发电机模块:单位制和极对数要提前想好
Simulink/Simscape Electrical(早期叫 SimPowerSystems,现在在 Simulink 里用 powergui 配套)里面的同步发电机模块,最常用的是Synchronous Machine pu Fundamental,也就是标幺值模式。使用这个模块前,有三件事一定要先确认。
第一是额定频率。很多人的模型跑出来转速曲线看着不对劲,就是默认参数是60Hz的,而国内做研究基本都是50Hz,发电机模块的额定频率要改成50Hz,否则同步转速对不上。
第二是极对数。同步发电机的机械角速度和电角速度之间隔着极对数:电角速度 = 极对数 × 机械角速度。我做教学仿真时习惯把极对数设为1,这样机械角速度的额定值正好是314.159 rad/s(对应3000转/分),看波形最直观。如果你设成2,额定机械角速度就变成157.08 rad/s,波形纵轴看起来会“矮”一半,不熟悉的人容易误判。
第三是输入信号。这个模块有两个输入:机械功率Pm和励磁电压Vf。做最基础的暂态稳定研究时,我建议都用常数信号——机械功率给0.8(标幺值,相当于80%负荷),励磁电压给1.0,这就是教科书里的经典假设:故障过程中调速器和励磁系统都不动作,只研究转子本身的运动规律。
注意:先固定这两个输入是有意为之。如果一开始就接上调速器和励磁系统反馈,转速变化会立刻被控制器修正,你就很难单独看清楚“故障→转子加速→切除→功率平衡恢复”这个纯物理过程了。模型一步步加复杂,不要一步到位。
2.2 无穷大系统和输电线路的等效方式
无穷大母线在Simulink里最简单的实现方式,是使用Three-Phase Source模块加上一组串联阻抗。电压源本身很“硬”,但实际电网不等于理想电压源,发电机到母线之间必须隔着变压器和线路阻抗,否则电磁功率传输关系不成立。
常用的做法有两种:
- 直接拖一个 Three-Phase Source,设置幅值、频率,再串联一个RLC支路代表系统等值阻抗。这种方式干净直观,适合教学。
- 用 Three-Phase Programmable Voltage Source,可以额外模拟电压跌落之类的工况,后续想扩展时再用。
我一般先采用第一种,初始参数设成:线路等值电阻R=0.02(标幺值),电抗X=0.3(标幺值)。注意这个电抗包含了变压器和线路的总效应。很多教程会把变压器单独建模,但初学阶段完全可以先把变压器阻抗折算进线路里,少一个元件、少一层参数换算,模型更容易收敛。
2.3 一套可以直接用的标准参数表
为了让第一次搭模型的人不用去翻手册,我把我常用的一组参数整理出来,全部换算成标幺值:
| 参数 | 数值 | 说明 |
|---|---|---|
| 发电机额定容量 | 100 MVA | 模块基准容量 |
| 发电机额定电压 | 13.8 kV | 机端电压基准 |
| 额定频率 | 50 Hz | 别忘了改 |
| 极对数 | 1 | 让wm额定值等于314.159 rad/s |
| d轴同步电抗Xd | 1.8 | 标幺值 |
| q轴同步电抗Xq | 1.7 | 标幺值 |
| d轴暂态电抗Xd' | 0.3 | 故障瞬间起主要作用 |
| d轴次暂态电抗Xd'' | 0.2 | 故障初期起主要作用 |
| d轴暂态时间常数Td' | 5.0 s | 励磁绕组时间常数 |
| d轴次暂态时间常数Td'' | 0.05 s | 阻尼绕组时间常数 |
| 惯性时间常数H | 3.5 s | 直接影响转速上升斜率 |
| 机械功率Pm | 0.8 | 常数输入 |
| 励磁电压Vf | 1.0 | 常数输入 |
| 线路等值电抗X | 0.3 | 含变压器折算值 |
| 线路等值电阻R | 0.02 | 标幺值 |
| 无穷大母线电压 | 230 kV | 相电压幅值按模块要求填 |
这套参数下,系统的稳态功角大约在30到50度之间,是一个合理的工作点。如果你发现仿真开始时机端电压偏离1.0太多,优先检查无穷大母线电压和线路阻抗是否填错。
3. 手把手搭模型:从拖元件到设置故障时序
3.1 整体拓扑与接线顺序
模型结构非常简单,就五块内容:发电机模块、线路阻抗、无穷大电源、故障模块、测量输出。接线顺序是:
发电机机端 → 线路等值阻抗 → 故障模块 → 无穷大母线
具体在Simulink里操作是这样:
- 新建一个模型,从 Simscape → Electrical → Specialized Power Systems 里拖入powergui,这是所有电力系统仿真必须的模块,它负责求解器的电力系统底层解算。
- 拖入Synchronous Machine pu Fundamental,双击设置参数。
- 用Three-Phase Series RLC Branch搭一段线路阻抗(或者直接用一个支路模块设R和L)。
- 拖入Three-Phase Source,设置无穷大母线电压、频率和相位。
- 拖入Three-Phase Fault,这个就是制造两相接地短路的开关。
- 在发电机的输出端接一个Bus Selector,从输出信号里挑出机械角速度wm和电磁功率Pe,接到Scope。
有一个细节我要提醒:同步电机模块的输出是一个复合信号向量,里面按顺序包含了电角速度wr、机械角速度wm、转子角位移、定子电流分量等一堆量。不要凭记忆去猜顺序,双击模块看输出说明,或者用 Bus Selector 从信号列表里选名字,这样最稳。我早期就是凭感觉把第几个信号当成转速,结果画出来的波形毫无意义。
3.2 两相接地故障模块怎么设置,这是最大的坑
Two-Phase-to-Ground Fault 的设置是整个模型里最容易出问题的地方。Three-Phase Fault模块打开后,有三相选择框和一个接地球(Ground),你要做的是:
- 三相选择里,勾上A相和B相,不要勾C相。
- 一定要勾上“Ground”选项,让A、B两相同时接地。
- 故障类型选择里可以根据版本选“Phase A-G, B-G”或者直接手动勾选。
- Switching times 填故障时段的起止时间,比如
[1 1.1],表示从1秒开始故障,1.1秒切除。
这里最隐蔽的坑是:很多人只勾了A、B两相,忘了勾接地。结果模型跑出来变成了“两相短路”而不是“两相接地短路”。两者虽然都叫相间故障,但两相接地短路的故障电流会通过大地形成通路,零序分量参与作用,电磁功率跌落的幅度和相间短路完全不同。转速曲线会差出一截,如果你照着两相接地短路的理论去分析,怎么都对不上。
另外故障时间千万不要用默认值。Three-Phase Fault 模块的默认切换时间常常是[1/60 2/60]——那是按60Hz系统的一个周波设置的。在我们50Hz模型里,这个时间只有约16毫秒,太短了,故障还没看清就切除了。我一般先用0.1秒的故障持续时间起步,看清楚了再调整。
3.3 求解器和仿真时间窗口选择
模型搭完,求解器设置是决定成败的另一半。打开powergui,在 Simulation type 里选Continuous(连续仿真),不要选Phasor——因为我们要看的是电磁暂态过程中的转速瞬态变化,相量仿真只适合稳态分析。
求解器参数建议这样设:
- Solver 用ode23tb或ode15s,这两个适合刚性系统,电力系统暂态过程就是典型的刚性系统。
- 仿真时长设2到3秒,给足故障后摇摆的时间。
- Max Step Size 一定要限住,我习惯设
1e-4(万分之一秒)。不设的话,求解器在故障瞬间可能一个大步长直接跳过突变,你会得到一条平滑得不可思议的转速曲线,仿佛故障不存在一样。
这类“限步长”的操作,实际上是在告诉求解器:故障发生的那个瞬间,系统状态变化极快,不要为了节省算力跨过它。真实系统中,短路电流和电磁转矩的突变量都是微秒到毫秒级的,步长太粗等于在高速摄像里抽帧,关键过程全丢了。
4. 结果解读:发电机转速曲线的“一升一降”在说什么
4.1 三个阶段逐一拆开看
仿真跑完后,把Scope里wm的波形拿出来,你会看到一条这样的曲线:1秒前是一条平直的线,1秒时开始向上翘,1.1秒突然改变趋势,然后可能继续冲高一点,再回落、摆动,最终回到额定转速或越走越远。这三个阶段分别对应:
故障前阶段(0~1s):转速恒定在314.159 rad/s左右,因为机械功率和电磁功率平衡,转子匀转速运行。如果这个阶段转速不是平的,说明初始状态没跑稳,先别往下看。
故障期间(1~1.1s):两相接地短路后,电磁功率骤然下跌。由于机械功率还是0.8不变,转子开始加速,转速上升。上升的速率取决于转子的惯性时间常数H——H越小,转子越“轻”,转速窜得越快。
故障切除后(1.1s以后):故障线路被切除,电磁功率恢复到一定水平。但这时候功角已经摆大了,电磁功率和机械功率的关系决定了转子是减速还是继续加速。如果减速能量够足,转速会先冲到一个峰值,然后回落,围绕新的平衡点摆动,阻尼作用下逐渐平息;如果减速不够,转速直接一路飙升,这就是失稳。
4.2 为什么盯转速的同时一定要看功角
转速曲线很直观,但它只是表象。真正决定暂态稳定判据的是转子功角δ——也就是发电机内电势和无穷大母线电压之间的相位差。转速是功角的导数:转速比额定值高,功角就在增大;转速比额定值低,功角就在减小。
用大家都听过的等面积法则来理解:故障期间,电磁功率曲线跌下去,加速面积增大,转子吸收动能、功角拉大;故障切除后,电磁功率曲线恢复,系统获得减速面积。如果减速面积大于加速面积,转子能把吸收的动能全部还回去,系统稳定;否则功角越过临界点,系统失步。
所以在Scope里一定要同时接上发电机输出电磁功率Pe和转子角位移theta这两路信号。只看转速,你能看出“稳不稳”,但看不出“为什么稳”;加上功角,才能对应上等面积法则的物理过程。
4.3 稳定与否的量化判据
实操中,我们不需要肉眼判断。看两个指标:
- 转速是否收敛。故障切除后,转速在额定值附近衰减摆动,幅值逐渐减小,说明系统有正阻尼,稳定;如果摆动不衰减甚至增大,说明不行。
- 功角是否越限。通常认为功角超过约90~100度就已经进入危险区域,如果越过180度,发电机与系统彻底失步,仿真画面里转速会直线起飞。
以我常用的参数为例,故障持续0.1秒切除,转速峰值大约在317~320 rad/s左右,功角峰值大概80~100度,随后振荡1~2秒逐步平息。这个数值范围供参考,实际值取决于你的线路电抗和故障电阻设置。
5. 参数扫描:从“能跑”到“看清规律”
5.1 故障切除时间:找到临界切除时间
模型跑通之后,真正的重头戏是变参数找规律。第一个必做的扫描就是故障持续时间。把故障切除时间从0.05秒开始逐步增加,每次跑一次仿真,观察结果从“稳定”跳变到“失稳”的临界值是多少。
这个临界值在电力系统里叫Critical Clearing Time(CCT),它是保护定值整定的重要依据。对两相接地短路来说,如果0.1秒切除是稳定的,0.2秒切除就不稳了,那么临界切除时间就在两者之间。实际操作中不需要追求绝对精确,先粗扫找到区间,再在区间里细扫。
我建议用脚本批量扫描,而不是手动改参数跑几十次。示例MATLAB代码如下:
model = 'sm_inf'; for tc = 0.05:0.02:0.3 % 修改三相机故障模块的切除时间,故障从1秒开始 set_param([model '/Three-Phase Fault'], ... 'SwitchingTimes', ['1 ' num2str(1+tc)]); sim(model); % 在仿真结束后取转速信号 wm = logsout.get('wm').Values.Data; % 判断收敛性:取故障后1秒到仿真结束的最大转速 if max(wm(end-1000:end)) > 1.02 * 314.159 fprintf('切除时间 %.2fs 失稳\n', tc); else fprintf('切除时间 %.2fs 稳定\n', tc); end end这段代码只是个骨架,真实使用时需要根据信号记录方式调整取值逻辑。但思路很清晰:把“稳定/失稳”的判定交给程序,用转速是否回归额定值附近作为判据。
5.2 故障电阻和接地电阻的影响
两相接地短路不是理想金属性短路,实际故障点总有电阻。在故障模块里可以设置各相和接地的故障电阻值。不要小看这个参数,它对仿真结果影响很大:
- 故障电阻越大,故障电流越小,电磁功率跌落幅度越小,对系统稳定性的冲击越轻。
- 接地电阻的作用类似,但它还影响零序电流的分配,从而影响机端零序电压。
现实中输电线路的短路很少是金属性的,弧光电阻、杆塔接地电阻都在起作用。做研究时,最好对比0Ω和5Ω、10Ω这几组结果,你会看到临界切除时间明显右移——故障越“软”,系统越容易稳定。
5.3 惯性时间常数H对转速变化的影响
最后值得扫的一个参数是惯性时间常数H。它代表发电机转子旋转质量的惯性大小。H=3.5秒相当于一个常规汽轮发电机组的水平;水电或燃气轮机组的H通常更小。
直观理解:H越大,转子越“笨重”,同样的功率失衡下加速度越小,转速上升越慢,给了保护更充裕的切除时间;但代价是故障后的振荡周期变长,系统恢复同步的时间也拉长。你可以把H从2改到6,看转速峰值和振荡周期怎么变,这个规律看明白了,你就真正理解了转子运动方程里的每一项。
6. 常见报错与排查实录
6.1 故障瞬间数值发散或仿真直接卡死
这是初学阶段最经常遇到的情况:仿真跑到故障时刻突然报错,显示“Nonlinear iteration is not converging”,或者转速曲线直接飞向几千上万。
排查顺序是这样:先看最大步长是不是没限,默认情况下ode23tb可能跨过突变点;再看线路阻抗是不是设成了零或极小的值,无限大系统和电源之间必须有阻抗,否则短路电流理论上是无穷大,数值必然爆炸;最后看故障模块的接地电阻,金属性接地在某些数值条件下刚性极强,给个0.001Ω的阻值往往就能过。
6.2 起始阶段转速就在震荡,不是平直线
故障还没发生,转速就在额定值附近上下起伏,这说明模型不是从稳态工作点启动的。电力系统仿真和普通动态系统不一样,纯微分方程从零初值开始算会经历一段衰减的“启动瞬态”。
解决方法是双击powergui,在 Tools 菜单里选Machinery and Load Flow Initialization,让Simulink自动计算稳态初值;或者在模型里加一个很小的负载,先把系统“稳住”再开始仿真。我一般两种方法都做,初始化完再跑一次0~0.5秒,确认转速曲线是平的才继续。
6.3 波形趋势对,但数值对不上理论值
这是最高级的问题:曲线形态完全正确,稳定和失稳的趋势也对,但具体峰值和理论计算差10%以上。这时候要回头检查基准容量和标幺值换算。
发电机模块内部所有电抗都以它自己的额定容量为基准;但线路和无穷大系统的阻抗可能用的是另一个基准容量。如果你100 MVA发电机配了按1000 MVA基准算出来的线路电抗,数值自然对不上。我的习惯是:全系统统一用发电机的额定容量作为标幺值基准,这样省去一堆换算。
6.4 常见问题速查表
| 现象 | 可能原因 | 解决方向 |
|---|---|---|
| 转速曲线平滑得像没故障 | 最大步长太大跳过了突变 | Max Step Size设为1e-4 |
| 故障后转速直线上升不回头 | 切除时间太晚 | 缩短故障持续时间 |
| 起始阶段就震荡 | 没有初始化稳态工作点 | 用powergui做负荷潮流初始化 |
| 转速比理论值高很多 | 线路电抗偏大或Pm偏大 | 核对基准容量和标幺值 |
| 功角直接大角度跳跃 | 励磁电压过低 | 检查Vf是否为1.0 |
| 模型报错不收敛 | 故障电阻为0且阻抗太小 | 给接地电阻加0.001Ω |
| A、B相接地的效果和两相短路一样 | 忘了勾选Ground | 检查故障模块接地选项 |
7. 从单机走向实际:这套模型的进阶路线
7.1 加上励磁系统和PSS
基础模型跑熟之后,最自然的扩展是给发电机接上励磁系统。Simulink里有现成的 Simplified Excitation System 模块,把它替换掉原来常数1.0的励磁电压输入,你会发现暂态后的转速振荡明显被抑制,电压恢复也更快——这就是自动电压调节器对暂态稳定性的实际贡献。
再进一步,可以加上PSS(电力系统稳定器)。这个环节是很多研究者最爱玩的部分:PSS的增益和时间常数怎么整定,如何通过转速偏差信号产生附加励磁调节,从而增加系统阻尼、抑制低频振荡。这时候你就从“看现象”进入“做控制”的层次了。
7.2 从永久性故障到自动重合闸
前面所有仿真都默认故障切除后线路就永久退出运行。但真实电网里绝大多数短路是瞬时性的,故障切除后要尝试自动重合闸。
这个扩展很有意思:把故障时序改成“1秒故障→1.1秒切除→1.5秒重合闸”,如果重合闸时功角和转速已经摆回安全范围,系统就能平稳恢复;如果重合得太早,相当于在系统还没稳定时又来一次扰动,可能造成二次失稳。这个实验对理解自动重合闸的逻辑和风险非常有帮助。
7.3 Simulink的扩展玩法:代码生成与外部联动
最后说句题外话,Simulink这个平台远比我们想象得宽。很多人在车辆电控、机器人领域用它做联合仿真,比如Carsim和Simulink联合仿真处理车辆动力学与电控策略;也有人把Simulink模型通过Embedded Coder生成C代码,部署到硬件上做实时仿真或硬件在环测试。外部模式下模型可以直接和物理设备联动调参。
回到电力系统,这套单机无穷大模型虽然简单,但它的物理骨架可以原封不动地迁移到更复杂的场景:多机系统、风电场接入、直流输电、实时数字仿真平台,核心都是同一套转子运动方程和电磁功率关系。先把这一关扎实过掉,后面路就宽了。
我个人做这套仿真最大的体会是:转速曲线是最诚实的物理老师。你设置每个参数,它都会直接反映在波形上——切慢了,它飞给你看;阻抗填错了,它偏给你看;初始化没做透,它晃给你看。与其背概念、记结论,不如亲手跑几遍这个模型,把稳定、临界和失稳三种状态都看一遍,比读三章教材都管用。参数扫描的时候,可以从0.05秒的切除时间开始,一次加0.02秒,用心感受那条曲线从“回荡收敛”到“扭头不归”的临界变化——那一眼,就是理解暂态稳定的瞬间。