Влияние напряжения базисного узла на потери в сети — различия между версиями
Windsl (обсуждение | вклад) м |
Windsl (обсуждение | вклад) м |
||
Строка 152: | Строка 152: | ||
[[Файл:Зависимость продольных потерь от напряжения базы 9241pegase IEEE.jpg|мини|left|700px|Результаты расчёта продольных потерь мощности для 9241pegase IEEE тестовой схемы.]] | [[Файл:Зависимость продольных потерь от напряжения базы 9241pegase IEEE.jpg|мини|left|700px|Результаты расчёта продольных потерь мощности для 9241pegase IEEE тестовой схемы.]] | ||
− | |||
[[Категория:Pandapower]] | [[Категория:Pandapower]] |
Версия 20:21, 12 декабря 2018
В статье представлены результаты расчётов установившихся режимов с целью оценки влияния напряжения базисного узла на потери мощности в электрической сети. Расчёты выполнены с использованием библиотеки 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):
# Получаем выборку уникальных меток интервалов
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(singleNet +'.jpg', dpi=300)
Результаты расчётов