Você está na página 1de 6

clc

clear all
close all
%CArga de Datos
%Nombre del archivo
[LIBRO DIR]= uigetfile('*.xls','archivo de excel');
%%Letrero de espera
wai=waitbar(0,'Por favor espere');
%%Tipo

1- Salck

2-PV

3-PQ

%Datos de nodos
%Nodos=[bus_i tipo PG QG PD QD Bsh Vm base KV Vmax Vmin]
Nodos=xlsread(LIBRO,'Nodos');
waitbar(0.5,wai)
%Datos lineas
%Lineas= [Ni Nf R X Bsh/2]
Lineas=xlsread(LIBRO,'Lineas');
waitbar(1,wai)
close(wai)
NR=size(Lineas,1); %Numero de lineas
NB=size(Nodos,1); %Numero de nodos
%Impedancia serie de lineas
Zlinea=Lineas(:,3)+sqrt(-1)*Lineas(:,4);
%Valores iniciales
Vm_o=Nodos(:,8); %Magnitud Tensiones
Va_o=Nodos(:,9);%Angulo de tensiones
%Tolerancia
Tol=0.0001;
%Construccion de Ybus
%Elementos fuera de la diagonal
for k=1:NR
Ybij=-1/Zlinea(k);
i=Lineas(k,1);
j=Lineas(k,2);
Ybus(i,j)=Ybij;
Ybus(j,i)=Ybij;
end
%Elementos de la diagonal
for i=1:NB
for j = 1:NR
if i==Lineas(j,1)

Ybus(i,i)=Ybus(i,i)+(1/Zlinea(j))+(sqrt(-1)*Lineas(j,5));
end
if i==Lineas(j,2)
Ybus(i,i)=Ybus(i,i)+(1/Zlinea(j))+(sqrt(-1)*Lineas(j,5));
end
end
Ybus(i,i)=Ybus(i,i)+Nodos(i,7);
end
% figure
% spy(Ybus)
% title('Estructura de la Y_Bus')
%Construccion del sistema de ecuaciones de balance nodal
%Construyo variables
for k = 1:NB
%
contruyo variables para tension
syms (['V' num2str(k)]);
Vm(k,1) = eval(['V',num2str(k)])
%
Construyo variables para angulo
syms (['Teta' num2str(k)]);
Va(k,1) = eval(['Teta',num2str(k)])
end
i=sqrt(-1); % declaro la variable imaginaria

%
%

%Construyendo ecuaciones de balance nodal


for k1=1:NB
saco matriz de ?ngulos
for k2=1:NB
T(k1,k2)=Va(k2)-Va(k1)
caso matriz de voltajes
syms(['V' num2str(k2)]);
V_(k1,k2) = eval(['V',num2str(k2)])
end
end
sacamos la matriz de Conductancia y Admitancia
G_=real(Ybus)
B_=imag(Ybus)

Dp=(Nodos(:,3)-Nodos(:,5))((diag((G_.*V_)*cos(T)).*Vm)+(diag((B_.*V_)*sin(T)).*Vm));
Dq=(Nodos(:,4)-Nodos(:,6))-((diag((G_.*V_)*sin(T)).*Vm)(diag((B_.*V_)*cos(T)).*Vm));
%Seleccion para los Dp (Pv,PQ) y para los Dq
for h=1:NB
if(Nodos(h,2)==1) %slack
Dp(h)=[inf]
Dq(h)=[inf]
Vm(h)=[inf]
Va(h)=[inf]

end
if(Nodos(h,2)==2)%Pv
Dq(h)=[inf]
Vm(h)=[inf]
end
end
Dp(find(inf==Dp))=[]
Dq(find(inf==Dq))=[]
Vm(find(inf==Vm))=[]
Va(find(inf==Va))=[]
X=[Va;Vm]
Y=[Dp;Dq]
J= jacobian(Y,X);
%Calculo del Jacobiano
%
%
%
%
%

for k1=1:length(Y)
for k2=1:length(X)
J(k1,k2)=diff(Y(k1),X(k2))
end
end
%Inicio del metodo iterativo
for h = 1:NB
evalc(['V' num2str(h) ' = Vm_o(h)'])
evalc(['Teta' num2str(h) ' = Va_o(h)'])
end

%Calculo delta P y delta Q


Delta=eval(Y)
ITE=1;
while(ITE<=100)&(sum((abs(Delta)>=Tol))>0)
J_o=eval(-1*J);%Evalua el Jacobiano
Delt_T_V=inv(J_o)*Delta;% Calcula delta_teta y delta_V
pv=length(find(2==Nodos(:,2)));%Numero de nodos pv
pq=length(find(3==Nodos(:,2)));%Numero de nodos pq
%Actualiza delta_Teta
Va_o((find(2<=Nodos(:,2))))=Va_o((find(2<=Nodos(:,2))))+Delt_T_V(1:pv+pq)
;
%Actualiza delta V
Vm_o((find(3==Nodos(:,2))))=Vm_o((find(3==Nodos(:,2))))+Delt_T_V(pv+pq+1:
length(Delt_T_V));
for h = 1:NB

