暂态能量函数法实战:从临界能量到稳定裕度
2026/9/19 3:01:30 网站建设 项目流程

简介:电力系统暂态能量函数法暂态稳定分析讲义共105页,可作为电气工程与电力系统相关专业研究生、高年级本科生的教材配套课件,也可供工程师与科研人员复习理论、梳理知识体系时参考。内容围绕暂态能量函数法展开,涵盖基本原理、数学描述、李氏定理、单机无穷大系统直接法分析以及多机系统的特殊问题与能量函数构建等模块,既讲清能量型判据的理论推导,也结合故障切除、临界能量、稳定裕度等实际案例说明应用方法。资源包仅含1个pptx文件,整体1.23MB,页面编排清晰,插图与公式辅助理解,适合教学使用或自学整理。该课件在下载平台已有160人浏览学习,旨在帮助读者建立从平衡点、临界能量到暂态稳定判据的完整认知框架,并为后续深入研究多机系统稳定问题打下基础。

1. 暂态能量函数法暂态稳定分析的学与用,先盯住临界能量

在暂态稳定分析里,数百个预想故障往往要逐一时域积分到 5~10 秒才能下结论,而暂态能量函数法用故障清除时刻的“系统总能量”做单点判定,计算量可以降到十几分之一。它把多机电力系统看成一个非线性动力学系统,站在李雅普诺夫稳定性理论之上,构造故障后的能量函数:累积暂态能量低于临界能量,系统回到事故前平衡点;高于临界值,则存在失稳风险。这个方法在预想事故筛选、薄弱断面识别和调度运行课件中都很常见,适合放进教案式 PPT,结合短路点、切除时间等算例逐步讲透。真正要解决的问题是三个:能量函数怎么构造、临界能量怎么定、稳定裕度怎么算,以及如何与传统时域仿真结果相互验证。

2. 暂态能量函数法的理论起点:从转子运动方程到可计算的 V(δ, ω)

2.1 变换到 COI 坐标系,稳定分析才有统一的参考轴

构造暂态能量函数的第一步,不是直接写能量公式,而是先把系统中每台发电机的转子运动方程变换到惯性中心(COI)坐标系。如果不做这一步,所有转子角都在同步转速附近漂移,能量函数的值会随着参考轴整体旋转而变化,无法形成一个正定且有界的判据。

按经典二阶模型,第 i 台发电机的运动方程为:

M_i * dω_i/dt = P_mi − P_ei − D_i(ω_i − ω_0)

其中M_i是惯性时间常数,P_mi是机械功率,P_ei是电磁功率,D_i是阻尼系数。若直接用同步转速ω_0做参考,故障后系统重心本身也在变化。引入 COI 后,定义全系统的惯性加权平均角δ_COI和平均转速ω_COI,令各机相对角为θ_i = δ_i − δ_COI,相对转速为ω̃_i = ω_i − ω_COI。这样,全系统的总动能可以写成各机相对动能之和,并且与坐标选择无关。

这一变换对后续所有计算都有影响:在教案中常出现的“等值单机无穷大系统”实际上就是 COI 变换后的一种退化形式,它能让我们用一张能量轨迹图说明稳定边界,但绝不能把多机系统直接压成单机来算临界能量。多机情况下,每台机的P_ei是角度向量的函数,能量项里会出现任意两台发电机之间的 cos 型耦合项,这正是“暂态能量函数法”比直接观察最大功角差更本质的地方。

2.2 经典模型下最常用的能量函数形态

在经典模型(发电机用暂态电抗后的恒定电动势表示,负荷用恒定阻抗表示)下,系统的暂态能量函数通常写成动能部分与势能部分之和:

V(θ, ω̃) = 1/2 * Σ M_i * ω̃_i² − Σ P_mi * (θ_i − θ_i^s) + ΣΣ C_ij * (cos θ_ij − cos θ_ij^s)

