2026/10/21 9:27:51

换流器高占比系统最低惯量需求评估模型与实现

换流器高占比系统最低惯量需求评估模型与实现 简介面向电力系统规划、运行与控制研究人员这套资料聚焦换流器高占比场景下的最低惯量需求评估。内容涵盖惯量需求定义与影响因素分析、频率稳定约束下的评估模型、惯量安全域概念及分级预警机制并提供从单机频率响应到多机系统惯量评估、动态安全域分析的完整代码实现与解释兼具理论深度和工程应用价值。资源包共一个Word文档文件大小56KB便于快速查阅与代码复现目前已有八十余人学习下载。通过文中图表和交互式工具读者可直观理解不同惯量水平对频率稳定性的影响并直接应用或调整代码以支撑实际电网分析。适用于新能源高渗透率场景的规划与运行可帮助研究人员快速掌握评估方法。1. 换流器高占比系统里惯量为什么突然变成了稀缺资源同一台火电机组退运放在十年以前的系统里最多是备用率下降一个百分点放在换流器高占比系统里可能直接决定下一次大扰动时低频减载动不动。原因是大量同步机被换流器替代后系统里能“自然”提供旋转惯量的设备越来越少而惯量恰恰是频率跌落的刹车片功率缺额出现的一瞬间只有惯量在扛住频率变化率。本笔记要讲的就是一套可落地的“最低惯量需求”评估模型把频率约束写成数学条件用聚合等值和二分搜索快速算出某个运行方式下系统至少要保留多少惯量并给出可直接改参数复用的代码。适合做新能源并网评估、电网规划、调度方式校核的工程师也适合刚接触频率稳定分析、想找个入门编码参照的学生。2. 频率跌落的三道闸门与惯量资源的聚合口径先说清楚一个容易混淆的概念“惯量需求”不是一个物理常数而是一个运行边界值。它回答的问题是在给定运行方式、给定扰动事件、给定安全约束下系统等效惯量低到多少就会越限。所以评估模型的核心不是“算一个惯量值”而是把频率安全的三个约束写出来反推惯量临界点。2.1 三个频率约束RoCoF、最低点与准稳态偏差频率安全约束通常拆成三道闸门评估时缺一不可。第一道是频率变化率约束也就是 RoCoF。换流器高占比系统里频率变化率过大可能触发新能源场站频率保护也可能导致锁相环动态失稳还会影响与外部系统的并列策略。RoCoF 的最大值出现在扰动瞬间此时一次调频还来不及动作只有惯量在起作用RoCoF_max (ΔP · f0) / (2 · H_eq · S_B)其中 ΔP 是功率缺额f0 是额定频率S_B 是系统基准容量H_eq 是等效惯量时间常数。这个公式说明一个反直觉的事实RoCoF 限值一旦确定惯量需求和扰动大小是严格线性关系的。扰动翻倍惯量需求就翻倍。第二道是频率最低点也就是 nadir。低频减载整定值盯的是最低点不是变化率。惯量低时频率跌得快但一次调频动作需要时间所以即便 RoCoF 没越限最低点也可能跌破低频减载首轮动作线。评估中最容易翻车的就在这里只看 RoCoF 会觉得惯量很充裕算完最低点才发现方案根本不可行。第三道是准稳态频率偏差。一次调频结束、频率趋于平稳后频率与额定值之间还可能有偏差。这个偏差主要由调差率、负荷阻尼和功率缺额决定和惯量关系不大但必须顺带校验。否则可能出现“惯量够了但一次调频能力不足频率长期挂在偏低位置”的隐患。2.2 惯量资源分类与 H_eq 的聚合公式系统里的惯量来源要分清“天然惯量”和“可控惯量”两者在评估里的处理方式完全不同。天然惯量主要是同步机转子惯量和负荷侧的异步电机惯量。同步机转子惯量最可靠只要机组在线这部分惯量就实打实存在按容量加权聚合即可。负荷侧的异步电机群体也能提供惯量但电压跌落时异步电机会减速实际提供的惯量会缩水很多评估里保守起见不计入或者只按一个很小的系数计入。可控惯量来自换流器。风机和光伏通过虚拟惯量控制可以在频率跌落时临时增发有功等效出一个惯量效果。但它和同步机转子惯量有本质区别虚拟惯量受锁相环响应速度、电流限幅和直流母线电压波动三层限制。锁相环跟踪频率变化需要时间电流限幅会直接封顶有功增量直流母线电压跌落时控制器优先保自身安全不一定把全部“虚拟惯量”吐出来。所以评估时不能把铭牌参数直接叠加。我一般采用的聚合公式是H_eq (Σ H_j · S_j Σ H_vir,k · S_k · η_k) / S_B其中 H_j 是第 j 台同步机的惯量时间常数S_j 是它的额定容量H_vir,k 是第 k 个换流器配置的虚拟惯量时间常数S_k 是它的容量η_k 是可用系数通常取 0.30.7具体取决于控制策略和厂家参数。S_B 是统一的基准容量。注意这里有个最容易踩的坑基准容量不统一。H_eq 是标幺值基准容量取 100 MVA 和取 1000 MVA算出来的数字差 10 倍。所以聚合之前第一件事是把所有容量折算到同一个基准上并且在结果里强制标注基准容量否则后面所有决策都会建立在错误数字上。3. 用聚合频率响应模型把“够不够”算成数字约束列清楚了下一步就是把频率动态算出来。这里有一个路线选择用解析公式还是用数值积分。解析公式形式漂亮但前提太多实际评估中我更喜欢用数值积分代码透明、时间戳清晰、方便加限幅逻辑。3.1 SFR 聚合模型与求解逻辑SFR 模型即系统频率响应模型把整个系统等值成一台等效发电机保留三个核心参数等效惯量 H_eq、一次调频响应能力用调差率 R 和响应时间常数 T_g 表示、负荷阻尼 D。功率扰动发生后频率偏差的动态方程写成标幺值形式2 · H_eq · dΔf_pu/dt ΔP_m_pu − ΔP_dist_pu − D_pu · Δf_pu其中 ΔP_dist_pu 是扰动量ΔP_m_pu 是一次调频增发的机械功率等效到换流器就是有功增量Δf_pu 是频率偏差标幺值。一次调频的响应用一阶惯性环节近似dΔP_m_pu/dt (ΔP_dist_pu / R − ΔP_m_pu) / T_g这里 R 是等效调差率T_g 是等效响应时间常数。对小系统、单区域评估这个模型精度足够对多区域互联系统可以把每个区域各自建一个 SFR 模块区域间用联络线功率耦合思路完全一样只是从单机变成多机。为什么不用闭式解析公式解析公式在“理想阶跃扰动 线性环节 无限出力”的前提下是准确的但换流器高占比系统里限幅、控制切换、多事件叠加都很常见这些都会让闭式解失效。数值积分每一步都在重新评估当前状态遇到限幅直接截断即可逻辑统一得多。3.2 最小评估函数单扰动场景下的频率动态仿真先写一个最核心的函数输入等效惯量和扰动量输出最大 RoCoF 和频率最低点。这个函数是整个评估模型的地基。def simulate_frequency(H_eq, delta_P_pu, f050.0, D_pu0.01, R0.05, T_g4.0, dt0.01, T_max30.0): 单扰动场景下的频率动态仿真欧拉积分 参数: H_eq: 系统等效惯量时间常数秒 delta_P_pu: 功率缺额标幺值以系统基准容量为基准 f0: 额定频率Hz D_pu: 负荷阻尼标幺值频率偏差每变化1pu对应的负荷变化 R: 等效调差率标幺值 T_g: 一次调频等效响应时间常数秒 dt: 积分步长秒 T_max: 仿真时长秒 返回: rocof_max_hzps: 最大频率变化率Hz/s f_nadir_hz: 频率最低点Hz # 状态初始化 df_pu 0.0 # 频率偏差标幺值 dP_m_pu 0.0 # 一次调频增发功率标幺值 rocof_max_hzps 0.0 f_nadir_hz f0 # 时间推进 t 0.0 while t T_max: # 一次调频一阶惯性环节逼近目标值 delta_P_pu / R target_m delta_P_pu / R dP_m_pu (target_m - dP_m_pu) / T_g * dt # 频率变化率标幺值每秒 ddf_pu (dP_m_pu - delta_P_pu - D_pu * df_pu) / (2.0 * H_eq) # 转成 Hz/s并记录最大值 rocof_hzps ddf_pu * f0 rocof_max_hzps max(rocof_max_hzps, abs(rocof_hzps)) # 更新频率偏差和最低点 df_pu ddf_pu * dt f_now f0 df_pu * f0 if f_now f_nadir_hz: f_nadir_hz f_now t dt return rocof_max_hzps, f_nadir_hz逻辑说明这段代码把第 2 章的两个微分方程用欧拉法直接推进。每走一步先更新一次调频功率再算当前频率变化率然后更新频率偏差。循环结束后取最大 RoCoF 和最低频率正好对应三个约束中的前两个。准稳态频率偏差可以取仿真最后时刻的 f_now或者另写一段用稳态方程直接算代码里为了简洁没有单独返回实际使用建议加上。参数说明H_eq 的单位是秒典型区域电网在 28 s 之间delta_P_pu 用标幺值比如 1000 MVA 基准下缺 300 MW就传 0.3D_pu 一般取 0.010.03表示负荷频率调节效应R 取 0.040.06对应 4%6% 的调差率T_g 取 36 秒换流器一次调频响应快一些可设小一点。dt 用 0.01 秒足够T_max 取 2030 秒确保频率进入准稳态。现在这个函数只能回答“给定 H_eq频率最低点是多少”还不能自动求最低惯量需求。下一步要把单点校验变成自动搜索。4. 把单点校验变成自动搜索最低惯量的完整计算流程有了单场景仿真函数评估模型就完成了一半。剩下一半是把“人工调参看结果”变成程序自动找临界惯量然后覆盖典型运行方式和扰动场景最终输出一个系统级结论。4.1 输入参数与场景定义正式评估前先把输入参数整理成表。我一般按四类组织参数类别参数名典型取值说明系统参数S_B1000 MVA全模型统一基准容量系统参数f050 Hz额定频率系统参数D_pu0.02负荷阻尼标幺值扰动场景delta_P_pu0.10.2功率缺额标幺值取决于事件集扰动场景事件类型单机/直流/出力骤降用于结果归因一次调频R0.05等效调差率一次调频T_g4 s等效响应时间常数约束限值RoCoF_max0.5 Hz/s各地区整定值不同约束限值f_nadir_min49.5 Hz通常对应低频减载首轮线约束限值f_ss_min49.8 Hz准稳态频率下限场景怎么定义常见做法是枚举运行方式和扰动候选集。运行方式包含开机组合、送受电计划、新能源出力水平扰动候选集至少包含最大单机跳闸、直流闭锁、新能源出力骤降三类。每个“运行方式 × 扰动事件”组合是一个评估场景。不要只取最大单机跳闸换流器高占比系统里直流闭锁或者整片风场脱网往往更恶劣。4.2 二分搜索找临界惯量惯量需求求解有一个很好的数学性质在合理参数范围内H_eq 越大频率最低点越高、RoCoF 越小约束可行性关于 H_eq 单调。所以可以放心使用二分搜索每次调用 simulate_frequency 判断当前 H_eq 是否满足所有约束然后缩小区间。def check_constraints(H_eq, delta_P_pu, rocof_limit0.5, f_nadir_limit49.5, **kwargs): 判断给定 H_eq 下频率是否满足全部约束 返回: (是否满足, 主导约束名称, 当前指标值) rocof, f_nadir simulate_frequency(H_eq, delta_P_pu, **kwargs) if rocof rocof_limit: return False, RoCoF, rocof if f_nadir f_nadir_limit: return False, nadir, f_nadir return True, ok, min(rocof, f_nadir) def min_required_H(delta_P_pu, H_low1.0, H_high20.0, tol0.05, **kwargs): 二分搜索最低惯量需求 参数: delta_P_pu: 扰动功率缺额标幺值 H_low, H_high: 惯量搜索区间下限和上限秒 tol: 收敛精度秒 返回: H_req: 满足全部约束的最低惯量时间常数秒 limiting_constraint: 主导约束名称 # 边界可行性检查 feasible_high check_constraints(H_high, delta_P_pu, **kwargs)[0] if not feasible_high: return None, infeasible feasible_low check_constraints(H_low, delta_P_pu, **kwargs)[0] if feasible_low: return H_low, low_bound_feasible # 标准二分 while H_high - H_low tol: H_mid (H_low H_high) / 2.0 feasible, limiting, _ check_constraints(H_mid, delta_P_pu, **kwargs) if feasible: H_high H_mid else: H_low H_mid return H_high, limiting逻辑说明check_constraints 把第 3 章的仿真结果和约束限值做比较返回是否可行以及哪个约束先触界。min_required_H 先检查搜索区间上下界是否合理上界不可行说明这个场景在当前参数下即使 H20 s 也满足不了约束可能是扰动过大或调频太慢这时要标记为 infeasible 而不是硬算下界就可行的场景说明 1 s 惯量都够多半是扰动太小或约束太松直接返回下界。正常场景才走二分循环。参数说明H_low 取 1.0、H_high 取 20.0 覆盖了绝大多数区域电网的合理范围。tol 取 0.05 秒折合惯量 50 MWh/GW 左右对规划决策足够精细。想要更精确可以收紧到 0.01但每次二分约 log2(19/0.05)≈9 次仿真几十个场景算下来差异不大。需要注意如果评估的系统里虚拟惯量控制与 H_eq 存在强耦合——比如惯量越低控制器增益越高——单调性可能被破坏此时二分不适用需要改为全区间扫描加插值。我在实际项目中遇到过两次这种情况都是在直流送端系统里稳妥做法是先跑一个 20 点扫描看可行性曲线是否单调。拿到每个场景的临界惯量后还要做一件事把所有场景的结果汇总取最大值作为系统级最低惯量需求。单独一个场景算出来的数不能直接用因为运行方式会变化扰动事件也不可预知调度需要的是一个覆盖所有已枚举场景的安全值。4.3 结果输出与合理性校核汇总输出我习惯做成一张表场景编号、运行方式、扰动事件、最低惯量需求、主导约束、边界值。核心代码如下scenarios [ {name: S1_高峰_直流闭锁, delta_P_pu: 0.18, T_g: 4.0}, {name: S2_高峰_最大单机, delta_P_pu: 0.12, T_g: 4.0}, {name: S3_低谷_风场脱网, delta_P_pu: 0.15, T_g: 6.0}, ] summary [] for sc in scenarios: H_req, limiting min_required_H(sc[delta_P_pu], T_gsc[T_g]) summary.append((sc[name], H_req, limiting)) # 输出时先按 H_req 降序排列最小惯量需求取所有场景最大值 summary.sort(keylambda x: x[1], reverseTrue) system_H_requirement summary[0][1] for name, H_req, limiting in summary: print(f{name}: 最低惯量 H{H_req:.2f}s, 主导约束{limiting}) print(f系统最低惯量需求: {system_H_requirement:.2f}s)代码逻辑很直接但两个细节值得强调。第一按 H_req 降序排列的目的是快速定位最恶劣场景排序后第一行就是系统级需求对应的场景后续和调度沟通时直接拿这个场景说事。第二如果出现了 infeasible程序会返回 None这时不要跳过而是要回到参数表检查是不是扰动场景设得过于苛刻或者一次调频参数偏保守。全部场景都算完后还要做一个数量级校核同步机为主的系统惯量时间常数通常在 36 秒换流器高占比系统折算后会偏低但一般不会低于 1 秒。如果算出来 H20 或者 H0.5先怀疑单位换算和基准容量而不是急着修改模型。5. 避坑与排查惯量需求评估常见的翻车点这个方向我踩过的坑比顺利跑通的次数多得多。挑五个最有代表性的写出来每一条都是“现象 → 原因 → 解决”的完整链路。5.1 只校验 RoCoF低频减载还是动作了现象某次评估按照 RoCoF≤0.5 Hz/s 校核算出来惯量需求只有 2.2 s调度按这个值安排开机结果真发生扰动时低频减载首轮动作了。原因RoCoF 反映的是扰动瞬间频率下降的斜率它不包含一次调频响应滞后的影响。调速器和换流器控制都有响应延迟在延迟期间频率会继续下跌最低点可能比 RoCoF 约束对应的深度低很多。RoCoF 达标不代表 nadir 达标两个约束压根是两回事。解决评估函数里同时输出 RoCoF 和 nadircheck_constraints 里两个限值同时判断。实际项目中大约七成场景的主导约束是 nadir 而不是 RoCoF所以别再只看变化率了。5.2 扰动场景只取“最大单机”惯量需求被严重低估现象评估结果说 H2.5 s 就够后来把直流闭锁事件加进去重算需求直接跳到 4.8 s。原因传统系统里最大单机容量通常就是最大扰动换流器高占比系统里直流闭锁、整片新能源基地脱网、逆变器连锁响应都可能造成比单机更大的功率缺额。只取单机就是把最恶劣的情况漏掉了。解决扰动候选集至少包含三类最大单机、直流闭锁、新能源出力骤降。不确定哪个最恶劣时把候选事件全部跑一遍让结果说话而不是拍脑袋选一个。5.3 虚拟惯量按配置容量全叠加评估值虚高现象把某风电场集群的虚拟惯量全部按铭牌参数叠加评估结果比时域仿真校核低了将近 1.5 s仿真里频率最低点时风机根本没有输出那么多有功。原因虚拟惯量不是物理转子的动能它靠控制器临时增发有功来实现。锁相环要时间锁住频率变化电流限幅直接限制最大有功增量直流母线电压波动时控制器还会优先保护自身。三层限制叠加下来实际可用系数经常只有 0.30.5。解决聚合公式里给每个换流器群单独设可用系数 η_k保守取值 0.3有条件做硬件在环测试的再实测标定。宁可低估虚拟惯量不要高估否则评估结果就是给安全留了一个看不见的缺口。5.4 一个等值机打天下忽视区域断面和空间分布现象区域级聚合模型算出来惯量充足但某弱联系断面一端频率下跌特别快局部低频减载已经动作整体频率指标还没越限。原因惯量是全局概念但频率响应存在空间分布。换流器高占比区域和同步机区域之间如果只有弱联络线扰动发生在换流器侧时惯性支撑跨断面传递受限局部频率会比全局平均值差很多。解决单区域 SFR 模型只适用于电气联系紧密的系统。存在明显断面分割时把系统拆成两个或三个等值机区域间用联络线功率特性耦合每个区域独立校验频率约束。模型复杂一点但比拿全局数字掩盖局部风险强。5.5 基准容量对不上结果差出一个数量级现象某工程师拿我的代码去评估算出来 H25 s说你们那边惯量需求怎么这么离谱。最后发现他把 S_B 设成了 100 MVA而扰动和机组容量都是按 1000 MVA 输入的标幺值差了 10 倍。原因惯量时间常数是标幺值所有容量必须折算到同一基准。基准选小了H_eq 按比例放大扰动标幺值也会改变两个错误叠在一起结果完全不可信。解决代码入口处强制用户传入 S_B并在每次输出时把 S_B 打在结果旁边。我的习惯是评估报告的第一行永远写“基准容量1000 MVA”后面所有数字都和它绑定。这个习惯救过我至少两次建议直接抄走。6. 进阶用灵敏度分析与在线惯量估计把评估做成动态工具离线评估算出来的是一个静态数值但系统运行方式是实时变化的。把评估模型往上再走一步可以做两件很实用的事灵敏度分析和在线滚动预警。6.1 灵敏度分析找到压低惯量需求的最有效抓手对已收敛的临界惯量做微扰观察哪个参数对结果影响最大。做法很简单固定其他参数把某个参数从基准值调整 ±10%重新跑 min_required_H记录需求变化量。调整项调整幅度惯量需求变化结论扰动缺额10%0.6 s扰动主导降需求靠缩小扰动影响T_g 响应时间-20%-0.4 s加速一次调频有效虚拟惯量可用系数0.1-0.3 s提升换流器支撑能力有效负荷阻尼 D_pu0.005-0.2 s相对有限这个表给调度看比给一堆公式有用得多。如果灵敏度结果显示“扰动缺额”影响最大那结论就是优先做直流闭锁后的快速功率转带而不是加虚拟惯量如果“T_g”影响最大那就去推动换流器厂家优化一次调频参数。评估模型的最终价值不是算出一个数而是告诉你该往哪个方向使劲。6.2 在线滚动评估用事件量测估计当前惯量思路很简单扰动发生后前 2 秒内一次调频还没起作用频率变化率主要由惯量决定。用 PMU 量测到的功率缺额和频率变化率可以直接反推等效惯量def estimate_H(delta_P_mw, df_dt_hzps, f050.0, S_B1000.0): 从扰动功率和实测RoCoF反推等效惯量 delta_P_mw: 扰动功率MW df_dt_hzps: 实测最大频率变化率Hz/s delta_P_pu delta_P_mw / S_B df_dt_pu df_dt_hzps / f0 H_est delta_P_pu / (2.0 * df_dt_pu) return H_est实测的 df_dt 噪声很大不要用单点值取事件后 0.52 秒窗口内的平滑斜率。得到 H_est 后去离线场景库里找最接近的运行方式查出对应的最低惯量需求两者一减就是惯量裕度。裕度低于阈值就预警建议调度预增同步机开机或提升换流器虚拟惯量系数。这套在线逻辑我在某区域电网的预研项目里搭过原型核心不是算法多复杂而是离线场景库要足够稠密。所以第 4 章的批量计算不是跑一次就完事而是要把它当成一个长期维护的基础工具每次运行方式变化就往场景库里补一批数据。最后说一个我自己的血泪教训最早做这个评估流程时因为基准容量没统一算出来的 H_eq 只有真实值的一半幸好拿了多个典型场景去和时域仿真对拍才发现问题。后来我给自己定了一条规矩凡是输出惯量相关结果第一行永远写清楚基准容量、扰动事件和约束限值三个信息缺一不可。这套评估流程可以直接照搬当你的第一个版本跑通之后按你所在系统的真实参数和约束值去改。遇到频率动态对不上的情况优先查单位、查扰动场景、查虚拟惯量可用系数——这三样占了我这边八成以上的排查时间。希望帮到你。本文还有配套的精品资源点击获取