ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

PSASP 36节点算例实战:从数据预处理到动态稳定分析

PSASP 36节点算例实战:从数据预处理到动态稳定分析

简介:面向电力系统专业学生、研究人员及PSASP使用者,提供基于IEEE 36节点系统的完整PSASP算例包,可用于潮流计算、稳态分析与暂态稳定仿真。RAR压缩包共509个文件,体量仅454KB,核心为132组myi/myd/frm工程数据库文件,并配有dat、lis、cal、inc等潮流、控制与稳定分析参数及结果文件,目录结构清晰,可直接载入PSASP 7.0运行使用。已有1215人学习,适合初学者对照典型36节点模型掌握发电机组、负荷与输电线路建模;也适合进阶用户深挖故障设置、动态响应评估与保护策略优化,这一模型对新能源并网、电网扩建等复杂场景同样具有参考价值。通过研读算例中的节点与线路数据、控制参数和结果输出,用户可以快速建立从数据准备、仿真计算到结果分析的完整操作路径,为课程设计、科研验证乃至实际电网稳定校验提供可靠参考。

1. 36节点PSASP算例:为什么说它是电力系统仿真的最小可信试验台

ieee36节点psasp算例这件事,说白了就是把一套国际上通用的36节点测试系统完整搬进PSASP这个电力系统分析软件里,让潮流、暂态稳定、小干扰稳定这些分析都能在一个可信的盘子上跑起来。做电力系统仿真的同行应该都有这个体会:手里有一套能跑通、参数齐全、故障怎么折腾都不发散的多节点算例,比什么论文结论都有底气。

它解决的是「没有真实电网数据也能做严肃分析」的问题,适合正在做毕设的研究生、刚入职想尽快上手PSASP的工程师,以及想快速验证一个控制算法是否有效的科研人员。一套调通的36节点算例,意味着你不必在数据完备性上反复搏斗,而是能把精力集中在真正想分析的问题上。

这套算例的价值恰恰不在节点数多,而在于它把「能用的算例」和「能出论文的算例」之间的那道沟填平了。十几节点的小系统很难体现多机之间的振荡特性,上百节点的系统又容易被参数不完备拖垮,36节点是那个折中的甜点位。

2. 36节点数据从哪来、怎么变成PSASP能认的模型:数据预处理的关键差异

2.1 36节点系统的母线、线路、变压器、负荷数据长什么样

IEEE 36节点系统在公开资料里并不是唯一的,不同渠道拿到的版本在发电机台数、负荷水平和线路参数上存在差异。拿到数据以后的第一件事不是打开PSASP就录,而是先把数据整理成四张表:母线表、线路表、变压器表、负荷表。

母线表一般包含母线编号、基准电压、有功负荷、无功负荷,部分版本还带并联导纳;线路表包含首端母线、末端母线、电阻、电抗、充电电纳;变压器表包含变比、阻抗百分比、分接头档位;负荷表给出每个母线的PQ值。大多数公开的36节点数据已经是标幺值形式,基准容量常见100MVA,这一点很重要,后面录入PSASP时要以它为基准统一口径。

整理数据时我会用一个Excel文件同时放四张工作表,并且把数据来源列也带上。这个习惯救过我一次:有版36节点数据把两台发电机的出力写反了,导致潮流怎么调都不收敛,后来就是靠来源列逐条核对找出来的。所以别嫌这一步啰嗦,数据整理多花一小时,PSASP里排错能少花一整天。

这里特别提醒:有些公开的36节点数据会带励磁系统和调速器的模型卡片,这部分不是建库必需,但对后续动态分析非常重要。拿到数据时先看有没有这部分,没有的话,后面做暂态稳定就只能用经典二阶发电机模型,分析能力会受限。

2.2 PSASP的模型映射:母线类型、电压等级与基准值的转换规则

PSASP的母线模型里,节点类型分三种:PQ、PV、平衡。对应关系很直接:纯负荷母线是PQ,接发电机的母线是PV,整个系统唯一指定的平衡母线是平衡节点。但有一个容易忽略的细节:如果某条母线同时接了发电机和负荷,它的类型仍然是PV,负荷作为另一个数据对象挂在该母线下,不要把它改成PQ,否则发电机无功就没法按PV节点公式处理了。

