简介:这份算例面向电力系统稳定性分析的学习者与研究人员,提供16机68节点系统的PST小干扰与暂态稳定计算素材,属于PES task force的benchmark算例。其独特之处在于潮流部分调用PST代码,仿真环节则借助Simulink实现,与PST自带68节点算例同源但参数和节点编号存在差异,便于对照研究。压缩包共36个文件、约1.26MB,包含m脚本、mdl仿真模型、xlsx结果表格、fig与emf图形及一份PDF分析报告,覆盖特征值计算、模式形态绘制与潮流求解等环节。随附PDF对算例参数、暂稳与小干扰结果作了详细分析,可直接用于复现结果、比对有无PSS时的振荡模式,并借鉴其混合建模范式。目前已有957人学习下载,适合具备一定电力系统分析基础、希望深入理解机电振荡与暂稳特性的读者参考。
1. 16机68节点PST小干扰/暂稳算例:一份能直接跑起来的电力系统稳定分析底稿
做电力系统稳定分析的人大概都有过这种体验:拿到一个算例,数据文件里发电机、励磁、调速器参数散落在不同卡片里,潮流能收敛,一到小干扰特征值分析就报错,或者暂稳仿真跑出来的功角曲线明显不对,回头查半天发现是某台机的阻尼绕组参数填错了量纲。这份16机68节点PST小干扰/暂稳算例,本质上就是一份把「潮流数据 + 动态模型参数 + 分析场景」打包好的底稿,省掉从零搭网架、凑参数的时间。它面向的是做低频振荡分析、暂态稳定校核、控制参数整定的从业者和研究生,尤其是需要一套规模适中、既能体现多机系统耦合特性又不至于大到跑不动的测试系统的人。68节点、16台机的规模,比3机9节点更能暴露区域间振荡模式,又比几百节点系统更容易定位问题,属于练手和验证算法都合适的量级。
2. PST格式算例怎么读:文件结构、数据卡片与模型映射
PST(Power System Toolbox)这套工具在高校和研究所里用得不少,它的数据组织方式和BPA、PSASP那类商业软件差别挺大,第一次接触的人容易在文件结构上卡住。这份算例的核心价值之一,就是给了一套结构完整、注释清晰的输入文件,照着读一遍就能明白PST是怎么把网架和动态元件串起来的。
2.1 算例文件组成与加载顺序
一套完整的PST算例通常由几个分工明确的文件构成,加载顺序错了就会报「undefined variable」之类的错。常见做法是先读潮流数据建立网络拓扑和稳态运行点,再挂动态模型,最后配置分析类型。这份16机68节点算例的文件组织大致是这样的:
| 文件类型 | 作用 | 关键内容 |
|---|---|---|
| 潮流数据文件 | 定义母线、支路、负荷、发电机稳态出力 | 68个母线、16台机、线路阻抗与变压器变比 |
| 动态数据文件 | 发电机、励磁、调速器、PSS模型参数 | 二阶或六阶发电机模型、IEEE标准励磁参数 |
| 分析配置文件 | 指定小干扰或暂稳分析类型及仿真参数 | 特征值求解范围、故障设置、仿真步长 |
| 主调用脚本 | 串联上述文件并启动计算 | 数据读取、初始化、分析函数调用 |
加载时我一般按「潮流 → 动态 → 初始化 → 分析」四步走,中间任何一步的变量名对不上,后面的特征值计算就会拿到空矩阵。PST里潮流收敛后得到的稳态电压、功角会作为动态仿真的初值,这一步如果潮流本身没收敛或者有孤岛,动态初始化必然失败,所以拿到算例第一件事是单独跑一遍潮流,确认所有母线电压在合理范围、没有报警。
2.2 发电机与控制系统模型的数据卡片解读
16台机的动态参数是这份算例里信息密度最高的部分。PST的发电机模型通常用卡片形式描述,每台机对应一组参数,包括直轴同步电抗、暂态电抗、时间常数、惯性时间常数、阻尼系数等。小干扰分析对参数精度比暂稳仿真更敏感,尤其是阻尼绕组相关的参数,填错一个数量级,特征值的实部符号可能就反了,本来稳定的系统算出来是负阻尼。
举个读参数的例子,某台机的参数卡片里惯性时间常数H如果写成6.5而实际应该是0.65,特征值分析出来的振荡频率会明显偏低,因为频率和H的平方根成反比。这类量纲问题在手工整理数据时特别常见,血泪经验是拿到任何算例都先扫一遍H、Td0'、Tq0'这些带时间量纲的参数,看数量级是否符合机组容量对应的典型范围。励磁和PSS的参数同理,增益K如果单位是标幺还是实际值没统一,整定出来的效果会差很远。
2.3 从稳态潮流到动态初始化的衔接
潮流和动态之间的衔接是很多人翻车的地方。PST在初始化时会根据潮流结果反推每台机的内部电势和初始功角,如果潮流里某台机的有功出力为零但动态模型又挂着,初始化可能给出一个不合理的初值,导致仿真一开始就发散。这份算例在数据组织上把每台机的稳态出力和动态模型一一对应好了,但使用者如果自己改了负荷或者发电机出力,就得重新检查对应关系。
我一般会在初始化之后打印一遍各机的初始功角和电磁功率,和潮流结果对一下,偏差超过百分之几就说明哪里没对上。这个检查步骤看起来多余,但能省掉后面大量「仿真曲线诡异但不知道错在哪」的排查时间。初始化通过之后,小干扰分析和暂稳仿真才有意义,否则算出来的特征值和功角曲线都是黑匣子,信不过。
3. 小干扰稳定分析实操:特征值求解与振荡模式辨识
小干扰稳定分析的核心是把系统在稳态运行点附近线性化,求状态矩阵的特征值,从特征值的实部和虚部判断振荡模式的阻尼和频率。这份算例把16机68节点的完整状态空间搭好了,直接调用PST的特征值求解函数就能出结果,难点在于怎么从一堆特征值里把机电振荡模式挑出来、怎么判断哪个模式对应哪台机。
3.1 状态矩阵构建与特征值计算流程
PST里做小干扰分析,一般流程是先完成潮流和动态初始化,然后调用线性化函数生成状态矩阵A,再对A求特征值。下面这段调用逻辑是常见写法,具体函数名以所用PST版本为准,但步骤是通用的:
% 读取潮流与动态数据 run('case16_68_powerflow.m'); % 建立网络与稳态运行点 run('case16_68_dynamic.m'); % 挂接发电机、励磁、调速器模型 % 动态初始化,校验初值合理性 [init_ok, x0] = pst_initialize(); if ~init_ok error('动态初始化失败,检查潮流收敛性与模型对应关系'); end % 生成状态矩阵并求特征值 A = pst_linearize(x0); % 在运行点附近线性化 [V, D] = eig(A); % V为特征向量,D为特征值对角阵 lambda = diag(D); % 筛选机电振荡模式:虚部非零且频率在0.1~2.5Hz freq = abs(imag(lambda)) / (2*pi); mech_idx = find(freq > 0.1 & freq < 2.5 & abs(imag(lambda)) > 1e-6); mech_modes = lambda(mech_idx);这段代码的逻辑是先确保初始化成功再线性化,避免在错误运行点上求特征值。eig求出的特征值里混着大量非机电模式,比如励磁相关的快变模式,频率很高,用频率范围筛掉就行。机电振荡模式的频率典型范围是0.1到2.5赫兹,区域间模式偏低,本地模式偏高,这个区间能覆盖大部分需要关心的模式。参数上要注意pst_linearize的输入必须是初始化后的状态向量,直接用潮流结果代进去会漏掉控制器状态。
3.2 参与因子计算与振荡模式归属判断
光有特征值还不够,得知道每个振荡模式主要涉及哪些机组,这就是参与因子(participation factor)的作用。参与因子由左右特征向量计算,反映第k个状态变量对第i个模式的参与程度。对机电模式来说,参与因子大的机组就是这个模式的主导机组。
% 计算参与因子矩阵 W = inv(V); % 左特征向量 pf = abs(V) .* abs(W'); % 逐元素相乘,得到参与因子 pf = pf ./ max(pf, [], 1); % 按列归一化,便于比较 % 对某个机电模式,找出参与因子最大的机组 mode_k = mech_idx(1); [~, gen_order] = sort(pf(:, mode_k), 'descend'); top_gens = gen_order(1:4); % 取参与度最高的4台机参与因子归一化之后,数值接近1的机组就是该模式的主导机组。实际分析时我习惯把每个机电模式的主导机组列出来,对照地理分布判断是本地模式还是区域间模式:主导机组集中在相邻区域的是本地模式,分属不同区域、参与因子都比较大的是区域间模式。这份16机68节点算例的网架结构能同时激发出这两类模式,正好用来练模式辨识。要注意参与因子对参数敏感,PSS投退状态一变,模式归属可能就变了,所以每次改控制参数都得重新算一遍。
3.3 阻尼比评估与PSS整定前的基线确认
特征值实部决定阻尼,阻尼比用实部除以模值算。工程上一般认为阻尼比低于3%就需要关注,低于1%属于弱阻尼甚至负阻尼,容易引发低频振荡。这份算例在PSS未投入时的基线阻尼比是后续整定工作的参照,先把这个基线跑出来,再逐台投入PSS看阻尼比变化,才知道整定有没有效果。
% 计算各机电模式的阻尼比 damping = -real(mech_modes) ./ abs(mech_modes); freq_hz = abs(imag(mech_modes)) / (2*pi); % 输出模式清单,按阻尼比升序排列 [~, idx] = sort(damping); fprintf('模式\t频率(Hz)\t阻尼比(%%)\n'); for k = idx' fprintf('%d\t%.3f\t\t%.2f\n', k, freq_hz(k), damping(k)*100); end阻尼比为负说明该模式发散,正但很小说明振荡衰减很慢。基线确认这一步不能省,我见过有人直接拿投入PSS后的结果当基线,整定方向完全搞反。参数上注意阻尼比公式里的负号,特征值实部为负对应正阻尼,符号搞错会把稳定模式当成不稳定模式。基线跑出来之后,把弱阻尼模式的主导机组记下来,PSS优先装在这些机组上,整定效率最高。
4. 暂态稳定仿真:故障设置、功角曲线与临界切除时间
暂稳仿真和小干扰分析是两套逻辑:小干扰看小扰动下的线性化特性,暂稳看大扰动后的非线性动态过程。这份算例的暂稳部分给了故障设置模板,改故障位置、类型和切除时间就能做不同场景的校核,重点是功角曲线的读法和临界切除时间的搜索。
4.1 故障场景配置与仿真参数设置
PST里做暂稳仿真,故障一般用母线短路或线路故障描述,需要指定故障发生时刻、故障类型(三相短路、单相接地等)、故障持续时间和切除方式。仿真步长对结果影响很大,机电暂态过程用0.01秒步长通常够,但要捕捉故障瞬间的电磁暂态,步长得再小。这份算例的配置模板大致是这样组织的:
% 暂稳仿真参数配置 sim.t_end = 10.0; % 仿真总时长,秒 sim.dt = 0.01; % 仿真步长,秒 sim.fault_bus = 30; % 故障母线编号 sim.fault_type = '3ph'; % 三相短路 sim.t_fault = 1.0; % 故障发生时刻 sim.t_clear = 1.15; % 故障切除时刻 sim.line_trip = [12 30]; % 切除后断开的线路 % 启动仿真 [t, y] = pst_transient(sim);参数里t_clear - t_fault就是故障持续时间,这个值直接决定系统能不能保持稳定。line_trip指定故障后要断开的线路,模拟保护动作。步长0.01秒对功角曲线够用,但如果要看故障期间的电磁转矩细节,得降到0.001秒甚至更小,代价是计算时间成倍增加。仿真总时长一般取到功角曲线明显平稳为止,10秒对这份算例通常够,振荡衰减慢的场景可以延长到15秒。
4.2 功角曲线解读与稳定判据
仿真跑完,最直接的判据是看任意两台机的相对功角是否单调发散或持续等幅振荡。工程上常用最大功角差超过180度作为失稳标志,但更细的判断要看功角曲线的包络是否收敛。这份算例的16台机里,故障点附近的机组功角摆动最剧烈,远端机组受影响小,读曲线时先看故障区域机组的相对功角。
% 提取各机功角并计算相对功角 delta = y(:, 1:16); % 假设前16个状态为各机功角 delta_rel = delta - delta(:, 1); % 以1号机为参考 % 找最大相对功角差 max_diff = max(max(abs(delta_rel), [], 2)); if max_diff > pi fprintf('系统失稳,最大功角差 %.1f 度\n', max_diff*180/pi); else fprintf('系统暂态稳定,最大功角差 %.1f 度\n', max_diff*180/pi); end以一台机为参考算相对功角是标准做法,参考机选容量大、离故障点远的机组比较合适。判据用180度是粗判,实际还要看第一摆之后是否回摆收敛,有些场景第一摆没超180度但后续振荡发散,也算失稳。参数上注意功角单位,PST内部多用弧度,输出判断时转成度更直观。
4.3 临界切除时间的二分搜索实现
临界切除时间(CCT)是暂稳校核的关键指标,指系统能保持稳定的最长故障持续时间。手工试几个切除时间效率太低,用二分搜索自动找边界是常规做法。思路是给定一个稳定和不稳定的时间区间,反复取中点仿真,根据结果缩小区间,直到精度满足要求。
% 二分搜索临界切除时间 t_lo = 0.05; % 稳定侧初值 t_hi = 0.50; % 失稳侧初值 tol = 0.005; % 时间精度,秒 while (t_hi - t_lo) > tol t_mid = (t_lo + t_hi) / 2; sim.t_clear = sim.t_fault + t_mid; [~, y] = pst_transient(sim); delta_rel = y(:, 1:16) - y(:, 1); if max(max(abs(delta_rel), [], 2)) > pi t_hi = t_mid; % 失稳,缩小上界 else t_lo = t_mid; % 稳定,抬高下界 end end fprintf('临界切除时间约 %.3f 秒\n', t_lo);二分搜索的前提是稳定性对切除时间单调,这个假设在大多数场景成立,但多摆失稳的复杂场景可能不严格单调,搜出来的结果要人工复核。精度tol取0.005秒对工程校核够用,再细意义不大,因为模型参数本身就有不确定性。搜索区间初值要覆盖真实CCT,t_hi设太小会误判为一直稳定,我一般先手动试一个明显失稳的时间确认上界有效。
5. 避坑与排查:这份算例最容易翻车的五个地方
算例本身数据是整理过的,但使用者改参数、换场景、迁移到自己的分析流程时,翻车点集中在这几处。下面每条按现象、原因、解决写,都是实际调试中反复遇到的。
5.1 特征值出现大量正实部但潮流明明收敛
现象是小干扰分析跑出来一堆正实部特征值,阻尼比大面积负值,但潮流收敛正常、电压也在合理范围。原因多半是动态初始化没做对,某台机的初始功角或内部电势和潮流结果不匹配,线性化点偏离了真实运行点。解决方法是初始化后打印各机电磁功率和潮流有功出力的偏差,超过1%就逐台排查模型参数和出力对应关系,重点看有没有机组在潮流里出力为零却挂着完整动态模型。
5.2 暂稳仿真第一步就发散,功角瞬间跳到几千度
现象是仿真刚开始几个步长功角就爆掉,曲线完全没法看。原因通常是仿真步长和模型时间常数不匹配,或者故障设置里出现了零阻抗回路导致数值奇异。解决方法是先把步长降到0.001秒试跑,如果还是发散,检查故障母线和线路参数,确认没有重复定义支路或阻抗为零的路径。另外初始化失败但被忽略也会导致这个现象,务必确认初始化返回值。
5.3 参与因子算出来全是NaN
现象是参与因子矩阵里大量NaN,排序结果无意义。原因是状态矩阵接近奇异,左右特征向量求逆时数值不稳定。解决方法是检查状态矩阵条件数,对接近奇异的模式做剔除,或者改用更稳定的特征值求解方法。另一个常见原因是特征向量矩阵V里有几乎线性相关的列,归一化前先做正交化处理能缓解。
5.4 改了PSS参数但阻尼比纹丝不动
现象是调整PSS增益或时间常数后,目标模式的阻尼比几乎不变。原因是PSS安装机组的参与因子太小,或者PSS输入信号选错了,没有取到该模式的可观信号。解决方法是先看目标模式的主导机组清单,PSS装在参与因子大的机组上,输入信号优先选转速偏差或功率偏差,装好后再扫一遍增益看阻尼比是否单调改善。
5.5 临界切除时间搜索结果和手动试算对不上
现象是二分搜索给出的CCT比手动试出来的明显偏大或偏小。原因是搜索区间初值没覆盖真实边界,或者稳定性判据在多摆场景下不单调。解决方法是先用几个离散时间点手动确认稳定和不稳定的分界大致位置,再设二分区间;对多摆失稳场景,判据里加上仿真末段的功角包络检查,不能只看最大功角差。
6. 从算例到自己的系统:参数迁移与结果验证的两个技巧
把这份算例用熟之后,多数人下一步是想把方法迁移到自己的系统上,或者拿它验证自己写的分析脚本。这里说两个我反复用到的技巧,一个管参数迁移,一个管结果可信度。
参数迁移最容易出的问题是量纲和基准值不统一。PST内部用标幺值,但不同来源的数据基准容量可能不同,直接抄参数会引入系统性偏差。我的习惯是迁移前先做一次基准换算核对:把待迁移机组的H、Xd、Xd'按各自基准容量换算到统一基准,再和算例里同容量机组的典型值对比,偏差超过20%就回头查原始数据。下面这个小脚本用来做基准换算核对:
% 基准容量换算核对 S_base_new = 100; % 目标基准容量,MVA S_base_old = 900; % 原始数据基准容量,MVA k = S_base_new / S_base_old; H_new = H_old * k; % 惯性时间常数换算 Xd_new = Xd_old * k; % 电抗换算 % 与同容量机组典型值对比 if abs(H_new - H_typical) / H_typical > 0.2 warning('H换算后偏差超过20%%,检查原始基准容量'); end换算系数k的方向容易搞反,记住原则:基准容量变小,标幺电抗变大,所以乘的是新基准除以旧基准。惯性时间常数按容量换算的逻辑和电抗一致,但有些数据源给的H已经是统一基准,再乘就错了,所以换算前必须确认原始数据的基准。
结果验证方面,我的习惯是拿算例做「已知答案测试」:故意把某台机的阻尼系数改成负值,看小干扰分析能不能正确报出负阻尼模式;故意把故障时间设到明显超过CCT,看暂稳仿真能不能正确判失稳。这两个测试通过,说明分析流程本身没问题,再去跑自己的数据才有底。从那以后我每次换系统或换工具版本,都强制走一遍这两个已知答案测试,省掉了很多「结果看着不对但不知道是数据错还是流程错」的纠结。希望帮到你。
本文还有配套的精品资源,点击获取