第一项是动能,第二项和第三项是势能,注意势能中已经通过减去稳定平衡点处的常数项,保证了故障切除后系统回到原平衡点时V = 0。这里的C_ij与网络导纳、电动势幅值有关,实际计算时要从故障后的网络方程中求出来。

能量函数必须满足三个条件才能用作暂态稳定判据:一是V沿故障后轨迹的导数不大于零,即故障后能量单调不增;二是V在稳定平衡点取局部极小值;三是稳定边界上能量值连续。符合这些条件后,故障清除时刻的V_cl就可以和临界能量V_cr直接比较。需要注意,经典模型忽略励磁系统、PSS 和负荷动态,得到的V_cr偏于保守,工程上常用于快速筛选,而不是替代详细仿真。

2.3 三种能量函数构造方案与选型对照

不同的模型精度对应不同的构造方法,教案设计时应当直接给出一张对照表,让学习者知道该在什么场景下选哪套方案。

构造方案模型范围临界能量求解难度典型误差来源适用场景
经典模型能量函数发电机用经典二阶模型,负荷为恒定阻抗低,适合教学入门忽略阻尼与励磁,结果偏保守课件演示、粗筛
结构保持模型(SPEF)保留网络拓扑,负荷建模为静态或动态中,边界搜索需迭代负荷模型参数敏感需要反映网络结构的评估
带励磁调节的动态能量函数计及励磁系统和调速器高,需精确初值控制器参数获取困难详细校核、边界分析

我一般建议在 PPT 教案里把经典模型放在前面讲透,把结构保持模型作为进阶模块。原因很直接:经典模型可以用手算和简单积分完成全流程,学习者在半个小时内能复现从故障扫描到裕度输出的过程;结构保持模型虽然更接近真实系统,但能量函数非自治项的处理和临界能量的迭代搜索容易让初学者陷进数值细节,反而忽略方法本身。

3. 稳定裕度这样算:故障清除时刻能量与临界能量逐项对比

3.1 三步走:轨迹积分、清除时刻能量、边界比较

用暂态能量函数法做一次完整稳定性评估,固定流程是三步。

第一步,对故障前系统做潮流计算,得到各发电机功角初值θ_0;随后在系统中设置短路故障,从故障发生时刻开始,对故障中的转子运动方程进行数值积分,直到故障清除时刻t_cl,记录此时各机的功角向量和转速偏差向量。

第二步,以故障清除时刻的状态量为初值,结合故障后的网络方程,计算系统总能量V_cl。动能项直接由转速偏差算出,势能项要代入故障后网络的C_ij

第三步,计算临界能量V_cr,并给出稳定裕度指标η = (V_cr − V_cl) / V_crη > 0表示稳定,η < 0表示失稳,η越接近零,系统越靠近稳定边界。

这个流程的核心价值在于:不需要把故障后轨迹一直积分到能观察出振荡发散为止。故障清除后系统是稳定还是不稳定,理论上在清除时刻就能判断,这正是它比时域仿真快一个数量级的原因。

3.2 一个可改参数的算例:摆动方程与能量计算放进同一段代码

下面给出一个面向单机无穷大系统的简化可运行示例,用于演示整个流程。代码量不大,但把积分、能量计算和裕度计算都串起来了。