电压等级映射是预处理的重头戏。PSASP允许按有名值录入,也允许按标幺值录入,但一个工程内基准值必须统一。我的做法是全部按标幺值录入,基准电压按数据文件里给的母线基准电压填,基准容量统一设置为100MVA。如果原始数据里母线基准电压不是常见等级,比如某个版本用了138kV而其他母线用230kV,务必在母线表里逐条填对,一旦填错,变压器变比逻辑会跟着乱。

变压器模型里的非标准变比也是一个常见坑。PSASP的变压器输入除了阻抗百分比,还有一个变比字段。很多36节点数据给的是标准变比1.0,但分接头档位实际偏离中档。录入时如果只填了1.0,潮流计算里变压器两侧电压会出现整体偏移。举例来说,某条变压器支路额定变比是230/115kV,分接头在高压侧+5%档位,实际变比就是(230×1.05)/115kV。录入时多花十秒钟把这个数算出来填进去,比依赖自动分接头逻辑可靠得多。

2.3 用Python做数据预检:有功平衡校验、阻抗参数合理性检查

数据整理好之后,进入PSASP之前,我会先跑一遍预检脚本。这个脚本不解决问题,但能把99%的低级错误在录入前筛出来。下面这段是核心检查逻辑:

import pandas as pd bus = pd.read_csv('bus.csv') # 列: id, vbase, pload, qload, pg, type line = pd.read_csv('line.csv') # 列: from_bus, to_bus, r_pu, x_pu, b_pu # 1) 有功平衡检查:发电机出力应等于负荷加网损 # 网损未知时,先看不平衡量是否在合理范围 load_p = bus['pload'].sum() gen_p = bus['pg'].sum() unbalance = load_p - gen_p print(f"负荷总有功: {load_p:.2f} MW,发电机总有功: {gen_p:.2f} MW") print(f"不平衡量: {unbalance:.2f} MW,占负荷比例: {unbalance / load_p * 100:.2f}%")

这段脚本的逻辑是:把所有母线负荷加总再减去发电机出力,如果得到一个超过负荷5%的数值,数据源基本有问题。正常的电力系统在未计网损时,发电机出力一定略大于负荷,所以不平衡量应为负值——发电机多发的部分覆盖网损。如果算出来是正值,说明缺了发电机或者负荷多录了。

# 2) 线路电抗与R/X比检查 line['r_over_x'] = line['r_pu'] / line['x_pu'] bad = line[(line['x_pu'] < 1e-5) | (line['r_over_x'] > 0.6)] if bad.empty: print("线路阻抗参数数量级正常") else: print("发现可疑线路:") print(bad[['from_bus', 'to_bus', 'r_pu', 'x_pu', 'r_over_x']])

参数说明:x_pu是标幺电抗,r_over_x是电阻电抗比。架空线路的标幺电抗在100MVA基准下一般是0.001到0.2这个量级,电阻电抗比很少超过0.6。如果电抗小于1e-5,大概率是把有名值欧姆数当成标幺值填了;如果R/X比超过0.6,要怀疑是不是低频电缆参数混入,或者某条线路的数据列错位了。这两个脚本不依赖PSASP的版本,纯粹在数据层面兜底。

这个脚本跑一遍只要几秒钟,对于36节点这种规模来说,它筛掉的是最花时间的低级错误。我曾经用它在半小时内定位到一份数据里两条线路参数互相抄错的记录,人工排查的话至少要一个下午。

3. 在PSASP中把36节点算例从零搭起来:建库、录入与潮流计算全过程

3.1 新建工程和基础数据库:交流线路与两绕组变压器的录入顺序

数据预检跑完以后,就可以开始PSASP的建库。PSASP的操作模型通常是一个工程下挂多个数据库,工程内的基础数据库保存母线、线路、变压器、发电机和负荷的静态参数,后续的潮流、暂态、小干扰计算方案都基于这套基础库展开。

