Pandapower

Материал из Wiki Power System
Версия от 21:29, 6 ноября 2018; Windsl (обсуждение | вклад) (Оценка состояния)
Перейти к: навигация, поиск

Pandapower - это Python, BSD-лицензированный инструмент для анализа режимов работы энергосистем, предназначенный для автоматизации статических и квазистатических аналитических и оптимизационых расчётов для сбалансированных энергосистем. Данная библиотека предоставляет возможность расчетов потоков мощности, оптимизации потоков мощности, оценку состояния и расчёт токов коротких замыканий согласно стандарту IEC 60909. Дополнительные усовершенствования алгоритма решения включают в себя возможность моделирования постоянных токовых нагрузок, сетей с несколькими балансирующими узлами и проверки связности. Модель сети pandapower основана на электрических элементах, таких как линии электропередачи, трансформаторы с двумя или тремя обмотками и идеальные выключатели. Все элементы могут быть определены с помощью параметров паспортной таблицы и внутренне обработаны с использованием схем замещения моделей. Структура табличных данных, используемая для определения электрчиеских сетей, основана на библиотеке Python-а pandas, что позволяет удобно обрабатывать входные и выходные параметры. Реализация в Python упрощает использование pandapower и обеспечивает удобное расширение сторонних библиотек.

Общие сведения

Основные возможности предоставляемые библиотекой:

  1. Расчёт установившегося режима.
  2. Расчёт токов короткого замыкания.
  3. Оценка состояния по данным измерений.
  4. Визуализация схем.
  5. Топологический анализ на основе библиотеки NetworkX языка Python. Например, можно найти кратчайший путь между двумя узлами, выяснить, связаны ли две области в сети друг с другом или существуют ли циклы в сети. Полный список всех алгоритмов NetworkX представлен на оффициальном сайте.

Краткий обзор pandapower

Библиотека pandapower реализована на языке Python, гарантируя свободную доступность и гибкое расширение с другими библиотеками с открытым исходным кодом. Поскольку он разработан как межплатформенная библиотека, его можно легко применять на вычислительных кластерах и распараллелить без каких-либо ограничений лицензии. Все реализации тщательно проверяются и, по возможности, проверяются путем сравнения с инструментами коммерческих программных обеспечений. pandapower была успешно применена в нескольких исследованиях сети [1],[2],[3],[4]. Благодаря обширной библиотеке моделей и удобному интерфейсу Python, pandapower имеет относительно низкий входной барьер для новых пользователей для выполнения основного анализа энергетических систем, что также делает его отличным инструментом для образовательных целей. В то время как pandapower первоначально была реализована для анализа симметричных систем распределения, впоследствии она была расширена с помощью моделей для систем передачи, таких как трехобмоточные трансформаторы, шунтирующие элементы или эквивалентные модели сети. В своей нынешней версии pandapower подходит для анализа симметричного распределения, а также для систем передачи.

Инструмент pandapower для анализа энергосистемы с открытым исходным кодом направлен на автоматизацию статического и квазистатического анализа и оптимизации в сбалансированных трехфазных энергосистемах. pandapower включает в себя модели статических схем замещения для электрических элементов, которые могут быть определены общими параметрами паспортной таблицы. Все модели энергосистемы тщательно протестированы на уровне коммерческих программных обеспечений и обеспечивают стандартное моделирование энергетических систем. Идеальная модель выключателя, как она реализована в pandapower, насколько нам известно, нигде в литературе не была описана или реализована в любом другом инструменте с открытым исходным кодом. Удобные функции для задания элементов, а также библиотеки стандартных типов облегчают пользователю автоматизацию создания сетей, что позволяет удобно импортировать сетевые данные из разных форматов. Структура табличных данных позволяет легко получать и анализировать входные и выходные параметры. Для исследований потока мощности pandapower использует jit ускоренную версию алгоритма PYPOWER Newton-Raphson в качестве алгоритма решения по умолчанию. Дополнительные усовершенствования были сделаны для алгоритма рещения PYPOWER, а именно возможности моделировать постоянные токовые нагрузки, асимметричные сопротивления или сети с несколькими балансирующими узлами. В дополнение к расчёту потоков мощности и оптимальных потоков мощности, pandapower является первым инструментом анализа энергосистемы с открытым исходным кодом, который включает оценку состояния, а также расчёт короткого замыкания в соответствии со стандартом IEC 60909. Кроме того, интерфейс для исследования топологии позволяет пользователю выполнять настраиваемое исследование графов в электрической сети. pandapower также включает в себя библиотеку графики для удобной визуализации энергосистем. Эта эксклюзивная функция сетевого анализа в сочетании с обширной библиотекой моделей делает pandapower ценным и инновационным вкладом в существующие инструменты с открытым исходным кодом.

Модели сети

Любая функция анализа электроэнергетической системы, такая как расчёт потоков мощности или короткого замыкания, основана на математической модели электрической сети. Существуют различные подходы к тому, как инструменты энергосистемы позволяют пользователю задать эту модель. Обычно используемым подходом является модель узлов и ветвей, которая определяет сеть как совокупность узлов, которые связаны между собой определенными ветвями. Ветви моделируются стандартной схемой замещения и используются для моделирования многополюсных элементов, таких как линии или трансформаторы. К узлам приписываются узловая мощность или проводимость для моделирования однополюсных элементов, таких как нагрузки, генераторы или конденсаторные батареи. Модель узлов и ветвей также может свободно параметризоваться и она не привязана к конкретным моделям электрических сетей. С другой стороны, пользователю необходимо рассчитать сопротивления для каждой ветви и суммировать узловые мощности для каждого узла вручную по данным паспортных таблиц элементов сети. Это может быть громоздким и подверженным ошибкам, особенно для сложных элементов, таких как трансформаторы с переключателями отпаек или трехобмоточных трансформаторов.

Вместо модели узлов и ветвей pandapower использует модель на основе элементов для моделирования электрических сетей. Элемент либо подключен к одной либо к нескольким шинам и определяется характеристическими параметрами. Вместо общей модели ветвей существуют отдельные модели для линий, двухобмоточных, трехобмоточных трансформаторов и т. д. Это позволяет моделировать сеть по паспортным данным, такими как длина и удельное сопротивление для линий электропередачи, или напряжение короткого замыкания и номинальная мощность для трансформаторов. Поскольку модель узлов и ветвей допускает только определение суммарной мощности в каждом узле, однополюсные элементы (например, элементы нагрузки или генерации) могут быть подключены к шинам независимо друг от друга. Это также позволяет подключать несколько элементов на одной шине.

Модели элементов должны обрабатываться соответствующими эквивалентными схемами для получения математического описания сети. Разрыв связи между элементами модели и моделью сети позволяет определить разные эквивалентные схемы для различных функциональных возможностей анализа. Например, внешний элемент сети может быть смоделирован как балансирующий узел при расчёте потоков мощности, но как источник напряжения с внутренним сопротивлением при вычислении короткого замыкания.

Структура данных

Рис. 1 - Схематический обзор представления элементов в pandapower

pandapower основан на табличной структуре данных, где каждый тип элемента представлен таблицей, содержащей все параметры для конкретного элемента и результирующую таблицу, которая содержит конкретные результаты для различных методов анализа. Структура табличных данных основана на библиотеке Python-a pandas [5]. Он позволяет хранить переменные любого типа данных, так что электрические параметры могут храниться вместе с параметрами состояния и метаданными, такими как имена или описания. Таблицы можно легко расширить и настроить, добавив новые столбцы, не влияя на функциональность pandapower. Все встроенные методы pandas могут использоваться для эффективного чтения, записи и анализа данных сети и результатов. Сеть pandapower (сокращенно net) представляет собой словарь Python, который содержит всю информацию о сети (см. Рис.1). Самое главное, он включает в себя элемент и результирующую таблицу для каждого типа элементов, такие как линия, трансформатор, переключатель и т.д. Таблица элементов содержит все входные параметры, заданные пользователем, тогда как таблица результатов используется функциями потокораспределения или оптимальным потокораспределением для хранения результатов. Кроме того, net включает словари, которые содержат данные стандартного типа и параметры сети, такие как частота, сетевое имя или номинальная мощность в системе о.е.

Модели электрических элементов

Библиотека pandapower включает в себя множество различных электрических моделей, некоторые из которых недоступны ни в одном другом инструменте с открытым исходным кодом. Подробные формулы для расчёта электрических параметров доступны в документации pandapower [6]. Удобное пошаговое задание каждого элемента сети производится с помощью функции create. Основные элементы, включаемые pandapower:

Электрическая сеть

