Влияние напряжения базисного узла на потери в сети — различия между версиями

Материал из Wiki Power System
Перейти к: навигация, поиск
(Описание расчётов)
(Функция создания сценариев изменения параметров в узлах нагрузки)
 
(не показано 7 промежуточных версий этого же участника)
Строка 1: Строка 1:
В статье представлены результаты расчётов [[Установившийся режим|установившихся режимов]] с целью оценки влияния напряжения [[Балансирующий узел|базисного узла]] на потери мощности в [[Электрическая сеть|электрической сети]]. Расчёты выполнены с использованием библиотеки [[pandapower]].
+
В статье представлены результаты расчётов [[Установившийся режим|установившихся режимов]] с целью оценки влияния напряжения [[Балансирующий узел|базисного узла]] на потери мощности в [[Электрическая сеть|электрической сети]]. Расчёты выполнены с использованием библиотеки [[pandapower]]. Для постороения графиков использована библиотека [https://seaborn.pydata.org seaborn].
  
 
= Описание расчётов =
 
= Описание расчётов =
  
 +
== Подключение библиотек ==
 
На первом этапе расчётов необходимо подключить все необходимые библиотеки:
 
На первом этапе расчётов необходимо подключить все необходимые библиотеки:
  
Строка 20: Строка 21:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 +
== Функция для запуска и настройки расчётов ==
 
Далее выполним расчёт установившихся режимов для различных [[Тестовые схемы|тестовых схем IEEE]], которые есть в комплексте поставки библиотеки pandapower.
 
Далее выполним расчёт установившихся режимов для различных [[Тестовые схемы|тестовых схем IEEE]], которые есть в комплексте поставки библиотеки pandapower.
  
Строка 46: Строка 48:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Функция для расчёта установившихся режимов с различными [[СХН]] в узлах и для различных значений напряжения [[Балансирующий узел|базисного узла]] выглядит следующим образом:
+
== Функция создания сценариев изменения параметров в узлах нагрузки ==
 +
 
 +
Функция для расчёта установившихся режимов с различными [[Учёт статических характеристик нагрузки в Pandapower|статическими характеристиками нагрузки]] в узлах и для различных значений напряжения [[Балансирующий узел|базисного узла]] выглядит следующим образом:
  
 
<syntaxhighlight lang="python" >
 
<syntaxhighlight lang="python" >
Строка 86: Строка 90:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 +
== Функция расчёта суммарных потерь мощности ==
 
Расчёт суммарных продольных потерь мощности в сети выполнен следующим образом:
 
Расчёт суммарных продольных потерь мощности в сети выполнен следующим образом:
  
Строка 129: Строка 134:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
Функция для визуализации полученных результатов расчётов.
+
== Функция для визуализации полученных результатов расчётов ==
  
 
<syntaxhighlight lang="python" >
 
<syntaxhighlight lang="python" >
 
def plotProfi(inTbl):
 
def plotProfi(inTbl):
 +
    path = "" #Здесь можно указать путь до папки, относительно каталога со скриптом
 
     # Получаем выборку уникальных меток интервалов
 
     # Получаем выборку уникальных меток интервалов
 
     netSeries = pd.unique(inTbl[['Сеть']].values.ravel('K'))     
 
     netSeries = pd.unique(inTbl[['Сеть']].values.ravel('K'))     
Строка 138: Строка 144:
 
         g = sns.lmplot(x="Напряжение", y="Сумм. потери",col="Уровень нагрузки", hue="Режим",col_wrap=2,
 
         g = sns.lmplot(x="Напряжение", y="Сумм. потери",col="Уровень нагрузки", hue="Режим",col_wrap=2,
 
                       data=inTbl[inTbl['Сеть']==singleNet],fit_reg=False)             
 
                       data=inTbl[inTbl['Сеть']==singleNet],fit_reg=False)             
         g.savefig(singleNet +'.jpg', dpi=300)
+
         g.savefig(path + singleNet +'.jpg', dpi=300)
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 
= Результаты расчётов =
 
= Результаты расчётов =
 +
Результаты расчёта продольных потерь мощности для 14 IEEE тестовой схемы.
 +
[[Файл:Зависимость продольных потерь от напряжения базы 14 IEEE.jpg|700px|Результаты расчёта продольных потерь мощности для 14 IEEE тестовой схемы.]]
  
[[Файл:Зависимость продольных потерь от напряжения базы 14 IEEE.jpg|мини|left|700px|Результаты расчёта продольных потерь мощности для 14 IEEE тестовой схемы.]]
+
Результаты расчёта продольных потерь мощности для 33bw IEEE тестовой схемы.
 +
[[Файл:Зависимость продольных потерь от напряжения базы 33bw IEEE.jpg|700px|Результаты расчёта продольных потерь мощности для 33bw IEEE тестовой схемы.]]
  
[[Файл:Зависимость продольных потерь от напряжения базы 33bw IEEE.jpg|мини|left|700px|Результаты расчёта продольных потерь мощности для 33bw IEEE тестовой схемы.]]
+
Результаты расчёта продольных потерь мощности для 118 IEEE тестовой схемы.
 +
[[Файл:Зависимость продольных потерь от напряжения базы 118 IEEE.jpg|700px|Результаты расчёта продольных потерь мощности для 118 IEEE тестовой схемы.]]
  
 +
Результаты расчёта продольных потерь мощности для 9241pegase IEEE тестовой схемы.
 +
[[Файл:Зависимость продольных потерь от напряжения базы 9241pegase IEEE.jpg|700px|Результаты расчёта продольных потерь мощности для 9241pegase IEEE тестовой схемы.]]
  
[[Файл:Зависимость продольных потерь от напряжения базы 118 IEEE.jpg|мини|left|700px|Результаты расчёта продольных потерь мощности для 118 IEEE тестовой схемы.]]
+
= Файлы для загрузки =
  
[[Файл:Зависимость продольных потерь от напряжения базы 9241pegase IEEE.jpg|мини|left|700px|Результаты расчёта продольных потерь мощности для 9241pegase IEEE тестовой схемы.]]
+
[[:Файл:Зависимость суммарных потерь мощности в сети от напряжения базисного узла.7z|Файл со скриптом для Jupiter NoteBook.]]
  
[[Категория:Статьи]]
 
 
[[Категория:Pandapower]]
 
[[Категория:Pandapower]]

Текущая версия на 22:13, 5 января 2019

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

Описание расчётов

Подключение библиотек

На первом этапе расчётов необходимо подключить все необходимые библиотеки:

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import copy

import pandas as pd
import pandapower as pp
import pandapower.networks as pn

#Настройки отрисовки графиков
sns.set(style="whitegrid")
plt.rcParams['figure.figsize'] = (14, 6)

Функция для запуска и настройки расчётов

Далее выполним расчёт установившихся режимов для различных тестовых схем IEEE, которые есть в комплексте поставки библиотеки pandapower.

#Набор напряжений базисного узла для оценки
voltage = np.array([0.95, 0.975, 1.0,1.025,1.05,1.075,1.1,1.125,1.15,1.175])
#Тестовые схемы
NetCases = [
    (pn.case14(),'14 IEEE'),
    (pn.case30(),'30 IEEE'),
    (pn.case33bw(),'33bw IEEE'),
    (pn.case57(),'57 IEEE'),
    (pn.case118(),'118 IEEE'),
    (pn.case300(),'300 IEEE'),
    (pn.case1354pegase(),'1354pegase IEEE'),
    (pn.case9241pegase(),'9241pegase IEEE')
]
#Создание шаблона таблицы для хранения результатов
tbl=pd.DataFrame(columns=['Сеть','Режим','Сумм. потери','Напряжение','Уровень нагрузки'])
#Расчёты режимов
for net, nameNet in NetCases:
    tmp = calcDifferentSHN(net,nameNet) 
    tbl = pd.merge(tbl, tmp,  how = 'outer')
#Отрисовка результатов
plotProfi(tbl)

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

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

def calcDifferentSHN(inNet,NetName):
    #Виды СХН рассматриваемых в расчётах
    cases = [
        (0,0,'I:0 %; Z:0 %'),
        (0,50,'I:0 %; Z:50 %'),
        (50,0,'I:50 %; Z:0 %'),
        (25,25,'I:25 %; Z:25 %'),
        (0,100,'I:0 %; Z:100 %'),
        (100,0,'I:100 %; Z:0 %'),
    ]
    #Уровни нагрузки, принятые в расчётах
    LoadCases =[
        (0.25,'S: 25 %'),
        (0.50,'S: 50 %'),
        (0.75,'S: 75 %'),
        (1.00,'S: 100 %')
    ]
    
    prof=pd.DataFrame(columns=['Режим','Сумм. потери','Напряжение','Уровень нагрузки'])
    for I, Z, nameGrid in cases:
        inNet.load['const_i_percent']=I
        inNet.load['const_z_percent']=Z
        tmpNet = copy.deepcopy(inNet)
        for s, nameS in LoadCases:
            tmpNet.load['p_kw']   = s * inNet.load['p_kw'] 
            tmpNet.load['q_kvar'] = s * inNet.load['q_kvar']  
            tmpNet.gen['p_kw']    = s * inNet.gen['p_kw']  
            tmp = calcDifferentVoltageBase(tmpNet,voltage,nameGrid)
            tmp['Уровень нагрузки'] = nameS
            #print(prof[prof['Уровень нагрузки']==nameS].head(10))
            prof = pd.merge(prof, tmp,  how = 'outer')
            
    outTable = prof
    outTable['Сеть'] = NetName
    return outTable

Функция расчёта суммарных потерь мощности

Расчёт суммарных продольных потерь мощности в сети выполнен следующим образом:

def calcDifferentVoltageBase(inNet,voltage,rgmName):    
    prof = np.empty(len(voltage))
    for i, v in enumerate(voltage):
        inNet.ext_grid[['vm_pu']]= v
        pp.runpp(net=inNet, max_iteration=1000)                
        prof[i] = calcSumLosses(inNet)
    dtAnanlise=pd.DataFrame(columns=['Режим','Сумм. потери','Напряжение'])
    dtAnanlise['Напряжение'] = voltage
    dtAnanlise['Сумм. потери'] = prof
    dtAnanlise['Режим'] = rgmName
    return dtAnanlise

Суммарные продольные потери мощности по группам сетевых элементов определены в следующих функциях:

def calcSumLosses(inNet):
    #Расчёт суммарных продольных потерь мощности
    dP1 = calcLossesTrafo(inNet)
    dP2 = calcLossesLine(inNet)     
    dP = dP1 + dP2
    return dP

def calcLossesTrafo (inNet):
    #Расчёт суммарных продольных потерь мощности в трансформаторах
    sum2W = inNet.res_trafo['pl_kw'].sum()
    sum3W = inNet.res_trafo3w['pl_kw'].sum()
    sum = sum2W + sum3W
    return sum

def calcLossesLine(inNet):
    #Расчёт суммарных продольных потерь в линиях электропередачи
    return inNet.res_line['pl_kw'].sum()

def calcTransportPower(inNet):
    #Расчёт суммарной нагрузки в сети
    dP = inNet.res_load['p_kw'].sum()
    return dP

Функция для визуализации полученных результатов расчётов

def plotProfi(inTbl):
    path = "" #Здесь можно указать путь до папки, относительно каталога со скриптом
    # Получаем выборку уникальных меток интервалов
    netSeries = pd.unique(inTbl[['Сеть']].values.ravel('K'))     
    for singleNet in netSeries:        
        g = sns.lmplot(x="Напряжение", y="Сумм. потери",col="Уровень нагрузки", hue="Режим",col_wrap=2,
                       data=inTbl[inTbl['Сеть']==singleNet],fit_reg=False)            
        g.savefig(path + singleNet +'.jpg', dpi=300)

Результаты расчётов

Результаты расчёта продольных потерь мощности для 14 IEEE тестовой схемы. Результаты расчёта продольных потерь мощности для 14 IEEE тестовой схемы.

Результаты расчёта продольных потерь мощности для 33bw IEEE тестовой схемы. Результаты расчёта продольных потерь мощности для 33bw IEEE тестовой схемы.

Результаты расчёта продольных потерь мощности для 118 IEEE тестовой схемы. Результаты расчёта продольных потерь мощности для 118 IEEE тестовой схемы.

Результаты расчёта продольных потерь мощности для 9241pegase IEEE тестовой схемы. Результаты расчёта продольных потерь мощности для 9241pegase IEEE тестовой схемы.

Файлы для загрузки

Файл со скриптом для Jupiter NoteBook.