录入顺序是固定的:先母线、再发电机和负荷、然后交流线路、最后变压器。原因很直接——线路和变压器的数据都要引用首末端母线编号,母线没建好,后边的数据挂不上去。PSASP图形界面里每个表都是一个表格编辑器,逐行填就行。但别急着用复制粘贴:母线名称如果从Excel复制进PSASP,经常会带上不可见字符,PSASP做端点匹配时不认识,线路录入会直接报找不到母线。我的办法是母线编号统一用不含空格的纯数字或字母数字组合,录入后逐条检查一遍。

为了减少手工输入,我会先用脚本生成一个CSV模板,再按原始数据批量填充:

import csv # 生成PSASP母线录入模板(按100MVA基准,标幺值) headers = ['母线编号', '母线名称', '基准电压(kV)', '节点类型', '有功负荷(MW)', '无功负荷(Mvar)'] rows = [ ['1001', 'BUS1', 230.0, 3, 0, 0], # 平衡节点 ['1002', 'BUS2', 230.0, 2, 150, 35], # 发电机节点(PV) ['1003', 'BUS3', 115.0, 1, 80, 20], # 负荷节点(PQ) ] with open('psasp_bus_template.csv', 'w', newline='', encoding='utf-8-sig') as f: writer = csv.writer(f) writer.writerow(headers) writer.writerows(rows) print('模板已生成,请核对列名和类型编号后再录入PSASP')

逻辑说明:这个脚本生成一个CSV模板,列名和PSASP基础库的母线表字段一一对应。节点类型字段用1、2、3分别对应PQ、PV、平衡,这是PSASP里的通用做法。基准电压填母线实际的额定电压,不是标幺值,注意别混淆。

参数说明:rows里的每一行就是一条母线。表格里只是举例,实际36节点数据有几十行,建议用程序从原始数据批量生成后再人工核对,避免手输几十行时把某个负荷量级敲错。

3.2 发电机组与负荷的录入:PQ、PV、平衡节点怎么分配

母线建完后录入发电机。发电机的静态数据至少要填:有功出力、无功出力、机端电压。机端电压千万不要想当然填1.0,原始数据里给的是0.98就填0.98,给的是1.02就填1.02,这个值直接影响潮流分布。

节点类型分配按照2.2节的映射规则:接发电机的母线设为PV,纯负荷母线设为PQ,平衡母线只有一个,通常是数据文件里指定的那台大容量机组所在母线。36节点系统不同版本的发电机台数不一样,建库前先数清楚,别假设一个固定值。在PSASP里,发电机数据对象挂在母线下,填所属母线编号、额定有功、额定无功、机端电压。如果做暂态稳定,还要填暂态电抗、惯性时间常数和励磁模型参数,这部分我放在第4章详细说。

负荷录入相对简单,但模型类型要注意。潮流计算阶段推荐用恒定功率模型,即PQ值固定,这是潮流计算的默认假设。如果填成恒定阻抗模型,潮流结果会和用PQ模型的版本明显不同——恒阻抗负荷的功率随电压变化,电压低的母线负荷功率会自动减小,相当于给系统加了隐性支撑,会掩盖一些电压问题。所以做静态分析时统一用恒功率,做暂态稳定时再按需要切换成综合负荷模型。

3.3 潮流计算与结果核查:收敛性判断、电压分布与网损检查

数据录完,进入潮流计算模块。选择当前工程的数据方案,设置收敛精度默认值即可,迭代次数上限一般不用改,然后点击执行。如果一发就收敛,进入核查环节;如果发散,先别急着调算法,回到基础库查数据。

潮流结果核查我只看三个指标:电压、网损、无功平衡。电压方面,正常解下36节点各母线电压幅度应该在0.95到1.05pu之间,个别长线路末端低到0.93也说得过去,但如果出现0.89以下的节点,说明无功补偿量不对或者某条线路参数录错了。网损方面,总网损占负荷总量的3%到8%是常见范围,超过15%必有问题,重点检查线路电阻是不是大了十倍——这是单位错误最典型的特征。无功平衡方面,平衡母线机组的无功出力应该在合理范围,如果平衡节点无功超出能力上限很多,系统里一定还有无功盈余或缺口。