evalc(['V' num2str(h) ' = Vm_o(h)']);


evalc(['Teta' num2str(h) ' = Va_o(h)']);
end
Delta=eval(Y);
ITE=ITE+1;
end

%%Muestra de resultados
disp('--------------------------------------------------------')
fprintf('Numero de iteraciones: %d\n',ITE)
disp(' ')
disp('--------------------------------------------------------')
disp(' ')
disp('
RESULTADOS')
disp(' ')
disp('Magnitud de las tensiones nodales [pu]')
for k=1:length(Vm_o)
fprintf(' V_%d = %.3f',k,Vm_o(k))
if mod(k,2)==0 %%si k es par
fprintf('\n')
else
fprintf(' ;')
end
end

disp(' ')
disp('Angulo de las tensiones nodales [deg]')
for k=1:length(Va_o)
if Va_o<0 %angulo negativo
fprintf(' V_%d=%.2f',k,Va_o(k)*180/pi)
else
fprintf(' V_%d=%.3f',k,Va_o(k)*180/pi)
end
if mod(k,2)==0 %%si k es par
fprintf('\n')
else
fprintf(' ;')
end
end
%Calculo de flujo por las lineas
En=(Vm_o.').*(cos((Va_o.'))+i*sin((Va_o.'))); %Tensin nodal fasorial
A=zeros(NR,NB);
for k1=1:NR
A(k1,Lineas(k1,1))=1;
A(k1,Lineas(k1,2))=-1;
A1(k1,:)=A(k1,:).*En;
B1(k1,1)=i*(Lineas(k1,5).*En(Lineas(k1,1)));
B2(k1,1)=i*(Lineas(k1,5).*En(Lineas(k1,2)));
Em1(k1,1)=En(Lineas(k1,1));

Em2(k1,1)=En(Lineas(k1,2));
end
Iij=((1./Zlinea).*sum(A1,2))+B1;
Iji=((1./Zlinea).*sum(-A1,2))+B2;
Sij_o=Em1.*conj(Iij);
Sji_o=Em2.*conj(Iji);
Pij=real(Sij_o);
Qij=imag(Sij_o);
Pji=real(Sji_o);
Qji=imag(Sji_o);
Si=(En.').*conj(Ybus*(En.')); %Potencia aparente nodal
Pi=real(Si); %Potencia activa nodal
Qi=imag(Si); % Potencia reactiva nodal
disp(' ')
disp(' Flujos de Potencia [pu]')
for k=1:length(Pij)
k1=Lineas(k,1:2);
if Pij(k)<0 % Pij negativo
fprintf(' P_%d_%d = %.2f ;',k1(1),k1(2),Pij(k))
else
fprintf(' P_%d_%d = %.3f ;',k1(1),k1(2),Pij(k))
end
if Qij(k)<0 %Qij negativo
fprintf(' Q_%d_%d = %.2f \n',k1(1),k1(2),Qij(k))
else
fprintf(' Q_%d_%d = %.3f \n',k1(1),k1(2),Qij(k))
end
end

for k=1:length(Pij)
k1=Lineas(k,1:2);
if Pji(k)<0 % Pij negativo
fprintf(' P_%d_%d = %.2f ;',k1(2),k1(1),Pji(k))
else
fprintf(' P_%d_%d = %.3f ;',k1(2),k1(1),Pji(k))
end
if Qji(k)<0 %Qij negativo
fprintf(' Q_%d_%d = %.2f \n',k1(2),k1(1),Qji(k))
else
fprintf(' Q_%d_%d = %.3f \n',k1(2),k1(1),Qji(k))
end
end

disp(' ')
disp(' Potencia Nodal[pu]')

for k=1:length(Pi)
if Pi(k)<0 % Pij negativo
fprintf(' P_%d = %.2f ;',k,Pi(k))
else
fprintf(' P_%d = %.3f ;',k,Pi(k))
end
if Qi(k)<0 % Qij negativo
fprintf(' Q_%d = %.2f\n ;',k,Qi(k))
else
fprintf(' Q_%d = %.3f\n ;',k,Qi(k))
end
end

% Graficas
%Magnitud Tensiones
subplot(1,2,1)
bar(Vm_o)
grid on
title (' Tensin Nodal')
xlabel ('nodo')
ylabel('pu')

%Potencia neta inyectada


subplot(1,2,2)
bar([Pi,Qi])
grid on
legend ('P_i','Q_i')
title (' Potencia Neta Inyectada ')
xlabel ('nodo')
ylabel('pu')

Você também pode gostar