import numpy as np from scipy.integrate import solve_ivp # 系统参数 H = 6.0 # 惯性时间常数,单位秒 Pm = 0.9 # 机械功率,标幺值 E = 1.05 # 发电机暂态电动势,标幺值 X = 0.30 # 故障后等值电抗,标幺值 D = 0.02 # 阻尼系数 # 找出稳定平衡点 delta_s def power_balance(delta): return Pm - E * E / X * np.sin(delta) delta_s = 0.35 # 由潮流解出,单位弧度 t_cl = 0.15 # 故障清除时间,单位秒 # 状态量 y = [delta, omega] def swing_eq(t, y): delta, omega = y # 故障后网络下的电磁功率 Pe = E * E / X * np.sin(delta) return [omega, (Pm - Pe - D * omega) / H] # 故障中积分,这里用故障时限流电抗代替网络参数 def swing_eq_fault(t, y): delta, omega = y Pe = E * E / (0.05) * np.sin(delta) # 近区短路的等值电抗很小 return [omega, (Pm - Pe) / H] # 故障发生到清除时刻,采密集输出用于能量轨迹 sol_fault = solve_ivp(swing_eq_fault, [0, t_cl], [delta_s, 0], dense_output=True, max_step=0.005) delta_cl, omega_cl = sol_fault.y[:, -1] # 故障后能量函数:以稳定平衡点处能量为 0 def energy(delta, omega): vk = 0.5 * H * omega**2 vp = -Pm * (delta - delta_s) + E * E / X * (np.cos(delta) - np.cos(delta_s)) return vk + vp Vcl = energy(delta_cl, omega_cl) # 用等面积法近似临界能量,工程上由临界点决定 delta_uep = np.pi - delta_s Vcr = energy(delta_uep, 0.0) eta = (Vcr - Vcl) / Vcr print(f"清除时刻功角={delta_cl:.3f} rad, 转速偏差={omega_cl:.3f} rad/s") print(f"Vcl={Vcl:.4f}, Vcr={Vcr:.4f}, 稳定裕度={eta:.2%}")

这段代码里最需要关注的是energy函数。动能项是0.5 * H * omega**2,势能项中−Pm * (delta − delta_s)对应机械功率做功,E*E/X * (cos(delta) − cos(delta_s))对应故障后网络储能变化。正因为势能项代入了稳定平衡点的值,V在起点处为零,之后的绝对值才具备物理意义。

故障中的积分采用比故障后更小的电抗,模拟短路时电磁功率骤降、发电机加速的过程。调整t_cl从 0.10 到 0.25 秒,会看到Vcl随清除变晚而增大,eta逐渐由正转负。这个灵敏度表现可以直接作为教案中的课堂演示,让学习者看到同一个故障,清除时间只差 0.05 秒就可能导致结论翻转。

3.3 参数取值的三个细节

第一,故障清除时间t_cl的采样间隔必须足够小。用solve_ivp时如果依赖事件函数精确捕捉开关时刻,一定要设置max_step,否则清除时刻的功角和转速误差会直接传导到Vcl,导致裕度计算虚高或虚低。

第二,阻尼系数 D 的取值要谨慎。经典模型能量函数中动能项不显含阻尼的耗散贡献,如果把 D 直接写进能量函数,会破坏“沿故障后轨迹能量单调不增”的条件。工程上更常用的做法是不把阻尼放进能量函数,只在时域验证环节观察振荡衰减。

第三,稳定判据不能只盯η > 0。实测算例中,由于模型简化和参数误差,η在 ±5% 以内时,结果随时域仿真不一致的概率明显升高。我通常在工程判断中取η > 5%视为稳定,η < −5%视为失稳,中间区域的故障单独进入时域仿真池。

4. 暂态能量函数法里的 CUEP 与 PEBS:临界能量 Vcr 的两种求法

4.1 CUEP 主导不稳定平衡点:轨迹出口决定临界能量

临界能量Vcr并不是随便取一个不稳定平衡点上的能量值。在多机系统中,故障清除后的轨迹只朝稳定边界上某个特定位置逼近,这个位置对应的不稳定平衡点被称为主导不稳定平衡点,简称 CUEP。

CUEP 的求解逻辑是:先对故障后系统的潮流方程求解所有不稳定平衡点,再根据故障中轨迹的“出口点”确定哪一个不稳定平衡点在稳定流形上主导当前轨迹。具体实现时,通常把故障中轨迹末端向不稳定平衡点方向投影,选出与出口点方向最接近的那个 UEP,再以该点功率不平衡量最小为收敛判据做牛顿迭代。