这三个指标都过了,这个算例的静态部分才算真正建好。后面做暂态稳定也好,做小干扰稳定也好,都建立在这个潮流解的基础上。所以说潮流收敛只是开始,潮流合理才算数。

4. PSASP暂态稳定仿真的常见问题与排查:36节点算例的5个翻车点

4.1 故障设置在0.05秒就卡住不动:仿真步长与故障切除时间的配合

暂态稳定仿真里最常见的翻车现场,是设置了接地短路,结果曲线跑到故障切除点附近就再也不往前走了,或者直接报错。遇到这种情况先别看模型,先看看时间设置。

PSASP暂态稳定仿真按固定步长推进,步长默认0.01秒。故障开始时间、故障切除时间如果落在步长整数倍之外,PSASP的处理逻辑会就近取整,有时会导致事件错位甚至丢失。这个现象看起来像玄学,但本质是数值积分和事件时间没有对齐。固定步长下,每一步积分只能落在离散的时间网格上,事件时间不落在网格上,程序就要做插值或者取整处理,一旦处理逻辑不够干净,就会在事件点附近产生数值异常。

我的做法是:步长设0.01秒,故障开始时间设1.0秒,切除时间设1.05秒,仿真总长5到10秒。这样所有事件都精确落在采样点上,和步长严格对齐。如果确实要模拟0.12秒切除,那就把步长改成0.01的因数,或者把切除时间调整到最近的整数倍,同时在记录里注明实际切除时间与设定值的偏差,别让后续分析误读这个数。

4.2 发电机功角曲线直接飞掉:惯性时间常数和励磁模型不匹配

故障切除后功角曲线确实有可能会失稳发散,那是正常物理现象。但如果故障只持续0.05秒,切除后所有发电机的功角都往一个方向飞,而且飞的速度快到离谱,那就要怀疑是参数问题,不是系统问题。

最典型的是惯性时间常数填错。PSASP里发电机的惯性时间常数Tj有自己的基准,通常是以发电机额定容量为基准的数值。但很多36节点数据源给的是H常数,以发电机自身容量或系统基准容量为基准,这两个数直接用是有区别的。

具体换算公式是Tj = 2 × H × Sn / Sb,其中Sn是发电机额定容量,Sb是系统基准容量,通常取100MVA。如果拿到的数据H=3.5秒,发电机额定容量500MVA,系统基准100MVA,那Tj实际应该填2×3.5×500/100=35秒。如果漏掉这一步直接填3.5秒,系统惯量被低估了10倍,故障后功角自然是起飞状态。

另一个检查点是励磁模型。PSASP支持多种励磁模型,如果选了详细模型但没有填励磁增益和时限常数,默认参数可能和36节点数据的电压调节特性不匹配。我一般先选最简单的经典模型,即E'恒定模型,跑一遍确认功角曲线形态合理后,再逐步升级到详细励磁模型。一步到位的配置方式往往让你分不清到底是模型问题还是参数问题。