Для выполнения расчётов необходимо предварительно создать объект "pandapowerNet". он будет содержать в себе всю необходимую информацию о электрической сети и её элементах.

Для создания объекта "pandapowerNet" есть функция:

pandapower.create_empty_network(name='Имя_сети', f_hz=50.0, sn_kva=1000.0)

Входные аргументы функции:

  • name(string, None) - имя сети.
  • f_hz (float, 50.) - частота электрической сети в Гц.
  • sn_kva (float, 1e3) - масштабирующий коэффициент мощности в сети.

Если использовать более простой способ, то можно вызвать эту функцию с параметрами по умолчанию:

import pandapower as pp #импорт библиотеки pandapower
net = pp.create_empty_network() #создание объекта "pandapowerNet" с именем net

После создания объекта в котором будет храниться вся информация о сети можно перейти к созданию отдельных её элементов.

Таблицы данных объекта "pandapowerNet":

  • bus - таблица с исходными данными по узлам.
  • bus_geodata - таблица с координатами узлов для
  • trafo - таблица с исходными данными по двухобмоточным трансформаторам.
  • trafo3w - таблица с исходными данными по трёхобмоточным трансформаторам.
  • line - таблица с исходными данными по линиям электропередачи.
  • line_geodata - таблица с координатами точек изгибов линий.
    1. coords (list) - Список (x,y) координат, которые определяют точки перегиба линий.
  • res_bus - таблица с результатами расчёта установившегося режима.
    1. vm_pu (float) - модуль напряжения [кВ]
    2. va_degree (float) -угол напряжения [град.]
    3. p_kw (float) - resulting active power demand [кВт]
    4. q_kvar (float) - resulting reactive power demand [квар]
  • res_trafo - таблица с результатами расчёта по трансформаторам.
  • res_line - таблица с результатами расчёта установившегося режима по линиям.
  • res_line_est - таблица с результатами оценки состояния по линиям электропередачи.
  • res_bus_est - таблица с результатми оценки состояния.
    1. vm_pu (float) - модуль напряжения [кВ]
    2. va_degree (float) - угол напряжения [град.]
    3. p_kw (float) - оценка потребления активной мощности [кВ]
    4. q_kvar (float) - оценка потребленяи реактивной мощности [квар]

Пример обращения к таблице с исходными данными по узлам:

net.bus

Узел, шина (bus)

Объекты "bus" представляют собой узлы электрической сети и необходимы для формирования графа сети. Пример выбора узлов графа электрической сети можно посмотреть здесь.

Для создания узла есть функция

pandapower.create_bus(net, vn_kv, name=None, index=None, geodata=None, type="b", zone=None, in_service=True, max_vm_pu=nan, min_vm_pu=nan)

Параметры функции:

  1. Обязательные
    • net (pandapowerNet) - имя сети "pandapowerNet" в которой создаётся узел
  2. Не обязательные
    • name (string, default None) - название узла
    • index (int, default None) - принудительно заданный уникальный номер узла ID, если есть. Если параметр не задан, то номер выбирается на единицу больше, чем наивысший номер уже заданных узлов.
    • vn_kv (float) - номинальное напряжение [кВ].
    • geodata ((x,y)-tuple, default None) - координаты для отрисовки узла на графике.
    • type (string, default “b”) - Тип узла. “n” - узел, “b” - шины, “m” - муфта.
    • zone (string, None) - район электрической сети.
    • in_service (boolean) - включенное состояние узла: True если включён or False если отключён.
    • max_vm_pu (float, NAN) - максимальное допустимое напряжение в узле, в относительных единицах - параметр необходим для задачи оптимизации потокораспределения.
    • min_vm_pu (float, NAN) - минимальное допустимое напряжение в узле, в относительных единицах - параметр необходим для задачи оптимизации потокораспределения.

Номинальная мощность в системе о.е. определяется коэффициентом масштаба мощности в текущей электрической сети net.sn_kva.

Пример создания узлов сети:

import pandapower as pp

#создание пустой сети
net = pp.create_empty_network()

#Создание узлов в сети
bus1 = pp.create_bus(net, vn_kv=20., name="Узел 1")
bus2 = pp.create_bus(net, vn_kv=0.4, name="Узел 2")

Нагрузка (load)

Нагрузки используются для моделирования потребления электроэнергии. Они определяются активной мощностью load.p_kw и реактивной мощностью load.q_kvar.

В каждом нагрузочном узле можно задать статическую характеристику в виде ZIP модели, которая позволяет моделировать зависимость потребления мощности от напряжения. Процент нагрузки, которая потребляет постоянный ток, определяется параметром load.const_i_percent, постоянная импедансная часть определяется параметром load.const_z_percent. Остальная часть нагрузки предполагает постоянную мощность нагрузки. При постоянном токе и постоянном сопротивлении считается, что активным значением мощности является потребление энергии при номинальном напряжении.

Все узловые мощности включают в себя правило знаков. Модель нагрузки включает в себя масштабирующий коэффициент load.scaling, который позволяет масштабировать нагрузку.

Функция создания нагрузки в узле сети по известным значениям постоянной мощности

pandapower.create_load(net, bus, p_kw, q_kvar=0, const_z_percent=0, const_i_percent=0, sn_kva=nan, name=None, scaling=1., index=None, in_service=True, type=None, max_p_kw=nan, min_p_kw=nan, max_q_kvar=nan, min_q_kvar=nan, controllable=nan)

Нагрузки добавляются в таблицу load. Знак плюс в таблице соответствует нагрузке, а минус - генерации.

Параметры функции:

  1. Обязательные
    • net (pandapowerNet) - имя сети "pandapowerNet" в которой создаётся нагрузка;
    • bus (int) - индекс шины, к которой подключена нагрузка;
  2. Не обязательные
    • p_kw (float, по умолчанию 0) – активная мощность: положительное значение для нагрузки, отрицательное значение для генерации;
    • q_kvar (float, по умолчанию 0) - реактивная мощность нагрузки;
    • const_z_percent (float, по умолчанию 0) – доля нагрузки, характеризующаяся постоянным сопротивлением;
    • const_i_percent (float, по умолчанию 0) – доля нагрузки, потребляющая постоянный ток;
    • sn_kva (float, по умолчанию None) - номинальная мощность нагрузки;
    • scaling (float, по умолчанию 1) - коэффициент масштабирования;
    • type (string, None) - тип нагрузки;
    • index (int, None) - принудительно введите индекс. Если «None», выбирается индекс один выше самого высокого уже существующего индекса;
    • in_service (boolean) - “True” для работающих элементов или “False” для отключенных;
    • max_p_kw (float, по умолчанию NaN) – максимальная активная мощность нагрузки - параметр необходим для задачи оптимизации потокораспределения;
    • min_p_kw (float, по умолчанию NaN) – минимальная активная мощность нагрузки - параметр необходим для задачи оптимизации потокораспределения;
    • max_q_kvar (float, по умолчанию NaN) - максимальная реактивная мощность нагрузки - параметр необходим для задачи оптимизации потокораспределения;
    • min_q_kvar (float, по умолчанию NaN) - минимальная реактивная мощность нагрузки - параметр необходим для задачи оптимизации потокораспределения;
    • controllable (boolean, по умолчанию NaN) – управляемая нагрузка или нет - параметр необходим для задачи оптимизации потокораспределения.

Статический генератор (sgen)

Статические генераторы используются для моделирования постоянной выдачи мощности с активной мощностью sgen.p_kw и реактивной мощностью sgen.q_kvar. В правиле знаков выработка мощности определяется как отрицательная. Модель статического генератора включает коэффициент масштабирования sgen.scaling, эквивалентный коэффициенту масштабирования нагрузки.

Пример создания статического генератора:

pp.create_sgen(net, bus7, p_kw=-2000, q_kvar=500, name="static generator")

