Таблица 5.19 – Оптимальный режим сети при максимальных нагрузках
№ п/ст | Приведенные напряжения к ступени 110 кВ | Генерируемые мощности | |
активная, кВА | реактивная, кВА | ||
28 | 113,8 | - | 46283 |
2 | 113,3 | - | 40563 |
6 | 114,1 | - | 15621 |
32 | 113,1 | - | 10159 |
38 | 113,2 | - | 16105 |
46 | 113,8 | - | 6258 |
37 | 113,9 | - | 4106 |
40 | 113,5 | - | 12223 |
44 | 113,9 | - | 28412 |
34 | 114,0 | - | 16933 |
33 | 114,1 | - | 26122 |
20 | 113,4 | - | 47731 |
31 | 113,8 | - | 15303 |
43 | 113,7 | - | 116697 |
42 | 113,9 | - | 15105 |
41 | 113,9 | - | 68251 |
ТЭЦ-1 | 114,7 | 16250 | 7200 |
ТЭЦ-2 | 115,0 | 34120 | 14105 |
Проведя расчет оптимального режима сети ОАО "ММК им. Ильича" при максимальных нагрузках, было получено минимальное значение потерь активной мощности в сети ΔРопт=89320 кВт. Эффект разработанного программного обеспечения оценивается по снижению потерь активной мощности на величину
кВт.Выводы
Разработанное программное обеспечение позволяет решить комплекс проблем, связанных с оптимальным распределением реактивной мощности по сети.
Разработанная адаптивная система управления позволяет осуществлять постоянный контроль над нагрузками подстанций и конфигурацией сети, оперативно реагировать на какие-либо изменения и производить точный расчет для нового режима.
Внедрение представленного комплекса, состоящего из программного обеспечения и адаптивной системы управления, на любое предприятие с любой сложно замкнутой сетью, в данном случае, на ОАО "ММК им. Ильича" позволяют:
значительно уменьшить потери энергии;
поддерживать постоянный уровень напряжения у приемного конца сети;
значительно уменьшить денежные затраты на потребление и генерацию реактивной мощности.
Минимум аппаратного обеспечения, необходимого для информационного режима работы адаптивной системы управления, и совместимость системы с любым оборудованием, уже установленного на подстанциях, позволяет сделать вывод о целесообразности применения разработанного программного обеспечения на ОАО "ММК им. Ильича" и других крупных промышленных предприятий.
Перечень ссылок
1. В.Н. Костин.: Оптимизационные задачи электроэнергетики: Учеб. пособие. – СПб.: СЗТУ, 2003 – 120с.
2. В.Г. Карманов. Математическое программирование. – М.: Наука, 1980 – 256с.
3. Дж. Деннис, Р. Шнабель. Численные методы безусловной оптимизации и решения нелинейных уравнений. – М.: Мир, 1988 – 440с.
4. З.Н. Бененсон, М.Р. Елистратов, Л.К. Ильин и др. Моделирование и оптимизация на ЭВМ радиоэлектронных устройств. – М.: Радиосвязь, 1981 – 272с.
5. С. Гилл, У. Мюррей. Численные методы условной оптимизации. – М.: Мир, 1977 – 339с.
6. Васильев С.П. Численные методы решения экстремальных задач. – М.: Наука, 1980 – 518с.
7. И.Т. Черноруцкий. Методы оптимизации в теории управления, С.-П.: Питер, 2004 – 226с.
8. В.Е. Болконин, П.И. Чинаев. Анализ и синтез систем автоматического управления на ЭВМ. Алгоритмы и программы. – М.: Радио и связь, 1986 – 248с.
9. В.Н. Костин, Е.В. Распопов, Е.А. Родченко. Передача и распределение электроэнергии: Учеб. пособие. – СПб.: СЗТУ, 2003 – 147с.
10. Барзам А.Б. Системная автоматика. – М.: Энергоатомиздат, 1989. – 446с.
11. Баркан Я.Д., Орехов Л.А. Автоматизация энергосистем: учебное пособие для студентов вузов. – М.: Высш. школа, 1981. – 271с.
12. А. А. Черносвитов. Курс MCSD Visual C++ 6.0 и MFC, С.-П.: Питер, 2000 – 554с.
13. Веников В.А. Управление переходными режимами в электрических системах. – М.: Высшая школа, - 1972. – 352с.
Приложение А
Программа расчета оптимальных режимов
#include <stdio.h>
#include <complex.h>
#include <iostream.h>
#include <conio.h>
#include <math.h>
int luc ( int, complex [][31], int [], double );
void rluc ( int, complex [][31], int [], complex [] );
void gauss ( int n, complex [][31], complex [], complex * );
void rasis ( int, int, complex [], complex [], complex [], int [], int [] );
void start ( int, int, int, complex [][31], complex [],
complex [], int [], int [], int [], int );
void vard ( int, int, int, complex [][31], complex [],
complex [], int [], int [], int [] );
void varm ( int, int, int, complex [][31], complex [],
complex [], int [], int [], int [] );
void prejc ( int, int, int, complex [], complex [] );
void rasis ( int, int, complex [], complex [], complex [], int [], int [] );
void pryzc ( int, complex [], int [], int [], int );
void foryzc ( int, int, complex [][31], complex [], int [], int [] );
double w;
void main ( void )
{
complex a[30][31], b[30], yz[90], tok[90], s;
int imax[90], imin[90], irow[30];
int n, nyz, nej, istop, i, j;
double f;
do
{
clrscr ( );
scanf ( "%i4 %i4 %i4 %i4", &f, &n, &nyz, &nej, &istop );
w = 2 * M_PI * f;
start ( n, nyz, nej, a, b, yz, imax, imin, irow, 0 );
for ( i = 0; i < nyz; i++ )
{
yz[i] = 1.0 / yz[i];
cout << yz[i];
if ( ! ( i % 4 ) ) cout << '\n';
}
for ( i = 0; i < nyz; i++ )
cin >> imax[i] >> imin[i];
cin >> n;
vard ( n, nyz, nej, a, b, yz, imax, imin, irow );
rasis ( n, nyz, b, yz, tok, imax, imin );
}
while ( istop );
//for ( i = 0; i < n; i++ )
//for ( j = 0; j <= n; j++ )
//cin >> a[i][j];
//for ( i = 0; i < n; i++ )
//b[i] = a[i][n];
//for ( i = 0; i < n; i++ )
//{
//for ( j = 0; j <= n; j++ )
//cout << a[i][j];
//cout << '\n';
//}
//for ( i = 0; i < n; i++ )
//cout << b[i];
//luc ( n, a, irow, 0.00001 );
//rluc ( n, a, irow, b );
//cout << '\n';
//gauss ( n, a, b, &s );
//for ( i = 0; i < n; i++ )
//cout << b[i];
}
int luc ( int n, complex a[][31], int irow[], double eps )
{
int i, i1, j, k, l, n1;
complex prom;
for ( i = 0; i < n; i++ )
irow[i] = i;
n1 = n - 1;
for ( i = 0; i < n1; i++ )
{
i1 = i + 1;
l = i;
for ( k = i1; k < n; k++ )
if ( abs ( a[k][i] ) > abs ( a[l][i] ) ) l = k;
if ( abs ( a[l][i] ) < eps ) return 0;
if ( l > i )
{
for ( j = 0; j < n; j++ )
{
prom = a[i][j];
a[i][j] = a[l][j];
a[l][j] = prom;
}
irow[i] = l;
}
for ( j = i1; j < n; j++ )
a[i][j] = a[i][j] / a[i][i];
for ( k = i1; k < n; k++ )
for ( j = i1; j < n; j++ )
a[k][j] -= a[k][i] * a[i][j];
}
return 1;
}
void rluc ( int n, complex a[][31], int irow[], complex b[] )
{
int i, j;
complex sum;
for ( i = 0; i < n; i++ )
if ( i != irow[i] )
{
sum = b[i];
b[i] = b[irow[i]];
b[irow[i]] = sum;
}
for ( i = 0; i < n; i++ )
{
sum = b[i];
for ( j = 0; j < i; j++ )
sum -= a[i][j] * b[j];
b[i] = sum / a[i][i];
}
for ( i = n - 2; i >= 0; i-- )
{
sum = b[i];
for ( j = i+1; j < n; j++ )
sum -= a[i][j] * b[j];
b[i] = sum;
}
}
void gauss ( int n, complex a[][31], complex x[], complex *s )
{
int i, j, k, l, k1, n1;
complex r;
n1 = n + 1;
for ( k = 0; k < n; k++ )
{
k1 = k + 1;
*s = a[k][k];
j = k;
for ( i = k1; i < n; i++ )
{
r = a[i][k];
if ( abs ( r ) > abs ( *s ) )
{
*s = r;
j = i;
}
}
if ( *s == complex ( 0.0, 0.0 ) ) break;
if ( j != k )
for ( i = k; i < n1; i++ )
{
r = a[k][i];
a[k][i] = a[j][i];
a[j][i] = r;
}
for ( j = k1; j < n1; j++ )
a[k][j] /= *s;
for ( i = k1; i < n; i++ )
{
r = a[i][k];
for ( j = k1; j < n1; j++ )
a[i][j] -= a[k][j] * r;
}
}
if ( *s != complex ( 0.0, 0.0 ) )
for ( i = n - 1; i >= 0; i-- )
{
*s = a[i][n];
for ( j = i + 1; j < n; j++ )
*s -= a[i][j] * x[j];
x[i] = *s;
}
return;
}
void start ( int n, int nyz, int nej, complex a[][31], complex b[],
complex yz[], int imax[], int imin[], int irow[], int iy )
{
int i;
pryzc ( nyz, yz, imax, imin, iy );
for ( i = 0; i < nyz; i++ )
{
cout << yz[i];
if ( ! ( i % 4 ) ) cout << '\n';
}
vard ( n, nyz, nej, a, b, yz, imax, imin, irow );
}
void vard ( int n, int nyz, int nej, complex a[][31], complex b[],
complex yz[], int imax[], int imin[], int irow[] )
{
int i, j;
foryzc ( n, nyz, a, yz, imax, imin );
//for ( i = 0; i < n; i++ )
//{
//for ( j = 0; j < n; j++ )
//cout << a[i][j];
//cout << '\n';
//}
if ( luc ( n, a, irow, 1.0e-5 ) )
varm ( n, nyz, nej, a, b, yz, imax, imin, irow );
else
printf ( "\nв®з®Ґ аҐиҐЁҐ Ґ ў®§¬®¦®" );
return;
}
void varm ( int n, int nyz, int nej, complex a[][31], complex b[],
complex yz[], int imax[], int imin[], int irow[] )
{
int i;
prejc ( n, nej, nyz, b, yz );
for ( i = 0; i < n; i++ )
{
cout << b[i];
if ( ! ( i % 4 ) ) cout << '\n';
}
rluc ( n, a, irow, b );
for ( i = 0; i < n; i++ )
{
cout << b[i];
if ( ! ( i % 4 ) ) cout << '\n';
}
return;
}
void pryzc ( int nyz, complex yz[], int imax[], int imin[], int iy )
{
int i, indrlc;
complex rlc;
for ( i = 0; i < nyz; i++ )
{
cin >> rlc >> indrlc >> imax[i] >> imin[i];
yz[i] = rlc;
if ( indrlc == 2 )
yz[i] = complex ( 0.0, -1000000 / ( w * imag ( rlc ) ) );
if ( indrlc == 1 )
yz[i] = complex ( 0.0, w * imag ( rlc ) * 0.001 );
if ( indrlc == 3 ) yz[i] = polar ( real ( rlc ), imag ( rlc ) );
cout << "YZ[" << i+1 << "]= " << yz[i];
}
}
void foryzc ( int n, int nyz, complex a[][31], complex yz[],
int imax[], int imin[] )
{
int i, j, k, kolstr;
for ( i = 0; i < n; i++ )
{
for ( j = 0; j < n; j++ )
a[i][j] = complex ( 0.0, 0.0 );
//cout << '\n';
}
for ( k = 0; k < nyz; k++ )
{
i = imax[k];
j = imin[k];
a[i-1][i-1] += yz[k];
if ( j )
{
a[j-1][j-1] += yz[k];
a[i-1][j-1] -= yz[k];
a[j-1][i-1] = a[i-1][j-1];
}
}
clrscr();
cout << "YZ[i][j]=";
kolstr = 0;
for ( i = 0; i < n; i++ )
{
for ( j = 0; j < n; j++ )
{
cout << "\nYZ[" << i+1 << "][" << j+1 << "]= " << a[i][j];
kolstr++;
if ( kolstr == 22 )
{
kolstr = 0;
getchar ( );
clrscr();
cout << "YZ[i][j]=";
}
}
}
return;
}
void prejc ( int n, int nej, int nyz, complex b[], complex yz[] )
{
int i, ind1, ind2, imin, imax, iyz;
complex ej;
for ( i = 0; i < n; i++ )
b[i] = complex ( 0.0, 0.0 );
for ( i = 0; i < nej; i++ )
{
cin >> ej >> iyz >> imax >> imin >> ind1 >> ind2;
if ( ind1 )
ej = polar ( real ( ej ), imag ( ej ) );
if ( ind2 ) ej *= yz[iyz-1];
cout << "ei= " << ej;
b[imax-1] += ej;
if ( imin ) b[imin-1] -= ej;
}
return;
}
void rasis ( int n, int nyz, complex b[], complex yz[],
complex tok[], int imax[], int imin[] )
{
int i, j, k;
for ( k = 0; k < nyz; k++ )
{
i = imax[k];
j = imin[k];
if ( j )
tok[k] = ( b[i-1] - b[j-1] ) * yz[k];
else
tok[k] = b[i-1] * yz[k];
}
for ( k = 0; k < nyz; k++ )
cout << "I["<< k+1 << "]=" << tok[k];
return;
}
Приложение Б
Структурная схема системы управления