4.3 避坑清单:5条血泪经验,每条按现象、原因、解决给全

  • 坑一:线路录入报找不到母线

    • 现象:在线路表里输入首末端母线编号,保存时提示端点不存在,但母线表里明明有这条记录。
    • 原因:母线名称里带了全角空格或不可见字符,比如从Excel复制时带过来的换行符,导致字符串匹配失败。
    • 解决:统一用纯数字命名母线,所有数据进PSASP前先过一遍去空格处理。Python里用strip()清洗一下即可。
  • 坑二:变压器分接头方向反了,潮流电压整体偏移

    • 现象:某区域变压器低压侧母线电压整体偏高或偏低约0.05pu,且集中在一个区域。
    • 原因:分接头+5%和-5%的升降压方向在录入时理解反了,相当于变比填反。
    • 解决:用空载调试法验证分接头方向——把变压器高压侧接平衡节点,低压侧不带负荷,看低压侧电压相对高压侧是升还是降,和预期的变比方向比对一次,错了就调整分接头符号。
  • 坑三:网损高达30%,潮流却收敛

    • 现象:潮流计算收敛,但网损异常高,远超出正常范围。
    • 原因:典型的是某条线路的电阻以欧姆有名值填入,而电抗填的标幺值,或者干脆所有线路参数同时放大了100倍。
    • 解决:回到数据源逐条核对单位。标幺值是以100MVA和各自基准电压为基准的无量纲数,把欧姆数直接填进标幺值字段,数量级必然是错的。
  • 坑四:暂态稳定曲线在故障期间出现NaN

    • 现象:故障期间功率、功角曲线断掉,数据点显示为无穷大或无效值。
    • 原因:故障设置在母线上,且故障阻抗填了0,数值计算中出现奇异。
    • 解决:故障阻抗给一个很小的非零值,比如0.001pu,或者把故障位置从母线改到线路中部。不要为了模拟金属性短路就把接地阻抗设成精确0,数值计算吃不下这个极端点。
  • 坑五:小干扰稳定计算出特征值,但振型图形空白

    • 现象:特征值能算出来,复平面上的点也有,但点开振型图形没有内容。
    • 原因:状态矩阵没有正确初始化。部分版本PSASP需要先完成一次暂态稳定计算,才会生成完整的状态矩阵供小干扰分析使用。
    • 解决:在小干扰稳定计算之前,先跑一个无故障的暂态稳定仿真,时长0.1秒足够,目的不是看曲线,而是让PSASP完成模型初始化和状态矩阵输出。之后再进小干扰稳定模块,振型就能正常显示。

5. 从静态算例到动态分析:用36节点在PSASP里做小干扰稳定与低频振荡验证

5.1 小干扰稳定分析的前置条件:运行方式与特征值计算

小干扰稳定分析在PSASP里对应的是小干扰稳定计算模块,核心工具是特征值和特征向量。36节点算例在这里的用法,是提供一个能反映多机系统低频振荡特性的平台。

前置条件有两条:一是潮流计算必须收敛,且收敛结果要保存在当前方案里;二是参考第4章避坑清单里的坑五,先跑一次空载暂态仿真完成状态矩阵初始化。这两条都满足后,小干扰稳定计算才能得到有物理意义的特征值结果。

特征值出来以后,真正的技术活是找机电模式。36节点系统在典型运行方式下,特征值分布里会有一组频率在0.1到2Hz之间的模式,这些就是机电振荡模式。判断标准不是看频率,而是看阻尼比——阻尼比小于0.03的模式是系统里的薄弱环节,通常对应了某几个区域发电机之间的功率振荡。PSASP的结果列表里每个特征值都附带阻尼比,按阻尼比升序排列,一眼就能找到最危险的那几个模式。

要注意特征值结果里实部和虚部的物理意义:实部对应衰减速度,虚部对应振荡频率。阻尼比等于负实部除以模长,这个数值在对比控制策略优劣时最直观。

5.2 用36节点验证阻尼控制策略的最小闭环

我常被问到:怎样才能在PSASP里快速验证一个阻尼控制策略有没有效果。答案是用小干扰稳定模块做对比分析,最小闭环的流程可以固定成一套操作模板:

  1. 使用基础潮流方案,跑一次无故障暂态仿真,时长0.1秒;
  2. 进入小干扰稳定计算,生成特征值列表,记录目标机电模式的频率和阻尼比;
  3. 修改目标发电机的励磁模型参数,或者添加PSS模型环节;
  4. 重新执行暂态初始化和小干扰计算,对比模式阻尼比的变化。

这个流程里最容易出错的是第3步:修改发电机模型参数之后,必须重新跑潮流和暂态初始化。很多版本PSASP不会自动更新状态矩阵,如果跳过了暂态初始化直接算特征值,得出的结果和上一次完全一样,白白浪费一次计算。

我一般会做一张对比表,把基准方案和修改方案的阻尼比放在一起,这张表是后续写论文、写报告的核心论据:

指标基准方案加阻尼控制后变化
模式频率/Hz0.820.79-0.03
阻尼比0.0180.065+0.047