Параметры функции:

  1. Обязательные
    • net (pandapowerNet) - имя сети "pandapowerNet" в которой создаётся узел;
    • bus (int) - индекс шины, к которой подключен статический генератор;
    • p_kw (float) - активная мощность статического генератора (отрицательная для генерации);
  2. Не обязательные
    • q_kvar (float, default 0) - реактивная мощность статического генератора;
    • sn_kva (float, default None) - номинальная мощность статического генератора;
    • name (string, default None) – имя статического генератора;
    • index (int, None) - принудительно введите индекс. Если «None», выбирается индекс один выше самого высокого уже существующего индекса;
    • scaling (float, по умолчанию 1) - коэффициент масштабирования;
    • type (string, None) - тип статического генератора;
    • in_service (boolean) - “True” для работающих элементов или “False” для отключенных;
    • controllable (boolean, по умолчанию NaN) – управляемый статический генератор или нет - параметр необходим для задачи оптимизации потокораспределения;
    • max_p_kw (float, по умолчанию NaN) – максимальная активная мощность статического генератора - параметр необходим для задачи оптимизации потокораспределения;
    • min_p_kw (float, по умолчанию NaN) – минимальная активная мощность статического генератора - параметр необходим для задачи оптимизации потокораспределения;
    • max_q_kvar (float, по умолчанию NaN) - максимальная реактивная мощность статического генератора - параметр необходим для задачи оптимизации потокораспределения;
    • min_q_kvar (float, по умолчанию NaN) - минимальная реактивная мощность статического генератора - параметр необходим для задачи оптимизации потокораспределения.

Генератор, управляемый напряжением (gen)

Генератор используется для моделирования генерации мощности с заданным значением величины напряжения и фиксированной выдачей активной мощности. Точное соблюдение величины напряжения при расчёте потокораспределения достигается настройкой шины генератора в качестве узла PV:

Пример создания генератора:

pp.create_gen(net, bus6, p_kw=-6000, max_q_kvar=3000, min_q_kvar=-3000, vm_pu=1.03, name="generator")

Параметры функции:

  1. Обязательные
    • net (pandapowerNet) - имя сети "pandapowerNet" в которой создаётся генератор;
    • bus (int) - индекс шины, к которой подключен генератор;
  2. Не обязательные
    • p_kw (float) - активная мощность генератора (отрицательная для генерации!);
    • vm_pu (float, default 0) - уставка напряжения генератора;
    • sn_kva (float, default None) - номинальная мощность генератора;
    • name (string, default None) – имя генератора;
    • index (int, None) - принудительно введите индекс. Если «None», выбирается индекс один выше самого высокого уже существующего индекса;
    • scaling (float, по умолчанию 1) - коэффициент масштабирования;
    • type (string, None) - тип генератора;
    • in_service (boolean) - “True” для работающих элементов или “False” для отключенных;
    • controllable (boolean, по умолчанию NaN) – управляемый генератор или нет - параметр необходим для задачи оптимизации потокораспределения;
    • vn_kv (float, NaN) - номинальное напряжение генератора - параметр необходим для расчёта токов короткого замыкания;
    • xdss (float, NaN) – сверхпереходное реактивное сопротивление генератора - параметр необходим для расчёта токов короткого замыкания;
    • rdss (float, NaN) - сверхпереходное активное сопротивление генератора - параметр необходим для расчёта токов короткого замыкания;
    • cos_phi (float, NaN) - номинальный косинус угла генератора - параметр необходим для расчёта токов короткого замыкания;
    • max_p_kw (float, по умолчанию NaN) – максимальная активная мощность генератора - параметр необходим для задачи оптимизации потокораспределения;
    • min_p_kw (float, по умолчанию NaN) – минимальная активная мощность генератора - параметр необходим для задачи оптимизации потокораспределения;
    • max_q_kvar (float, по умолчанию NaN) - максимальная реактивная мощность генератора - параметр необходим для задачи оптимизации потокораспределения;
    • min_q_kvar (float, по умолчанию NaN) - минимальная реактивная мощность генератора - параметр необходим для задачи оптимизации потокораспределения.

Внешняя сеть (ext_grid)

Модель элемента внешней сети представляет собой источник напряжения с величиной напряжения ext_grid.vm_pu и соответствующим углом напряжения ext_grid.va_degree. Точное соблюдение значения комплексного напряжения при расчёте потоков мощности достигается установкой шины генератора в качестве балансирующего узла.

pandapower поддерживает подключение нескольких внешних сетей в гальванически подключенных сетевых зонах.

Пример создания внешней сети:

pp.create_ext_grid(net, bus1, vm_pu=1.02, va_degree=50)

Параметры функции:

  1. Обязательные
    • net (pandapowerNet) - имя сети "pandapowerNet" в которой создаётся внешняя сеть;
    • bus (int) – шина, к которой подключена внешняя сеть;
  2. Необязательные
    • vm_pu (float, по умолчанию 1.0) – напряжение балансирующего узла, выраженное в о.е.;
    • va_degree (float, по умолчанию 0) – угол напряжения балансирующего узла, выраженное в градусах;
    • name (string, по умолчанию None) – имя внешней сети;
    • in_service (boolean) - “True” для работающих элементов или “False” для отключенных;
    • Sk_max – максимальная мощность короткого замыкания - параметр необходим для расчётов токов коротких замыканий;
    • SK_min - минимальная мощность короткого замыкания - параметр необходим для расчётов токов коротких замыканий;
    • RX_max – максимальное отношение активного сопротивления к реактивному - параметр необходим для расчётов токов коротких замыканий;
    • RK_min – минимальное отношение активного сопротивления к реактивному - параметр необходим для расчётов токов коротких замыканий;
    • max_p_kw (float, по умолчанию NaN) – максимальная выдача активной мощности - параметр необходим для задачи оптимизации потокораспределения;
    • min_p_kw (float, по умолчанию NaN) - минимальная выдача активной мощности - параметр необходим для задачи оптимизации потокораспределения;
    • max_q_kvar (float, по умолчанию NaN) - максимальная выдача реактивной мощности - параметр необходим для задачи оптимизации потокораспределения;
    • min_q_kvar (float, по умолчанию NaN) - минимальная выдача реактивной мощности - параметр необходим для задачи оптимизации потокораспределения.

Шунт (shunt)

Шунты являются сетевыми элементами, которые могут использоваться для моделирования конденсаторной батареи или реактора. Шунты определяются реактивной мощностью shunt.q_kvar и активной мощностью shunt.p_kw, которые представляют собой потери. Значения мощности равны потреблению при номинальном напряжении shunt.vn_kv. Параметр shunt.step позволяет моделировать дискретно сегментированный шунт, такой как переключаемые конденсаторные батареи.

Пример создания шунта:

pp.create_shunt(net, bus3, q_kvar=-960, p_kw=0, name='Shunt')

Параметры функции:

  1. Обязательные
    • net (pandapowerNet) - имя сети "pandapowerNet" в которой создаётся шунт;
    • bus (int) - индекс шины, к которой подключен шунт;
    • p_kw (float) - активная мощность шунта в кВт при напряжении v=1.0 о.е.;
    • q_kvar (float) - реактивная мощность шунта в кВАр при напряжении v=1.0 о.е.;
  2. Необязательные
    • vn_kv (float, NaN) - номинальное напряжение шунта. По умолчанию номинальное напряжение подключенной шины;
    • step (int, 1) - шаг шунта, с которым умножаются значения мощности;
    • name (string, default None) – имя шунта;
    • in_service (boolean) - “True” для работающих элементов или “False” для отключенных;
    • index (int, None) - принудительно введите индекс. Если «None», выбирается индекс один выше самого высокого уже существующего индекса.

Линия (line)

Линии электропередачи моделируются с помощью П-образной схемы замещения [7]. Электрические параметры линии указаны относительно длины линии line.length_km. Другими словами задаётся удельные параметры на единицу длины.

Продольное сопротивление определяется активным сопротивлением line.r_ohm_per_km и реактивным сопротивлением line.x_ohm_per_km. Поперечная проводимость линии определяется пропускной способностью line.c_nf_per_km. Линейный ток res_line.i_ka рассчитывается как максимальный ток на обоих концах линии. Линейная загрузка res_line.loading_percent может быть рассчитана как отношение тока линии res_line.i_ka к максимальной термическому току линии.

Модель также обеспечивает параметр line.parallel для определения количества параллельных линий.

Линии могут быть созданы либо из библиотеки стандартных типов (create_line), либо с помощью настраиваемых значений (create_line_from_parameters).

Пример создания линии через библиотеку стандартного типа:

line1 = pp.create_line(net, bus1, bus2, length_km=10, std_type="N2XS(FL)2Y 1x300 RM/35 64/110 kV",  name="Line 1")

Пример создания линии с помощью настраиваемых значений:

create_line_from_parameters(net, "line1", from_bus = 0, to_bus = 1, lenght_km=0.1, r_ohm_per_km = .01, x_ohm_per_km = 0.05, c_nf_per_km = 10, max_i_ka = 0.4)

