pandapower 3.5:用 Python 算一次真实的电网潮流
变电站检修前,调度要回答一个很具体的问题:10 MW 负荷从一条线路倒到另一条,末端母线电压会掉多少、线损会涨多少?过去这类算题要打开商用仿真软件:建模、填参数、点潮流、截图,一轮下来半小时起步。现在同样的问题,二十行 Python 就能算完,还能写进 CI 每天跑一遍做回归。
项目出处
pandapower 由卡塞尔大学与 Fraunhofer IEE 联合维护,仓库在 GitHub 的 e2nIEE/pandapower。它把潮流、短路、最优潮流、状态估计封装成普通 Python 函数,数据模型是一组 pandas 表。
它解决什么问题
商用软件(PSS/E、DIgSILENT、PSASP)算得准,但模型是二进制文件,脚本化调用困难,批量算例与自动化测试无从谈起。pandapower 的取舍相反:精度满足工程判断,接口就是 Python 对象,适合批量算例、教学演示、算法原型和回归测试。
与同类工具对比
选型一句话:要能读能改、可脚本化的算例工厂选 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,不能瞎填。
原理
是什么: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 落在内部模块,新手不易读懂。
踩坑与真实数据
第一坑是环境。本机系统 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、能测试、能批处理。算力不是瓶颈,模型字段是否填对才是。
默认评论
Halo系统提供的评论