{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Unbalanced power flow calculation with pandapower\n", "\n", "We will create a simple three bus system to demonstrate how to run unbalanced power flow calculations with pandapower. First, we create the three buses as follows:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2025-10-20T13:17:37.527555Z", "start_time": "2025-10-20T13:17:32.781114Z" } }, "outputs": [], "source": [ "from pandapower.create import (\n", " create_empty_network,\n", " create_bus,\n", " create_ext_grid,\n", " create_transformer_from_parameters,\n", " create_line_from_parameters,\n", " create_asymmetric_load\n", ")\n", "from pandapower.pf.runpp_3ph import runpp_3ph" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2025-10-20T13:17:37.796734Z", "start_time": "2025-10-20T13:17:37.534560Z" } }, "outputs": [], "source": [ "net = create_empty_network()\n", "b1 = create_bus(net, 20.0)\n", "b2 = create_bus(net, 0.4)\n", "b3 = create_bus(net, 0.4)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The external grid connection can then be created with the short-circuit parameters s_sc_max_mva and rx_max as well as the parameters x0x_max and r0x0_max that define the zero sequence impedances. The ext_grid parameters are all defined in the [ext_grid parameter documentation](https://pandapower.readthedocs.io/en/develop/elements/ext_grid.html#input-parameters)." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2025-10-20T13:17:37.828635Z", "start_time": "2025-10-20T13:17:37.805736Z" } }, "outputs": [], "source": [ "create_ext_grid(net, b1, s_sc_max_mva=1000, rx_max=0.1, x0x_max=1.0,\n", " r0x0_max=0.1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The transformer requires the additional parameters vk0_percent, vkr0_percent, mag0_percent, mag0_rx, vector_group and si0_hv_partial for unbalanced calculation. The transformer parameters are all defined in the [transformer parameter documentation](https://pandapower.readthedocs.io/en/develop/elements/trafo.html#input-parameters)." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2025-10-20T13:17:37.891114Z", "start_time": "2025-10-20T13:17:37.871755Z" } }, "outputs": [], "source": [ "create_transformer_from_parameters(net, b1, b2, sn_mva=0.63,\n", " vn_hv_kv=20., vn_lv_kv=0.4,\n", " vkr_percent=0.1, vk_percent=6,\n", " vk0_percent=6, vkr0_percent=0.78125,\n", " mag0_percent=10000, mag0_rx=0.,\n", " pfe_kw=0.1, i0_percent=0.1,\n", " vector_group=\"Dyn\", shift_degree=150,\n", " si0_hv_partial=0.9)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For lines, the zero sequence impedances r0_ohm_per_km, x0_ohm_per_km and c0_nf_per_km are required in addition to the balanced parameters. The line parameters are all defined in the [line parameter documentation](https://pandapower.readthedocs.io/en/develop/elements/line.html#input-parameters)." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2025-10-20T13:17:38.029198Z", "start_time": "2025-10-20T13:17:38.000817Z" } }, "outputs": [], "source": [ "create_line_from_parameters(net, b2, b3, length_km=0.1, r0_ohm_per_km=0.0848,\n", " x0_ohm_per_km=0.4649556, c0_nf_per_km=230.6,\n", " max_i_ka=0.963, r_ohm_per_km=0.0212,\n", " x_ohm_per_km=0.1162389, c_nf_per_km= 230)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally, to create an unbalanced power flow, we create an asymmetric load. The input parameters are all defined in the [asymmetric load parameter documentation](https://pandapower.readthedocs.io/en/develop/elements/asymmetric_load.html#input-parameters)." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2025-10-20T13:17:38.139021Z", "start_time": "2025-10-20T13:17:38.119011Z" } }, "outputs": [], "source": [ "create_asymmetric_load(net, b3, p_a_mw=0.25, p_b_mw=0.18, p_c_mw=0.20, type=\"wye\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can now run an unbalanced power flow:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2025-10-20T13:17:42.071055Z", "start_time": "2025-10-20T13:17:38.227581Z" } }, "outputs": [], "source": [ "runpp_3ph(net)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The results are stored in the result tables with suffix \"_3ph\", such as \"res_bus_3ph\", \"res_line_3ph\" etc.:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2025-10-20T13:17:42.102646Z", "start_time": "2025-10-20T13:17:42.078065Z" } }, "outputs": [], "source": [ "net.res_bus_3ph" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can check the voltage in all phases as well as the unbalance percentage according to IEC 62749:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2025-10-20T13:17:42.493893Z", "start_time": "2025-10-20T13:17:42.469897Z" } }, "outputs": [], "source": [ "net.res_bus_3ph[[\"vm_a_pu\", \"vm_b_pu\", \"vm_c_pu\", \"unbalance_percent\"]]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The line and trafo results provide currents and loadings in different phases or overall loading, which is defined as the maximum of all phase loadings." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2025-10-20T13:17:43.038838Z", "start_time": "2025-10-20T13:17:43.013829Z" } }, "outputs": [], "source": [ "net.res_line_3ph[[\"i_a_from_ka\", \"i_b_to_ka\", \"loading_b_percent\", \"loading_percent\"]]" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "ExecuteTime": { "end_time": "2025-10-20T13:17:43.258103Z", "start_time": "2025-10-20T13:17:43.230386Z" } }, "outputs": [], "source": [ "net.res_trafo_3ph[[\"i_a_hv_ka\", \"i_b_lv_ka\", \"loading_b_percent\", \"loading_percent\"]]" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3" } }, "nbformat": 4, "nbformat_minor": 2 }