При определении линии через библиотеку стандартного типа возможно задание следующих параметров линии:

  1. Обязательные
    • net (pandapowerNet) - имя сети "pandapowerNet" в которой создаётся линия;
    • from_bus (int) - индекс шины, к которой будет подключена линия с одной стороны;
    • to_bus (int) - индекс шины, к которой будет подключена линия с другой стороны;
    • length_km (float) - длина линии, выраженная в км;
    • std_type (string) – используемый стандартный тип линии;
  1. Не обязательные
    • name (string) – имя линии;
    • index (int, None) - принудительно введите индекс. Если «None», выбирается индекс один выше самого высокого уже существующего индекса;
    • geodata (array, по умолчанию None, shape= (,2L)) – координаты линии. Первая строка должна быть координатами шины a, а последняя должна быть координатами шины b. Точки в середине представляют точки изгиба линии;
    • in_service (boolean) - “True” для работающих элементов или “False” для отключенных;
    • df (float) - коэффициент разгрузки: максимальный ток линии относительно номинального тока линии (от 0 до 1);
    • parallel (integer) - количество параллельных линий;
    • max_loading_percent (float) - максимальная текущая загрузка (необходима для оптимального потокораcпределения).

При определении линии c помощью настраиваемых значений возможно задание следующих параметров линии:

  1. Обязательные
    • net (pandapowerNet) - имя сети "pandapowerNet" в которой создаётся линия;
    • from_bus (int) - индекс шины, к которой будет подключена линия с одной стороны;
    • to_bus (int) - индекс шины, к которой будет подключена линия с другой стороны;
    • length_km (float) - длина линии, выраженная в км;
    • r_ohm_per_km (float) – активное сопротивление линии, выраженное в Ом/км;
    • x_ohm_per_km (float) - реактивное сопротивление линии, выраженное в Ом/км;
    • c_nf_per_km (float) - емкость линии, выраженная в См/км;
    • max_i_ka (float) – ток термической стойкости, выраженный в кА;
  2. Не обязательные
    • name (string) – имя линии;
    • index (int, None) - принудительно введите индекс. Если «None», выбирается индекс один выше самого высокого уже существующего индекса;
    • in_service (boolean) - “True” для работающих элементов или “False” для отключенных;
    • type (str) - тип линии («ol» для воздушной линии или «cs» для кабельной линии);
    • df (float) - коэффициент разгрузки: максимальный ток линии относительно номинального тока линии (от 0 до 1);
    • parallel (integer) – количество параллельных линий;
    • geodata (array, по умолчанию None, shape = (, 2L)) - координаты линии. Первая строка должна быть координатами шины a, а последняя должна быть координатами шины b. Точки в середине представляют точки изгиба линии;
    • max_loading_percent (float) - максимальная текущая загрузка - параметр необходим для задачи оптимизации потокораспределения.

Двухобмоточный трансформатор (trafo)

Двухобмоточные трансформаторы обычно моделируются с помощью T-образной схемы [7]. Однако, для полноты, pandapower также включает в себя модель π-трансформатора. Продольное сопротивление определяется напряжением короткого замыкания trafo.v_sc_percent и его активной частью trafo.v_scr_percent. Активная часть сопротивления трансформатора представляет собой потери в меди в обмотках трансформатора. Поперечная проводимость представляет собой потери в железном сердечнике трансформатора. Ток разомкнутого контура trafo.i0_percent определяет общие потери холостого хода и активные потери мощности trafo.pfe_kw определяют потери в железе. Номинальные напряжения трансформатора для стороны высокого напряжения trafo.vn_hv_kv и стороны низкого напряжения trafo.vn_lv_kv определяют номинальный коэффициент трансформации и не обязательно должен быть равен номинальным напряжениям подключенных шин. Если задан угловой сдвиг trafo.shift_percent, соотношение становится сложным и угол напряжения между стороной высокого и низкого напряжения сдвигается. Коэфициент трансформации также может зависить от определения переключателя отпаек и его текущего положения trafo.tp_pos. С каждым шагом положение отпайки trafo.tp_pos расходится с его средним положением trafo.tp_mid, коэффициент трансформации изменяется на процент, определяемый trafo.tp_st_percent. Также возможно определить сдвиг угла на шаг trafo.tp_degree_percent для моделирования фазорегулирующего транформатора. Переключатель отпаек может быть расположен на низком напряжении или стороне высокого напряжения трансформатора, который определяется параметром trafo.tp_side. Нагрузка res_trafo.loading_percent рассчитана на максимальную нагрузку со стороны высокого и низкого напряжения. Она может быть рассчитана относительно номинальной мощности trafo.sn_kva или относительно номинального тока. Как и для линий, существует параметр trafo.parallel, который позволяет определять несколько параллельных трансформаторов в одном элементе.

Трансформаторы, так же как и линии, могут быть созданы либо из библиотеки стандартных типов (create_transformer), либо с помощью настраиваемых значений (create_transformer_from_parameters).

Пример создания двухобмоточного трансформатора через библиотеку стандартного типа:

trafo = pp.create_transformer(net, hv_bus=bus3, lv_bus=bus4, std_type="25 MVA 110/20 kV v1.4.3 and older", name="Trafo")

Пример создания двухобмоточного трансформатора с помощью настраиваемых значений:

create_transformer_from_parameters(net, hv_bus=0, lv_bus=1, name="trafo1", sn_kva=40, vn_hv_kv=110, vn_lv_kv=10, vsc_percent=10, vscr_percent=0.3, pfe_kw=30, i0_percent=0.1, shift_degree=30)

При определении двухобмоточного трансформатора через библиотеку стандартного типа возможно задание следующих параметров линии:

  1. Обязательные
    • net (pandapowerNet) - имя сети "pandapowerNet" в которой создаётся трансформатор;
    • hv_bus (int) – шина, к которой подключена высокая сторона трансформатора;
    • lv_bus (int) - шина, к которой подключена низкая сторона трансформатора;
    • std_type – используемый стандартный тип трансформатора;
  2. Небязательные
    • name (string, None) – имя трансформатора;
    • tp_pos (int, nan) - текущее положение отпайки трансформатора. По умолчанию принимается средняя позиция (tp_mid);
    • in_service (boolean, True) - “True” для работающих элементов или “False” для отключенных;
    • index (int, None) - принудительно введите индекс. Если «None», выбирается индекс один выше самого высокого уже существующего индекса;
    • max_loading_percent (float) – максимальная токовая загрузка - параметр необходим для задачи оптимизации потокораспределения.

При определении двухобмоточного трансформатора c помощью настраиваемых значений возможно задание следующих параметров трансформатора:

  1. Обязательные
    • net (pandapowerNet) - имя сети "pandapowerNet" в которой создаётся трансформатор;
    • hv_bus (int) – шина, к которой подключена высокая сторона трансформатора;
    • lv_bus (int) - шина, к которой подключена низкая сторона трансформатора;
    • sn_kva (float) – номинальная мощность трансформатора;
    • vn_hv_kv (float) – номинальное напряжение ВН трансформатора;
    • vn_lv_kv (float) – номинальное напряжение НН трансформатора;
    • vscr_percent (float) – активная составляющая напряжения короткого замыкания, выраженное в о.е.;
    • vsc_percent (float) - напряжение короткого замыкания, выраженное в о.е.;
    • pfe_kw (float) – потери в железе, выраженные в кВт;
    • i0_percent (float) - ток холостого хода трансформатора, выраженный в процентах;
  2. Необязательные
    • in_service (boolean, True) - “True” для работающих элементов или “False” для отключенных;
    • parallel (integer) – количество параллельных трансформаторов;
    • shift_degree (float) – угловой сдвиг трансформатора - параметр необходим для расчёта потокораспределения;
    • tp_side (string) – расположение РПН трансформатора (“hv” – на ВН, “lv” – на НН);
    • tp_pos (int, nan) - текущее положение отпайки трансформатора. По умолчанию принимается средняя позиция (tp_mid);
    • tp_mid (int, nan) –положение отпайки трансформатора, равное отношению напряжения ВН трансформатора к НН трансформатора;
    • tp_max (int, nan) – максимальное положение отпайки трансформатора;
    • tp_min (int, nan) – минимальное положение отпайки трансформатора;
    • tp_st_percent (int) – напряжение в процентах, соответствующее изменению положения отпайки трансформатора на одну позицию;
    • index (int, None) - принудительно введите индекс. Если «None», выбирается индекс один выше самого высокого уже существующего индекса;
    • max_loading_percent (float) – максимальная токовая загрузка - параметр необходим для задачи оптимизации потокораспределения.

Трехобмоточный трансформатор (trafo3w)