工程中直接对全系统求 CUEP 很费时,常见做法是先做网络化简,把外部系统等值到研究区域边界,只在研究区域内搜索。等效后的系统维度降到 3~5 台机,CUEP 求解速度和收敛性都明显改善。代价是等值过程会引入误差,因此教案演练阶段常把结果与原始模型时域仿真做一次交叉验证。

4.2 PEBS 势能边界面搜索与 CUEP 的参数差异

PEBS 方法不直接求解不稳定平衡点,而是在故障后轨迹上扫描势能变化,把势能达到首次局部最大值的点当作稳定边界上的临界点。这个临界点对应的能量值即被当作Vcr。其物理意义是:系统在越过势能最陡的“山坡”之前,动能还能被势能消耗掉;一旦越过坡顶,动能将持续增大,失稳随之发生。

PEBS 的搜索逻辑可以用一段伪代码表达:

def search_pebs(delta_traj, omega_traj, t_start, dt): """ 在故障后轨迹上扫描势能,返回首次出现局部最大势能的时刻 """ vp_list = [potential_energy(d, w) for d, w in zip(delta_traj, omega_traj)] for i in range(1, len(vp_list) - 1): # 连续两个相邻点都小于当前点,说明这是局部极大值 if vp_list[i] > vp_list[i - 1] and vp_list[i] > vp_list[i + 1]: return t_start + i * dt, vp_list[i] return None, None

这个函数里potential_energy对应势能项的离散计算,delta_trajomega_traj来自故障后轨迹的逐步积分。实现时要把积分步长固定,比如dt = 0.01秒,避免不同步长下局部极值点位置漂移。

与 CUEP 相比,PEBS 不需要求取 UEP,计算量小;但它把稳定边界近似为通过 UEP 的等势能面,当系统阻尼较强或故障点靠近边界时,PEBS 的Vcr会偏高,超过真实的临界能量,使结果偏乐观。反过来,CUEP 理论严谨,但对初始点和方程维度敏感,搜索失败率高于 PEBS。

项目CUEPPEBS
临界能量精度高,接近实际边界中等,偏乐观
计算量高,需迭代求 UEP低,一次轨迹扫描
对故障出口方向的要求需要在求 UEP 前判断不要求
适合场景关键断面校核大规模预想事故粗筛

4.3 临界能量计算失败时先查这三个点

Vcr算出来明显偏离预期时,我一般依次检查三个位置。

第一,稳定平衡点初值是否来自故障前潮流。若直接用某个估算角度,能量函数的常数项基准不对,VclVcr会同时偏移,但η的符号变化往往不规律。

第二,故障后网络参数是否更新正确。故障后的等值电抗 X 必须使用故障切除后的网络拓扑重新求取,如果沿用故障前或故障中的参数,势能项中 cos 项的曲率完全错误。

第三,CUEP 的收敛判别是否放得过松。牛顿迭代通常取功率不平衡小于1e-6为标准,若只收敛到1e-3,UEP 位置距离真实出口可能有数个角度,Vcr误差会被放大到足以改变稳定性结论。

5. 用暂态能量函数法做预想事故筛选的工程化步骤

5.1 先定场景,再建能量评估回路

预想事故筛选是暂态能量函数法在实际调度系统中最成熟的应用。一个典型场景是:电网运行方式部门给出未来 24 小时的 N−1 故障清单,要求排除那些明显不会造成暂态失稳的故障,只保留少数危险故障进行详细时域仿真。

在这种场景里,暂态能量函数法扮演的是“第一道滤网”。实际执行时,先要把故障清单中的元件与网络拓扑绑定,给每个故障分配对应的故障前稳定平衡点、故障中网络参数和故障后网络参数。对同一故障反复计算时,稳定平衡点只需要在方式变化时刷新一次,不必对每条故障重复做潮流。

5.2 批量计算的标准写法

下面给出一个批量扫描的骨架代码,展示如何把单个故障的评估封装成函数,再对故障清单循环调用。

