简介:《低惯量电力系统频率稳定分析与控制研究综述及展望》是一篇发表于《电力自动化设备》的综述性学术文献,面向电力系统规划、运行与控制方向的研究人员、工程师及高校师生。随着新能源大规模并网与直流输电技术发展,系统惯量下降引发的频率稳定问题日益突出,该资源系统梳理了低惯量场景的成因、对频率稳定的影响以及典型事故案例,并重点比较了时域仿真、数学解析、数据驱动三类分析方法的适用性。包体为单文件PDF,共1个文件,大小2.71MB,PDF格式便于在电脑、平板等设备上阅读和标注。目前已有335人浏览学习,适合作为该领域的入门综述与参考文献。内容涵盖“源网荷储”调频能力挖掘、多道防线协调配合、储能参与调频及新型控制算法等控制措施,并展望了未来研究方向,可帮助读者快速建立知识框架、把握研究热点与工程应对思路。
1. 低惯量电力系统频率稳定:为什么“不缺电”也会因为调频失配而切负荷
低惯量电力系统频率稳定这几年从学术议题变成了实际工程问题。最典型的场景是:一个区域电网新能源装机占比超过40%,等效惯量掉到传统火电时期的一半以下,此时一台大机组跳闸,频率变化率可能冲到0.6Hz/s以上,远高于传统系统的0.1~0.2Hz/s。频率跌得太快带来的问题不是“不够电”,而是从扰动发生到低频减载动作之间只有一两秒,常规AGC和一次调频根本来不及把频率兜住。围绕这个标题的综述类工作,基本把问题串成四条线:等效惯量怎么估计、频率安全怎么评估、虚拟惯量与一次调频参数怎么整定、低频减载与保护怎么配合。这条链路对电网规划、新能源场站涉网性能评估、调频策略整定的从业者最有用,可以照着思路在仿真平台上把整个评估流程重做一遍。
2. 惯量去哪了:低惯量系统的频率动态机理与等效惯量在线辨识
2.1 惯量下降让传统功频调节“看不清”什么
同步机的转动惯量在电网里的作用,本质是一个免费的能量缓冲。功率不平衡发生的瞬间,最先响应的不是调速器,而是转子的动能:频率的变化率由系统等效惯量决定,用标幺值表达就是df/dt = ΔP·f0/(2H)。这里的H是惯性时间常数,2H是系统整体的惯量水平。传统火电、水电为主的电网,H一般在4~8秒量级,一台机组跳闸引起的频率变化率被压在0.1~0.2Hz/s以内,留给一次调频和低频减载的时间窗很宽。
新能源接入后情况变了。风机和光伏通过变流器并网,转子与电网之间没有直接的机电耦合,正常工况下电网频率波动根本“推不动”新能源的转子动能。于是系统等效惯量随新能源占比上升而快速下降,但扰动的严重程度没有变,结果就是同一台机组跳闸,RoCoF和频率最低点双双恶化。这里容易产生一个误解:低惯量不等于零惯量,剩余同步机、同步调相机、储能和具备虚拟惯量功能的风机仍然在提供惯量,只是这部分能力受运行方式和控制策略限制,不像同步机那样恒定参与。所以分析的第一步,是把系统当前真实的等效惯量估计出来,而不是直接套用规划阶段的H数据。
近年来的综述在机理层面基本达成共识:低惯量系统的问题核心是时间尺度压缩。调频动作来不及、保护配合容易错位、不同电源之间的响应速度差异被放大。解决思路也清楚:要么想办法补充惯量支撑,要么在控制层面让变流器主动模拟同步机的频率响应特性,要么在整定层面重新校核低频减载和涉网保护定值。后面的章节按这条主线展开。
2.2 从扰动数据反推等效惯量:一个可以直接跑的最小流程
等效惯量估计有几种常见路径,离线仿真、稳态短路比估算、在线辨识。从业者手头最可靠的数据其实是PMU录波或故障录波:一次真实扰动发生后的频率动态曲线,天然包含了系统惯量的信息。思路很简单,发电机组跳闸后的最初0.1~0.2秒内,调速器和AGC还没真正出力,频率变化率主要由功率缺额和等效惯量决定,所以用初始RoCoF除以功率缺额就能反推2H。下面是这套算法的Python实现,数据结构是CSV,三列:时间、频率、功率偏差。
import numpy as np import pandas as pd # 读取PMU/录波数据:time(s), freq(Hz), dp_mw(MW,扰动功率偏差) df = pd.read_csv("disturbance.csv") t = df["time"].values f = df["freq"].values dp = df["dp_mw"].values # 1) 定位扰动开始时刻:功率偏差出现明显跳变的位置 i0 = int(np.argmax(np.abs(dp) > 0.1 * np.abs(np.diff(dp)).max())) # 2) 取扰动后短时窗做线性拟合,计算初始RoCoF dt = t[1] - t[0] i1 = i0 + int(0.2 / dt) # 0.2秒窗口 A = np.vstack([t[i0:i1], np.ones(i1 - i0)]).T k, b = np.linalg.lstsq(A, f[i0:i1], rcond=None)[0] rocof = k # Hz/s # 3) 由 df/dt = dp_pu * f0 / (2H) 反推2H f0 = 50.0 s_base = 1000.0 # 系统基准容量(MVA) dp_pu = dp[i0] / s_base h2 = abs(dp_pu * f0 / (2 * rocof)) # 2H,秒 print(f"初始RoCoF={rocof:.3f} Hz/s, 等效2H={h2:.1f} s")逻辑说明:代码先通过功率偏差的突变点定位扰动时刻,再用最小二乘拟合扰动后0.2秒内的频率曲线,拟合直线的斜率就是初始RoCoF。之后用单机等值的频率动态方程反推2H。这里的核心约束是窗口长度,窗口选大了会把一次调频的出力平均进去,选小了又会被量测噪声淹没。
参数说明:窗口0.2秒是经验值,低惯量系统建议压到0.1~0.15秒;采样率至少要25Hz以上,PMU的帧率通常够用;功率缺额要取扰动起始那一拍的跳变值,用稳态后的功率差会高估惯量。还要注意扰动方向的判断,发电机跳闸时ΔP为正、RoCoF为负,公式里取绝对值即可。如果录波数据里多个事件混杂,先用低通滤波把工频纹波和高频噪声去掉再做拟合。
3. 低惯量系统的频率稳定分析:从测试系统搭建到三条安全判据
3.1 搭建一个可改造的低惯量测试系统
频率稳定分析不能只对着公式推,得有可重复的仿真算例。常见做法有两种:一是直接改造IEEE 9节点或39节点系统,把部分同步机替换成新能源场站;二是自己搭一个单区域等值系统,把同步机聚合、新能源聚合、负荷聚合到一个母线上。做综述验证时我一般用第二种,模型简单、参数透明、复现快,而且低惯量场景下首要关心的是系统层面的频率动态,母线级电压问题可以放到第二步再说。
一个基础算例至少包含:一台聚合同步机(代表剩余常规电源)、一个光伏电站、一个负荷中心、一个扰动开关(负荷阶跃或发电机跳闸)。同步机参数按典型值给:容量300MVA、H=4s、调速器调差系数R=0.05、再热时间常数T_R=8s;光伏电站容量200MVA,采用跟网型控制,有功输出恒定为额定值的80%,不主动参与调频。系统基准容量取1000MVA。这样的配置下,同步机跳闸一台(或等效为300MW功率缺额)就能产生明显的频率跌落。下表是我常用的基准参数,实际使用时按目标电网容量等比缩放。
| 参数 | 数值 | 说明 |
|---|---|---|
| 系统基准容量 | 1000 MVA | 标幺化基值 |
| 聚合同步机容量 | 300 MW | 剩余常规电源聚合 |
| 同步机H | 4.0 s | 惯性时间常数 |
| 调速器调差系数R | 0.05 pu | 一次调频灵敏度 |
| 光伏场站容量 | 200 MW | 跟网型变流器 |
| 负荷功率 | 400 MW | 恒功率+频率调节D=1 |
| 扰动功率 | 100 MW | 负荷阶跃或电源跳闸 |
3.2 用单区域频率响应模型算频率动态曲线
有了测试系统,接下来就是算频率动态曲线。这里用一个简化但工程上够用的SFR(系统频率响应)模型:频率偏差方程由惯量、负荷频率调节效应、一次调频功率三项构成,调速器简化为带再热时间常数的一阶惯性环节。下面代码可以直接替换参数,观察低惯量和高惯量两种工况的差异。
import numpy as np from scipy.integrate import odeint def sfr(x, t, H2, D, R, TR, dp): # x[0]=频率偏差标幺, x[1]=一次调频功率标幺 df, dpm = x dp_cmd = -df / R if abs(df) > 0.00066 else 0.0 # 0.033Hz死区 ddpm = (dp_cmd - dpm) / TR ddf = (dpm - dp - D * df) / H2 return [ddf, ddpm] # 低惯量工况:H2=3.0s;高惯量工况:H2=6.0s for H2, label in [(3.0, "low-inertia"), (6.0, "high-inertia")]: D, R, TR, dp = 1.0, 0.05, 8.0, 0.10 # dp=10%基准容量功率缺额 t = np.linspace(0, 30, 3000) sol = odeint(sfr, [0.0, 0.0], t, args=(H2, D, R, TR, dp)) df = sol[:, 0] * 50 rocof = df[0] / (t[1] - t[0]) print(f"{label}: nadir={50+df.min():.2f}Hz, " f"initial RoCoF={rocof:.3f}Hz/s, " f"settle={50+df[-1]:.2f}Hz")逻辑说明:odeint对二阶微分方程组做积分,x[0]是频率偏差,x[1]是一次调频功率。调速器命令做了死区判断,频率偏差绝对值小于0.00066标幺(对应0.033Hz)时不触发一次调频。频率方程里的H2直接控制初始斜率,这个参数一改,RoCoF和最低频率的变化立刻可见。
参数说明:D是负荷频率调节系数,表示频率下降时负荷自动少取用一部分功率,等效给系统提供“阻尼”;R是调差系数,越小一次调频越灵敏,但太小容易引起功率振荡;TR是再热时间常数,影响调频功率的爬升速度。这套模型可以把死区、限幅、爬坡率逐步加进去做敏感性扫描,也可以对接PSASP/PSSE的时域仿真结果做对比验证。
3.3 频率安全的三个判据,不是只看最低频率
低惯量场景下,频率安全评估至少要看三个指标:初始RoCoF、最低频率、准稳态频率。三者分别对应不同问题:RoCoF太大直接威胁新能源逆变器本身(频率变化率保护、锁相环失步),最低频率决定低频减载和切负荷的程度,准稳态频率决定二次调频能不能收得住。只看最低频率是最常见的偷懒做法,会漏掉RoCoF保护误动这一层风险。
| 指标 | 物理含义 | 典型工程阈值 | 主要关联风险 |
|---|---|---|---|
| 初始RoCoF | 扰动后瞬间频率变化率 | 0.5 Hz/s以内(视电网标准) | 逆变器RoCoF保护误动、锁相环失步 |
| 最低频率 | 频率动态最低点 | 不低于49.0 Hz或低频减载首轮值 | 低频减载动作、切负荷 |
| 准稳态频率 | 一次调频结束后频率 | 49.5~50.5 Hz区间 | AGC调节能力不足、联络线过载 |
仿真中提取这三个指标的节点要分开:RoCoF在扰动后0.1~0.2秒窗口内取,最低频率在时间轴上取全局最小,准稳态频率取扰动后20~30秒的均值。低惯量系统里这三个指标经常互相矛盾,比如提高虚拟惯量可以压低RoCoF,但对最低频率的改善有限,因为能量的来源总量没变;要兼顾三项,就得靠控制参数整定那一层来解决。
4. 频率控制策略的参数怎么定:虚拟惯量、一次调频与低频减载的整定流程
4.1 虚拟惯量与下垂控制的配合
变流器参与频率支撑有两条基本路径:下垂控制和虚拟惯量控制。下垂控制的本质是静态比例关系,有功增量与频率偏差成比例,提供的是类似一次调频的功率支撑;虚拟惯量控制对频率变化率敏感,输出与df/dt成正比,提供的是惯量支撑。低惯量系统里只做下垂控制的问题是,频率变化率在最初几秒内依然陡峭,逆变器电流内环可能被RoCoF冲垮;只做虚拟惯量则稳态频率偏移没人管。所以标准做法是两者同时上,有功指令写为ΔP = -Kp·Δf - Kv·dΔf/dt。
整定顺序我一般先定Kv再定Kp。Kv从小往大扫,观察两条曲线:RoCoF下降曲线和变流器有功超调曲线。Kv给到一定程度后RoCoF不再明显下降,但功率超调还在涨,那个拐点附近就是上限。Kp则根据一次调频的容量需求来定:功率缺额发生后,系统需要在最低频率出现之前补上多少有功,折算到调差系数上,再考虑限幅和备用容量。下面这段代码演示了在给定频率变化率约束下,估算Kv初始值的方法。
# 给定并网点允许的最大RoCoF,估算虚拟惯量系数Kv rocof_limit = 0.5 # 并网点允许最大频率变化率 Hz/s f0 = 50.0 # 额定频率 delta_p_pu = 0.10 # 扰动功率缺额标幺 S_base = 1000 # 基准容量MVA delta_f_dot = rocof_limit / f0 # 转换为标幺RoCoF H_needed = delta_p_pu / (2 * delta_f_dot) # 满足RoCoF所需2H H_current = 3.0 # 系统当前等效2H Kv_suggest = 2 * (H_needed - H_current) / # 虚拟惯量补充量 (S_base / S_base) # 归一到并网点容量基准 print(f"所需2H={H_needed:.1f}s, 当前2H={H_current:.1f}s, " f"Kv建议起始值={2*(H_needed-H_current):.2f}pu·s")逻辑说明:这段代码把RoCoF约束换算成惯量需求,再用需求值和当前值之差得到虚拟惯量补充量。Kv的量纲是秒,和惯量时间常数量纲一致,实际工程里会把它归一到变流器自身容量基准,所以注释里的S_base只是演示归一化方向。这个值只是起始点,最终要在时域仿真里微调。
参数说明:rocof_limit取并网点或电网公司的涉网导则要求,一般0.5Hz/s到1.0Hz/s;H_current由第2章的方法从录波数据辨识得到,仿真场景里则用等值系统的设置值。Kv上限在仿真里通常受两个约束限制:一是储能/变流器可用功率容量,二是控制器带宽,实际取值往往比理论值小一半以上。频率变化率信号容易混入噪声,工程实现要在Kv通道上加入高通或带通滤波,滤掉稳态偏差和量测噪声,只保留动态分量。
4.2 一次调频参数的死区、限幅与速率约束
一次调频的参数不只是调差系数R。三个经常被低估的参数是死区、限幅和速率约束。死区的作用是避免正常频率波动触发频繁调节,但低惯量系统里频率跌落速度极快,如果死区定得太大,一次调频启动时最低频率已经快触及低频减载线。常见标准是0.033Hz死区,这个值放在低惯量系统依然适用,关键是验证“启动时刻到最低频率出现时刻”之间的时间差够不够让调频功率建立起来。
限幅决定了一次调频的“弹药”总量。火电机组的调频限幅与锅炉蓄热有关,新能源场站则受变流器裕度和场站有功管理策略限制。如果场站运行在满发状态,一次调频限幅接近零,频率跌落时根本没能力增发。这就是为什么涉网导则普遍要求新能源场站预留3%~5%备用容量参与一次调频,整定仿真时要把这个约束建模成限幅,而不是简单的比例环节。
速率约束在低惯量系统里是双刃剑。限制爬坡率可以避免大功率阶跃冲击变流器,但爬坡太慢意味着频率最低点拖得更深。实际整定时要给三类电源分别建模:火电爬坡率约1.5%额定容量/min到3%/min,水电机组可以快到10%/min,新能源场站受通信和控制链路影响,典型全响应时间在几百毫秒到1秒量级。下表给出我常用的控制参数初始值,具体数值按现场实测调整。
| 控制参数 | 火电聚合 | 新能源场站 | 备注 |
|---|---|---|---|
| 死区 | 0.033 Hz | 0.033 Hz | 需校核启动时间 |
| 调差系数R | 0.04~0.06 pu | 0.02~0.05 pu | 新能源可更灵敏 |
| 有功限幅 | 5%备用容量 | 3%~5%裕度 | 满发时能力为0 |
| 爬坡率 | 1.5~3%/min | 0.5~1s全响应 | 低惯量场景需测试 |
4.3 低频减载与涉网保护怎么配合
低频减载的参数整定在低惯量系统里要重新审视两个问题:动作延时和与RoCoF保护的配合。传统低频减载每轮频率定值差0.5Hz左右,延时0.2~0.5秒,这套参数在RoCoF为0.1Hz/s时足够从容;但RoCoF到0.6Hz/s时,频率从49.5Hz跌到48.5Hz只需要不到2秒,低轮次之间根本来不及逐级动作。常见整定办法是第一轮动作频率适当抬高(比如49.3Hz),同时缩短延时,把减载的“总时间预算”压缩到1秒内完成首轮。
新能源逆变器的涉网保护是低惯量系统里最容易被忽略的一环。很多逆变器内置低频保护和RoCoF保护,定值往往按传统系统标准设定,比如RoCoF超过1Hz/s跳闸。在低惯量系统中,正常工作时的RoCoF就可能达到0.5Hz/s以上,雷击、短路切除等暂态过程很容易超过保护门槛,导致新能源在系统最需要出力时批量脱网。整定原则是把涉网保护定值放到比低频减载和一次调频更宽松的位置,让源网配合而不是源网互相触发。
紧急控制的最终目的是在频率跌破低频减载首轮定值之前,把功率缺额补上或者减掉。仿真验证时至少要看三类场景:单一机组跳闸、新能源批量脱网、负荷突变。每个场景都输出三条曲线——频率、RoCoF、减载量,并记录低频减载和涉网保护的动作序列,这样整定结果可对比、可回退。
5. 低惯量调频分析与控制的避坑清单:五条实测踩坑记录
5.1 涉及参数辨识与仿真建模的坑
第一坑是RoCoF计算窗口选太大。现象:用录波数据反推的等效惯量,和离线仿真的结果差30%以上,偏大的方向很一致。原因:窗口取0.5秒或1秒时,一次调频已经开始出力,频率回升被平均进初始斜率,RoCoF被低估,反推出来的2H虚高。解决:窗口压到0.1~0.2秒,并且要对齐扰动起始时刻;如果量测噪声大,先做二阶低通滤波再取差分。
第二坑是仿真模型漏了调速器死区。现象:时域仿真里频率最低点看起来还能接受,但实际系统早就在更深的频率上触发了低频减载。原因:理想化的比例式调差模型允许一次调频从扰动一开始就出力,现实中死区内调速器完全不动,调频功率建立的时间被推迟。解决:在调速器模型里加死区判断,仿真对比“有死区”和“无死区”两组结果,把频率最低点的差值纳入裕度评估。
第三坑是负荷模型用了恒功率。现象:准稳态频率仿真结果比实测偏移大,频率一直回不到合理区间。原因:恒功率模型忽略了负荷频率调节效应,实际负荷在频率下降时会自动少用一些电,等效给系统提供一个小阻尼项D。解决:把负荷模型改成“恒功率+频率调节系数”,D取1~2标幺,并做敏感性扫描,确认最低频率对D的敏感度不大后再定值。
5.2 涉及控制整定与保护配合的坑
第四坑是虚拟惯量系数整得过大。现象:加上虚拟惯量控制后RoCoF确实降了,但并网点有功功率出现0.3~0.8Hz的持续振荡,电流波形也跟着抖。原因:Kv过大让频率变化率通道变成一个高增益宽带放大,和锁相环、电流内环以及交流电网阻抗形成负阻尼回路。解决:先扫Kv从零到上限的功率超调曲线,取超调小于10%的最大Kv;同时在频率变化率信号路径上加5~10Hz带宽的低通滤波。
第五坑是新能源场站RoCoF保护定值沿用高惯量系统的标准。现象:故障仿真里系统发生功率缺额,新能源场站反而先跳闸,让频率二次跌落。原因:场站保护定值按传统电网设计(RoCoF门槛1Hz/s),没考虑低惯量系统正常运行时的RoCoF就可能达到0.6Hz/s以上,保护被高频误触发。解决:重新校核RoCoF保护定值,把门槛抬高到系统最大允许RoCoF的1.5倍以上,或者增加0.2~0.5秒动作延时,让低频减载和一次调频先动作。
6. 把综述结论变成算例:用录波数据回归一次调频响应模型
6.1 从一次真实扰动中同时辨识惯量和调频响应
综述里讲了那么多控制策略,最终都要落到“我的系统参数到底该设多少”上。一个我常用的收尾验证方法:找一次真实的机组跳闸录波,先用第2章的方法反推2H,再用整段频率曲线反推一个低阶的调频响应模型,然后把这个模型当成“现状基线”,把要整定的虚拟惯量、调差系数代进去,对比频率最低点和准稳态频率的提升量。这样既验证了仿真的可信度,也为后续控制参数变更提供了定量依据。
import numpy as np from scipy.optimize import least_squares def model_response(params, t, dp): H2, D, R, TR = params # 简单欧拉积分,实际可用odeint df, dpm, out = 0.0, 0.0, [] for i in range(len(t) - 1): cmd = -df / R if abs(df) > 0.00066 else 0.0 ddpm = (cmd - dpm) / TR ddf = (dpm - dp[i] - D * df) / H2 df += ddf * (t[i+1] - t[i]) dpm += ddpm * (t[i+1] - t[i]) out.append(df * 50) return np.array(out) # 真实录波:t_cut, f_meas, dp_meas 由PMU文件读出 t_cut = np.linspace(0, 20, 2000) res = least_squares( lambda p: model_response(p, t_cut, dp_meas) - f_meas, x0=[4.0, 1.0, 0.05, 8.0], bounds=([0.5, 0.1, 0.01, 1], [15, 5, 0.2, 30]) ) H2_fit, D_fit, R_fit, TR_fit = res.x print(f"辨识结果: 2H={H2_fit:.2f}s, D={D_fit:.2f}, " f"R={R_fit:.3f}, TR={TR_fit:.1f}s")逻辑说明:这段代码把SFR模型的四个关键参数一并用最小二乘拟合出来,目标函数是模型输出的频率曲线与实测曲线的偏差。欧拉积分只是为了演示求解思路,实际使用建议换成odeint避免步长误差。拟合结果里2H和R最可信,D和TR在单一扰动下可辨识性弱,如果拟合的TR明显偏离合理范围,就固定为典型值再重新拟合。
参数说明:bounds的上下界要按设备物理能力设置,比如2H不可能小于0.5秒,也不可能大于15秒;R的取值范围按调差系数典型值0.01~0.2 pu。拟合完成后,把实测曲线、基线仿真曲线、加虚拟惯量后的仿真曲线画在一张图里对比,这是我在项目里最常用的一张交付图:既能向电网调度解释现状风险,又能量化控制参数改动后的收益。最后说一点个人习惯:凡是涉及低惯量系统的仿真,我一定会把所有涉网保护先打开再整定控制参数,因为保护动作序列往往比控制参数更早决定频率是不是兜得住。低频减载、RoCoF保护、过频保护,每一个都要在仿真里可见、可记录。这个习惯救过我一次,希望帮到你。
本文还有配套的精品资源,点击获取