Трехобмоточные рансформаторы могут быть смоделированы тремя двухобмоточными трансформаторами, соединенными звездой [7]. Трехобмоточный трансоформатор в pandapower осуществляет внутреннее преобразование. Потери холостого хода, определяемые trafo3w.i0_percent и trafo3w.pfe_kw, рассматриваются в трансформаторе на ВН. Напряжения короткого замыкания двухобмоточных трансформаторов рассчитываются с преобразованием соединения в звезду из напряжений короткого замыкания trafo3w.vsc_hv_percent, trafo3w.vsc_mv_percent и trafo3w.vsc_lv_percent, а также их соответствующих активных частей trafo3w.vscr_hv_percent, trafo3w.vscr_mv_percent и trafo3w .vscr_lv_percent. Сопротивления схемы замещения для трех двухобмоточных трансформаторов вычисляются по параметрам паспортной таблицы в соответствии с моделью двухмоторного трансформатора. Загрузка res_trafo3w.loading_percent рассчитывается как максимальная нагрузка трех двухобмоточных трансформаторов. Загрузка эквивалентных двухмоторных трансформаторов рассчитывается либо по отношению к номинальным мощностям trafo3w.sn_lv_kva, trafo3w.sn_mv_kva и trafo3w.sn_hv_kva, либо по отношению к соответствующему номинальному току.


Пример создания трехобмоточного трансформатора через библиотеку стандартного типа:

create_transformer3w(net, hv_bus = 0, mv_bus = 1, lv_bus = 2, name = trafo1, std_type = 63/25/38 MVA 110/20/10 kV)

Пример создания трехобмоточного трансформатора с помощью настраиваемых значений:

create_transformer3w_from_parameters(net, hv_bus=0, mv_bus=1, lv_bus=2, name=trafo1, sn_hv_kva=40, sn_mv_kva=20, sn_lv_kva=20, vn_hv_kv=110, vn_mv_kv=20, vn_lv_kv=10, vsc_hv_percent=10,vsc_mv_percent=11, vsc_lv_percent=12, vscr_hv_percent=0.3, vscr_mv_percent=0.31, vscr_lv_percent=0.32, pfe_kw=30, i0_percent=0.1, shift_mv_degree=30, shift_lv_degree=30)

При определении трехобмоточного трансформатора через библиотеку стандартного типа возможно задание следующих параметров линии:

  1. Обязательные
    • net (pandapowerNet) - имя сети "pandapowerNet" в которой создаётся трансформатор;
    • hv_bus (int) - шина, к которой подключена высокая сторона трансформатора;
    • mv_busм (int) - шина, к которой подключена средняя сторона трансформатора;
    • lv_bus (int) - шина, к которой подключена низкая сторона трансформатора;
    • std_type - используемый стандартный тип трансформатора;
  2. Обязательные
    • name (string) - имя трансформатора;
    • tp_pos (int, nan) - текущее положение отпайки трансформатора. По умолчанию принимается средняя позиция (tp_mid);
    • tap_at_star_point (boolean) - либо РПН находится в нейтрали трансформатора, либо на шине;
    • in_service (boolean) - “True” для работающих элементов или “False” для отключенных;
    • index (int, None) - принудительно введите индекс. Если «None», выбирается индекс один выше самого высокого уже существующего индекса;
    • max_loading_percent (float) - максимальная токовая загрузка - параметр необходим для задачи оптимизации потокораспределения.

При определении трехобмоточного трансформатора c помощью настраиваемых значений возможно задание следующих параметров трансформатора:

  1. Обязательные
    • net (pandapowerNet) - имя сети "pandapowerNet" в которой создаётся трансформатор;
    • hv_bus (int) - шина, к которой подключена высокая сторона трансформатора;
    • mv_bus (int) - шина, к которой подключена средняя сторона трансформатора;
    • lv_bus (int) - шина, к которой подключена низкая сторона трансформатора;
    • vn_hv_kv (float) номинальное напряжение ВН трансформатора;
    • vn_mv_kv (float) номинальное напряжение СН трансформатора;
    • vn_lv_kv (float) номинальное напряжение НН трансформатора;
    • sn_hv_kva (float) - номинальная мощность ВН трансформатора;
    • sn_mv_kva (float) - номинальная мощность СН трансформатора;
    • sn_lv_kva (float) - номинальная мощность НН трансформатора;
    • vsc_hv_percent (float) - напряжение короткого замыкания ВН трансформатора, выраженное в о.е.;
    • vsc_mv_percent (float) - напряжение короткого замыкания СН трансформатора, выраженное в о.е.;
    • vsc_lv_percent (float) - напряжение короткого замыкания НН трансформатора, выраженное в о.е.;
    • vscr_hv_percent (float) - активная составляющая напряжения короткого замыкания ВН трансформатора, выраженное в о.е.;
    • vscr_mv_percent (float) - активная составляющая напряжения короткого замыкания СН трансформатора, выраженное в о.е.;
    • vscr_lv_percent (float) - активная составляющая напряжения короткого замыкания НН трансформатора, выраженное в о.е.;
    • pfe_kw (float) - потери в железе, выраженные в кВт;
    • i0_percent (float) - ток холостого хода трансформатора, выраженный в процентах;
  2. Необязательные
    • shift_mv_degree (float, 0) - угловой сдвиг СН трансформатора - параметр необходим для расчёта потокораспределения;
    • shift_lv_degree (float, 0) - угловой сдвиг НН трансформатора - параметр необходим для расчёта потокораспределения;
    • tp_st_percent (float) - напряжение в процентах, соответствующее изменению положения отпайки трансформатора на одну позицию;
    • tp_st_degree (float) - угловой сдвиг РПН;
    • tp_side (string, None) - расположение РПН трансформатора (“hv” – на ВН, “mv” – на НН, “lv” – на НН);
    • tp_mid (int, nan) - положение отпайки трансформатора, равное отношению напряжения ВН трансформатора к НН трансформатора;
    • tp_min (int, nan) - минимальное положение отпайки трансформатора;
    • tp_max (int, nan) - максимальное положение отпайки трансформатора;
    • tp_pos (int, nan) - текущее положение отпайки трансформатора. По умолчанию принимается средняя позиция (tp_mid);
    • tap_at_star_point (boolean) - либо РПН находится в нейтрали трансформатора, либо на шине;
    • name (string, None) - имя трансформатора;
    • in_service (boolean, True) - “True” для работающих элементов или “False” для отключенных;
    • max_loading_percent (float) - максимальная токовая загрузка - параметр необходим для задачи оптимизации потокораспределения.

выключатель (switch)

Элемент выключателя позволяет моделировать идеальные выключатели. Элемент выключателя соединяет шину switch.bus с элементом switch.element. Тип элемента определяется параметром switch.et и может быть либо второй шиной, либо линией, либо трансформатором. Параметр switch.close указывает переключатель включен или отключен. Включенный шиносоединительный выключатель гальванически соединяет две шины без падения напряжения. В инструментах расчёта сети без явной модели выключателя шиносоединительный выключатель может моделироваться только малым сопротивлением между двумя шинами, это может привести к нежелательным падениям напряжения и проблемам сходимости при расчёте потоков мощности. Модель выключателя pandapower позволяет избежать этой проблемы.

выключатель может соединять либо две шины (bus-bus switch) либо шину с концом линии / трансформатором (bus-element switch).

Пример создания выключателя:

create_switch(net, bus = 0, element = 1, et = b, type =LS)

Параметры функции:

  1. Обязательные
    • net (pandapowerNet) - имя сети "pandapowerNet" в которой создаётся выключатель;
    • bus - шина, к которой подключен выключатель;
    • element - индекс элемента: индекс шины, если et="b", индекс линии, если et="l", индекс трансформатора, если et="t";
    • et - (string): "l" - выключатель между шиной и линией, "t" - выключатель между шиной и трансформатором, "t3" - выключатель между шиной и 3-х обмоточным трансформатором, "b" - выключатель между двумя шинами;
    • closed (boolean, True) - положение выключателя: “False” - открыто, “True” – закрыто;
    • type (int, None) - указывает тип выключателя: «LS» = переключатель нагрузки, «CB» - секционный выключатель, «LBS» выключатель нагрузки или «DS» - разъединитель;
  2. Необязательные
    • name (string, по умолчанию None) – имя выключателя.

Линия передачи DC (dcline)

Линия передачи постоянного тока передает активную мощность между двумя шинами. Передаваемая активная мощность dcline.p_kw уменьшается за счет абсолютных потерь преобразования dcline.p_loss_kw и относительных потерь передачи dcline.p_loss_percent на шине конечного потребителя. Линия постоянного тока моделируется двумя генераторами на обеих шинах, где управление напряжением с реактивной мощностью работает так же, как описано для модели генератора.

Пример создания линии передачи DC:

