Você está na página 1de 7

('FLUXO DE POTENCIA - ENTRE COM OS DADOS POR FAVOR')

%ENTRANDO COM OS DADOS


Bdados = 0;
while Bdados ~= 1 & Bdados ~= 2
Bdados = input('DIGITE QUAL FLUXO DESEJA ANALISAR 1 PARA O SISTEMA
DE 30 BARRAS E 2 PARA O DE 5: ');
if Bdados == 1
barras = dlmread('IEEE30barras.txt','','A2..L31');
ramos = dlmread('IEEE30barras.txt','','A34..G74');
elseif Bdados == 2
barras = dlmread('LIVRO5barras.txt','','A2..L6');
ramos = dlmread('LIVRO5barras.txt','','A9..G15');
elseif isempty(Bdados)
display('ERRO NA ENTRADA DE DADOS')
return
end
end
% ERRO ESPECIFICADO
Tolerancia = input('DIGITE O VALOR DO ERRO ACEITVEL: ');
if isempty(Tolerancia)
display('ERRO NA ENTRADA DE DADOS')
return
end
%TENSAO BASE DO SISTEMA
MVAbase = input('DIGITE O VALOR DA TENSAO DE BASE DO SISTEMA EM MVA: ');
% VERIFICAO DOS LIMITES DE TENSAO DAS BARRAS PQ
Vmax = input('DIGITE O LIMITE MXIMO DE TENSAO: ');
Vmin = input('DIGITE O VALOR MNIMO DE TENSAO: ');
if isempty(Vmax) || isempty(Vmin)
clc
display('ERRO NA ENTRADA DE DADOS')
return
end
%VERIFICAO DO LIMITE DE ITERAES
iter_max = input('DIGITE O LIMITE MXIMO DE ITERAES: ');
if isempty(iter_max)
clc
display('ERRO NA ENTRADA DE DADOS')
return
end
%CONTAGEM TIME COMPUTACIONAL
tic;
% VRIAVES
[nb, colunas_b] = size(barras)
[nr, colunas_r] = size(ramos)
%DADOS PARA AS BARRAS
for k=1:nb
num(k)
= barras(k,1) %NUMERO DA BARRA NO SISTEMA

tipo(k)
= barras(k,2) %TIPO DE BARRA (SLACK PV OU PQ - 3 SLACK 2
PV 0 PQ)
V(k)
= barras(k,3) %TENSO
ang(k)
= barras(k,4)*pi/180 %ANGULO EM RADS
pc(k)
= barras(k,5)/MVAbase %DEMANDA POTENCIA ATIVA
qc(k)
= barras(k,6)/MVAbase %DEMANDA POTENCIA REATIVA
pg(k)
= barras(k,7)/MVAbase %GERAO POTENCIA ATIVA
qg(k)
= barras(k,8)/MVAbase %GERAO POTENCIA REATIVA
g_sh(k)
= barras(k,11) %CONDUTANCIA SHUNT LIGADA NA BARRA
b_sh(k)
= barras(k,12) %SUSCEPTANCIA SHUNT LIGADA NA BARRA
end
%DADOS PARA OS RAMOS
for l = 1:nr
de(l)
= ramos(l,1) %BARRA DE SADA DA LT
para(l) = ramos(l,2) %BARRA DE DESTINO DA LT
r(l)
= ramos(l,3) %RESISTENCIA DA LT
x(l)
= ramos(l,4) %REATANCIA DA LT
bsh(l) = ramos(l,5)/2 %SUSCEPTANCIA SHUNT DA LT
tap(l) = ramos(l,6) %TAP PARA CASO DE TRAFO
if tap(l) == 0 %ESSE LAO PARA O CASO NO SER UM TRAFO E O USURIO
DEIXAR EM BRANCO O ARQUIVO
tap(l) = 1;
else
tap(l) = 1/tap(l);
end
end
%% MATRIZ (G) e (B) (MAIUSCULO)
G = zeros(nb,nb); %ZERANDO ANTES DE COLOCAR DADOS
B = zeros(nb,nb);
for k=1:nb
B(k,k) = b_sh(k); %DIAGONAL PRINCIPAL PRIMEIRO OS VALORES SHUNTS DAS
BARRAS
G(k,k) = g_sh(k);
end
%PREENCHENDO OS DADOS FORA DA DIAGONAL PRINCIPAL PARA MATRIZES B e G
for i=1:nr
k = de(i);
m = para(i);
gkm = r(i)/(r(i)^2+x(i)^2);
bkm = -x(i)/(r(i)^2+x(i)^2);
G(k,k) = G(k,k) + tap(i)^2*gkm;
B(k,k) = B(k,k) + tap(i)^2*bkm + bsh(i);
G(m,m) = G(m,m) + gkm;
B(m,m) = B(m,m) + bkm + bsh(i);
G(k,m) = G(k,m) - tap(i)*gkm;
B(k,m) = B(k,m) - tap(i)*bkm;
G(m,k) = G(m,k) - tap(i)*gkm;
B(m,k) = B(m,k) - tap(i)*bkm;
end
%% POTNCIA ESPECIFICADA = POTENCIA GERAO NA BARRA - POTENCIA CARGA NA
BARRA
for k = 1:nb
pesp(k) = pg(k) - pc(k);
qesp(k) = qg(k) - qc(k);
end

%%SUBSISTEMA I
%CLCULO DAS POTENCIAS NODAIS
pcalc = zeros(nb,1); %ZERANDO VRIAVEIS
qcalc = zeros(nb,1);
qesp_ant = zeros(nb,1); %USADO NO LIMITE DE TENSO
contMAX = 0;%VAI SER USADO NO CONTROLE DE TENSAO PARA PEGAR O NUMERO DE
VIOLAES DE TENSO MXIMA
contMIN = 0;%VAI SER USADO NO CONTROLE DE TENSAO PARA PEGAR O NUMERO DE
VIOLAES DE TENSO MNIMA
%POTENCIA CALCULADA PARA PRPRIA BARRA
for k = 1:nb
pcalc(k) = G(k,k)*V(k)*V(k);
qcalc(k) = -B(k,k)*V(k)*V(k);
end
%POTENCIA CALCULADA PARA BARRAS LIGADAS BARRA k
for l = 1:nr
k = de(l);
m = para(l);
ab = (ang(k) - ang(m));
pcalc(k) = pcalc(k) + V(k)*V(m)*(G(k,m)*cos(ab)+B(k,m)*sin(ab));
qcalc(k) = qcalc(k) + V(k)*V(m)*(G(k,m)*sin(ab)-B(k,m)*cos(ab));
pcalc(m) = pcalc(m) + V(k)*V(m)*(G(k,m)*cos(ab)-B(k,m)*sin(ab));
qcalc(m) = qcalc(m) + V(k)*V(m)*(-G(k,m)*sin(ab)-B(k,m)*cos(ab));
end
%ZERANDO OS DELTAS
DP = zeros(nb,1);
DQ = zeros(nb,1);
%ATRIBUINDO VALORES AO DELTA P E Q
for k = 1:nb
if tipo(k) ~= 3 %OU SEJA A BARRA PV OU PQ
DP(k) = pesp(k) - pcalc(k);
end
if tipo(k) == 0 %0=PQ ENTO PRECISAMOS CALCULAR O V
DQ(k) = qesp(k) - qcalc(k);
end
end
maxDP = max(abs(DP)); %VARIAVEL QUE IRA RECEBER O MXIMO VALOR DE ERRO DE
POTENCIA ATIVA
maxDQ = max(abs(DQ)); %VARIAVEL QUE IRA RECEBER O MXIMO VALOR DE ERRO DE
POTENCIA REATIVA
CTRLE = zeros(nb); %ESSA VARIAVEL VAI SER A DE VERIFICAO SE HOUVE
VIOLAO DO LIMITE DE TENSO, PARA USAR NO LAO
iter = 0;%COMO O USUARIO DIGITA O NUMERO DE ITERAES MXIMO AQUI VAMOS
VERIFICAR SE HOUVE OU NO VIOLAO
PVPQcont = 0;%ESSA VARIAVEL VAI CONTAR O NUMERO DE CONVERSOES PQ PV PARA
O CONTROLE DOS LIMITES DE TENSO
barrasMAX = zeros(nb);
barrasMIN = zeros(nb);

ReversaoPQ = zeros(nb);
while((maxDP > Tolerancia)||(maxDQ > Tolerancia))
%JACOBIANA
iter = iter + 1;
if iter > iter_max
fprintf('ERRO! LIMITE DE ITERAES EXECEDIDO: %d iteraes
\n',iter_max);
return;
end
H = zeros(nb,nb); M=H; N=H; L=H;
for k = 1:nb %DIAGONAL PRINCIPAL DA JACOBIANA
H(k,k) = -qcalc(k)-V(k)*V(k)*B(k,k);
N(k,k) = (pcalc(k)+V(k)*V(k)*G(k,k))/V(k);
M(k,k) = pcalc(k)-V(k)*V(k)*G(k,k);
L(k,k) = (qcalc(k)-V(k)*V(k)*B(k,k))/V(k);
if tipo(k) == 3 %AQUI UMA JOGADA PARA AS PARRAS SLACK, POR QUE
A HORA QUE INVERTER A MATRIZ VAI APROXIMAR DE ZERO O H
H(k,k) = 10e10;
end
if tipo(k) >= 2 %2=PV MESMA COISA S QUE PARA BARRAS PV
L(k,k) = 10e10;
end
end
for l = 1:nr%FORA DA DIAGONAL PRINCIPAL
k = de(l);
m = para(l);
ab = ang(k) - ang(m);
H(k,m) = V(k)*V(m)*(G(k,m)*sin(ab)-B(k,m)*cos(ab));
H(m,k) = V(k)*V(m)*(-G(k,m)*sin(ab)-B(k,m)*cos(ab));
N(k,m) = V(k)*(G(k,m)*cos(ab)+B(k,m)*sin(ab));
N(m,k) = V(m)*(G(k,m)*cos(ab)-B(k,m)*sin(ab));
M(k,m) = -V(k)*V(m)*(G(k,m)*cos(ab)+B(k,m)*sin(ab));
M(m,k) = -V(k)*V(m)*(G(k,m)*cos(ab)-B(k,m)*sin(ab));
L(k,m) = V(k)*(G(k,m)*sin(ab)-B(k,m)*cos(ab));
L(m,k) = V(m)*(-G(k,m)*sin(ab)-B(k,m)*cos(ab));
end
%MATRIZ JACOBIANA
J = [H N; M L];
DS = [DP; DQ];
DV = J\DS;

%A DIVISO PARA INVERTER,

%ATUALIZANDO VARIAVEIS DE ESTADO


for k = 1:nb
if tipo(k) ~= 3 %PV E PQ
ang(k) = ang(k) + DV(k); %NOVO ANGULO
end
if tipo(k) < 2; %TENSO S AS PQS
V(k) = V(k) + DV(k+nb); %NOVA TENSO
end
end
%LIMITES DE TENSO
%% CONTROLE DE TENSO EM BARRAS PQ

% INICIO
for k = 1:nb
if tipo(k) == 0 %SE A BARRA FOR PQ
if V(k) >= Vmax %SE A TENSO VIOLAR O LIMITE MAX
V(k) = Vmax;
contMAX = contMAX + 1;%ESSA CONTAGEM VAI SER DO NUMERO DE
VIOLAES MAXIMAS
barrasMAX(k) = k;
tipo(k) = 2; % CONVERSO EM BARRA PV
CTRLE(k,iter) = 1; %IDENTIFICAR A VIOLAO DO LIMITE MX
DE TENSAO NAS BARRAS PQ
qesp_ant(k) = qesp(k);
DQ(k) = 0;
elseif V(k) < Vmin
V(k) = Vmin;
contMIN = contMIN + 1;%ESSA CONTAGER VAI SER DO NUMERO DE
VIOLAES MINIMAS
barrasMIN(k) = k;
tipo(k) = 2; % CONVERSO EM BARRA PV
CTRLE(k,iter) = 2; %IDENTIFICAR VIOLAO DE LIMITES
MINIMO DE TENSAO NAS BARRAS PQ
qesp_ant(k) = qesp(k);
DQ(k) = 0;
end
end
end
%RECALCULANDO
for k = 1:nb
pcalc(k) = G(k,k)*V(k)*V(k);
qcalc(k) = -B(k,k)*V(k)*V(k);
end
for l = 1:nr
k = de(l);
m = para(l);
ab = ang(k) - ang(m);
pcalc(k) = pcalc(k) + V(k)*V(m)*(G(k,m)*cos(ab)+B(k,m)*sin(ab));
qcalc(k) = qcalc(k) + V(k)*V(m)*(G(k,m)*sin(ab)-B(k,m)*cos(ab));
pcalc(m) = pcalc(m) + V(k)*V(m)*(G(k,m)*cos(ab)-B(k,m)*sin(ab));
qcalc(m) = qcalc(m) + V(k)*V(m)*(-G(k,m)*sin(ab)-B(k,m)*cos(ab));
end
%SEGUNDA PARTE
for k = 1:nb
if CTRLE(k,iter) == 1
if qcalc(k) > qesp_ant(k)
tipo(k) = 0; %VOLTA A SER BARRA PQ
PVPQcont = PVPQcont+1;
ReversaoPQ(k,iter) = k;
CTRLE(k,iter) = 4
end
elseif CTRLE(k,iter) == 2
if qcalc(k) < qesp_ant(k)
tipo(k) = 0; %VOLTA A SER UMA BARRA PQ
PVPQcont = PVPQcont+1;
ReversaoPQ(k,iter) = k;
CTRLE(k,iter) = 4
end

end
end
%ATUALIZA DELTA P E DELTA Q QUANDO POSSVEL
for k = 1:nb
if tipo(k) ~= 3
DP(k) = pesp(k) - pcalc(k);
end
if tipo(k) == 0
DQ(k) = qesp(k) - qcalc(k);
end
end
maxDP = max(abs(DP)); %RECEBE OS NOVOS VALORES DE DELTA
maxDQ = max(abs(DQ));

end
%% RESULTADOS
fprintf('FLUXO DE POTENCIA - TENSO E ANGULOS NAS BARRAS -MTODO DE
NEWTON COM CONTROLE DE VIOLAO DE TENSO\n')
fprintf('Formato: 3-SLACK, 2-PV, 0-PQ\n')
fprintf('BARRA
TIPO
TENSO
NGULO
P
Q\n');
for i = 1:nb
fprintf('%3d \t%3d \t% 5.4f
\t% 5.4f
\t% 5.4f
\t% 5.4f
\n',num(i),tipo(i), V(i), ang(i)*180/pi, pcalc(i), qcalc(i));
end
%SUBSISTEMA II
%ATRIBUINDO VALORES
pkm = zeros(nr,1);
qkm = zeros(nr,1);
pmk = zeros(nr,1);
qmk = zeros(nr,1);
Pperdas = zeros(nr,1);
Qperdas = zeros(nr,1);
for l = 1:nr
k = de(l);
m = para(l);
ab = (ang(k) - ang(m));
gkm = r(l)/(r(l)^2+x(l)^2);
bkm = -x(l)/(r(l)^2+x(l)^2);
vkm = V(k) * V(m);
t = tap(l);
pkm(l) = t^2*V(k)*V(k)*gkm - t*vkm*(gkm*cos(ab)+bkm*sin(ab));
qkm(l) = -t^2*V(k)*V(k)*(bkm + bsh(l))-t*vkm*(gkm*sin(ab)bkm*cos(ab));
pmk(l) = V(m)*V(m)*gkm - t*vkm*(gkm*cos(ab)-bkm*sin(ab));
qmk(l) = -V(m)*V(m)*(bkm + bsh(l))+t*vkm*(gkm*sin(ab)+bkm*cos(ab));
Pperdas(l) = pkm(l) + pmk(l);
Qperdas(l) = qkm(l) + qmk(l);
end

fprintf('\n%d VIOLAES DE LIMITES MXMIOS DE TENSO. BARRAS: ',contMAX)


for r=1:nb
for f=1:nb
if barrasMAX(r,f) > 0
fprintf('%d ',barrasMAX(r,f))
end
end
end
fprintf('\n%d VIOLAES DE LIMITES MNIMOS DE TENSO. BARRAS: ',contMIN)
for r=1:nb
for f=1:nb
if barrasMIN(r,f) > 0
fprintf('%d ',barrasMIN(r,f))
end
end
end
fprintf('\n%d QUANTIDADE DE CONVERSES PQ PARA PV.',contMIN+contMAX)
fprintf('\n\nFLUXO DE POTENCIA ATRAVS DAS LTs E PERCAS: \n\n');
fprintf(' RAMO
Pkm
Qkm
Pmk
Qmk
P PERCAS
Q PERCAS\n');
for i = 1:nr
fprintf('%2d - %1d
\t%5.4f
\t%5.4f
\t%5.4f
\t%5.4f \t%5.4f
\t%5.4f\n', de(i), para(i), pkm(i), qkm(i), pmk(i), qmk(i), Pperdas(i),
Qperdas(i));
end
fprintf('\n');
fprintf('O FLUXO CONVERGIU COM %d ITERAES, EM %0.3f SEGUNDOS.\n', iter,
toc);

Você também pode gostar