从零搭一套电力系统仿真环境:Python + pandapower 保姆级安装
这篇写给完全没写过代码的电气同行。目标是 40 分钟内,在你的电脑上跑出第一张潮流计算结果表。 全程不需要 GPU、不需要服务器、不需要联网权限之外的任何东西。
一、先说清楚要装什么、为什么要装
我们要用的核心工具是 pandapower——一个开源的电力系统计算库,德国卡塞尔大学和 Fraunhofer IEE 主导开发,能算潮流、短路、最优潮流,还能画网络图。
它长得不像 PSS/E、DIgSILENT 那样有界面,它是代码库:你写几行 Python 描述电网,它返回一张表。好处是:
- 免费,没有 license 服务器,装在自己电脑上就能跑
- 可批量:一个脚本算 500 个工况,不用手点 500 次
- 可复现:脚本发给同事,他跑出来和你一模一样
- 和 Excel/pandas 打通:结果直接导出,接着做报表
代价是:你得先装 Python。这篇就是把这段路铺平。
整个链路是这样的:
Python(解释器) → venv(虚拟环境,隔离依赖) → pandapower(电力计算库) → 你的脚本
二、装 Python(Windows)
- 打开官网下载页:https://www.python.org/downloads/
- 点黄色的 Download Python 3.x.x 按钮(3.10–3.12 都行,不要用 3.13,部分科学计算轮子在旧版本上更稳)
- 双击安装包,第一个界面务必勾上
Add python.exe to PATH——这一步没勾,后面 90% 的"命令找不到"都从这来 - 点
Install Now,等进度条走完,最后点Close
验证
按 Win + R,输入 cmd 回车,在黑窗口里敲:
python --version
看到类似这样就是成功:
Python 3.12.4
如果提示 'python' 不是内部或外部命令,两种补救:
- 重装一次,记得勾 PATH(最省事)
- 或者用
py --version试试,Windows 的 Python 启动器通常还在
三、装 Python(macOS)
macOS 自带的是 Python 3.9,能用但不建议直接用系统的。推荐两种方式二选一:
方式 A:官网安装包(推荐小白)
- https://www.python.org/downloads/ 下载 macOS 的
.pkg - 双击一路下一步
- 打开"终端"(
Command + 空格输入 Terminal),敲:
python3 --version
方式 B:Homebrew
brew install python@3.12
macOS 里命令是
python3,不是python。本文后面所有命令,macOS 用户把python换成python3、pip换成pip3即可。
四、建一个干净的虚拟环境(关键一步)
为什么要 venv:不同项目依赖不同版本的库,全装到系统 Python 里迟早打架。venv 就是给每个项目一个独立的"抽屉"。
1. 建项目文件夹
Windows:
mkdir C:\power
cd C:\power
macOS:
mkdir -p ~/power && cd ~/power
2. 建虚拟环境
python -m venv .venv
(macOS:python3 -m venv .venv)
这一步会在当前目录生成一个 .venv 文件夹,里面是一份独立的 Python。看不到这个文件夹说明上一步失败了,先解决再往下走。
3. 激活它
Windows(cmd):
.venv\Scripts\activate
Windows(PowerShell):
.venv\Scripts\Activate.ps1
macOS / Linux:
source .venv/bin/activate
激活成功的标志:命令行前面多了一个 (.venv)。
(.venv) C:\power>
PowerShell 报"禁止运行脚本"? 说明执行策略拦了。用管理员 PowerShell 跑一次
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned,输入Y确认,重开窗口再激活。
五、装 pandapower
pip install pandapower
国内网络慢的话加个镜像(清华源):
pip install pandapower -i https://pypi.tuna.tsinghua.edu.cn/simple
会顺带装上 pandas、numpy、scipy、networkx、matplotlib——这些是它的计算和画图依赖,看到它们被下载是正常的,别以为是装错了。
装完验证:
python -c "import pandapower as pp; print(pp.__version__)"
输出一个版本号(比如 3.x.x)就成功。看不到版本号但有警告,通常只是提示某个可选依赖缺失,不影响潮流计算。
六、跑通第一个算例:5 节点配电网
新建文件 first_run.py,把下面整段复制进去(这是官方教程里最简单的入门例子,我加了中文注释):
import pandapower as pp
# 1) 建一个空网络
net = pp.create_empty_network()
# 2) 建母线(节点):外部电网接入点 + 3 个负荷点
bus_hv = pp.create_bus(net, vn_kv=10.0, name="10kV母线") # 高压侧
bus_l1 = pp.create_bus(net, vn_kv=0.4, name="负荷1") # 低压侧
bus_l2 = pp.create_bus(net, vn_kv=0.4, name="负荷2")
bus_l3 = pp.create_bus(net, vn_kv=0.4, name="负荷3")
# 3) 外部电网(相当于上级变电站,给定电压)
pp.create_ext_grid(net, bus=bus_hv, vm_pu=1.0, name="上级电网")
# 4) 变压器 10kV/0.4kV,容量 630 kVA
pp.create_transformer_from_parameters(
net, hv_bus=bus_hv, lv_bus=bus_l1,
sn_mva=0.63, vn_hv_kv=10.0, vn_lv_kv=0.4,
vk_percent=4.0, # 短路阻抗 4%
vkr_percent=1.0, # 短路电阻 1%
pfe_kw=1.2, i0_percent=0.3,
name="T1 630kVA"
)
# 5) 三条低压电缆,把负荷点串起来
pp.create_line_from_parameters(
net, from_bus=bus_l1, to_bus=bus_l2, length_km=0.15,
r_ohm_per_km=0.206, x_ohm_per_km=0.080, c_nf_per_km=200,
max_i_ka=0.29, name="L1-L2"
)
pp.create_line_from_parameters(
net, from_bus=bus_l2, to_bus=bus_l3, length_km=0.12,
r_ohm_per_km=0.206, x_ohm_per_km=0.080, c_nf_per_km=200,
max_i_ka=0.29, name="L2-L3"
)
# 6) 三个负荷
pp.create_load(net, bus=bus_l1, p_mw=0.05, q_mvar=0.015, name="负荷1")
pp.create_load(net, bus=bus_l2, p_mw=0.08, q_mvar=0.025, name="负荷2")
pp.create_load(net, bus=bus_l3, p_mw=0.06, q_mvar=0.018, name="负荷3")
# 7) 算潮流(牛顿-拉夫逊法,默认)
pp.runpp(net)
# 8) 看结果
print("===== 母线电压 =====")
print(net.res_bus[["vm_pu", "va_degree"]].round(4))
print("\n===== 线路负载 =====")
print(net.res_line[["loading_percent", "p_from_mw", "q_from_mvar"]].round(3))
print("\n===== 变压器负载 =====")
print(net.res_trafo[["loading_percent", "p_hv_mw"]].round(3))
运行
python first_run.py
你应该看到什么
===== 母线电压 =====
vm_pu va_degree
0 1.000000 0.0000
1 0.981234 -0.5123
2 0.976512 -0.6215
3 0.974021 -0.6732
===== 线路负载 =====
loading_percent p_from_mw q_from_mvar
0 28.512 0.083 0.025
1 21.334 0.062 0.018
上面的数字是示意,具体值取决于你填的参数。真正重要的是:电压在 0.97 左右(合理),负荷 100% 以下(没超载),没有报错。
到这里,环境就通了。你已经能算潮流了。
七、想画图?加一步
pip install matplotlib
在脚本末尾加:
import matplotlib.pyplot as plt
pp.plotting.simple_plot(net, show_plot=False)
plt.savefig("network.png", dpi=150, bbox_inches="tight")
print("图已保存到 network.png")
network.png 就是你的电网单线示意图。
八、六个最常见的报错,对号入座
| 报错 | 原因 | 处理 |
|---|---|---|
'python' 不是内部或外部命令 |
装 Python 时没勾 PATH | 重装并勾选,或用 py |
'pip' 不是内部或外部命令 |
同上 / venv 没激活 | 先激活 venv,看命令行有没有 (.venv) |
ModuleNotFoundError: No module named 'pandapower' |
装到了系统 Python,跑的是 venv 的 | 激活 venv 后重装 |
Could not find a version that satisfies... |
网络问题或 Python 版本太新/太旧 | 换清华源;Python 换 3.10–3.12 |
SSLError / 证书错误 |
公司网络代理拦截 | 换网络,或公司代理配置 pip config set global.proxy |
runpp() 报 Newton 不收敛 |
参数不合理(比如负荷大得离谱、变压器变比写反) | 先 pp.runpp(net, init="flat"),再检查参数单位 |
单位是新手第一大坑:pandapower 里功率是 MW / Mvar,不是 kW;长度是 km,不是 m;电阻是 Ω/km。填 0.05 才是 50 kW,填 50 它会算成 50 MW,然后告诉你"不收敛"。
九、下一步可以干什么
环境有了,下面这些都能直接上手:
- 批量算工况:把负荷乘 0.6/0.8/1.0,循环出三组电压,看最恶劣情况
- 算短路:
pp.shortcircuit.calc_sc(net),出短路电流 - N-1 分析:断开一条线路,看有没有电压越限
- 导出 Excel:
net.res_bus.to_excel("result.xlsx")
后面几篇我会把短路、N-1、报表各写一遍。
十、出处与参考
- pandapower 官网:https://www.pandapower.org/
- pandapower 文档(含全部算例):https://pandapower.readthedocs.io/
- 源码仓库:https://github.com/e2nIEE/pandapower
- Python 官方下载:https://www.python.org/downloads/
- 论文(想引用时用这篇):Thurner L. et al., pandapower—An Open-Source Python Tool for Convenient Modeling, Analysis, and Optimization of Electric Power Systems, IEEE Transactions on Power Systems, 2018.
本文所有命令均在 Windows 11 + Python 3.12、macOS 14 + Python 3.12 上实测过。库版本迭代较快,若某个参数名有变化,以官方文档为准。
默认评论
Halo系统提供的评论