create_dcline(net, from_bus=0, to_bus=1, p_kw=1e4, loss_percent=1.2, loss_kw=25, vm_from_pu=1.01, vm_to_pu=1.02)

Параметры функции:

  1. Обязательные
    • net (pandapowerNet) - имя сети "pandapowerNet" в которой создаётся линия;
    • from_bus (int) - индекс шины, к которой будет подключена линия с одной стороны;
    • to_bus (int) - индекс шины, к которой будет подключена линия с другой стороны;
    • p_kw - (float) - значение измерения. Для активной мощности Р «кВт», для реактивной Q - «kVar», для напряжения U - «p.u.», для тока I - «A». Генерациязадаётся с плюсом, а нагрузка с минусом;
    • loss_percent - (float) - реднеквадратическое отклонение той же единицы, что и измерение;
    • loss_kw - (int) - идентификатор измерения. Определяет расположение измерения для измерений линии / трансформатора (шина == from_bus: измерение от from_bus, то же для to_bus);
    • vm_from_pu - (int, None) - идентификатор измеренного элемента, если element_type является «line» или «transformer»;
    • vm_to_pu - (int, None) - идентификатор измеренного элемента, если element_type является «line» или «transformer»;
  2. Необязательные
    • index (int, None) - принудительно введите индекс. Если «None», выбирается индекс один выше самого высокого уже существующего индекса;
    • name (str, None) - имя линииж
    • in_service (boolean) - “True” для работающих элементов или “False” для отключенных;
    • max_p_kw (float, по умолчанию NaN) - максимальная активная мощность от шины - параметр необходим для задачи оптимизации потокораспределения;
    • min_q_from_kvar (float, по умолчанию NaN) - минимальная реактивная мощность от шины - параметр необходим для задачи оптимизации потокораспределения;
    • min_q_to_kvar (float, по умолчанию NaN) - минимальная реактивная мощность к шине - параметр необходим для задачи оптимизации потокораспределения;
    • max_q_from_kvar (float, по умолчанию NaN) - макимальная реактивная мощность от шины - параметр необходим для задачи оптимизации потокораспределения;
    • max_q_to_kvar (float, по умолчанию NaN) - макимальная реактивная мощность к шине - параметр необходим для задачи оптимизации потокораспределения.

Импеданс (импеданс)

Элемент сопротивления соединяет две шины с относительным сопротивлением по отношению к номинальной мощности impedance.sn_kva. Сопротивление не обязательно должно быть симметричным. Прямое сопротивление определяется активной частью impedance.rft_pu и реактивной частью impedance.xft_pu, обратное сопротивление impedance.rtf_pu и impedance.xtf_pu.

Параметры функции:

  1. Обязательные
    • net (pandapowerNet) - имя сети "pandapowerNet" в которой создаётся сопротивление;
    • from_bus (int) - индекс шины, к которой будет подключено сопротивление с одной стороны;
    • to_bus (int) - индекс шины, к которой будет подключено сопротивление с другой стороны;
    • r_pu (float) - активная часть сопротивления, выраженная в о.е.;
    • x_pu (float) - реактивная часть сопротивления, выраженная в о.е.;
    • sn_kva (float) - номинальная мощность, выраженная в кВА.

Эквивалент энергорайона (ward / xward)

Эквивалент энергорайона представляет собой комбинацию постоянной полной мощности потребления и постоянным сопротивлением нагрузки [8]. Постоянное сопротивление нагрузки определяется как активная и реактивная потребляемая мощность ward.pz_kw и ward.qz_kvar при номинальном напряжении шины. Постоянная активная и реактивная мощность задаются ward.ps_kw и ward.qs_kvar. Расширенный эквивалент энергорайона включает в себя дополнительный источник напряжения с внутренним сопротивлением [8]. Источник напряжения моделируется как генератор с нулевой активной мощностью и уставкой по напряжению, определяемой параметром xward.vm_pu. Внутреннее сопротивление определяется параметрами xward.r_ohm и xward.x_ohm.

Параметры функции:

  1. Обязательные
    • net (pandapowerNet) - имя сети "pandapowerNet" в которой создаётся эквивалент;
    • bus (int) - шина, к которой подключен эквивалент;
    • ps_kw (float) - активная мощность PQ нагрузки;
    • qs_kvar (float) - реактивная мощность PQ нагрузки;
    • pz_kw (float) - активная мощность нагрузки с постоянным сопротивлением, выраженная в кВт при напряжении 1.0 о.е.;
    • qz_kvar (float) - реактивная мощность нагрузки с постоянным сопротивлением, выраженная в кВт при напряжении 1.0 о.е..

Анализ электрической сети

Рис. 2 - Анализ электрической сети в pandapower

Благодаря возможности управлять настройками расчёта установившегося режима, оптимизации потокораспределения, оценкой состояния и токов коротких замыканий, pandapower обеспечивает все наиболее часто используемые функции статического сетевого анализа. Структура данных pandapower содержит общие параметры паспортной таблицы для удобной параметризации сетевых элементов. Для проведения анализа электрической сети все элементы модели должны быть переведены в их эквивалентное электрическое представление. Этот перевод выполняется путем преобразования внутренней структуры данных на основе элементов в модель узлов и ветвей, как показано на рисунке 2.

Внутренняя модель узлов и ветвей имеет аналогичную структуру как файл PYPOWER, но была расширена для включения параметров, таких как асимметричные сопротивления или постоянная токовая нагрузка. После проведения расчёта установившегося режима, на основе модели узлов и ветвей, полученные результаты распределяются по элементам в соответствии с заданной схемой. Таким образом, результаты также могут быть заданы относительно входных параметров, например, для расчёта нагрузок линий электропередач как отношение максимального допустимого термического тока и фактического тока, возникающего в результате распределения потоков мощности.

расчёт установившегося режима

Рис. 3 - Вычислительная скорость pandapower, PYPOWER и MATPOWER для файлов MATPOWER

Алгоритм расчёта установившегося режима pandapower основан на методе Ньютона-Рафсона [9]. Реализация была первоначально основана на PYPOWER, но была улучшена в отношении надежности расчёта, времени выполнения и удобства использования. Внутренние параметры потокораспределения, такие как тип узла (база, PV или узел PQ) или преобразования в о.е., выполняются автоматически с помощью pandapower. Это улучшает удобство пользователя и снижает риск несвязных входных данных. Библиотека pandapower предлагает три разных метода для инициализации начальных приближений комплексного вектора напряжения для установившегося режима в электрической сети переменного тока:

  • результаты предыдущего расчёта установившегося режима;
  • расчёт установившегося режима для случая постоянного тока;
  • алгоритм плоского старта.

Инициализация с использованием результатов расчёта потокораспределения для случая постоянного тока рекомендуется использовать при расчёте сложнозамкнутых сетей, где могут быть большие разности углов напряжений между шинами, что может привести к расхождению итерационного процесса в случае плоского старта. С другой стороны, в радиальных распределительных сетях опорный угол напряжения диктуется внешней сетью, так что сдвиги углов соответствующих напряжений на трансформаторах не влияют на результаты расчёта потокораспределения. Вот почему pandapower дает возможность пренебрегать углами напряжений, чтобы обеспечить более быструю и надежную сходимость в радиальных распределительных сетях. Дополнительный шаг преобразования, который необходим для преобразования модели pandapower в модель узлов и ветвей, и последующего отображения результатов. Это вызывает дополнительное потребление ресурсов по сравнению с программами, которые работают непосредственно на модели узлов и ветвей, такие как MATPOWER или PYPOWER.

С другой стороны, некоторые части алгоритма решения pandapower были ускорены с использованием оперативного компилятора (jit) numba [10]. Чтобы определить разницу вычислительного времени, на рисунке 3 показано время вычисления для разных стандартных файлов MATPOWER. Можно увидеть, что pandapower быстрее, чем PYPOWER во всех случаях из-за ускоренного jit построения матрицы Якоби и других аспектов метода [1]. Можно также заметить, что, хотя расходы на преобразование занимают более половины времени вычисления для небольших сетей, его доля значительно уменьшается для крупных сетей. В то время как pandapower медленнее, чем MATPOWER для небольших сетей, она быстрее для сетей среднего и крупного масштаба, даже включая время необходимое на преобразование в модель узлов и ветвей.

