Flujo de Carga
Flujo de Carga
Flujo de Carga
RESUMEN
En el presente articulo se elabora el programa de flujo de
carga aplicando una matriz unidimensional, se calcula el
numero de orden de la matriz unidimensional para todas las
submatrices se necesitan para el clculo del flujo de
potencia.
Se ha desarrollado el cdigo fuente en el lenguaje C++, para
la compilacin se ha utilizado el software libre DEV C++.
Se describen la tcnicas para utiliza las matrices
unidimensionales utilizando una formula propia del autor.
Para la aplicacin se ha tomado un sistema elctrico de 4
barras del Libro de Harper Pg. 165 Anlisis Moderno de
Sistemas Elctricos de Potencia, se compara los resultados.
Figura 1
1.
2.
FLUJO DE CARGA EN UN
BARRAS
SEP DE DOS
Figura 2
En la Figura 2
*
1/11
S1
*
V1
P1 jQ1
*
V1
Yi
V 1 V2
V1
2 RL jX L
*
S2
*
V2
P2 jQ2
*
V2
Yi
V 2 V1
V2
2 RL jX L
*
S P V P I P PP jQ P
*
IP
SP
*
PP * jQP
*
VP
VP
I P (V p V q ) Ypq V p
*
*
i
pq
S pq V p I pq V p (V p V q ) Ypq V p
*
se puede
S qp Vq I qp V q (Vq V p ) Yqp V q
*
i
pq
*
*
) (Y pq
*
i
qp
Y i pq * 2 *
)V p V
2
*
Y i qp * 2 *
) (Y qp
)V q V q
2
2
*
PLANTEAMIENTO
MATEMTICO
DEL
PROBLEMA PARA UN SEP DE N BARRAS
2/11
I B VB YB
I1
I
2
S1
*
V1
*
S2
*
V2
V1
V
2
Ip =
.
Vp
Y11
Y
21
.
.
Y p1
.
Yn1
Y12
Y22
.
Yp 2
.
Yn 2
P
H
Q M
H pq
Vn
. Y1 p
. Y2 p
.
.
. Ypp
.
.
. Ynp
.
.
.
.
.
.
M pq
Vp
*
Sn
*
Vn
Pp
Vq
Q p
q
L pq Vq
Q p
Vq
Y21 V1 Y22 V2 .. Y2 pV p .. Y2 n Vn
H pp B ppV p Q p
Sp
Pp
q
N pq Vq
YIn
Y2 n
.
Ypn
.
Ynn
N
. V
L
V
N pp G ppV p Pp
M pp G ppV p Pp
2
L pp B ppV p Q p
1 P
V J . Q
3/11
Z[2,3]=Z[6]
CLCULO DE LA ORDEN DE LA MATRIZ
UNIDEMENCIONAL
Datos del Programa
Y = Modulo de Matriz de Admitancias Polar
= ngulos de Matriz de Admitancias Polar
V= Voltajes de Barras
= ngulos de Voltajes de Barras
Pesp
=
Potencia Activa Especificada por Barra
Cesp
=
Potencia Reactiva Especificada por Barra
Salida del Programa
P
Q
P
Q
J
JJ
J Orde
V0
0 =
Z i, j NxN Z N * i N j N 2
V Pesp Qesp
2*(N-1)*2*(N-1) 2*(N-1)*(2*N-1)
=
=
=
=
=
=
=
=
2*(N-1)*2*(N-1) N N
JJ
J Orde
V0 0
Ejemplos
Barras
4
10
100
4/11
Orden
bits
192
1.536
1.308
10.464
139.008
1.112.064
200
558.008
4.464.064
500
3.495.008
27.960.064
1000
13.990.008
111.920.064
2000
55.980.008
447.840.064
4000
223.960.008
1.791.680.064
6000
503.940.008
4.031.520.064
5/11
Z13
=0.
12
+j0
.5
6.
S2=0.55+j0.1
3
V1=1.05
0
Z12=0.08+j0.4
Z23=0.1+j0.4
Z34=j0.3
3
S3=
0.3+j0.18
G
2
V=1.10
4 0
15 3.3
16 3.3
17 -77.7
18 101.3
19 103.5
20 0
21 101.3
22 -77.32
23 104
24 0
25 103.5
26 104
27 -82.2
28 90
29 0
30 0
31 90
32 -90
33 1.05
34 1
35 1
36 1.1
37 0
38 0
39 0
40 0
41 0
42 -0.55
43 -0.3
44 0.5
45 0
46 -0.13
47 -0.18
48 0
Archivo datos.txt
0 Nmero de Barras 4
* Matriz de Admitancia Mdulos *
1 * 4.3924
2 * 2.4495
3 * 1.9437
4*0
5 * 2.4495
6 * 4.8705
7 * 2.4224
8*0
9 * 1.9437
10 * 2.4224
11 * 7.6443
12 * 3.3
13 * 0
14 * 0
15 * 3.3
04
1 4.3924
2 2.4495
3 1.9437
40
5 2.4495
6 4.8705
7 2.4224
8 0
9 1.9437
10 2.4224
11 7.6443
12 3.3
13 0
14 0
6/11
16 * 3.3
* Matriz de Admitancia ngulos *
17 * -77.7
18 * 101.3
19 * 103.5
20 * 0
21 * 101.3
22 * -77.32
23 * 104
24 * 0
25 * 103.5
26 * 104
27 * -82.2
28 * 90
29 * 0
30 * 0
31 * 90
32 * -90
* Voltaje de Barras Mdulos *
33 * 1.05
34 * 0.957519
35 * 0.968017
36 * 0.979015
* Voltaje de Barras ngulos *
37 * 0
38 * -6.0077
39 * -0.184768
40 * 7.70709
* Potencia Activa por Barra *
41 * 0
42 * -0.55
43 * -0.3
44 * 0.5
* Potencia Reactiva por Barra *
45 * 0
46 * -0.13
47 * -0.18
48 * 0
* Potencia Activa Calculada por Barra *
49 * 0.0512339
50 * -0.0208851
51 * -0.0249956
52 * 1.01142e-005
* Potencia Reactiva Calculada por Barra *
53 * 0.224847
54 * -0.120849
55 * -0.391369
56 * 0.363
* Delta de Potencia Activa Calculada por Barra *
57 * 0
58 * -0.529115
59 * -0.275004
60 * 0.49999
* Delta de Potencia Reactiva Calculada por Barra *
61 * 0
62 * -0.00915085
63 * 0.211369
64 * -0.363
* Jacobiano *
65 * 4.87256
66 * -2.35045
67 * 0
68 * 1.04822
69 * -0.586028
70 * 0
71 * -2.35045
72 * 7.96494
73 * -3.63
74 * -0.586028
75 * 1.01246
76 * 4.37842e-006
77 * 0
78 * -3.63
79 * 3.63
80 * 0
81 * 4.81627e-006
82 * 1.4011e-005
83 * -1.08999
84 * 0.586028
85 * 0
86 * 4.63086
87 * -2.35045
88 * 0
89 * 0.586028
90 * -1.06246
91 * -4.81627e-006
92 * -2.35045
93 * 7.1822
94 * -3.3
95 * 0
96 * -4.81627e-006
97 * 4.81627e-006
98 * 0
99 * -3.63
100 * 3.96
101 Resultados de la Iteracin 1 *
101 * 1
102 * 0
103 * 0
104 * 0
105 * 0
106 * 0
107 * -0.104854
108 * 0
109 * 1
110 * 0
111 * 0
112 * 0
113 * 0
114 * -0.0032248
115 * 0
116 * 0
7/11
117 * 1
118 * 0
119 * 0
120 * 0
121 * 0.134514
122 * 0
123 * 0
124 * 0
125 * 1
126 * 0
127 * 0
128 * -0.0424814
129 * 0
130 * 0
131 * 0
132 * 0
133 * 1
134 * 0
135 * -0.0319831
136 * 0
137 * 0
138 * 0
139 * 0
140 * 0
141 * 1
142 * -0.120985
143 Jacobiano Ordenado1 *
143 * 4.87256
144 * -2.35045
145 * 0
146 * 1.04822
147 * -0.586028
148 * 0
149 * -0.529115
150 * -2.35045
151 * 7.96494
152 * -3.63
153 * -0.586028
154 * 1.01246
155 * 4.37842e-006
156 * -0.275004
157 * 0
158 * -3.63
159 * 3.63
160 * 0
161 * 4.81627e-006
162 * 1.4011e-005
163 * 0.49999
164 * -1.08999
165 * 0.586028
166 * 0
167 * 4.63086
168 * -2.35045
169 * 0
170 * -0.00915085
171 * 0.586028
172 * -1.06246
173 * -4.81627e-006
174 * -2.35045
175 * 7.1822
176 * -3.3
177 * 0.211369
178 * 0
179 * -4.81627e-006
180 * 4.81627e-006
181 * 0
182 * -3.63
183 * 3.96
184 * -0.363
185 * 1.05
186 * 1
187 * 1
188 * 1.1
189 * 0
190 * 0
191 * 0
192 * 0
5.
CONCLUSIONES
Se ha realizado el programa de flujo de carga
utilizando una sola matriz unidimensional, al agrupar
todas las matrices en al matriz unidimensional se ha
establecido el orden de la matriz conociendo el
nmero de barras y permitiendo optimizar el nmero
de variables.
Se ha mejora la reserva dinmica de memoria se hace
en tiempo de ejecucin, despus de leer los datos y de
conocer el tamao exacto del problema a resolver.
Como consecuencia, la reserva dinmica de memoria
se adapta mucho mejor a las necesidades de cada caso.
Como contrapartida, es algo ms difcil de programar.
REFERENCIAS
[1]
[2]
[3]
APENDICE
A continuacin se proporciona el cdigo fuente en C++
desarrollo por autor
8/11
{ I++;
FLUJONET1.CPP
// flujo.cpp : Defines the entry point for the console application.
// Programa Elaborado Por Ing. Jess Solrzano M CIP 61996
// solo utiliza la matriz unidimencioanl Z[] para toda el Programa
// archivo de Datos "datos.txt"
// archivo de salida "" salidasJES.txt"
#include <iostream.h>
#include <math.h>
#include <wtypes.h>
#include <stdio.h>
#define PI 3.14159
#include <fstream.h> // Biblioteca para el manejo de ficheros
int main(int argc, char* argv[], double Z[200])
{
double A, B, C, D, X, Y, P, Q, T, R, S, DD ;
int N, I, J, L, M, MM, F, W, U, E, M1,FF,LL, L1, FFF, H, K, ITER ;
// Lee fichero de ingreso de datos
//------------------------------------------------ifstream fichinput("datos.txt",ios::in);
if (!fichinput)
cout << "\n Incapaz de crear este fichero \n";
else {
I=0;
// Lectura del Numero de Barras
fichinput >> I >> N;
while ( I < 2*N*N+4*N )
{ I++;
fichinput >> I >> Z[I] ;
}
fichinput.close();}
/////////////////////////////////////77
// iniciar a Cero las Variables
I=2*N*N+4*N;
while (I < 2*N*N+8*N)
{I++;
Z[I]=0;
}
I=0;
// Inicio de la Iteracin
ITER=0;
while (ITER<10)
{
ITER++;
// Jacobiano (solo barras pq) 4*(N-1)*(N-1)
FF = 2*N*N+8*N+4*(N-1)*(N-1);
LL = 2*(N-1)*(2*(N-1)+1);
L1= 2*(N-1)+1;
FFF= FF+LL;
// Iniciar a cero las variables del Jacobiano
//---------------------I=0;
while ( I < FFF-2*N*N - 8*N)
Z[FF+I]=0;
}
//----------------------------------------------------// Calculo de las Potencias en cada Barra
I= 0;
while ( I<N)
{ I++;
X = 0; Y=0;
J=0;
// Calculo de las potencias por Barra
while ( J<N)
{ J++;
T = - Z[N*N + N*I-N + J] + Z[ 2*N*N +N +I] - Z[ 2*N*N +N +J];
R = Z[ 2*N*N+J]*Z[N*I-N+J];
X= X + R* cos(T*PI/180);
Y= Y+ R* sin(T*PI/180);
P= Z[2*N*N +I]*X;
Q= Z[2*N*N +I]*Y;
Z[2*N*N+4*N+I]=P;
Z[2*N*N+5*N+I]=Q;
}
// Calculo del deltas de Potencia Activa y Reactiva
I=1;
while (I<N)
{ I++; Z[2*N*N+6*N+I]=Z[2*N*N+2*N+I]-Z[2*N*N+4*N+I];
Z[2*N*N+7*N+I]=Z[2*N*N+3*N+I]-Z[2*N*N+5*N+I];}
//--------------------------------------------------------------------------// Calculo del Jacobiano
MM= 2*(N-1); // Orden del Jacobiano
F= 2*N*N+8*N; // Ubicacin del inicio del Jacobiano
W= N-1; // Orden de las Submatrices H, N, J, L
A=0; B=0; C=0; D= 0;
I=1; // la Barra de Carga es la Barra 1
while (I<N)
{ I++;
J=1;
//----------------------------------------------while (J<N)
{ J++;
//------------------------------bucle if
if (I==J ) // Calculo de los elementos Diagonales H, N, J, L
{
X =0; Y=0; L=0;
//----------------------------------------------// calcula Vq sumatoria Ypq
while (L < N)
{ L++;
if (L !=I )
{ T = - Z[N*N + N*I-N + L] + Z[ 2*N*N +N +J] - Z[ 2*N*N +N +L];
R = Z[2*N*N+L]*Z[N*J-N+L];
X= X + R*sin(T*PI/180);
Y= Y + R*cos(T*PI/180);
}}
//---------------------------------------------------
9/11
A= - Z[2*N*N+I]*X; B=Y;
C= Z[2*N*N+I]*Y; D=X;
B= B+ 2*Z[2*N*N+I]*Z[N*I-N+I]*(cos((Z[N*N+I*N-N+I]*PI)/180));
D= D+ 2*Z[2*N*N+I]*Z[N*I-N+I]*(sin(-(Z[N*N+I*N-N+I]*PI)/180));
U= I-1;
E= J-1;
Z[F+U*MM-MM+E]= A;
Z[F+U*MM-MM+W+E]= B;
Z[F+(U+W)* MM-MM+E]= C;
Z[F+(U+W)*MM-MM+W+E]= D;
}
//------------------------------------- cierra bucle if
else
{T = - Z[N*N + N*I-N + J] + Z[ 2*N*N +N +I] - Z[ 2*N*N +N +J];
R = Z[2*N*N+I]*Z[2*N*N+J]*Z[N*I-N+J];
S= Z[2*N*N+I]*Z[N*I-N+J];
A= R* sin(T*PI/180);
B= S* cos(T*PI/180);
C= -R*cos(T*PI/180);
D= S* sin(T*PI/180);
U= I-1;
E= J-1;
Z[F+U*MM-MM+E]= A;
Z[F+U*MM-MM+W+E]= B;
Z[F+(U+W)* MM-MM+E]= C;
Z[F+(U+W)*MM-MM+W+E]= D;
}
}
}
// Ordenamiento de la Matriz para la solucin de Gauss
// MM=2*(N-1)
I=0;
while (I<MM)
{I++;
J=0;
while (J<MM)
{ J++; Z[FF+J+I*L1-L1]= Z[F+J+I*MM-MM];}
Z[FF+L1*I]= 0;
}
// Asignado los valores del Delta de Potencia
I=0;
while (I<N-1) // Asignacin de los deltas
{ I++ ; Z[FF+L1*(I)]= Z[2*N*N+6*N+I+1] ;
Z[FF+L1*(N+I-1)]= Z[2*N*N+7*N+I+1];}
// Guardando los valores del Jacobiano
Ordenado------------------------------------------------------------I=0;
while (I<LL)
{I++;
Z[FFF+I]=Z[FF+I];
}
// gauss sidell
K=0;
while ( K< MM)
{ K++;
DD= Z[FF+K*L1-L1+K];
J=0;
while ( J<L1)
{ J++;
Z[FF+K*L1-L1+J] = Z[FF+K*L1-L1+J]/DD; }
I=0;
while ( I<MM)
{ I++;
H=I-K;
//-------------------------------------------if ( I != K)
{ DD=Z[FF+I*L1-L1+K];
J=0;
while ( J<L1)
{ J++;
Z[FF+I*L1-L1+J]=Z[FF+I*L1-L1+J]-Z[FF+K*L1-L1+J]*DD;
}
}
}
//------------------------------------------}
// Correccin de Voltajes y Angulos
if (ITER < 2)
{I=0;
while (I<N)
{I++; Z[FFF+LL+I]= Z[2*N*N+I];
Z[FFF+LL+I+N]= Z[2*N*N+N+I];}
}
I=0;
while (I< N-1)
{I++;
Z[2*N*N+I+1]=Z[2*N*N+I+1]+Z[FF+L1*(N+I-1)];
Z[2*N*N+N+I+1]=Z[2*N*N+N+I+1]+(Z[FF+L1*I])*180/PI;}
}
// crea fichero de salida de datos
//------------------------------------------------ofstream fichout("SalidaJES.TXT",ios::out);
if (!fichout)
cout << "\n Incapaz de crear este o abrir el fichero \n";
else {
I=0;
fichout << I << " Nmero de Barras " << N << " " << endl;
while ( I< FFF+LL+2*N)
{ I++;
if (I==1) { fichout << "*" << " Matriz de Admitancia Modulos " <<
"*" << " " << endl;}
if (I==N*N+1) { fichout << "*" << " Matriz de Admitancia Angulos
" << "*" << " " << endl;}
if (I==2*N*N+1) { fichout << "*" << " Voltaje de Barras Modulos "
<< "*" << " " << endl;}
if (I==2*N*N+N+1) { fichout << "*" << " Voltaje de Barras Angulos
" << "*" << " " << endl;}
if (I==2*N*N+2*N+1) { fichout << "*" << " Potencia Activa por Barra
" << "*" << " " << endl;}
if (I==2*N*N+3*N+1) { fichout << "*" << " Potencia Reactiva por
Barra " << "*" << " " << endl;}
10/11
11/11