import pandas as pd def assess_fault(fault): """ fault 是一个字典,包含 fault_id, t_cl, topology_key 返回稳定裕度 eta;eta 小于阈值时标记为 CHECK """ # 读取该拓扑下生成的网络参数和平衡点 x_network = get_network_x(fault['topology_key']) delta_s, UEP_list = get_equilibria(fault['topology_key']) # 故障中积分到 t_cl y_cl = integrate_to_clear(fault['t_cl']) # 计算清除时刻能量 Vcl = compute_energy(y_cl, x_network) # 用 CUEP 或 PEBS 得到临界能量 Vcr = compute_critical_energy(y_cl, UEP_list) # 可能用 PEBS 加速 eta = (Vcr - Vcl) / Vcr return fault['fault_id'], eta, 'OK' if eta > 0.05 else 'CHECK' results = [] for fault in fault_list: rid, eta, flag = assess_fault(fault) results.append([rid, eta, flag]) result_df = pd.DataFrame(results, columns=['fault_id', 'eta', 'flag']) result_df.sort_values('eta').head(20) # 查看最危险的 20 个故障

这段代码里的get_equilibriaintegrate_to_clear是核心封装,前者处理潮流与 UEP 搜索,后者负责故障期间积分。批量处理时最容易出错的是不同故障共享同一套拓扑参数,导致故障后网络电抗没有刷新;因此在assess_fault中显式传入topology_key,每次从数据接口读取最新参数,而不是在函数外部用全局变量。

排序输出是筛选的关键动作。按eta升序排列后,排在前面的是裕度最低的故障,它们的共同特征通常是离负荷中心近、切除时间长或与整个断面强耦合。把eta在 5% 以下的故障直接送入时域仿真,能同时控制计算量和漏判率。

5.3 区分“失稳”和“边界失稳”的工程处理

能量函数法给出的结论是稳定还是失稳,但它无法直接告诉你失稳形态是首摆失稳还是多摆失稳。如果系统在第一摆没有越过临界点,但第二摆动能更大,时域仿真可能观察到延迟失稳;经典能量函数法对此类情况往往判定为稳定,这是一个必须明确的边界。

工程上的对策是设置双重判据:能量裕度指标负责第一轮筛选,随后对η处于 5%~15% 区间的故障追加一次短时域仿真,只积分到 3 秒,观察功角最大值是否持续增长。既保留能量函数的计算速度,又避开它在多摆失稳场景下的弱点。若故障清单规模很大,可以把这个区间进一步收窄,但低于 3% 就不建议用纯能量法直接下稳定性结论。

6. 让暂态能量函数法的稳定裕度指标更可信的验证技巧

一个能量函数模型投入工程之前,至少要完成一次“临界清除时间反推”验证,这是检验全流程是否正确的最高效方式。

方法是对同一故障扫描不同的t_cl,分别计算能量裕度η,得到η关于t_cl的线性或接近线性的下降曲线。用直线拟合找到η = 0时对应的清除时间t_c_est,把这个值与同故障的详细时域仿真临界清除时间CCT_td做差。两者偏差在 5% 以内,说明能量函数构造、临界能量搜索和网络参数装配都正确;偏差超过 10%,就要按第 4 章的三个排查点重新检查。

验证时建议用同步相量实测数据或离线方式下的稳定案例做“反向校准”。取 5 至 10 个已知稳定结论的历史故障样本,把各样本的η值按时域结论分组,观察稳定样本的η是否全部大于零,失稳样本是否全部小于零。只要有一个样本跨过零线,就需要调整阻尼参数或临界能量的搜索策略,而不是简单调阈值。

最后给出一个可以提升效率的技巧:对同一运行方式下的多条故障,CUEP 搜索不必每次都从头迭代。以上一条故障求得的 UEP 做初值,在当前故障的功率不平衡方向上进行少量修正,通常两三次迭代就能收敛。这种“热启动”方式在故障清单超过三百条时,能把总计算时间压缩一半左右,且不影响稳定裕度的排序结果。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询