По умолчанию преобразование в модель узлов и ветвей выполняется перед каждым расчётом установившегося режима. Однако, если несколько последовательных расчётов установившихся режимов выполняются для одной и той же сети, которые отличаются только значениями узловых мощностей, то повторное преобразование становится излишним. По этой причине pandapower предлагает возможность повторно использовать модель узлов и ветвей и узловые точки матрицы проводимости из предыдущих расчётов потоков мощности. Эта функция позволяет ускорить работу приложений, таких как квазистатическое моделирование временных рядов или оптимизация эвристической мощности. В дополнение к алгоритму Newton-Raphson, применяемого по умолчанию, pandapower также обеспечивает реализацию прокрутки назад / вперед [11].

Пример расчётов установившегося режима представлен здесь.

Оптимизация потоков мощности

pandapower позволяет решать проблемы оптимальных потоков мощности с переменным и постоянным током (OPF) через сопряжение PYPOWER. Фиксированные ограничения задаются как максимальная загрузка трансформаторов и линий вместо абсолютных пределов для потоков мощности. Ограничения узлов включают в себя максимальную и минимальную величину напряжения. Пределы активной и реактивной мощности могут быть определены для PV / slack-элементов, таких как внешние сети и генераторы, но также и для PQ-элементов, таких как нагрузки и статические генераторы.

Оценка состояния

pandapower включает в себя модуль оценки состояния, который позволяет оценить электрическое состояние сети, имея дело с неточностями и ошибками в данных измерений. Метод оптимизации по методу взвешенных наименьших квадратов минимизирует разницу средневзвешанного квадрата разницы между измеренными значениями и соответствующими уравнениями потоков мощности [11]. pandapower поддерживает измерения шины, линии и трансформатора. Измерения шины могут быть заданы для значений напряжения или активной и реактивной мощности. Измерения на линиях или трансформаторах могут быть заданы для активных и реактивных потоков мощности на обоих концах ветви.

Оценка состояния может не сходиться, если измерения содержат плохие данные. Поэтому перед процессом оценки необходимо удалить плохие данные. Эта проблема решена в pandapower с помощью тестирования χ2 и нормированным тестом остатков [11]. Тест χ2 способен определить вероятность того, что плохие измерения существуют в наборе измерений, или если топология сети не соответствует данным измерений. Нормализованный тест остатков может принимать информацию об испытании χ2, вычислять нормированные остатки и удалять измерение с самым высоким остатком. Цикл повторяется до тех пор, пока не пройдет проверка плохих данных или никакие измерения не будут удалены.

Для возможности запуска функции оценки состояния требуется некоторое минимально необходимое число каналов данных измерений:

[math] m_{min} = 2 n -k [/math]

где [math]n [/math] число узлов сети; [math]k[/math] - количество базисных узлов.

Для обеспечения хорошего качества расчётов требуются избыточные каналы данных измерений. Приблизительно количество канало данных ,с учётом избыточности можно оценить как:

[math] m \approx 4 \cdot n [/math]

Каждое измеритеьное устройство имеет различную точность измерений. Поэтому при выполнении оценки состояния каждому измерению присваивается значение точности в виде стандартного отклонения. Типичные погрешности измерения составляют: 1% для измерений напряжения и 1-3% для измерения мощности.

Задание каналов данных измерений

В оценке состояния используются следующие типы элементов:

  • “v” измерения напряжения (in per-unit)
  • “p” измерения активной мощности, [кВт];
  • “q” измерения реактивной мощности, [квар];
  • “i” измерения тока в линиях электропередачи [А].

Типы элементов для которых можно задать каналы данных измерений:

  • “bus” узлы (шины);
  • “line” линия электропередачи;
  • “transformer” трансформаторы.
Тип элемента Тип канала данных измерений
Узел u, p, q
Линия электропередачи i, p, q
Трансформатор i, p, q

Функция “create_measurement” создания канала данных измерений определена следующим образом:

pandapower.create.create_measurement(net, meas_type, element_type, value, std_dev, bus, element=None, check_existing=True, index=None, name=None)

Обязательные входные аргументы:

  • meas_type (string) - Тип канала данных измерений. Возможные строковые значения “v”, “p”, “q”, “i”.
  • element_type (string) - Тип элемента на котором выполняется измерение. Возможные строковые значения: “bus”, “line”, “transformer”.
  • value (float) - Численное значение измерения. Генерация в узлах задаётся с плюсом, а нагрузка с минусом.
  • std_dev (float) - Величина стандартного отклонения, в тех же единицах измерения, что и числовое значение "value".
  • bus (int) - Номер узла "index". Параметр определяет положения измерения для линий/трансформаторов (bus == from_bus: measurement at from_bus; same for to_bus). The bus can also be “from” or “to” if the element_type is “line” or “hv”/”lv” if “transformer”.
  • element (int, None) - Индекс измеряемого элемента, если параметр "element_type" имеет значение “line” или “transformer”.

Дополнительные, необязательные, параметры:

  • check_existing (bool) - Проверка и замена плохих данных измерений. Установка значения false повышает производительность, но может приводить к использованию в оценке состояния плохих данных.
  • name (str, None) - Название канала измерений.

Выходные аргументы:

  • (int) Номер измерения.

Запуск оценки состояния

Оценка состояния может быть использована с помощью функции-обертки «estimate», что предотвращает необходимость использования объекта и функций класса "state_estimation". Его можно импортировать из "evaluation.state_estimation" .

pandapower.estimation.estimate(net, init='flat', tolerance=1e-06, maximum_iterations=10, calculate_voltage_angles=True, ref_power=1000000.0)

Входные аргументы:

  • net - Имя сети.
  • init (string) - Выбор алгоритма оценки стартовых значений напряжений. Значение по умолчанию flat.
    1. "flat" Плоский старт устанавливает значение модуля 1.0 о.е. и угла для всех узлов.
    2. "results" используются значения из расчёта установившегося режима res_bus_est, если доступно.
    3. "slack" В качестве начальных приближений напряжений используется напряжения базисного узла.

Необязательные входные аргументы:

  • tolerance - (float) - Критерий остановки итерационного процесса. По умолчанию установлено значение 1e-6.
  • maximum_iterations - (integer) - Максимально количество итераций. По умолчанию установлено значение 10.
  • calculate_voltage_angles - (boolean) - Учитывать абсолютные углы напряжений и фазовые сдвиги в трансформаторах, если параметр init установлен в значение slack. По умолчанию True.

Результат выполнения функции:

  • successful (boolean) - Возвращает true, если оценка состояния выполнена успешно.


Пример запуска оценки состояния
pp.create_measurement(net, "v", "bus", 1.006, .004, узел1)      # V в узле 1
pp.create_measurement(net, "v", "bus", 0.968, .004, узел2)      # V в узле 2

pp.create_measurement(net, "p", "bus", -501, 10, узел2)         # P в узле 2
pp.create_measurement(net, "q", "bus", -286, 10, узел2)         # Q в узле 2

pp.create_measurement(net, "p", "line", 888, 8, bus=узел1, element=line1)    # Pline (узел 1 -> узел 2) из узла 1
pp.create_measurement(net, "p", "line", 1173, 8, bus=узел1, element=line2)   # Pline (узел 1 -> узел 3) из узла 1
pp.create_measurement(net, "q", "line", 568, 8, bus=узел1, element=line1)    # Qline (узел 1 -> узел 2) из узла 1
pp.create_measurement(net, "q", "line", 663, 8, bus=узел1, element=line2)    # Qline (узел 1 -> узел 3) из узла 1

После подготовки данных каналов измерений можно запустить расчёт оценки состояния:

success = estimate(net, init="flat")
V, delta = net.res_bus_est.vm_pu, net.res_bus_est.va_degree

Результирующие значения модулей напряжений содержаться в переменной V, углы напряжений delta, и индикатор успешносит расчёта success. Значения узловых мощностей хранятся в таблицах net.res_bus_est.p_kw и net.res_bus_est.q_kvar. Параметры по линиям доступны в таблице res_line.

Если необходмсо выполнить проверку данных измеренйи на наличие плохих измерений, то можно воспользоваться следующим кодом:

success_rn_max = remove_bad_data(net, init="flat")
V_rn_max, delta_rn_max = net.res_bus_est.vm_pu, net.res_bus_est.va_degree

В случае, если необходимо просто знать, есть ли вероятность ошибок (возможно, вероятность неисправности может быть скорректирована), можно отдельно выполнить тест X-квадрат. Если тест обнаруживает возможность cбоях в данных, то значение переменной члена класса bad_data_present будет принимать истинное значение, которое передается в выходную переменную success_chi2:

success_chi2 = chi2_analysis(net, init="flat")

<div/> <div/>

Расчёт тока короткого замыкания в соответствии со стандартом IEC 60909