表格数据是示例,实际以你的仿真结果为准。阻尼比从0.018提升到0.065,意味着这个模式从弱阻尼变成了较强的阻尼,系统抵抗低频振荡的能力明显改善。

5.3 36节点和39节点的取舍:算例规模的边界在哪里

做电力系统动态分析选算例时,总绕不开36节点和39节点的选择问题。业界普遍知道39节点测试系统,公开资料多、参数齐全;36节点相对冷门,很多版本缺励磁和调速器参数。

以我的经验,按你的目标来选:如果做的是静态分析,比如网损优化、无功补偿配置,36节点够用,数据量小、排错快、调通率高;如果做的是低频振荡和阻尼控制研究,先看一眼手上的36节点数据有没有完整的励磁模型参数,没有的话建议直接用39节点,因为这类研究对励磁和调速器参数的敏感性极高,缺参数时仿真结果的真伪很难判断。

如果数据集缺参数又不想换系统,一个变通办法是根据典型参数手工补齐,但要意识到这会给结果引入额外的不确定性。补齐励磁参数时,优先找同容量等级发电机的公开典型值,别从不同电压等级的系统里乱搬。

36节点的真正边界在于扩展性。有些研究需要把系统放大到上百节点验证区域间振荡特性,36节点就力不从心了。这时候用36节点作为新方法调试的沙盘,成熟后再迁移到大系统,是性价比最高的用法。这个取舍没有对错,取决于你手上的数据和要回答的问题。

6. 验证算例正确性的三个检查点与一个值得长期保留的进阶技巧

算例搭建完成、各种计算都能跑通之后,还有一个很容易被忽略的环节:验证算例本身是否正确。我一般按三个检查点做确认,缺一个都不放心往下走。

检查点一:潮流收敛且电压分布合理。全系统母线电压在0.95到1.05pu之间,没有一个孤立的异常低电压节点。检查点二:网损在3%到8%区间。超出这个范围先查线路电阻单位,别急着找系统设计问题。检查点三:暂态稳定曲线形态符合物理直觉。故障期间功率出现突变,切除后功角曲线在几秒内恢复相对稳定或按阻尼波形衰减,而不会出现没有物理意义的锯齿或NaN。

三个检查点过了,算例作为工具才算合格。接下来分享一个我长期在用的技巧:把PSASP的导出结果交给Python做批量曲线解析。做控制策略优化时往往要跑几十组仿真,在PSASP界面里逐条看曲线效率太低,我的做法是把PSASP导出的文本结果文件按方案编号命名,再用脚本批量提取关键指标。

import numpy as np def parse_angle_curves(path, gen_index): """从PSASP导出的功角数据文本中提取指定发电机的功角摆动范围""" time = [] angle = [] with open(path, 'r', encoding='gbk', errors='ignore') as f: for line in f: cols = line.strip().split() if len(cols) >= gen_index + 1: time.append(float(cols[0])) angle.append(float(cols[gen_index])) time = np.array(time) angle = np.array(angle) swing = angle.max() - angle.min() return time, angle, swing t, delta, swing = parse_angle_curves('case01_delta.txt', 2) print(f"最大功角摆幅: {swing:.2f} 度")

逻辑说明:PSASP导出的曲线文件通常第一列是时间,后面几列是各发电机的功角。脚本按列索引取出目标发电机的数据,计算全过程中功角最大值与最小值的差值,这个摆幅就是暂态稳定的核心评价指标之一,用来比较不同控制策略的效果非常直观。

参数说明:path是PSASP导出的文本文件路径,gen_index是发电机对应的列索引,从1开始数。文本编码默认指定gbk,因为国内版本的PSASP导出文件常用GBK编码,如果打开报错,把encoding改成utf-8再试。errors='ignore'是为了跳过文件尾部的空行和乱码行,不影响数据主体。

我以前犯过一个低级错误:把所有仿真结果的功角文件都命名为result.txt,导致后来的策略对比跑出来全是同一个数。现在每个方案一个独立目录,文件名带上方案编号,解析脚本按目录遍历,再也不用担心覆盖问题。这个习惯帮我少走了很多弯路,希望帮到你。

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

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进