(7. relación de programas de matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · relación...

53
_______________________________________________________7. Relación de programas de Matlab ___________________________________________________________________89 “Algoritmo para analizar la estabilidad de una red eléctrica” 7. RELACIÓN DE PROGRAMAS DE MATLAB En el proyecto se distinguen dos partes principales: el bloque del reparto de cargas y el bloque del análisis de estabilidad. El módulo Principal.m es el cuerpo del programa. Desde él se llaman al resto de las demás funciones. Principal.m %Funcion principal que realiza la lectura y el reparto de cargas %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% FALLO EN LÍNEA O EN NUDO,LECTURA DE DATOS Y MATRIZ DE ADMITANCIAS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% mm=input('Introduce distancia desde el nudo inicio en que se produce la falta, m_falta, que toma valores entre 0 y 1\n','s'); m_falta=str2num(mm); if (m_falta==0) disp('El fallo se produce en el nudo inicial de la línea'); [SB,nudos,tipo,G_nudo,B_nudo,V,zona,nivel_tens,nudoscarga,Pc,Qc,Qcesp, nudosgen,Pg,Qg,Qgesp,Qm,QM,m,Vesp,nudoi,nudof,Rrama,Xrama,Btotrama,a,G _ni,B_ni,G_nf,B_nf,ni_tv,nf_tv,tmax,tmin,paso,estado,Bsh,mod_Bsh,B_ini ,n_pasos,inc_Bsh,Rgen,Xgen,Rtrafo,Xtrafo,Hgen,d10,nudocero,nudocerof]= lecturadatos; %matriz de admitancias de nudos [Y]=matriz(G_nudo,B_nudo,G_ni,B_ni,G_nf,B_nf,Rrama,Xrama,nudoi,nudof,a ,nudos,Btotrama,Bsh,B_ini) end if (m_falta==1) disp('El fallo se produce en el nudo final de la línea'); [SB,nudos,tipo,G_nudo,B_nudo,V,zona,nivel_tens,nudoscarga,Pc,Qc,Qcesp, nudosgen,Pg,Qg,Qgesp,Qm,QM,m,Vesp,nudoi,nudof,Rrama,Xrama,Btotrama,a,G _ni,B_ni,G_nf,B_nf,ni_tv,nf_tv,tmax,tmin,paso,estado,Bsh,mod_Bsh,B_ini ,n_pasos,inc_Bsh,Rgen,Xgen,Rtrafo,Xtrafo,Hgen,d10,nudocero,nudocerof]= lecturadatos; %matriz de admitancias de nudos [Y]=matriz(G_nudo,B_nudo,G_ni,B_ni,G_nf,B_nf,Rrama,Xrama,nudoi,nudof,a ,nudos,Btotrama,Bsh,B_ini) end if (m_falta~=0)&(m_falta~=1) disp('El fallo se produce a una distancia m_falta del nudo inicial de la línea');

Upload: others

Post on 26-May-2020

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________89 “Algoritmo para analizar la estabilidad de una red eléctrica”

7. RELACIÓN DE PROGRAMAS DE MATLAB

En el proyecto se distinguen dos partes principales: el bloque del reparto de cargas y el bloque del análisis de estabilidad. El módulo Principal.m es el cuerpo del programa. Desde él se llaman al resto de las demás funciones.

Principal.m %Funcion principal que realiza la lectura y el repa rto de cargas %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% FALLO EN LÍNEA O EN NUDO,LECTURA DE DATOS Y MATR IZ DE ADMITANCIAS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% mm=input('Introduce distancia desde el nudo inicio en que se produce la falta, m_falta, que toma valores entre 0 y 1\n', 's'); m_falta=str2num(mm); if (m_falta==0) disp('El fallo se produce en el nudo inicial de la línea'); [SB,nudos,tipo,G_nudo,B_nudo,V,zona,nivel_tens,nudo scarga,Pc,Qc,Qcesp,nudosgen,Pg,Qg,Qgesp,Qm,QM,m,Vesp,nudoi,nudof,Rrama ,Xrama,Btotrama,a,G_ni,B_ni,G_nf,B_nf,ni_tv,nf_tv,tmax,tmin,paso,estad o,Bsh,mod_Bsh,B_ini,n_pasos,inc_Bsh,Rgen,Xgen,Rtrafo,Xtrafo,Hgen,d10,n udocero,nudocerof]=lecturadatos; %matriz de admitancias de nudos [Y]=matriz(G_nudo,B_nudo,G_ni,B_ni,G_nf,B_nf,Rrama, Xrama,nudoi,nudof,a,nudos,Btotrama,Bsh,B_ini) end if (m_falta==1) disp('El fallo se produce en el nudo final de l a línea'); [SB,nudos,tipo,G_nudo,B_nudo,V,zona,nivel_tens,nudo scarga,Pc,Qc,Qcesp,nudosgen,Pg,Qg,Qgesp,Qm,QM,m,Vesp,nudoi,nudof,Rrama ,Xrama,Btotrama,a,G_ni,B_ni,G_nf,B_nf,ni_tv,nf_tv,tmax,tmin,paso,estad o,Bsh,mod_Bsh,B_ini,n_pasos,inc_Bsh,Rgen,Xgen,Rtrafo,Xtrafo,Hgen,d10,n udocero,nudocerof]=lecturadatos; %matriz de admitancias de nudos [Y]=matriz(G_nudo,B_nudo,G_ni,B_ni,G_nf,B_nf,Rrama, Xrama,nudoi,nudof,a,nudos,Btotrama,Bsh,B_ini) end if (m_falta~=0)&(m_falta~=1) disp('El fallo se produce a una distancia m_fal ta del nudo inicial de la línea');

Page 2: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________90 “Algoritmo para analizar la estabilidad de una red eléctrica”

[SB,nudos,tipo,G_nudo,B_nudo,V,zona,nivel_tens,nudo scarga,Pc,Qc,Qcesp,nudosgen,Pg,Qg,Qgesp,Qm,QM,m,Vesp,nudoi,nudof,Rrama ,Xrama,Btotrama,a,G_ni,B_ni,G_nf,B_nf,ni_tv,nf_tv,tmax,tmin,paso,estad o,Bsh,mod_Bsh,B_ini,n_pasos,inc_Bsh,Rgen,Xgen,Rtrafo,Xtrafo,Hgen,d10,n udocero,nudocerof]=lecturadatos; [SB,nudos,tipo,G_nudo,B_nudo,V,zona,nivel_tens,nudo scarga,Pc,Qc,Qcesp,nudosgen,Pg,Qg,Qgesp,Qm,QM,m,Vesp,nudoi,nudof,nudok ,Rrama,Xrama,Btotrama,a,G_ni,B_ni,G_nf,B_nf,ni_tv,nf_tv,tmax,tmin,paso ,estado,Bsh,mod_Bsh,B_ini,n_pasos,inc_Bsh,Rgen,Xgen,Rtrafo,Xtrafo,Hgen ,d10,nudocero]=lecturadatos_f(m_falta,SB,nudos,tipo,G_nudo,B_nudo,V,zo na,nivel_tens,nudoscarga,Pc,Qc,Qcesp,nudosgen,Pg,Qg,Qgesp,Qm,QM,m,Vesp ,nudoi,nudof,Rrama,Xrama,Btotrama,a,G_ni,B_ni,G_nf,B_nf,ni_tv,nf_tv,tm ax,tmin,paso,estado,Bsh,mod_Bsh,B_ini,n_pasos,inc_Bsh,Rgen,Xgen,Rtrafo ,Xtrafo,Hgen,d10,nudocero,nudocerof); [Y]=matriz(G_nudo,B_nudo,G_ni,B_ni,G_nf,B_nf,Rrama, Xrama,nudoi,nudof,a,nudos,Btotrama,Bsh,B_ini) end n=length(nudos); c=0; for k=1:n if (nudosgen(k)~=0) c=c+1; end end nudosdegen=zeros(c,1); i=1; for k=1:n if nudosgen(k)~=0 nudosdegen(i)=nudosgen(k); i=i+1; end end %e=error del Newton-Raphson e=10^(-5); %primer reparto de carga [tension,fase,Pcal,Qcal,incP,incQ,Y,J,H,N,L,M,tipo, Qg]=N_R_limQ(V,Pg,Pc,Qg,Qc,Qcesp,Y,tipo,Vesp,e,Qm,QM,m); %actualizacion de las vbles tension y fase tras el reparto de cargas V=tension teta=fase %estos angulos ya son radianes n=length(nudos); U=zeros(n,1); for k=1:n U(k)=V(k)*(cos(teta(k))+1i*sin(teta(k))); end Qg=Qgesp(m);

Page 3: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________91 “Algoritmo para analizar la estabilidad de una red eléctrica”

%Qg=QG+Qcal(m) contador_de_gen=0; for i=1:n if(nudosgen(i)~=0) contador_de_gen=contador_de_gen+1; end end ng=contador_de_gen; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%CÁLCULO DE Ig PARA OBTENER LA FUERZA ELECTROMOTRIZ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Ig=calc_Ig(Pg,Qg,U,ng); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%SUMA DE REACTANCIA DEL TRAFO Y DEL GENERADOR %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Rtotal=zeros(ng,1); Xtotal=zeros(ng,1); Ztotal=zeros(ng,1); for k=1:ng Rtotal(k)=Rgen(k)+Rtrafo(k); Xtotal(k)=Xgen(k)+Xtrafo(k); end for k=1:ng Ztotal(k)=Rtotal(k)+1i*Xtotal(k); end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%TENSIÓN DE LOS NUDOS CON GENERADORES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% UparaE=zeros(ng,1); for k=1:ng UparaE(k)=U(k); end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%CALCULO DE LA FUERZA ELECTROMOTRIZ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% [Em,delta0]=calc_electromotriz(UparaE,Ztotal,Ig,ng) ; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%ADICION DE LAS CARGAS A LA MATRIZ DE ADMITANCIAS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% [nudoscarga_nonull,vec,indice,Cargas,Yc,Sc,UCargas] =adic_cargas(Y,Pc,Qcesp,nudoscarga,nudos,U); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%ADICION DE LOS GENERADORES A LA MATRIZ DE ADMITANCIAS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Ygc=adic_gen(Yc,nudos,ng,nudosdegen,Xtotal)

Page 4: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________92 “Algoritmo para analizar la estabilidad de una red eléctrica”

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%INSTANTE EN QUE SE PRODUCE LA FALTA %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Att=input('Introduce incremento de tiempo\n','s'); At=str2num(Att); Tf00=input('Introduce instante en que se produce el fallo\n','s'); Tf0=str2num(Tf00); t=0:At:Tf0; lvec0=length(t); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%CÁLCULO DE LAS ADMITANCIAS DE LAS CARGAS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Pm=Pg [solac0,solv0,solalfa0]=inicio_euler_sin_fallo(Xtot al,Ygc,ng,lvec0,Em,delta0,d10,At,Tf0,Hgen,Pm,Rrama,Xrama,Btotrama,nudo i,nudof,nudosdegen,G_nudo,G_ni,G_nf,B_nudo,B_ni,B_nf,Bsh,B_ini,vec,nud os,nudoscarga_nonull,Cargas,nudocero,nudocerof) f=50; a=ng+1; vsinc=2*pi*f; solvv0=zeros(lvec0,a); solvv0(:,1)=0:At:Tf0; for k=1:lvec0 for j=2:a solvv0(k,j)=vsinc-solv0(k,j); end end %%%%%%%%%%%%%%%%%%%%%%%%% %%MATRIZ DURANTE EL FALLO %%%%%%%%%%%%%%%%%%%%%%%%% [A,Ydf,n,indice]=calc_Ydf_f(Ygc,m_falta,nudos,nudoc ero,nudocerof) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%ELECCIÓN INSTANTE EN QUE SE ABRE LA LÍNEA %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Tf11=input('Introduce instante en que se abre la lí nea\n','s'); Tf1=str2num(Tf11); Tf0c=Tf0+At; t=Tf0c:At:Tf1; lvec1=length(t);

Page 5: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________93 “Algoritmo para analizar la estabilidad de una red eléctrica”

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%VALORES DE LOS QUE SE PARTE PARA EL SIGUIENTE PERIODO %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% delta0=zeros(1,ng); d10=zeros(1,ng); k=2; for i=1:ng delta0(i)=solalfa0(lvec0,k); d10(i)=solv0(lvec0,k); k=k+1; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%CALCULO DE LAS VARIABLES DURANTE EL FALLO %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% [solac1,solv1,solalfa1]=euler_durante_fallo(Xtotal, Ydf,ng,lvec1,Em,delta0,d10,At,Tf0c,Tf1,Hgen,Pm,Rrama,Xrama,Btotrama,nu doi,nudof,nudosdegen,G_nudo,G_ni,G_nf,B_nudo,B_ni,B_nf,Bsh,B_ini,vec,n udos,nudoscarga_nonull,Cargas,nudocero,nudocerof,m_falta) f=50; a=ng+1; vsinc=2*pi*f; solvv1=zeros(lvec1,a); solvv1(:,1)=Tf0c:At:Tf1; for k=1:lvec1 for j=2:a solvv1(k,j)=vsinc-solv1(k,j); end end %%%%%%%%%%%%%%%%% %%MATRIZ POSFALLO %%%%%%%%%%%%%%%%% [Yrama,indice,Ypf]=calc_Ypf(Ygc,nudocero,nudocerof, nudos,Rrama,Xrama,Btotrama,nudoi) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%ELECCIÓN INSTANTE REENGANCHE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Tf22=input('Introduce instante en que se reengancha la línea\n','s'); Tf2=str2num(Tf22); Tf1c=Tf1+At; t=Tf1c:At:Tf2; lvec2=length(t); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%VALORES DE LOS QUE SE PARTE PARA EL SIGUIENTE PERIODO %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% delta0=zeros(1,ng); d10=zeros(1,ng); k=2; for i=1:ng delta0(i)=solalfa1(lvec1,k); d10(i)=solv1(lvec1,k); k=k+1; end

Page 6: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________94 “Algoritmo para analizar la estabilidad de una red eléctrica”

delta0 d10 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%CALCULO DE LAS VARIABLES POSFALLO %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% [solac2,solv2,solalfa2]=euler_posfallo(Xtotal,Ypf,n g,lvec2,Em,delta0,d10,At,Tf1c,Tf2,Hgen,Pm,Rrama,Xrama,Btotrama,nudoi,n udof,nudosdegen,G_nudo,G_ni,G_nf,B_nudo,B_ni,B_nf,Bsh,B_ini,vec,nudos, nudoscarga_nonull,Cargas,nudocero,nudocerof) f=50; a=ng+1; vsinc=2*pi*f; solvv2=zeros(lvec2,a); solvv2(:,1)=Tf1c:At:Tf2; for k=1:lvec2 for j=2:a solvv2(k,j)=vsinc-solv2(k,j); end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%ELECCIÓN INSTANTE FIN DE REPRESENTACIÓN %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Tf33=input('Introduce instante en que acaba la toma de datos\n','s'); Tf3=str2num(Tf33); Tf2c=Tf2+At; t=Tf2c:At:Tf3; lvec3=length(t); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%VALORES DE LOS QUE SE PARTE PARA EL SIGUIENTE PERIODO %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% delta0=zeros(1,ng); d10=zeros(1,ng); k=2; for i=1:ng delta0(i)=solalfa2(lvec2,k); d10(i)=solv2(lvec2,k); k=k+1; end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%CÁLCULO DE LAS VARIABLES SITUACIÓN REENGANCHE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% [solac3,solv3,solalfa3]=fin_euler_sin_fallo(Xtotal, Ygc,ng,lvec3,Em,delta0,d10,At,Tf2c,Tf3,Hgen,Pm,Rrama,Xrama,Btotrama,nu doi,nudof,nudosdegen,G_nudo,G_ni,G_nf,B_nudo,B_ni,B_nf,Bsh,B_ini,vec,n udos,nudoscarga_nonull,Cargas,nudocero,nudocerof) f=50; a=ng+1; vsinc=2*pi*f; solvv3=zeros(lvec3,a);

Page 7: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________95 “Algoritmo para analizar la estabilidad de una red eléctrica”

solvv3(:,1)=Tf2c:At:Tf3; for k=1:lvec3 for j=2:a solvv3(k,j)=vsinc-solv3(k,j); end end ltotal=lvec0+lvec1+lvec2+lvec3; alfa=zeros(ltotal,a); v=zeros(ltotal,a); vrel=zeros(ltotal,a); alfa(:,1)=0:At:Tf3; v(:,1)=0:At:Tf3; vrel(:,1)=0:At:Tf3; for k=1:lvec0 for j=2:a alfa(k,j)=solalfa0(k,j); v(k,j)=solv0(k,j); vrel(k,j)=solvv0(k,j); end end cont=1; c=lvec0+1; lparcial1=lvec0+lvec1; k=c; while (cont<=lvec1)&(k<=lparcial1) for j=2:a alfa(k,j)=solalfa1(cont,j); v(k,j)=solv1(cont,j); vrel(k,j)=solvv1(cont,j); end cont=cont+1; k=k+1; end cont=1; c=lvec0+lvec1+1; lparcial2=lparcial1+lvec2 lvec2 k=c; while (cont<=lvec2)&(k<=lparcial2) for j=2:a alfa(k,j)=solalfa2(cont,j); v(k,j)=solv2(cont,j); vrel(k,j)=solvv2(cont,j); end cont=cont+1; k=k+1; end cont=1; c=lvec0+lvec1+lvec2+1; k=c; while (cont<=lvec3)&(k<=ltotal)

Page 8: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________96 “Algoritmo para analizar la estabilidad de una red eléctrica”

for j=2:a alfa(k,j)=solalfa3(cont,j); v(k,j)=solv3(cont,j); vrel(k,j)=solvv3(cont,j); end cont=cont+1; k=k+1; end grafica(ng,alfa,v,vrel)

BLOQUE DEL REPARTO DE CARGAS � lectura_datos.m

function[SB,nudos,tipo,G_nudo,B_nudo,V,zona,nivel_t ens,nudoscarga,Pc,Qc,Qcesp,nudosgen,Pg,Qg,Qgesp,Qm,QM,m,Vesp,nudoi,nud of,Rrama,Xrama,Btotrama,a,G_ni,B_ni,G_nf,B_nf,ni_tv,nf_tv,tmax,tmin,pa so,estado,Bsh,mod_Bsh,B_ini,n_pasos,inc_Bsh,Rgen,Xgen,Rtrafo,Xtrafo,Hg en,d10,nudocero,nudocerof]=lecturadatos %funcion que realiza la selección del fichero .raw a leer [FileName,PathName] = uigetfile('*.raw'); %el archivo seleccionado se asigna a la variable fi chero fichero=FileName; A=textread(fichero,'%s','whitespace','\n');%variabl e que guarda el fichero como caracteres %extraccion de los distintos bloques que nos intere san [B1linea,Bnudo,Bcarga,Bgen,Brama,Btrafotoma,Bshunt, Blinea]=EXTRBLOQ(A); %extraccion de las variables necesarias para realiz ar el posterior reparto de carga %potencia base SB=potbase(B1linea); %datos asociados a los nudos [nudos,tipo,G_nudo,B_nudo,n,V,zona,nivel_tens]=dato nudo(Bnudo,SB); %datos asociados a las cargas [nudoscarga,Pc,Qc]=datocarga(Bcarga,SB,n,nudos); %datos asociados a los generadores [nudosgen,Pg,Qg,Qm,QM,m,Vesp,tipo,Rgen,Xgen,Rtrafo, Xtrafo,Hgen,d10]=datogen(Bgen,SB,n,nudos,tipo); [nudocero,nudocerof]=datolinea(Blinea); %almacenamiento de los vectores de reactiva origina les Qgesp=Qg;%vector de potencia reactiva generada, par a todos los nudos, nos servira en el caso de que un nudo PV pase a PQ

Page 9: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________97 “Algoritmo para analizar la estabilidad de una red eléctrica”

Qcesp=Qc;%vector de potencia reactiva consumida, pa ra todos los nudos, nos servira en el caso de que un nudo PV pase a PQ % %tratamiento de la reactiva para los nudos PV nudosnoPQ=find(tipo~=1);%buscamos los nudos no PQ Qc(nudosnoPQ)=0;%vector de potencia reactiva consu mida, para todos los nudos PV sera cero Qg(nudosnoPQ)=0;%vector de potencia reactiva gener ada, para todos los nudos PV sera cero %datos asociados a las ramas [nudoi,nudof,Rrama,Xrama,Btotrama,a,G_ni,B_ni,G_nf, B_nf]=datorama(Brama); %datos asociados a los trafos con tomas if length(Btrafotoma)~=0 [ni_tv,nf_tv,tmax,tmin,paso,estado]=datotrafoto ma(Btrafotoma); else ni_tv=0;nf_tv=0;tmax=0;tmin=0;paso=0;estado=0; end %datos asociados a las reactancias shunt [Bsh,mod_Bsh,B_ini,n_pasos,inc_Bsh]=datoshunt(Bshun t,SB);

Las subfunciones de lecturadatos.m son:

-EXTRBLOQ.m

-POTBASE.m

-datonudo.m

-datocarga.m

-datogen.m

-datolinea.m

-datorama.m

-datotrafotoma.m

-datoshunt.m

A continuación se exponen cada uno de las subfunciones de lecturadatos.m

Page 10: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________98 “Algoritmo para analizar la estabilidad de una red eléctrica”

� EXTRBLOQ.m

function[B1linea,Bnudo,Bcarga,Bgen,Brama,Btrafotoma ,Bshunt,Blinea]=EXTRBLOQ(A) Bnudo={};Bcarga={};Bgen={};Brama={};Btrafotoma={};B shunt={}; Blinea={}; %funcion que extrae los distintos bloques que nos i nteresan y los separa %del texto original n=length(A);%numero de lines en el texto bloq=zeros(1,n);%vector que contendra los inicios d e los bloques marcados con uno for k=1:n if A{k}(1,1)=='0'%si el reparto de carga no ha convergido bloq(k)=1;%se rellena el vector bloq con un os donde empieza el bloq end end bloques=find(bloq==1)%numero de las lineas donde em pieza los bloques B1linea=A{1} if A{1}(1,1)=='0'%si el reparto de carga no ha conv ergido %extracion del bloque de datos de nudos ni=bloques(1)+3;%inicio del bloque nf=bloques(2)-1;%final del bloque if ni<=nf h=0; for k=ni:nf h=h+1; Bnudo{h}=A{k}; end else Bnudo=[]; end %extracion del bloque de datos de cargas ci=bloques(2)+1; cf=bloques(3)-1; if ci<=cf h=0; for k=ci:cf h=h+1; Bcarga{h}=A{k}; end else Bcarga=[]; end %extracion del bloque de datos de generadores gi=bloques(3)+1; gf=bloques(4)-1; if gi<=gf h=0; for k=gi:gf h=h+1; Bgen{h}=A{k};

Page 11: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________99 “Algoritmo para analizar la estabilidad de una red eléctrica”

end else Bgen=[]; end %extracion del bloque de datos de ramas ri=bloques(4)+1; rf=bloques(5)-1; if ri<=rf h=0; for k=ri:rf h=h+1; Brama{h}=A{k}; end else Brama=[]; end %extracion del bloque de datos de trafos con to mas ti=bloques(5)+1; tf=bloques(6)-1; if ti<=tf h=0; for k=ti:tf h=h+1; Btrafotoma{h}=A{k}; end else Btrafotoma=[]; end %extracion del bloque de datos de susceptancias shunt bi=bloques(8)+1; bf=bloques(9)-1; if bi<=bf h=0; for k=bi:bf h=h+1; Bshunt{h}=A{k}; end else Bshunt=[]; end di=bloques(17)+1; df=bloques(18)-1; if di<=df h=0; for k=di:df h=h+1; Blinea{h}=A{k}; end else Blinea=[]; end end if A{1}(1,1)=='1'%si el reparto de carga ha converg ido %extracion del bloque de datos de nudos

Page 12: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________100 “Algoritmo para analizar la estabilidad de una red eléctrica”

ni=4; nf=bloques(1)-1; if ni<=nf h=0; for k=ni:nf h=h+1; Bnudo{h}=A{k}; end else Bnudo=[]; end %extracion del bloque de datos de cargas ci=bloques(1)+1; cf=bloques(2)-1; if ci<=cf h=0; for k=ci:cf h=h+1; Bcarga{h}=A{k}; end else Bcarga=[]; end %extracion del bloque de datos de generadores gi=bloques(2)+1; gf=bloques(3)-1; if gi<=gf h=0; for k=gi:gf h=h+1; Bgen{h}=A{k}; end else Bgen=[]; end %extracion del bloque de datos de ramas ri=bloques(3)+1; rf=bloques(4)-1; if ri<=rf h=0; for k=ri:rf h=h+1; Brama{h}=A{k}; end else Brama=[]; end %extracion del bloque de datos de trafos con to mas ti=bloques(4)+1; tf=bloques(5)-1; if ti<=tf h=0; for k=ti:tf h=h+1;

Page 13: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________101 “Algoritmo para analizar la estabilidad de una red eléctrica”

Btrafotoma{h}=A{k}; end else Btrafotoma=[]; end %extracion del bloque de datos de susceptancias shunt bi=bloques(8)+1; bf=bloques(9)-1; if bi<=bf h=0; for k=bi:bf h=h+1; Bshunt{h}=A{k}; end else Bshunt=[]; end di=bloques(16)+1; df=bloques(17)-1; if di<=df h=0; for k=di:df h=h+1; Blinea{h}=A{k}; end else Blinea=[]; end end

� POTBASE.m

function SB=potbase(B1linea) %funcion que extrae la potencia base %valores que determinan el espacio que ocupa la esp ecificacion de SB l=length(B1linea); n=find(B1linea==','); m=find(B1linea=='/'); if length(m)==0; for k=(n+1):l if B1linea(1,k)~=' ' m_aux=k; end end m=m_aux+1; end %cadena de caracteres que representa la SB Sb=B1linea(n+1:m-1); %paso la cadena de caracteres a un numero real SB=str2double(Sb);

Page 14: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________102 “Algoritmo para analizar la estabilidad de una red eléctrica”

� datonudo.m

function[nudos,tipo,G_nudo,B_nudo,n,V,zona,nivel_te ns]=datonudo(Bnudo,SB) %funcion que extrae los datos de los nudos n=length(Bnudo)%numero de nudos nudos=zeros(n,1);%vector que contiene la numeracion dada a los nudos en el texto original tipo=zeros(n,1);%vector que contine el tipo de nudo s (1-PQ,2-PV,3-slack) G_nudo=zeros(n,1);%vector que contiene la parte rea l de las admitancias shunt de los nudos B_nudo=zeros(n,1);%vector que contiene la parte ima ginaria de las admitancias shunt de los nudos for k=1:n elem=find(Bnudo{k}==',');%detecta los distintos elementos en una linea numero=Bnudo{k}(1,1:elem(1)-1); nudos(k,1)=str2double(numero); nivel_ten=Bnudo{k}(1,elem(2)+1:elem(3)-1); nivel_tens(k,1)=str2double(nivel_ten); tip=Bnudo{k}(1,elem(3)+1:elem(4)-1); tipo(k,1)=str2double(tip); G_nud=Bnudo{k}(1,elem(4)+1:elem(5)-1); G_nudo(k,1)=str2double(G_nud)/SB; B_nud=Bnudo{k}(1,elem(5)+1:elem(6)-1); B_nudo(k,1)=str2double(B_nud)/SB; V_nud=Bnudo{k}(1,elem(8)+1:elem(9)-1); V(k,1)=str2double(V_nud); Z_nud=Bnudo{k}(1,elem(6)+1:elem(7)-1); zona(k,1)=str2double(Z_nud); end %ordenacion de los nudos y los valores asociados a estos mediante el tipo priemro el slack, despues los PV y por ultimo los PQ slack=find(tipo==3);%indice del nudo slack nudosPV=find(tipo==2);%vector de indices de los nud os PV nudosPQ=find(tipo==1);%vector de indices de los nud os PQ sl=length(slack);%numero de nudos salacks pv=length(nudosPV);%numero de nudos PV pq=length(nudosPQ);%numero de nudos PQ for k=1:sl

Page 15: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________103 “Algoritmo para analizar la estabilidad de una red eléctrica”

nudos1(k,1)=nudos(slack(k)); end for k=1:pv nudos1(k+sl,1)=nudos(nudosPV(k)); end for k=1:pq nudos1(k+sl+pv,1)=nudos(nudosPQ(k)); end nudos=nudos1 for k=1:sl tipo1(k,1)=tipo(slack(k)); end for k=1:pv tipo1(k+sl,1)=tipo(nudosPV(k)); end for k=1:pq tipo1(k+sl+pv,1)=tipo(nudosPQ(k)); end tipo=tipo1 for k=1:sl G_nudo1(k+sl,1)=G_nudo(slack(k)); end for k=1:pv G_nudo1(k+sl,1)=G_nudo(nudosPV(k)); end for k=1:pq G_nudo1(k+sl+pv,1)=G_nudo(nudosPQ(k)); end G_nudo=G_nudo1; for k=1:sl B_nudo1(k,1)=B_nudo(slack(k)); end for k=1:pv B_nudo1(k+sl,1)=B_nudo(nudosPV(k)); end for k=1:pq B_nudo1(k+sl+pv,1)=B_nudo(nudosPQ(k)); end B_nudo=B_nudo1; for k=1:sl V1(k,1)=V(slack(k)); end for k=1:pv V1(k+sl,1)=V(nudosPV(k)); end for k=1:pq V1(k+sl+pv,1)=V(nudosPQ(k)); end V=V1; for k=1:sl Z1(k,1)=zona(slack(k)); end

Page 16: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________104 “Algoritmo para analizar la estabilidad de una red eléctrica”

for k=1:pv Z1(k+sl,1)=zona(nudosPV(k)); end for k=1:pq Z1(k+sl+pv,1)=zona(nudosPQ(k)); end zona=Z1; for k=1:sl nivel_tens1(k,1)=nivel_tens(slack(k)); end for k=1:pv nivel_tens1(k+sl,1)=nivel_tens(nudosPV(k)); end for k=1:pq nivel_tens1(k+sl+pv,1)=nivel_tens(nudosPQ(k)); end nivel_tens=nivel_tens1; n=length(nudos);

� datocarga.m

function [nudoscarga,Pc,Qc]=datocarga(Bcarga,SB,n,n udos) %funcion que extrae los datos de las cargas m=length(Bcarga)%numero de cargas nudoscarga=zeros(n,1);%numeros de los nudos con car gas estadocarga=zeros(n,1);%vector de estado de las car gas (1-activa,0-no activa o sin carga) Pc=zeros(n,1);%vector que contiene las potencias ac tivas consumidas en los nudos Qc=zeros(n,1);%vector que contiene las potencias re activas consumidas en los nudos for k=1:m elem=find(Bcarga{k}==',');%detecta los distinto s elemntos de una linea numero=Bcarga{k}(1,1:elem(1)-1); num=str2double(numero);%nudos con cargas h=find(nudos==num);%indices de los nudos con ca rgas estado=Bcarga{k}(1,elem(2)+1:elem(3)-1); estadocarga(h)=str2double(estado);%estado de la carga if estadocarga(h)==1%solo se consideran las carg as activas nudoscarga(h)=num; Pcons=Bcarga{k}(1,elem(5)+1:elem(6)-1); Pc(h)=Pc(h)+str2double(Pcons)/SB;%para los nu dos con mas de una carga se suman Qcons=Bcarga{k}(1,elem(6)+1:elem(7)-1);

Page 17: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________105 “Algoritmo para analizar la estabilidad de una red eléctrica”

Qc(h)=Qc(h)+str2double(Qcons)/SB;%para los nu dos con mas de una carga se suman end end

� datogen.m function[nudosgen,Pg,Qg,Qm,QM,m,Vesp,tipo,Rgen,Xgen ,Rtrafo,Xtrafo,Hgen,d10]=datogen(Bgen,SB,n,nudos,tipo) %funcion que extrae los datos de los generadores m=length(Bgen)%numero de generadores nudosgen=zeros(n,1);%vector de los numeros con gene radores estadogen=zeros(n,1);%Vector de estados de los gene radores (1-activo,0-no activo o sin generador) Pg=zeros(n,1);%vector de potencias activas generada s Qg=zeros(n,1);%vector de potencias reactivas genera das Qm=zeros(n,1);%vector de los limites minimos de rea ctiva QM=zeros(n,1);%vector de los limites maximos de rea ctiva Vesp=zeros(n,1);%vector de tensiones especificadas Smaq=zeros(m,1); %vector de potencia de la máquina Rgen=zeros(m,1);%vector de las resistencias de los generadores Xgen=zeros(m,1);%vector de las reactancias de los g eneradores Rtrafo=zeros(m,1);%vector de las resistencias de lo s transformadores Xtrafo=zeros(m,1);%vector de las reactancias de los transformadores Hgen=zeros(m,1);%vector de las constantes de inerci a de los generadores d10=zeros(m,1);%vector de las velocidades iniciales de los generadores for k=1:m elem=find(Bgen{k}==',');%detecta los distintos elemntos de una linea numero=Bgen{k}(1,1:elem(1)-1); num=str2double(numero); h=find(nudos==num); estado=Bgen{k}(1,elem(14)+1:elem(15)-1); estadogen(h)=str2double(estado); if estadogen(h)==1%solo consideramos los genera dores activos nudosgen(h)=num Pgen=Bgen{k}(1,elem(2)+1:elem(3)-1); Pg(h)=Pg(h)+str2double(Pgen)/SB%si un nudo tiene dos generadores se suman las Pg Qgen=Bgen{k}(1,elem(3)+1:elem(4)-1); Qg(h)=Qg(h)+str2double(Qgen)/SB%si un nudo tiene dos generadores se suman las Qg Qmax=Bgen{k}(1,elem(4)+1:elem(5)-1);

Page 18: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________106 “Algoritmo para analizar la estabilidad de una red eléctrica”

QM(h)=QM(h)+str2double(Qmax)/SB;%si un nudo tiene dos generadores se suman los limites Qmin=Bgen{k}(1,elem(5)+1:elem(6)-1); Qm(h)=Qm(h)+str2double(Qmin)/SB;%si un nudo tiene dos generadores se suman los limites Vespc=Bgen{k}(1,elem(6)+1:elem(7)-1); Vesp(h)=str2double(Vespc); SSmaq=Bgen{k}(1,elem(8)+1:elem(9)-1); Smaq(h)=str2double(SSmaq); Rg=Bgen{k}(1,elem(9)+1:elem(10)-1); Xg=Bgen{k}(1,elem(10)+1:elem(11)-1); Rt=Bgen{k}(1,elem(11)+1:elem(12)-1); Xt=Bgen{k}(1,elem(12)+1:elem(13)-1); if (Smaq(h)~=SB) Rgen(h)=str2double(Rg)*(Smaq(h)/SB); Xgen(h)=str2double(Xg)*(Smaq(h)/SB); Rtrafo(h)=str2double(Rt)*(Smaq(h)/SB) ; Xtrafo(h)=str2double(Xt)*(Smaq(h)/SB) ; else Rgen(h)=str2double(Rg)/SB; Xgen(h)=str2double(Xg)/SB; Rtrafo(h)=str2double(Rt)/SB; Xtrafo(h)=str2double(Xt)/SB; end dd10=Bgen{k}(1,elem(20)+1:elem(21)-1); d10(h)=str2double(dd10); HH=Bgen{k}(1,elem(21)+1:elem(22)-1); Hgen(h)=str2double(HH); else % tipo(h)=1; end end

Page 19: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________107 “Algoritmo para analizar la estabilidad de una red eléctrica”

Pg Qg %determinacion de los limites de reactiva en los ge neradores y el Slack %(diferencia entre el OPF y el reparto de cargas, d onde el Slack no %presenta límites de reactiva) nudosPV_S=find(tipo~=1);%buscamos los nudos PV y el Slack if length(nudosPV_S)~=0 mm=find(Qm(nudosPV_S)~=0); mM=find(QM(nudosPV_S)~=0); if length(mm)>=length(mM) m=nudosPV_S(mm);%vector de indices de los n udos PV que tienen limites de reactiva else m=nudosPV_S(mM);%vector de indices de los n udos PV que tienen limites de reactiva end Qm1=Qm(m); Qm=Qm1;%vector de limites inferiores de reactiv a para los nudos PV QM1=QM(m); QM=QM1;%vector de limites superiores de reactiv a para los nudos PV else m=[];Qm=0;QM=0; end

� datolinea.m

function [nudocero,nudocerof]=datolinea(Blinea) nni=Blinea{1}; nudocero=str2double(nni);%numero del nudo inicial d e la rama nnf=Blinea{2}; nudocerof=str2double(nnf);%numero del nudo final de la rama

� datorama.m

function[nudoi,nudof,Rrama,Xrama,Btotrama,a,G_ni,B_ ni,G_nf,B_nf]=datorama(Brama) %funcion que extrae los datos de las ramas m=length(Brama)%numero de ramas nudoi=zeros(m,1);%vector que contiene los numeros d e los nudos iniciales de las ramas nudof=zeros(m,1);%vector que contiene los numeros d e los nudos finales de las ramas Rrama=zeros(m,1);%vector que contiene las resistenc ias de las ramas Xrama=zeros(m,1);%vector que contiene las reactanci as de las ramas

Page 20: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________108 “Algoritmo para analizar la estabilidad de una red eléctrica”

Btotrama=zeros(m,1);%vector que contiene la suscept ancia total de las ramas a=zeros(m,1);%vector que contiene el valor para a e n el caso de que la rama sea un trafo y cero en caso contrario G_ni=zeros(m,1);%vector que contiene la parte real de la admitancia shunt asociada al nudo inicial B_ni=zeros(m,1);%vector que contiene la parte imagi naria de la admitancia shunt asociada al nudo inicial G_nf=zeros(m,1);%vector que contiene la parte real de la admitancia shunt asociada al nudo final B_nf=zeros(m,1);%vector que contiene la parte imagi aria de la admitancia shunt asociada al nudo final estadorama=zeros(m,1);%vector que indica el estado de la rama (1-actica,0-no activa) for k=1:m elem=find(Brama{k}==',');%detecta los distintos elemntos de una linea estado=Brama{k}(1,elem(15)+1:elem(16)-1); estadorama(k)=str2double(estado); if estadorama(k)==1%solo se consideran las rama s activas ni=Brama{k}(1,1:elem(1)-1); nudoi(k)=str2double(ni);%numero del nudo in icial de la rama nf=Brama{k}(1,elem(1)+1:elem(2)-1); nudof(k)=str2double(nf);%numero del nudo fi nal de la rama Rram=Brama{k}(1,elem(3)+1:elem(4)-1); Rrama(k)=str2double(Rram);%resistencia de l a rama Xram=Brama{k}(1,elem(4)+1:elem(5)-1); Xrama(k)=str2double(Xram);%reactancia de la rama Btot=Brama{k}(1,elem(5)+1:elem(6)-1); Btotrama(k)=str2double(Btot);%susceptancia total de la rama (shunt) if elem(9)+1~=elem(10) a1=Brama{k}(1,elem(9)+1:elem(10)-1); a(k)=str2double(a1);%valor de la toma de l trafo, sera distinto de cero para las ramas trafos. end G_nin=Brama{k}(1,elem(11)+1:elem(12)-1); G_ni(k)=str2double(G_nin);%parte real de la admitancia shunt del nudo inicial de la rama B_nin=Brama{k}(1,elem(12)+1:elem(13)-1); B_ni(k)=str2double(B_nin);%parte imaginaria de la admitancia shunt del nudo inicial de la rama G_nfin=Brama{k}(1,elem(13)+1:elem(14)-1); G_nf(k)=str2double(G_nfin);%parte real de l a admitancia shunt del nudo final de la rama

Page 21: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________109 “Algoritmo para analizar la estabilidad de una red eléctrica”

B_nfin=Brama{k}(1,elem(14)+1:elem(15)-1); B_nf(k)=str2double(B_nfin);%parte imaginari a de la admitancia shunt del nudo final de la rama end end Rrama Xrama nudoi=abs(nudoi) nudof=abs(nudof)

� datotrafotoma.m

function [ni_tv,nf_tv,tmax,tmin,paso,estado]=datotr afotoma(Btrafotoma) %funcion que extrae los datos de los trafos con tom a %numero de trafos con tomas m=length(Btrafotoma); ni_tv=zeros(m,1);%vector que contiene los numeros d e los nudos iniciales de los trafos nf_tv=zeros(m,1);%vector que contiene los numeros d e los nudos finales de los trafos tmax=zeros(m,1);%vector que contiene los valores ma ximos de las tomas tmin=zeros(m,1);%vector que contiene los valores mi nimos de las tomas paso=zeros(m,1);%vector que contiene los valores de los pasos de las distintas tomas for k=1:m elem=find(Btrafotoma{k}==',');%detecta los dist intos elemntos de una linea ni=Btrafotoma{k}(1,1:elem(1)-1); ni_tv(k)=str2double(ni);%nudo de entrada al trafo de toma variable nf=Btrafotoma{k}(1,elem(1)+1:elem(2)-1); nf_tv(k)=str2double(nf);%nudo de salida al trafo de toma variable tmaxi=Btrafotoma{k}(1,elem(4)+1:elem(5)-1); tmax(k)=str2double(tmaxi);%valor maximo pos ible de la toma tmini=Btrafotoma{k}(1,elem(5)+1:elem(6)-1); tmin(k)=str2double(tmini);%valor minimo pos ible de la toma pas=Btrafotoma{k}(1,elem(8)+1:elem(9)-1); paso(k)=str2double(pas);%lo multiplicamos p or 100 para que no redondee a 4 cifras decimales perdiendose informaci on est=Btrafotoma{k}(1,elem(10)+1:elem(11)-1);

Page 22: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________110 “Algoritmo para analizar la estabilidad de una red eléctrica”

estado(k)=str2double(est);%lo multiplicamos por 100 para que no redondee a 4 cifras decimales perdiendose inform acion end

� datoshunt.m

function [Bsh,mod_Bsh,B_ini,n_pasos,inc_Bsh]=datosh unt(Bshunt,SB) %funcion que extrae los datos de las susceptancia s hunt m=length(Bshunt);%numero de susceptancias shunt Bsh=[];%vector que contiene los numeros de los nudo s con susceptancias shunt mod_Bsh=[];%vector que contiene los modos de contro l (0=fijo, 1=discreto, 2=continuo) Vmax_Bsh=[];%vector que contiene las tensiones maxi mas Vmin_Bsh=[];%vector que contiene las tensiones mini mas B_ini=[];%vector que contiene el valor inicial de B shunt n_pasos=[];%vector que contiene los pasos posibles para el control inc_Bsh=[];%vector que contiene el incremento en su valor por paso for k=1:m elem=find(Bshunt{k}==',');%detecta los distinto s elemntos de una linea fin_linea=length(Bshunt{k}); Bsh_n=Bshunt{k}(1,1:elem(1)-1); Bsh(k)=str2double(Bsh_n); mod_Bsh_n=Bshunt{k}(1,elem(1)+1:elem(2)-1); mod_Bsh(k)=str2double(mod_Bsh_n); B_ini_n=Bshunt{k}(1,elem(5)+1:elem(6)-1); B_ini(k)=str2double(B_ini_n)/SB; if mod_Bsh(k)~=0%solo se consideran las ramas a ctivas n_pasos_n=Bshunt{k}(1,elem(6)+1:elem(7)-1); n_pasos(k)=str2double(n_pasos_n); if length(elem)>7 inc_Bsh_n=Bshunt{k}(1,elem(7)+1:elem(8)-1); inc_Bsh(k)=str2double(inc_Bsh_n)/SB; else inc_Bsh_n=Bshunt{k}(1,elem(7)+1:fin_linea); inc_Bsh(k)=str2double(inc_Bsh_n)/SB; end end end

Page 23: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________111 “Algoritmo para analizar la estabilidad de una red eléctrica”

� lecturadatos_f.m function[SB,nudos,tipo,G_nudo,B_nudo,V,zona,nivel_t ens,nudoscarga,Pc,Qc,Qcesp,nudosgen,Pg,Qg,Qgesp,Qm,QM,m,Vesp,nudoi,nud of,nudok,Rrama,Xrama,Btotrama,a,G_ni,B_ni,G_nf,B_nf,ni_tv,nf_tv,tmax,t min,paso,estado,Bsh,mod_Bsh,B_ini,n_pasos,inc_Bsh,Rgen,Xgen,Rtrafo,Xtr afo,Hgen,d10,nudocero]=lecturadatos_f(m_falta,SB,nudos,tipo,G_nudo,B_n udo,V,zona,nivel_tens,nudoscarga,Pc,Qc,Qcesp,nudosgen,Pg,Qg,Qgesp,Qm,Q M,m,Vesp,nudoi,nudof,Rrama,Xrama,Btotrama,a,G_ni,B_ni,G_nf,B_nf,ni_tv, nf_tv,tmax,tmin,paso,estado,Bsh,mod_Bsh,B_ini,n_pasos,inc_Bsh,Rgen,Xge n,Rtrafo,Xtrafo,Hgen,d10,nudocero,nudocerof) lnudos=length(nudos); llnudos=lnudos+1; %%%%%%% el nudok se ha situado en la última posició n del vector nudos %%%%%%% se añade un elemento más a los vectores que corresponda que tengan el tamaño n %%%%%%% para las ramas, se modifican los vectores n udoi,nudof, Rrama,Xrama y Btotrama nudok=230; nnudos=zeros(llnudos); nnudos=[nudos;nudok]; nudos=nnudos; ttipo=zeros(llnudos); ttipo=[tipo;1]; % el nudok es tipo 1 tipo=ttipo; GG_nudo=zeros(llnudos); GG_nudo=[G_nudo;0]; G_nudo=GG_nudo; BB_nudo=zeros(llnudos); BB_nudo=[B_nudo;0]; B_nudo=BB_nudo; BB_Bsh=zeros(llnudos); BB_Bsh=[Bsh;0]; Bsh=BB_Bsh; BB_ini=zeros(llnudos); BB_ini=[B_ini;0]; B_ini=BB_ini; VV=zeros(llnudos); VV=[V;1]; V=VV; zzona=zeros(llnudos,1); zzona=[zona;1]; zona=zzona; nnivel_tens=zeros(llnudos,1); nnivel_tens=[nivel_tens;230];

Page 24: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________112 “Algoritmo para analizar la estabilidad de una red eléctrica”

nivel_tens=nnivel_tens; nudoscarga=[nudoscarga;nudok]; Pc=[Pc;0]; Qc=[Qc;0]; Qcesp=[Qcesp;0]; nnudosgen=length(llnudos); nnudosgen=[nudosgen;0]; nudosgen=nnudosgen; PPg=length(llnudos); PPg=[Pg;0]; Pg=PPg; QQg=length(llnudos); QQg=[Qg;0]; Qg=QQg; QQgesp=length(llnudos); QQgesp=[Qgesp;0]; Qgesp=QQgesp; VVesp=length(llnudos); VVesp=[Vesp;0]; Vesp=VVesp; lramas=length(Xrama); llramas=lramas+1; nnudoi=zeros(llramas,1); nnudof=zeros(llramas,1); c=0; for i=1:lramas if ((nudoi(i)==nudocero)&(nudof(i)~=nudocerof)||(nudoi (i)~=nudocero)&(nudof(i)==nudocerof)||(nudoi(i)~=nudocero)&(nudof(i)~= nudocerof)) nnudoi(i)=nudoi(i); nnudof(i)=nudof(i); end if(nudoi(i)==nudocero)&(nudof(i)==nudocerof) indicador=i; nnudoi(indicador)=nudoi(indicador); nnudof(indicador)=nudok; s=indicador+1; nnudoi(s)=nudok; nnudof(s)=nudof(indicador); l=s+1; nnudoi(l:llramas)=nudoi(s:lramas); nnudof(l:llramas)=nudof(s:lramas); break end end GG_ni=zeros(llramas,1); BB_ni=zeros(llramas,1); GG_nf=zeros(llramas,1);

Page 25: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________113 “Algoritmo para analizar la estabilidad de una red eléctrica”

BB_nf=zeros(llramas,1); RRrama=zeros(llramas,1); XXrama=zeros(llramas,1); BBtotrama=zeros(llramas,1); for i=1:lramas if (i~=indicador) RRrama(i)=Rrama(i); XXrama(i)=Xrama(i); BBtotrama(i)=Btotrama(i); GG_ni(i)=G_ni(i); BB_ni(i)=B_ni(i); GG_nf(i)=G_nf(i); BB_nf(i)=B_nf(i); end if(i==indicador) RRrama(i)=Rrama(i)*m_falta; XXrama(i)=Xrama(i)*m_falta; BBtotrama(i)=Btotrama(i)*m_falta; GG_ni(i)=G_ni(i); BB_ni(i)=B_ni(i); GG_nf(i)=0; BB_nf(i)=0; s=i+1; RRrama(s)=Rrama(i)*(1-m_falta); XXrama(s)=Xrama(i)*(1-m_falta); BBtotrama(s)=Btotrama(i)*(1-m_falta); GG_ni(s)=0; BB_ni(s)=0; GG_nf(s)=G_nf(i); BB_nf(s)=B_nf(i); l=s+1; RRrama(l:llramas)=Rrama(s:lramas); XXrama(l:llramas)=Xrama(s:lramas); BBtotrama(l:llramas)=Btotrama(s:lramas); GG_ni(l:llramas)=G_ni(s:lramas); BB_ni(l:llramas)=B_ni(s:lramas); GG_nf(l:llramas)=G_nf(s:lramas); BB_nf(l:llramas)=B_nf(s:lramas); break end end Rrama=RRrama; Xrama=XXrama; Btotrama=BBtotrama; nudos; G_ni=GG_ni; G_nf=GG_nf; B_ni=BB_ni; B_nf=BB_nf;

Page 26: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________114 “Algoritmo para analizar la estabilidad de una red eléctrica”

nudoi=nnudoi; nudof=nnudof; a=[a;0];

� matriz.m function[Y]=matriz(G_nudo,B_nudo,G_ni,B_ni,G_nf,B_n f,Rrama,Xrama,nudoi,nudof,a,nudos,Btotrama,Bsh,B_ini) %matriz de admitancias de nudos Y=[]; n=length(G_nudo);%numero de nudos m=length(nudoi);%numero de ramas for k=1:length(Bsh) ind=find(nudos==Bsh(k)); B_nudo(ind)=B_nudo(ind)+B_ini(k); end %vector de admitancias shunt de los nudos Ynudo=G_nudo+j*B_nudo; %vector de impedancias de las ramas Zccrama=Rrama+j*Xrama; %vector de admitancias de las ramas for k=1:m Yccrama(k,1)=inv(Zccrama(k)); end %relleno de la matriz de admitancias en los element os diagonales %los terminos correspondientes a las ramas que son trafos con toma variable no los considero (igual a cero) for k=1:n numero=nudos(k);%vamos viendo para cada nudo %primero vemos los terminos correspondientes al nudo numero cuando es inicio de la rama %inicializacion de variables para cuando el nud o es el inicio de una rama Gaux1=[];%vector que almacena las conductancias shunt de las ramas en las que el nudo es inicio de rama Baux1=[];%vector que almacena las csusceptancia s shunt de las ramas en las que el nudo es inicio de rama Yaux1=[];%vector que almacena las admitancias s hunt de las ramas en las que el nudo es inicio de rama aux1=[];%vector auxiliar de indices de ramas do nde el nudo es inicio de rama

Page 27: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________115 “Algoritmo para analizar la estabilidad de una red eléctrica”

aux11=[];%vector auxiliar de indices de aux1, v ector de indices de ramas donde el nudo es inicio de rama, donde la ra ma no es trafo aux12=[];%vector auxiliar de indices de aux1, v ector de indices de ramas donde el nudo es inicio de rama, donde la ra ma es trafo Yccramaux1=[];%vector de admitancias de ramas n o trafos incidentes en el nudo Yccramaux12=[];%vector de admitancias de ramas trafos incidentes en el nudo %vector que contiene las ramas cuyo nudo inicia l es numero aux1=find(nudoi==numero); %construccion de la admitancia shunt total inci dente en el nudo numero por parte de las ramas cunado es incio de ra ma Gaux1=G_ni(aux1);%vector que almacena las condu ctancias shunt de las ramas en las que el nudo es inicio de rama Baux1=B_ni(aux1);%vector que almacena las csusc eptancias shunt de las ramas en las que el nudo es inicio de rama Yaux1=Gaux1+j*Baux1;%vector que almacena las ad mitancias shunt de las ramas en las que el nudo es inicio de rama Yinc1=sum(Yaux1);%admitancia shunt total incide nte en el nudo cuando el nudo es inicio de rama %construccion de la admitancia total de ramas n o trafos incidentes en el nudo numero if length(aux1)~=0 aux11=find(a(aux1)==0);%vector que contiene los indices del vector aux1 cuyas ramas son no trafos end Yccramaux1=Yccrama(aux1(aux11));%vector de admi tancias de ramas no trafos incidentes en el nudo Yccpar1=sum(Yccramaux1);%admitancia total de ra mas no trafos incidentes en el nudo %consideramos las ramas trafos if length(aux1)~=0%se comprueba que existe al m enos un nudo inicial igual a numero aux12=find(a(aux1)~=0);%vector que contiene los indices del vector aux1 cuyas ramas son trafos for p=1:length(aux12)%comprobamos para toda s las ramas trafos Yccramaux12(p)=Yccrama(aux1(aux12(p)))/a(aux1(aux12 (p)))^2;%se asigna ña admitancia según el modelo del trafo end end %valor correspondiente de la admitancia de rama s trafos incidentes en el nudo numero Yccpar12=sum(Yccramaux12); %inicializacion de variables para cuando el nud o es el final de una rama Gaux2=[];%vector que almacena las conductancias shunt de las ramas en las que el nudo es final de rama Baux2=[];%vector que almacena las csusceptancia s shunt de las ramas en las que el nudo es final de rama Yaux2=[];%vector que almacena las admitancias s hunt de las ramas en las que el nudo es final de rama aux2=[];%vector auxiliar de indices de ramas do nde el nudo es inicio de rama

Page 28: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________116 “Algoritmo para analizar la estabilidad de una red eléctrica”

aux21=[];%vector auxiliar de indices de aux1, v ector de indices de ramas donde el nudo es final de rama, donde la ram a no es trafo aux22=[];%vector auxiliar de indices de aux1, v ector de indices de ramas donde el nudo es final de rama, donde la ram a es trafo Yccramaux2=[];%vector de admitancias de ramas n o trafos incidentes en el nudo cuando el nudo es final de rama Yccramaux22=[]; %vector que contiene las ramas cuyo nudo final es numero aux2=find(abs(nudof)==numero); %construccion de la admitancia shunt total inci dente en el nudo numero por parte de las ramas Gaux2=G_nf(aux2);%vector que almacena las condu ctancias shunt de las ramas en las que el nudo es final de rama Baux2=B_nf(aux2);%vector que almacena las csusc eptancias shunt de las ramas en las que el nudo es final de rama Yaux2=Gaux2+j*Baux2;%vector que almacena las ad mitancias shunt de las ramas en las que el nudo es final de rama Yinc2=sum(Yaux2);%admitancia shunt total incide nte en el nudo cuando el nudo es final de rama %construccion de la admitancia de rama total in cidente en el nudo numero, solo se consideran las ramas no trafos if length(aux2)~=0 aux21=find(a(aux2)==0);%vector que contiene los indices del vector aux2 cuyas ramas son no trafos end Yccramaux2=Yccrama(aux2(aux21)); Yccpar2=sum(Yccramaux2); %consideramos las ramas trafos if length(aux2)~=0%se comprueba que existe al m enos un nudo final igual a numero aux22=find(a(aux2)~=0);%vector que contiene los indices del vector aux2 cuyas ramas son trafos for p=1:length(aux22) Yccramaux22(p)=Yccrama(aux2(aux22(p))); %si no se encuentra toma variable se le da el valor correspondiente end end %valor correspondiente de la admitancia de rama s trafos incidentes en el nudo numero Yccpar22=sum(Yccramaux22); %admitancia total, a falta de añadir la suscept ancia del modelo en pi de la rama, elemento diagonal. Y(k,k)=Ynudo(k)+Yinc1+Yccpar1+Yccpar12+Yinc2+Yccpar 2+Yccpar22;%rellenamos el end %añadimos los terminos de susceptancia del modelo e n pi de la linea, consideramos las ramas no trafos %vector contiene las ramas que son no trafos ramas=find(a==0); %nudos iniciales de todas las ramas no trafos inirama=nudoi(ramas); %nudos finales de todas las ramas no trafos

Page 29: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________117 “Algoritmo para analizar la estabilidad de una red eléctrica”

finrama=nudof(ramas); for g=1:length(ramas) p=find(nudos==inirama(g));%indice para la matri z del nudo inicio q=find(nudos==finrama(g));%indice para la matri z del nudo final %rellenamos los elementos diagonales con los va lores correspondientes for k=1:n if k==p Y(p,p)=Y(p,p)+j*(Btotrama(ramas(g))/2); end if k==q Y(q,q)=Y(q,q)+j*(Btotrama(ramas(g))/2); end end end %relleno de la matriz de admitancias en los element os no diagonales %consideramos las ramas no trafos ramas=find(a==0);%vector contiene las ramas que son no trafos inirama=nudoi(ramas);%nudos iniciales de todas las ramas no trafos finrama=nudof(ramas);%nudos finales de todas las ra mas no trafos for g=1:length(ramas) p=find(nudos==inirama(g));%indice para la matri z del nudo inicio q=find(nudos==finrama(g));%indice para la matri z del nudo final Y(p,q)=Y(p,q)-(Yccrama(ramas(g)));%hacemos meno s el sumatorio de las admitancias de las ramas entre los nudos p y q Y(q,p)=Y(p,q);%la matriz de admitancia en nuest ro caso es simetrico poque no tenemos fuentes dependientes ni trafos de desplazamiento de fase end %consideramos las ramas trafos trafos=find(a~=0);%vector contiene las ramas que so n trafos initrafo=nudoi(trafos);%nudos iniciales de todas la s ramas trafos fintrafo=nudof(trafos);%nudos finales de todas las ramas trafos for g=1:length(trafos) p=find(nudos==initrafo(g));%indice para la matr iz del nudo inicio q=find(nudos==fintrafo(g));%indice para la matr iz del nudo final Y(p,q)=Y(p,q)-Yccrama(trafos(g))/a(trafos(g));% si no se encuentra toma variable se le da el valor correspondiente Y(q,p)=Y(p,q);%la matriz de admitancia en nuest ro caso es simetrico poque no tenemos fuentes dependientes ni trafos de desplazamiento de fase end Y

Page 30: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________118 “Algoritmo para analizar la estabilidad de una red eléctrica”

� N_R_limQ.m function[tension,fase,Pcal,Qcal,incP,incQ,Y,J,H,N,L ,M,tipo,Qg]=N_R_limQ(V,Pg,Pc,Qg,Qc,Qcesp,Y,tipo,Vesp,e,Qm,QM,m) %inicializacion de un contador para el numero de it eraciones cont=0; %perfil plano de tensiones inicial V=perfilplano(Vesp,tipo); %para tener en cuenta las actuaciones sobre las ten siones de los %generadores for k=1:length(tipo) if tipo(k)~=1 V(k)=Vesp(k); end end %inicializacion de teta n=length(tipo); teta=zeros(n,1); %Inicializacion de los vectores que guarda los nudo s PV que pasan a PQ PVmax=zeros(n,1);%nudos PV que pasan a PQ por sobre pasar el limite superior PVmin=zeros(n,1);%nudos PV que pasan a PQ por sobre pasar el limite inferior %calculo de Pcal y Qcal % Pcal=Pcalc(Y,V,teta); % Qcal=Qcalc(Y,V,teta); for p=1:n x=[]; for q=1:n x(q)=V(q)*(real(Y(p,q))*cos(teta(p)-teta(q))+imag(Y(p,q))*sin(teta(p)-teta(q))); end y=sum(x); Pcal(p,1)=V(p)*y; end for p=1:n x=[]; for q=1:n x(q)=V(q)*(real(Y(p,q))*sin(teta(p)-teta(q) )-imag(Y(p,q))*cos(teta(p)-teta(q))); end y=sum(x); Qcal(p,1)=V(p)*y; end %calculo del primer residuo % b=residuo(Y,V,teta,tipo,Pg,Pc,Qg,Qcesp); slack=find(tipo==3);%indices de los nudos slacks sl=length(slack);%numero de nudos salcks pq=find(tipo==1);%vector de los indices de los nudo s PQ

Page 31: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________119 “Algoritmo para analizar la estabilidad de una red eléctrica”

g=length(pq);%numero de nudos PQ %calculo inc_P Pesp=Pg-Pc; for k=sl+1:n incP(k-sl,1)=Pesp(k)-Pcal(k);%vector incremento de potencia activa end %calculo inc_Q Qesp=Qg-Qcesp; for k=1:g incQ(k,1)=Qesp(pq(k))-Qcal(pq(k));%vector incre mento de pot. reactiva de los nudos PQ end if isempty(pq) incQ=[];%para evitar posibles errores end b=[incP;incQ]; %algoritmo iterativo while max(abs(b))>e %calculo del jacobiano %creacion de H H=[]; for p=sl+1:n for q=sl+1:n x=[]; if p==q for k=1:n if p~=k x(k)=V(k)*(-real(Y(p,k))*sin(teta(p )-teta(k))+imag(Y(p,k))*cos(teta(p)-teta(k))); end end y=sum(x); H(p-sl,q-sl)=V(p)*y; else H(p-sl,q-sl)=V(p)*V(q)*(real(Y(p,q))*si n(teta(p)-teta(q))-imag(Y(p,q))*cos(teta(p)-teta(q))); end end end %creacion de N pqnoc=pq;%no existe diferencias entre los nudos PQ N=zeros(n-sl,g); for h=1:g q=pqnoc(h);

Page 32: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________120 “Algoritmo para analizar la estabilidad de una red eléctrica”

for p=sl+1:n x=[]; if p==q for k=1:n if p~=k x(k)=V(k)*(real(Y(p,k))*cos(teta(p )-teta(k))+imag(Y(p,k))*sin(teta(p)-teta(k))); end end y=sum(x); N(p-sl,h)=V(p)*(y+2*V(p)*real(Y(p,p))); else N(p-sl,h)=V(p)*V(q)*(real(Y(p,q))*cos(tet a(p)-teta(q))+imag(Y(p,q))*sin(teta(p)-teta(q))); end end end %creacion de M M=zeros(g,n-sl); for h=1:g p=pq(h); for q=sl+1:n x=[]; if p==q for k=1:n if p~=k x(k)=V(k)*(real(Y(p,k))*cos(teta(p )-teta(k))+imag(Y(p,k))*sin(teta(p)-teta(k))); end end y=sum(x); M(h,q-sl)=V(p)*y; else M(h,q-sl)=-V(p)*V(q)*(real(Y(p,q))*c os(teta(p)-teta(q))+imag(Y(p,q))*sin(teta(p)-teta(q))); end end end %creacion de L L=zeros(g);%matriz cuadrada de dimensiones los nudo s PQ for h=1:g p=pq(h); for l=1:g q=pq(l); x=[]; if p==q for k=1:n if p~=k x(k)=V(k)*(real(Y(p,k))*sin(teta( p)-teta(k))-imag(Y(p,k))*cos(teta(p)-teta(k))); end end y=sum(x); L(h,h)=V(p)*(y-2*V(p)*imag(Y(p,p)));

Page 33: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________121 “Algoritmo para analizar la estabilidad de una red eléctrica”

else L(h,l)=V(p)*V(q)*(real(Y(p,q))*sin(tet a(p)-teta(q))-imag(Y(p,q))*cos(teta(p)-teta(q))); end end end %creacion del jacobiano J=[H,N;M,L]; %Tratamiento de matriz dispersa Jp=sparse(J); % disp=symmmd(Jp);%vector que me da la mejor ordena ción disp=symamd(Jp);%vector que me da la mejor ordenaci ón Jo=Jp(disp,disp);%Matriz jacobiana dispersa ordenad a bo=b(disp);%vector independiente con la misma orden ación que el jacobiano %resolucion del sistema Jx=b xo=inv(Jo)*bo;%vector solucion con la ordenacion de l tratamiento de matriz dispersa nodisp=[]; for k=1:length(b) for f=1:length(b) if disp(f)==k nodisp(k)=f; end end end x=xo(nodisp);%vector solucion con la ordenacion dad a por nosotros % x=inv(J)*b; %actualizacion de los vectores V y teta % [V,teta]=actualizac(tipo,teta,V,x); h=0; for k=1:length(x) if k<=n-sl teta(k+sl)=teta(k+sl)+x(k);%vector actualiz ado de fases else h=h+1; V(pq(h))=V(pq(h))*(1+x(k));%vector actualiz ado de tensiones, solo se actualizan las tensiones correspondientes a los nudos PQ end end %calculo de P y Q % Pcal=Pcalc(Y,V,teta); % Qcal=Qcalc(Y,V,teta); for p=1:n x=[]; for q=1:n x(q)=V(q)*(real(Y(p,q))*cos(teta(p)-teta(q))+imag(Y(p,q))*sin(teta(p)-teta(q))); end y=sum(x);

Page 34: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________122 “Algoritmo para analizar la estabilidad de una red eléctrica”

Pcal(p,1)=V(p)*y; end for p=1:n x=[]; for q=1:n x(q)=V(q)*(real(Y(p,q))*sin(teta(p)-teta(q) )-imag(Y(p,q))*cos(teta(p)-teta(q))); end y=sum(x); Qcal(p,1)=V(p)*y; end %calculo del nuevo residuo % b=residuo(Y,V,teta,tipo,Pg,Pc,Qg,Qcesp); %calculo inc_P for k=sl+1:n incP(k-sl,1)=Pesp(k)-Pcal(k);%vector incremento de potencia activa end %calculo inc_Q for k=1:g incQ(k,1)=Qesp(pq(k))-Qcal(pq(k));%vector incre mento de pot. reactiva de los nudos PQ end if isempty(pq) incQ=[];%para evitar posibles errores end b=[incP;incQ]; %comprobacion de las tensiones en los nudos PV que han pasado a PQ %[PVmax,PVmin,V,Vesp,tipo,b,Qc,Qg]=limtens(m,tipo,V esp,V,Vespecificado,PVmax,PVmin,Qc,Qg,e,b); %actualizacion del contador cont=cont+1 end [tipo,Vesp,Qg,Qc,PVmax,PVmin]=limreactiva(Qm,QM,m,Q cal,Qg,Qc,Qcesp,tipo,Vesp,PVmax,PVmin); n_pq=find(tipo==1); if length(n_pq)~=length(pq) limQ=1 [tension,fase,Pcal,Qcal,incP,incQ,Y,J,H,N,L,M,tipo, Qg]=N_R_limQ(V,Pg,Pc,Qg,Qc,Qcesp,Y,tipo,Vesp,e,Qm,QM,m); else tension=V; fase=teta; end

Page 35: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________123 “Algoritmo para analizar la estabilidad de una red eléctrica”

La función N_R_limQ.m tiene como subfunción a limreactiva.m y a perfilplano.m

� limreactiva.m function [tipo,Vesp,Qg,Qc,PVmax,PVmin]=limreactiva(Qm,QM,m,Q cal,Qg,Qc,Qcesp,tipo,Vesp,PVmax,PVmin) for k=1:length(m) if tipo(m(k))==2 Qg(m(k))=Qcal(m(k))+Qcesp(m(k)); end if Qg(m(k))<Qm(k)%-0.01-0.0001 tipo(m(k))=1; Qg(m(k))=Qm(k); %PVmin(m(k))=1; end if QM(k)<Qg(m(k)) %+0.01 +0.0001 tipo(m(k))=1; Qg(m(k))=QM(k); %PVmax(m(k))=1; end if tipo(m(k))==2 Qg(m(k))=0; end end %Qg(m)=0;

� perfilplano.m

function V=perfilplano(Vesp,tipo) V=Vesp; mk=find(V==0);%vector de nudos PQ no controlados w=find(tipo~=1);%Vector de nudos no PQ %vemos si todos los valores de Vesp son iguales o n o if length(w)>1 for h=1:(length(w)-1) if Vesp(w(h))==Vesp(w(h+1)) x(h)=1; else x(h)=0; end end if all(x)==1 V(mk)=Vesp(w(1)); else V(mk)=1; end

Page 36: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________124 “Algoritmo para analizar la estabilidad de una red eléctrica”

else V(mk)=Vesp(1); end

BLOQUE DEL ANÁLISIS DE ESTABILIDAD

� calc_Ig.m function Ig=calc_Ig(Pg,Qg,U,ng) %cálculo de la inte nsidad que luego se usará para obtener la fuerza electromotriz Sg=zeros(ng,1); Ig=zeros(ng,1); for k=1:ng Sg(k)=Pg(k)+1i*Qg(k); end for k=1:ng Ig(k)=conj(Sg(k)/U(k)); End

� calc_electromotriz.m function[Em,delta0]=calc_electromotriz(UparaE,Ztota l,Ig,ng); Ep=zeros(ng,1); Em=zeros(ng,1); %módulo de la fuerza electromotriz delta0=zeros(ng,1); %desfase de la fuerza electromo triz Im=zeros(ng,1); Re=zeros(ng,1); for k=1:ng Ep(k)=UparaE(k)+Ztotal(k)*Ig(k); Em(k)=abs(Ep(k)); Im(k)=imag(Ep(k)); Re(k)=real(Ep(k)); delta0(k)=atan(Im(k)/Re(k)); end Em delta0

Page 37: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________125 “Algoritmo para analizar la estabilidad de una red eléctrica”

� adic_cargas.m function[nudoscarga_nonull,vec,indice,Cargas,Yc,Sc, UCargas]=adic_cargas(Y,Pc,Qcesp,nudoscarga,nudos,U) n=length(nudos); Yc=zeros(n,n); %matriz Y a la que se le añadirán la s cargas nc=length(nudoscarga); indice=zeros(n,1); cont=0; for k=1:nc if(Pc(k)~=0) indice(k)=k; cont=cont+1; end end Cargas=zeros(cont,1); %vector que almacena las admi tancias de las cargas UCargas=zeros(cont,1);%vector que almacena las tens iones de los nudos donde hay cargas Sc=zeros(cont,1);%vector que almacena la potencia c ompleja de las cargas vec=zeros(cont,1);%vector puntero que señala los el ementos del vector “nudos” donde hay cargas nudoscarga_nonull=zeros(cont,1);%vector que contien e los nudos donde hay cargas y ningún elemento nulo i=1; for k=1:n if (indice(k)~=0) vec(i)=indice(k); i=i+1; end end i=1; for k=1:nc if (nudoscarga(k)~=0) nudoscarga_nonull(i)=nudoscarga(k); i=i+1; end end for k=1:cont UCargas(k)=U(vec(k)); end for k=1:cont Sc(k)=Pc(vec(k))+1i*Qcesp(vec(k)); Cargas(k)=conj(Sc(k)/abs(UCargas(k)^2)); end Cargas

Page 38: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________126 “Algoritmo para analizar la estabilidad de una red eléctrica”

for k=1:cont Y(vec(k),vec(k))=Y(vec(k),vec(k))+Cargas(k); end Yc=Y;

� adic_gen.m function Ygc=adic_gen(Yc,nudos,ng,nudosdegen,Xtotal ) n=length(nudos); Ygen=zeros(ng,1); Ygc=zeros(n,n);%matriz Yc a la que se añaden las ad mitancias de los generadores en los nudos que corresponda for k=1:ng Ygen(k)=1/(1i*Xtotal(k)); end for k=1:ng Yc(k,k)=Yc(k,k)+Ygen(k); end Ygc=Yc;

� inicio_euler_sin_fallo.m

function[solac0,solv0,solalfa0]=inicio_euler_sin_fa llo(Xtotal,Ygc,ng,lvec0,Em,delta0,d10,At,Tf0,Hgen,Pm,Rrama,Xrama,Btotr ama,nudoi,nudof,nudosdegen,G_nudo,G_ni,G_nf,B_nudo,B_ni,B_nf,Bsh,B_ini ,vec,nudos,nudoscarga_nonull,Cargas,nudocero,nudocerof) format long n=length(nudos); B=zeros(n,1);%vector de intensidades E/X, además ti ene elementos nulos que corresponden a los nudos donde no hay generador es ng=length(nudosdegen); a=ng+1; solac0=zeros(lvec0,a);%vector que almacena las acel eraciones de los generadores, la primera columna contiene el vector de tiempo solv0=zeros(lvec0,a); %vector que almacena las velo cidades de los generadores, la primera columna contiene el vector de tiempo solalfa0=zeros(lvec0,a);%vector que almacena los án gulos de los generadores, la primera columna contiene el vector de tiempo solac0(:,1)=0:At:Tf0; solv0(:,1)=0:At:Tf0; solalfa0(:,1)=0:At:Tf0; Ep=zeros(ng,1);%vector que almacena las fuerzas ele ctromotrices de los generadores I=zeros(ng,1);%vector que almacena E/X, no contiene elementos nulos

Page 39: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________127 “Algoritmo para analizar la estabilidad de una red eléctrica”

Pe=zeros(ng,1);%vector que almacena la potencia elé ctrica de los generadores U=zeros(n,1);%vector que almacena las tensiones de los nudos Igg=zeros(ng,1);%vector que almacena la intensidad que luego se empleará para calcular la potencia eléctrica de los generadores dd=zeros(ng,1);%vector que almacena las aceleracion es de los generadores d=zeros(ng,1);%vector que almacena las velocidades de los generadores delta=zeros(ng,1);%vector que almacena los ángulos de los generadores for k=1:lvec0 for s=1:ng Ep(s)=Em(s)*(cos(delta0(s))+1i*sin(delta0(s ))); I(s)=Ep(s)/(1i*Xtotal(s)); end for s=1:ng B(s)=I(s); end U=Ygc\B; for ss=1:ng [Igg]=calc_I_Pe(ss,Rrama,Xrama,Btotrama,nudoi,nudof ,nudosdegen,G_nudo,G_ni,G_nf,B_nudo,B_ni,B_nf,Bsh,B_ini,U,nudos,vec,nu doscarga_nonull,Cargas,nudocero,nudocerof); Pe(ss)=real(Ep(ss)*conj(Igg(ss))); end for s=1:ng o=s+1; dd(s)=f(Pe(s),Pm(s),Hgen(s)); %derivada seg unda solac0(k,o)=dd(s); d(s)=euler_vel(d10(s),At,dd(s)); %derivada primera solv0(k,o)=d(s); delta(s)=euler_ang(delta0(s),At,d(s)); %áng ulo solalfa0(k,o)=delta(s); end delta0=delta; d10=d; end

Page 40: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________128 “Algoritmo para analizar la estabilidad de una red eléctrica”

Existen cuatro subfunciones comunes a los bloques de inicio_euler_sin_fallo.m, euler_durante_fallo, euler_posfallo.m y fin_euler_sin_fallo.m. Estas subfunciones son: -calc_I_Pe.m -f.m -euler_vel.m -euler_ang.m

� calc_I_Pe.m function[Igg]=calc_I_Pe(ss,Rrama,Xrama,Btotrama,nud oi,nudof,nudosdegen,G_nudo,G_ni,G_nf,B_nudo,B_ni,B_nf,Bsh,B_ini,U,nudo s,vec,nudoscarga_nonull,Cargas,nudocero,nudocerof) %%%%%%%%%% MATRIZ PARA RAMAS %%%%%%%%%%%%%%%%%%%%%%%% Ig=0; kk=ss; m=length(Rrama); n=length(nudos); nudos; l_Bsh=length(Bsh); mat=zeros(m,6); for k=1:m mat(k,1)=nudoi(k); mat(k,2)=nudof(k); mat(k,5)=Rrama(k)+1i*Xrama(k); mat(k,6)=1i*Btotrama(k)/2; end for k=1:m for i=1:n if (nudos(i)==nudoi(k)) mat(k,3)=U(i); end if (nudos(i)==nudof(k)) mat(k,4)=U(i); end end end mat; nc=length(vec); %%%%%%%% para elementos shunt: i_nudo_G=zeros(n,1);%vector que almacena los nudos donde hay conductancia a tierra i_nudo_B=zeros(n,1);%vectorque almacena los nudos d onde hay susceptancia a tierra i_Bsh=zeros(n,1);%vector que almacena los nudos don de hay batería de condensadores for i=1:n

Page 41: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________129 “Algoritmo para analizar la estabilidad de una red eléctrica”

if (G_nudo(i)~=0) i_nudo_G(i)=nudos(i); end if (B_nudo(i)~=0) i_nudo_B(i)=nudos(i); end end for s=1:l_Bsh for i=1:n if (Bsh(s)==nudos(i)) i_Bsh(s)=i; end end end i_G_ni=zeros(m,1);%vector que almacena la conductan cia a tierra de la rama, cuando ésta está conectada al nudo inicial de la rama i_G_nf=zeros(m,1);%vector que almacena la conductan cia a tierra de la rama, cuando ésta está conectada al nudo inicial de la rama i_B_ni=zeros(m,1);%vector que almacena la susceptan cia a tierra de la rama, cuando ésta está conectada al nudo inicial de la rama i_B_nf=zeros(m,1);%vector que almacena la susceptan cia a tierra de la rama, cuando ésta está conectada al nudo final de l a rama for i=1:m if(G_ni(i)~=0) i_G_ni(i)=nudoi(i); end if(G_nf(i)~=0) i_G_nf(i)=nudof(i); end if(B_ni(i)~=0) i_B_ni(i)=nudoi(i); end if(B_nf(i)~=0) i_B_nf(i)=nudof(i); end end n=length(nudos); indice=zeros(n,1); I1_ini=zeros(m,1);%vector para las intensidades que circulan por las impedancias de las ramas (modelo en pi) cuando el n udo en que está conectado el generador coincide con el nudo inicio de las ramas I1_fin=zeros(m,1);%vector para las intensidades que circulan por las impedancias de las ramas (modelo en pi) cuando el n udo en que está conectado el generador coincide con el nudo final d e las ramas II1_ini=0;%vector para sumar las intensidades que c irculan por las impedancias de las ramas cuando el nudo en que está conectado el generador coincide con el nudo inicio de las ramas

Page 42: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________130 “Algoritmo para analizar la estabilidad de una red eléctrica”

II1_fin=0;%vector para sumar las intensidades que c irculan por las impedancias de las ramas cuando el nudo en que está conectado el generador coincide con el nudo final de las ramas I2_ini=zeros(m,1);%vector para las intensidades que circulan por las susceptancias de las ramas (modelo en pi) cuando el nudo en que está conectado el generador coincide con el nudo inicio de las ramas I2_fin=zeros(m,1);%vector para las intensidades que circulan por las susceptancias de las ramas (modelo en pi) cuando el nudo en que está conectado el generador coincide con el nudo final d e las ramas II2_ini=0;%vector para sumar las intensidades que c irculan por las susceptancias de las ramas cuando el nudo en que es tá conectado el generador coincide con el nudo inicio de las ramas II2_fin=0;%vector para sumar las intensidades que c irculan por las susceptancias de las ramas cuando el nudo en que es tá conectado el generador coincide con el nudo final de las ramas I_Cargas=0; %variable para la intensidad que circul a por la carga cuando hay una carga en el nudo en que está conecta do el generador Ishunt=0;%variable para la intensidad que circula p or elemento shunt cuando hay un elemento shunt en el nudo en que está conectado el generador Ig=0;%Ig es la intensidad total que es la suma de l a que circula por las impedancias de las ramas, por las susceptancias , por las cargas y por los elementos shunt %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %cálculo de las intensidades que circulan por imped ancias de las ramas que están %conectadas al generador for i=1:m if (nudosdegen(kk)==mat(i,1)) I1_ini(i)=(mat(i,3)-mat(i,4))/mat(i,5); end if (nudosdegen(kk)==mat(i,2)) I1_fin(i)=(mat(i,3)-mat(i,4))/mat(i,5); end end I1_ini; I1_fin; for i=1:m II1_ini=II1_ini+I1_ini(i); II1_fin=II1_fin+I1_fin(i); end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Page 43: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________131 “Algoritmo para analizar la estabilidad de una red eléctrica”

Ig=II1_ini-II1_fin; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %cálculo de las intensidades que circulan por las s usceptancias de las ramas que están %conectadas al generador for i=1:m if (nudosdegen(kk)==mat(i,1)) I2_ini(i)=mat(i,3)*mat(i,6); end end I2_ini; for i=1:m II2_ini=II2_ini+I2_ini(i); end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Ig=Ig+II2_ini; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %cálculo de las intensidades que circulan por las c argas conectadas al %generador nc=length(nudoscarga_nonull); indice_Cargas=zeros(nc,1); for k=1:nc indice_Cargas(k)=k; end for i=1:nc if (nudosdegen(kk)==nudoscarga_nonull(i)) for s=1:n if(nudos(s)==nudoscarga_nonull(i)) I_Cargas=U(vec(i))*Cargas(indice_Car gas(i)); end end end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% I_Cargas; Ig=Ig+I_Cargas; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %obtención de la admitancia shunt conectada al gene rador, teniendo en %cuenta los eltos shunt conectados al nudo y los qu e proceden de las líneas Gtotal=zeros(n,1); Btotal=zeros(n,1); for s=1:n if (i_nudo_G(s)==nudosdegen(kk)) Gtotal(s)=G_nudo(s); end if (i_nudo_B(s)==nudosdegen(kk))

Page 44: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________132 “Algoritmo para analizar la estabilidad de una red eléctrica”

Btotal(s)=B_nudo(s); end end for i=1:l_Bsh for s=1:n if(i_Bsh(i)==nudosdegen(kk)) Btotal(i_Bsh(i))=Btotal(i_Bsh(i))+B_ini( i); end end end for i=1:m if (i_G_ni(i)==nudosdegen(kk)) for s=1:n if(i_G_ni(i)==i_nudo_G(s)) Gtotal(s)=Gtotal(s)+G_ni(i); end end end if (i_G_nf(i)==nudosdegen(kk)) for s=1:n if(i_G_nf(i)==i_nudo_G(s)) Gtotal(s)=Gtotal(s)+G_nf(i); end end end if (i_B_ni(i)==nudosdegen(kk)) for s=1:n if(i_B_ni(i)==i_nudo_B(s)) Btotal(s)=Btotal(s)+B_ni(i); end end end if (i_B_nf(i)==nudosdegen(kk)) for s=1:n if(i_B_nf(i)==i_nudo_B(s)) Btotal(s)=Btotal(s)+B_nf(i); end end end end for s=1:n Ytotal(s)=Gtotal(s)+1i*Btotal(s); end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %cálculo de las intensidades que circulan por los e lementos shunt %conectados al generador

Page 45: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________133 “Algoritmo para analizar la estabilidad de una red eléctrica”

for s=1:n if(nudosdegen(kk)==nudos(s)) Ishunt=Ytotal(s)*U(s); end end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Ishunt; Ig=Ig+Ishunt; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Igg(kk)=Ig;

� f.m

function dd=f(Pe,Pm,Hgen,ng) %función que calcula l a aceleración de los generadores dd=(pi*50/Hgen)*(Pm-Pe);

� euler_vel.m

function d=euler_vel(d10,At,dd)%función que calcula la velocidad de los generadores d=d10+At*dd;

� euler_ang.m function delta=euler_ang(delta0,At,d)%función que c alcula el ángulo de los generadores delta=delta0+d*At;

Page 46: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________134 “Algoritmo para analizar la estabilidad de una red eléctrica”

� calc_Ydf_f.m function[A,Ydf,n,indice]=calc_Ydf_f(Ygc,m_falta,nud os,nudocero,nudocerof) %primero eliminar la columna, después la fila, en p asos separados n=length(nudos); col=n-1; A=zeros(n,col); %A es la matriz sin la columna que corresponde al nudo donde se produce la falta P=zeros(col,col); %P es la matriz A sin la fila que corresponde al nudo donde se produce la falta Ydf=zeros(col,col); indice=zeros(1,1); nudok=230; if (m_falta~=0)&(m_falta~=1) for i=1:n if(nudok==nudos(i)) indice=i; end end end if(m_falta==0) for i=1:n if(nudocero==nudos(i)) indice=i; end end end if(m_falta==1) for i=1:n if(nudocerof==nudos(i)) indice=i; end end end %%eliminación de la columna r=1; j=1; for i=1:n while((j<=n)&&(r<=col)) if (j~=indice) A(i,r)=Ygc(i,j); j=j+1; r=r+1; end if (j==indice) j=j+1; end end j=1; r=1;

Page 47: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________135 “Algoritmo para analizar la estabilidad de una red eléctrica”

end %%eliminación de la fila r=1; for i=1:n if (i~=indice) for j=1:col P(r,j)=A(i,j); end end if (i==indice) r=r-1; end r=r+1; end Ydf=P;

� euler_durante_fallo.m

function[solac1,solv1,solalfa1]=euler_durante_fallo (Xtotal,Ydf,ng,lvec1,Em,delta0,d10,At,Tf0c,Tf1,Hgen,Pm,Rrama,Xrama,Bto trama,nudoi,nudof,nudosdegen,G_nudo,G_ni,G_nf,B_nudo,B_ni,B_nf,Bsh,B_i ni,vec,nudos,nudoscarga_nonull,Cargas,nudocero,nudocerof,m_falta) format long ng; a=ng+1; n=length(nudos); ncol=n-1; UU=zeros(ncol,1);%vector que almacena las tensiones de los nudos, no contiene elementos nulos U=zeros(n,1);%vector que almacena las tensiones de los nudos, el elemento que corresponda al nudo en que se produce el fallo es nulo B=zeros(size(UU));%vector de intensidades E/X,no co ntiene elementos nulos solac1=zeros(lvec1,a); solv1=zeros(lvec1,a); solalfa1=zeros(lvec1,a); solac1(:,1)=Tf0c:At:Tf1; solv1(:,1)=Tf0c:At:Tf1; solalfa1(:,1)=Tf0c:At:Tf1; Ep=zeros(ng,1); I=zeros(ng,1);

Page 48: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________136 “Algoritmo para analizar la estabilidad de una red eléctrica”

Pe=zeros(ng,1); Igg=zeros(ng,1); dd=zeros(ng,1); d=zeros(ng,1); delta=zeros(ng,1); for kon=1:lvec1 for s=1:ng Ep(s)=Em(s)*(cos(delta0(s))+1i*sin(delta0(s ))); I(s)=Ep(s)/(1i*Xtotal(s)); end A=inv(Ydf); for i=1:ng B(i)=I(i); end UU=A*B; if(m_falta==0) for k=1:n if(nudos(k)==nudocero) clave=k; end end end s=1; if (m_falta==0) for k=1:n if k==clave U(k)=0; else U(k)=UU(s); s=s+1; end end end if(m_falta==1) for k=1:n if(nudos(k)==nudocerof) clave=k; end end end s=1; if (m_falta==1) for k=1:n if k==clave U(k)=0; else

Page 49: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________137 “Algoritmo para analizar la estabilidad de una red eléctrica”

U(k)=UU(s); s=s+1; end end end if (m_falta~=0)&(m_falta~=1) for k=1:n nudok=230; if(nudos(k)==nudok) clave=k; end end end s=1; if (m_falta~=0)&(m_falta~=1) for k=1:n if k==clave U(k)=0; else U(k)=UU(s); s=s+1; end end end for ss=1:ng [Igg]=calc_I_Pe(ss,Rrama,Xrama,Btotrama,nudoi,nudof ,nudosdegen,G_nudo,G_ni,G_nf,B_nudo,B_ni,B_nf,Bsh,B_ini,U,nudos,vec,nu doscarga_nonull,Cargas,nudocero,nudocerof); Pe(ss)=real(Ep(ss)*conj(Igg(ss))); end for s=1:ng o=s+1; dd(s)=f(Pe(s),Pm(s),Hgen(s)); solac1(kon,o)=dd(s); d(s)=euler_vel(d10(s),At,dd(s)); solv1(kon,o)=d(s); delta(s)=euler_ang(delta0(s),At,d(s)); solalfa1(kon,o)=delta(s); end delta0=delta; d10=d; end

Page 50: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________138 “Algoritmo para analizar la estabilidad de una red eléctrica”

� calc_Ypf.m function[Yrama,indice,Ypf]=calc_Ypf(Ygc,nudocero,nu docerof,nudos,Rrama,Xrama,Btotrama,nudoi) %en esta función se cambian los elementos de Ygc qu e se corresponden con %(nudocero,nudocero), (nudocerof,nudocerof), (nudoc ero,nudocerof) y %(nudocerof-nudocero) n=length(nudos); s=length(Xrama); Zrama=zeros(s,1); Yrama=zeros(s,1); indice=zeros(1,1); for k=1:s Zrama(k)=Rrama(k)+1i*Xrama(k); Yrama(k)=1/Zrama(k); end for k=1:s if (nudoi(k)==nudocero) indice=k; end end for i=1:n for j=1:n if (i==j) if(i==nudocero) Ygc(i,j)=Ygc(i,j)-Yrama(indice)-1i*B totrama(indice)/2; end if(i==nudocerof) Ygc(i,j)=Ygc(i,j)-Yrama(indice)-1i*B totrama(indice)/2; end end if (i~=j) if((i==nudocero)&&(j==nudocerof)) Ygc(i,j)=Ygc(i,j)+Yrama(indice); end if((j==nudocero)&&(i==nudocerof)) Ygc(i,j)=Ygc(i,j)+Yrama(indice); end end end end Ypf=Ygc;

Page 51: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________139 “Algoritmo para analizar la estabilidad de una red eléctrica”

� euler_posfallo.m function[solac2,solv2,solalfa2]=euler_posfallo(Xtot al,Ypf,ng,lvec2,Em,delta0,d10,At,Tf1c,Tf2,Hgen,Pm,Rrama,Xrama,Btotrama ,nudoi,nudof,nudosdegen,G_nudo,G_ni,G_nf,B_nudo,B_ni,B_nf,Bsh,B_ini,ve c,nudos,nudoscarga_nonull,Cargas,nudocero,nudocerof) format long n=length(nudos); a=ng+1; solac2=zeros(lvec2,a); solv2=zeros(lvec2,a); solalfa2=zeros(lvec2,a); solac2(:,1)=Tf1c:At:Tf2; solv2(:,1)=Tf1c:At:Tf2; solalfa2(:,1)=Tf1c:At:Tf2; Ep=zeros(ng,1); U=zeros(n,1); I=zeros(ng,1); B=zeros(n,1); Pe=zeros(ng,1); Igg=zeros(ng,1); dd=zeros(ng,1); d=zeros(ng,1); delta=zeros(ng,1); for kcon=1:lvec2 for s=1:ng Ep(s)=Em(s)*(cos(delta0(s))+1i*sin(delta0(s ))); I(s)=Ep(s)/(1i*Xtotal(s)); end for s=1:ng B(s)=I(s); end U=Ypf\B; for ss=1:ng [Igg]=calc_I_Pe(ss,Rrama,Xrama,Btotrama,nudoi,nudof ,nudosdegen,G_nudo,G_ni,G_nf,B_nudo,B_ni,B_nf,Bsh,B_ini,U,nudos,vec,nu doscarga_nonull,Cargas,nudocero,nudocerof); Pe(ss)=real(Ep(ss)*conj(Igg(ss))); end for s=1:ng o=s+1; dd(s)=f(Pe(s),Pm(s),Hgen(s)); %derivada seg unda solac2(kcon,o)=dd(s); d(s)=euler_vel(d10(s),At,dd(s)); %derivada primera solv2(kcon,o)=d(s);

Page 52: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________140 “Algoritmo para analizar la estabilidad de una red eléctrica”

delta(s)=euler_ang(delta0(s),At,d(s)); %áng ulo solalfa2(kcon,o)=delta(s); end delta0=delta; d10=d; end

� fin_euler_sin_fallo.m function[solac3,solv3,solalfa3]=fin_euler_sin_fallo (Xtotal,Ygc,ng,lvec3,Em,delta0,d10,At,Tf2c,Tf3,Hgen,Pm,Rrama,Xrama,Bto trama,nudoi,nudof,nudosdegen,G_nudo,G_ni,G_nf,B_nudo,B_ni,B_nf,Bsh,B_i ni,vec,nudos,nudoscarga_nonull,Cargas,nudocero,nudocerof) format long n=length(nudos); a=ng+1; solac3=zeros(lvec3,a); solv3=zeros(lvec3,a); solalfa3=zeros(lvec3,a); solac3(:,1)=Tf2c:At:Tf3; solv3(:,1)=Tf2c:At:Tf3; solalfa3(:,1)=Tf2c:At:Tf3; Ep=zeros(ng,1); U=zeros(n,1); Igg=zeros(ng,1); I=zeros(ng,1); B=zeros(n,1); Pe=zeros(ng,1); dd=zeros(ng,1); d=zeros(ng,1); delta=zeros(ng,1); for kcon=1:lvec3 for s=1:ng Ep(s)=Em(s)*(cos(delta0(s))+1i*sin(delta0( s))); I(s)=Ep(s)/(1i*Xtotal(s)); end for s=1:ng B(s)=I(s); end U=Ygc\B; for ss=1:ng

Page 53: (7. Relación de programas de Matlab)bibing.us.es/proyectos/abreproy/5083/descargar... · Relación de programas de Matlab _____89 “Algoritmo para analizar la estabilidad de una

_______________________________________________________7. Relación de programas de Matlab

___________________________________________________________________141 “Algoritmo para analizar la estabilidad de una red eléctrica”

[Igg]=calc_I_Pe(ss,Rrama,Xrama,Btotrama,nudoi,nudof ,nudosdegen,G_nudo,G_ni,G_nf,B_nudo,B_ni,B_nf,Bsh,B_ini,U,nudos,vec,nu doscarga_nonull,Cargas,nudocero,nudocerof); Pe(ss)=real(Ep(ss)*conj(Igg(ss))); end for s=1:ng o=s+1; dd(s)=f(Pe(s),Pm(s),Hgen(s)); solac3(kcon,o)=dd(s); d(s)=euler_vel(d10(s),At,dd(s)); solv3(kcon,o)=d(s); delta(s)=euler_ang(delta0(s),At,d(s)); solalfa3(kcon,o)=delta(s); end delta0=delta; d10=d; end