Стандарт IEC 60909 [12] определяет правила для расчёта некоторых характерных значений короткого замыкания, таких как начальный ток короткого замыкания, ударный ток короткого замыкания или длительный ток короткого замыкания. В pandapower реализован расчёт начальных токов короткого замыкания для симметричных трехфазных коротких замыканий, а также двухфазных коротких замыканий. Необходимые поправочные коэффициенты реализуются в pandapower в соответствии со стандартом и автоматически применяются при преобразовании в модель узлов и ветвей. Дополнительные входные параметры, необходимые для расчёта внутренних сопротивлений внешних сетей или синхронных генераторов, определяются в таблицах элементов вместе с параметрами по умолчанию.

Описание интерфейса функций

Функция для расчёта тока короткого замыкания:

pandapower.shortcircuit.calc_sc(net, fault='3ph', case='max', lv_tol_percent=10, topology='auto', ip=False, ith=False, tk_s=1.0, kappa_method='C', r_fault_ohm=0.0, x_fault_ohm=0.0, branch_results=False)
  1. Входные аргументы
    • net (pandapowerNet) pandapower Network
    • fault (string, 3ph) - вид короткого замыкания.
      1. “3ph” - трёхфазное короткое замыкание.
      2. “2ph” - двухфазное короткое замыкание.
      3. “1ph” - однофазное короткое замыкание.
    • case (string, “max”)
      1. “max” - расчёт максимального тока.
      2. “min” - расчёт минимального тока.
    • lv_tol_percent (int, 10) - допуск по напряжению в низковольтных сетях.
      1. 6 для 6% допуска
      2. 10 для 10% допуска
    • ip (bool, False) - Если значение True, то выполняется расчёт апериодической составляющей тока короткого замыкания.
    • Ith (bool, False) - Если True, то выполняется расчёт теплового тока короткого замыкания.
    • topology (string, “auto”) define option for meshing (only relevant for ip and ith)
      1. “meshed” - Расчёт выполняет для сложнозамкнутой сети.
      2. “radial” - Расчёт выполняет для радиальной сети.
      3. “auto” - Для каждого узла выполняется топологический анализ для оценки путей протекания тока короткого замыкания.
    • tk_s (float, 1) failure clearing time in seconds (only relevant for ith)
    • r_fault_ohm (float, 0) - Активное сопротивление в точке корокткого замыкания, [Ом].
    • x_fault_ohm (float, 0) - Реактивное сопротивление в точке корокткого замыкания, [Ом].
    • consider_sgens (bool, True) - Следует ли учитывать подпитку тока короткого замыкания от статических генераторов.
  2. Результирующие таблицы.
    • res_bus_sc - Таблица с результатми расчёта по узлам.
      1. ikss_ka - Расчётный ток короткого замыкания, [кА].
      2. ip_ka - Расчётное значение апериодической составляющей, [кА].
      3. ith_ka - Расчётное значение теплового тока короткого замыкания, [кА].
    • res_line_sc - Таблица с результатми расчёта по линиям электрпередачи. Показывает максимальный ток по линиям.
    • res_trafo_sc - Таблица с результатми расчёта по трансформаторам. Показывает максимальный ток.

Топологический анализ сети

pandapower предоставляет возможность исследования графа с использованием библиотеки Python NetworkX [13], предоставляя возможность переводить сети pandapower в графики NetworkX. Когда сеть транслируется в абстрактный граф, все анализы графов, реализованные в библиотеке NetworkX, могут использоваться для анализа структуры сети. Затем можно, например, найти подключенные компоненты или циклы в графе и перенести результаты в pandapower. Длина линии может быть преобразована как вес ребра на графе, так что можно найти кратчайший путь между двумя шинами или измерить расстояния между шинами в сети. Перевод сети в граф также можно настроить в зависимости от варианта использования. Например, строки с отключенными выключателями по умолчанию не передаются в графы, так как между этими узлами нет электрического соединения. Кроме того, pandapower также предоставляет некоторые предопределенные алгоритмы для решения общих проблем исследования графа в электрических сетях, таких как поиск всех неиспользуемых шин или поиск гальванически подключенных шин.

Алгоритмы топологического анализа, включённые в pandapower:

  1. calc_distance_to_bus - Алгоритм расчёта кратчайшего расстояние между шиной источника и всеми подключенными к ней шинами.
  2. connected_component - Находит все шины в графике NetworkX, которые подключены к определенной шине.
  3. connected_components - Находит все связанные острова в электрической сети.
  4. unsupplied_buses - Находит все шины не подключенные к базисному узлу (внешней сети).
Описание интерфейса функций
pandapower.topology.calc_distance_to_bus(net, bus, respect_switches=True, nogobuses=None, notravbuses=None)
  1. Входные аргументы:
    • net (pandapowerNet) - Анализируемая электрчиеская сеть.
    • bus (integer) - Индекс в таблице bus стартовой шины.
    • respect_switches (boolean, True) - Опционально. Если значение True, то Рассматриваются только влюченные ветви.
  2. Выходные аргументы
    • dist - Возвращает pandas series которая содержит все расстояния от стартовой шины до всех подключенных шин.
pandapower.topology.connected_component(mg, bus, notravbuses=[])
  1. Входные аргументы
    • mg (NetworkX graph) - NetworkX граф или MultiGraph, который представляет электрическую сеть.
    • notravbuses (set) - Опционально. Индексы линий, которые не учитыаются при анализе.
  2. Выходные аргументы
    • cc (generator) - Возвращает генератор, который содержит все группы узлов соединённых между собой.
pandapower.topology.connected_components(mg, notravbuses=set([]))
pandapower.topology.unsupplied_buses(net, mg=None, in_service_only=False, slacks=None, respect_switches=True)
  1. Входные аргументы
    • net (pandapowerNet) - Электрчиеская сеть.
    • mg (NetworkX graph) - Опционально. Граф NetworkX представляющий электрическую сеть.
    • in_service_only (boolean, False) - Опционально. Учитываются только включенные узлы.
    • slacks (set, None) - Опционально. Список узлов, которые считаются базисными узлами. Если нет, то учитываются только узлы отмеченные как внешняя сеть ext_grid.
    • respect_switches (boolean, True) - Опционально. Как рассматривать выключатели, только в случае отсутствия графа NetworkX в переменной mg.
  2. Выходные аргументы
    • ub (set) - Возвращает pandas series которая содержит все неподключенные шины к базисному узлу.

Список использованных источников

  1. A. Scheidler, L. Thurner, and M. Braun, “Heuristic optimisation for automated distribution system planning in network integration studies,” IET Renewable Power Generation, vol. 12, no. 5, pp. 530–538, April 2018.
  2. J.-H. Menke, J. Hegemann, S. Gehler, and M. Braun, “Heuristic monitoring method for sparsely measured distribution grids,” International Journal of Electrical Power & Energy Systems, vol. 95
  3. H. Wang, M. Kraiczy, S. Wende-von Berg et al., “Reactive power coordination on strategies with distributed generators in distribution networks,” in . 1st International Conference on Large-Scale Grid Integration of Renewable Energy in India, September 2017
  4. W. McKinney, “pandas: a foundational python library for data analysis and statistics,” Python for High Performance and Scientific Computing, 2011.
  5. Оффициальный сайт pandapower.
  6. “IEEE recommended practice for industrial and commercial power systems analysis (brown book),” IEEE Std 399-1997, Aug 1998.
  7. 7,0 7,1 7,2 J. B. Ward, “Equivalent circuits for power-flow studies,” Transactions of the American Institute of Electrical Engineers, vol. 68, no. 1, pp. 373–382, July 1949.
  8. 8,0 8,1 J. J. Grainger and W. D. Stevenson, Power system analysis. McGrawHill, 1994.
  9. S. K. Lam, A. Pitrou, and S. Seibert, “Numba: a LLVM-based Python JIT compiler,” 2015.
  10. J.-H. Teng, “A direct approach for distribution system load flow solutions,” IEEE Transactions on Power Delivery, vol. 18, no. 3, pp. 882– 887, July 2003.
  11. 11,0 11,1 11,2 A. Abur and A. Exposito, ´ Power System State Estimation: Theory and Implementation, ser. Power Engineering (Willis). CRC Press, 2004.
  12. “IEC 60909-0:2016: Short-circuit currents in three-phase a.c. systems - part 0: Calculation of currents,” International Standard, 2016.
  13. A. A. Hagberg, D. A. Schult, and P. J. Swart, “Exploring network structure, dynamics, and function using NetworkX,” in Proceedings of the 7th Python in Science Conference (SciPy2008), Pasadena, CA USA, Aug. 2008, pp. 11–15.