小岳
2026-10-20
点 赞
0
热 度
2
评 论
0

pandapower 3.5:用 Python 算一次真实的电网潮流

  1. 首页
  2. 电气知识
  3. pandapower 3.5:用 Python 算一次真实的电网潮流

文章摘要

摸鱼小助手

pandapower 3.5:用 Python 算一次真实的电网潮流

变电站检修前,调度要回答一个很具体的问题:10 MW 负荷从一条线路倒到另一条,末端母线电压会掉多少、线损会涨多少?过去这类算题要打开商用仿真软件:建模、填参数、点潮流、截图,一轮下来半小时起步。现在同样的问题,二十行 Python 就能算完,还能写进 CI 每天跑一遍做回归。

项目出处

pandapower 由卡塞尔大学与 Fraunhofer IEE 联合维护,仓库在 GitHub 的 e2nIEE/pandapower。它把潮流、短路、最优潮流、状态估计封装成普通 Python 函数,数据模型是一组 pandas 表。

项目

内容(查询日期 2026-10-20)

仓库

https://github.com/e2nIEE/pandapower

开源协议

BSD 3-Clause,版权 2016-2026 University of Kassel 与 Fraunhofer IEE,以仓库 LICENSE 为准

最新版本

3.5.6,2026-10-07 发布,GitHub Release 与 PyPI 记录一致

运行环境

Python ≥ 3.10,依赖 numpy、scipy、pandas

社区活跃度

约 1300 star、176 个未关闭 issue,近期仍有提交

维护方

卡塞尔大学可持续电力网络系与 Fraunhofer IEE

它解决什么问题

商用软件(PSS/E、DIgSILENT、PSASP)算得准,但模型是二进制文件,脚本化调用困难,批量算例与自动化测试无从谈起。pandapower 的取舍相反:精度满足工程判断,接口就是 Python 对象,适合批量算例、教学演示、算法原型和回归测试。

与同类工具对比

工具

语言

定位

数据组织

可视化

协议

star

pandapower

Python

潮流、短路、最优潮流,输配电网通用

pandas 元素表

内置 matplotlib、plotly 接口

BSD-3-Clause

1303

PyPSA

Python

系统级容量规划与经济调度

pandas 表,以 bus 为中心

无内置,配合 plotly

MIT

2205

VeraGrid(原 GridCal)

Python

网络分析与规划,自带图形界面

自有类对象

Qt 桌面界面

MPL-2.0

632

GridLAB-D

C++

配电网时序仿真,负荷与电价建模

文本模型文件

无

以仓库 LICENSE 为准

219

选型一句话:要能读能改、可脚本化的算例工厂选 pandapower;做多年时序规划优化选 PyPSA;习惯图形界面点选元件选 VeraGrid;研究配电侧负荷行为与电价响应的时序仿真选 GridLAB-D。

安装

python3 -m venv .venv
source .venv/bin/activate
pip install "pandapower==3.5.6"
python3 -c "import pandapower as pp; print(pp.__version__)"

本文在 Python 3.14.4、numpy 2.4.6、scipy 1.18.1、pandas 2.3.3 环境实测,装完直接打印 3.5.6,无需编译任何 C 扩展。

最小可运行示例(实测)

三母线算例:一个平衡节点、一条 10 km 的 110 kV 电缆、一个 10 MW 负荷。

import pandapower as pp

net = pp.create_empty_network(name="demo-110kv")
b0 = pp.create_bus(net, vn_kv=110.0, name="母线A")
b1 = pp.create_bus(net, vn_kv=110.0, name="母线B")

pp.create_ext_grid(net, b0, vm_pu=1.02)  # 平衡节点,电压给定 1.02 pu
pp.create_line(net, b0, b1, length_km=10.0,
               std_type="N2XS(FL)2Y 1x300 RM/35 64/110 kV", name="L1")
pp.create_load(net, b1, p_mw=10.0, q_mvar=3.0, name="负荷")

pp.runpp(net)  # 默认牛顿-拉夫逊法
print(net.res_bus)
print(net.res_line[["p_from_mw", "pl_mw", "loading_percent"]])

实测输出(本机跑出,非示意):

    vm_pu  va_degree     p_mw  q_mvar
0  1.0200     0.0000 -10.0048  2.6808
1  1.0195    -0.0651  10.0000  3.0000

   p_from_mw   pl_mw  loading_percent
0    10.0048  0.0048           9.1411

三个数字就把这条线路的健康状况说清楚了:末端电压 1.0195 pu 说明电压几乎没掉,线路只用了 9.14% 的载流能力,损耗 0.0048 MW。

短路计算(实测)

pp.create_ext_grid(net, b0, vm_pu=1.0, s_sc_max_mva=500.0, rx_max=0.1)  # 短路容量必填
pp.shortcircuit.calc_sc(net)
print(net.res_bus_sc["ikss_ka"])

实测 20 kV 网络的短路电流:母线 A 为 14.434 kA,母线 B 为 4.469 kA。电源侧短路容量直接决定这个数,工程上先查电网给的 s_sc_max_mva,不能瞎填。

原理

图1 pandapower 潮流计算管线,作者自绘

是什么:net 对象就是一组 pandas 表,bus、line、load、ext_grid 每行一个元件,与 Excel 模型一一对应。

怎么跑:runpp 调用 _pd2ppc 把元素表压成 MATPOWER 风格的 ppc 矩阵(bus、branch、gen 三段),再用牛顿-拉夫逊迭代求电压幅值与相角修正量,收敛判据是最功率不平衡量小于 tolerance_mva(默认 1e-8 MVA);收敛后按元素索引把结果展开回 res_bus、res_line 等表。

为什么这样设计:表格模型便于增删元件、对比版本;复用 MATPOWER 系求解器保证与学术社区结论一致;结果与输入分开存表,避免误改输入。代价是多一层转换,出错时 traceback 落在内部模块,新手不易读懂。

图2 输入表与结果表的字段映射,作者自绘

踩坑与真实数据

第一坑是环境。本机系统 Python 3.14 没有 pip,连 ensurepip 都缺,venv 建出来是空壳。实测绕法是下载 pip 的 wheel 包,解压到临时目录,再用 PYTHONPATH 指过去,一条命令装齐依赖。

第二坑是 numba。它只是可选加速,缺了会打印一长串警告。实测在 9 节点小算例上,numba=False 平均 33 ms,numba=True 反而 120 ms,因为 JIT 编译开销盖过计算量;网络节点到几千个才值得开。

第三坑是短路。ext_grid 不给 s_sc_max_mva 会直接抛 ValueError;官方内置 case9 算例还缺 gen 的 vn_kv、rdss_ohm 等列,短路计算会连着报错,得手工补齐这些参数。

第四坑是可选依赖。to_excel 需要 xlsxwriter,from_excel 还需要 openpyxl,默认安装里都没有,报错信息只提示缺哪个包,不会自动装。要么补装这两个包,要么改用 pickle 存算例。

小结

pandapower 把"电网模型"降维成 pandas 表,让电力计算进入 Python 生态:能 diff、能测试、能批处理。算力不是瓶颈,模型字段是否填对才是。

参考资料


本站站长,主角光环,怎么滴,你还想攻击你的站长吗,真是好big的狗胆

小岳

intp 逻辑家

站长

不具版权性
不具时效性

文章内容不具时效性。若文章内容有错误之处,请您批评指正。

目录

欢迎来到摸鱼干货栈,这里为您提供开源与摸鱼源码

8 文章数
6 分类数
0 评论数
13标签数
最近评论