Вы находитесь на странице: 1из 3

% RUTINA PARA CARGA DATOS DEl CASO BASE DE UN ARCHIVO DE EXCEL

clc % borra pantalla


clear all % Borra Variables
close all % Cierra Ventanas
%% DATOS DE CARGA
S% NOMBRE DEL ARCHIVO
archivo= uigetfile('*.xlsx','Archivo excel');
% LETRERO DE ESPERA
%wai=waitbar(1,'Por Favor Espere');
% Tipo 1=swing 2=PV 3=PQ
% Datos Nodos
% Nodos =[Bus_i tipo Pg Qg Pd Qd Bsh Vm Va BasekV Vmax Vmin]
nodos=xlsread(archivo,'nodos');
% DATOS DE LINEAS
% Lineas= [ Ni Nf R X Bsh/2]
lineas=xlsread(archivo,'lineas');
%close (wai)
NB=size(nodos,1); % Numero de Nodos
NR=size(lineas,1); % Numero de Lineas
% IMPEDANCIA SERIE DE LINEAS
for i=1:1:NR
zlinea(i,1)=lineas(i,3)+(sqrt(-1)*lineas(i,4));
end
% VALORES INICIALES
for i=1:1:NB
Vm_0(i,1)=nodos(i,8);
Va_0(i,1)=nodos(i,9);
end
% Tolerancia
Tol=0.0000001;
% CONSTRUCCION DE LA MATRIZ DE ADIMTANCIA NODAL
% ELEMENTOS FUERA DE LA DIAGONAL PRINCIPAL
for k=1:1:NR
Y=-1/zlinea(k);
i=lineas(k,1);
j=lineas(k,2);
Ybus(i,j)=Y;
Ybus(j,i)=Y;
end
% ELEMENTOS DE LA DIAGONAL PRINCIPAL
for i=1:1:NB
for j=1: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)+sqrt(-1)*nodos(i,7);
end
Ybus
% CONSTRUIR SISTEMAS DE ECUACIONES DE BALANCE NODAL
% Crear Variable simbolica
for k=1:NB
syms(['V',num2str(k)]);
Vm(k,1)=eval(['V',num2str(k)]);
syms(['Teta',num2str(k)]);
Va(k,1)=eval(['Teta',num2str(k)]);
end
i=sqrt(-1);
% Construye ecuaciones de balance nodal
for k1=1:NB
for k2=1:NB
T(k1,k2)=Va(k2)-Va(k1);
syms(['V',num2str(k2)]);
V_(k1,k2)= eval(['V',num2str(k2)]);
end
end
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));
% Selecciona Dp para barras PV y PQ y Dq para barras PQ
for h=1:NB
if (nodos(h,2))==1 % barra swing
Dp(h)=[inf];
Dq(h)=[inf];
Vm(h)=inf;
Va(h)=inf;
end
if (nodos(h,2))==2 % Barras 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]; % Variables de estado desconocidas
Y=[Dp;Dq]; % ecuaciones de balance necesarias
% Calculo del Jacobiano
for k1=1:length(Y)
for k2=1:length(X);
J(k1,k2)=diff(Y(k1),X(k2));
end
end
% PROCESO ITERATIVO DE NEWTON-RHAPSON
% A las variables simbolicas de tensión y ángulo se le asignan los
valores
% iniciales
for i=1:NB
evalc(['V',num2str(i),'=Vm_0(i)']);
evalc(['Teta',num2str(i),'=Va_0(i)']);
end
% Cálculo de Dp y Dq
Delta=eval(Y);
iter=1;
while (iter<=50) & (sum((abs(Delta)>Tol)));
% Se evalua el jacobiano
J_0=eval(-1*J);
Delta_T_V=inv(J_0)*Delta; % calcula los delta Teta y delta V
pv=length(find(2==nodos(:,2))); % numeros de nodos pv
pq=length(find(3==nodos(:,2))); %numero de nodos pq
% Actualización del delta Teta
Va_0((find(2<=nodos(:,2))))=Va_0((find(2<=nodos(:,2))))+Delta_T_V(1:pv+pq
);
% Actualización del delta V
Vm_0((find(3==nodos(:,2))))=Vm_0((find(3==nodos(:,2))))+Delta_T_V(pv+pq+1
:length(Delta_T_V));
for i=1:NB
evalc(['V',num2str(i),'=Vm_0(i)']);
evalc(['Teta',num2str(i),'=Va_0(i)']);
end
Delta=eval(Y);
iter=iter+1;
end
for k=1:length(Vm_0)
fprintf ('V%d=%.3f',k,Vm_0(k));
fprintf(', ');
fprintf ('Ag%d=%.4f',k,Va_0(k)*180/pi);
fprintf('\n');
end
fprintf ('\n')
% CALCULO DE LOS FLUJOS
% tensiones en coordenadas rectangulares
for k=1:NB
RE(k)=Vm_0(k)*cos(Va_0(k));
IM(k)= sqrt(-1)*Vm_0(k)*sin(Va_0(k));
TE(k)=RE(k)+IM(k);
end
TE=transpose(TE)
% Se calculan los flujos de potencia activa y reactiva por las lineas
for i=1:NR
Sl(i)=(TE(lineas(i,1))*conj((TE(lineas(i,1))-TE(lineas(i,2))))*conj(-
Ybus(lineas(i,1),lineas(i,2)))+TE(lineas(i,2))*conj(TE(lineas(i,2))*sqrt(
-1)*(lineas(i,5))));
Sl1(i)=(TE(lineas(i,2))*conj((TE(lineas(i,2))-TE(lineas(i,1))))*conj(-
Ybus(lineas(i,2),lineas(i,1)))+TE(lineas(i,1))*conj(TE(lineas(i,1))*sqrt(
-1)*(lineas(i,5))));
%fprintf(' ')
fprintf ('S%d=%',lineas(i,6));
fprintf ('%s\n',num2str(Sl(i)));
fprintf ('S%d=%',lineas(i,7));
fprintf ('%s\n',num2str(Sl1(i)));
end

Вам также может понравиться