ANEXO B Programación MATLAB correspondiente al Análisis de Averías B.1 INTRODUCCIÓN A continuación se enumeran las distintas funciones que ha sido necesario programar en Matlab para tratar algunos datos tanto resultantes de la simulación, como resultantes de la toma de datos reales de la línea de producción. B.2 FUNCIONES MATLAB Función B.2.1: function c=tiempo(a,b) %intercala duracion y tiempo intermedio sumando n=size(a); m=size(b); c=zeros(n(1)+m(1),1); %es el vector intercalado c(1,1)=a(n(1),1); i=m(1); j=2; for j=2:2:m(1)*2 c(j,1)=c(j-1,1)+b(i,1); c(j+1,1)=c(j,1)+a(i,1); i=i-1; end p=size(c); d=zeros(2*p(1)+1,1); %es el vector intercalado doble para representacion d(1)=0; l=1; for k=2:2:2*p(1)+1 d(k)=c(l); d(k+1)=d(k); l=l+1; end s=size(d); f=zeros(s); %es el vector que da el escalon en duracion for q=1:4:s(1) f(q)=1; f(q+1)=1; 163 end plot(d,f) axis([0,c(p(1)),0,1.2]); xlabel('tiempo(min)'); title('maquina 2027'); Las primeras versiones … Función B.2.2: function separacion(d) %ordena el vector duracion de menor a mayor y le asigna un nº de veces que se repite cada valor; tambien lo representa [m,a]=size(d); l=zeros(m,1); n=zeros(m,1); im=max(d); k=1; for i=1:im for j=1:m if d(j)==i l(k)=d(j); n(k)=n(k)+1; end end if n(k)>=1 k=k+1; end end for i=1:m if l(i)>0 la(i)=l(i); na(i)=n(i); end end plot(la,na) ylabel('nº veces');xlabel('duracion averia(min)'); Función B.2.3: function [d,ti]=reseparacion(dti,A) %separa el vector de duracion y tiempo intermedio una vez divididos en corta, media y larga duracion [n,m]=size(dti); j=1; if A==0 %representa que el primer termino es de duracion y el ultimo tambien for i=1:2:n-1 d(j)=dti(i); ti(j)=dti(i+1); j=j+1; end d=[d,dti(n)]; 164 elseif A==1 %representa que el primer termino es de tiempo intermedio y el ultimo tambien for i=2:2:n d(j)=dti(i); ti(j)=dti(i+1); j=j+1; end ti=[dti(1);ti]; elseif A==2 %representa que el primer termino es de duracion y el ultimo de tiempo intermedio for i=1:2:n-1 d(j)=dti(i); ti(j)=dti(i+1); j=j+1; end elseif A==3 %representa que el primer termino es de tiempo intermedio y el ultimo de duracion for i=2:2:n d(j)=dti(i); ti(j)=dti(i+1); j=j+1; end end Función B.2.4: function [corta,media, larga]=completa(d,ti,a1,a2) %se le da el vector duracion y el de tiempo intermedio y resuelve el estudio estadistico dti=tiempo1(d,ti); %intercala duracion y tiempo intermedio sin sumar [dti1,dti2,dti3]=division(dti,a1,a2) %divide el vector en duracion corta, media y larga, sumando los tiempos intermedios A1=input('Escriba un 0 si el primer termino del vector dti1 es de duracion y el ultimo tambien\nEscriba un 1 si el primer termino del vector dti1 tiempo intermedio y el ultimo tambien\nEscriba un 2 si el primer termino del vector dti1 es de duracion y el ultimo de tiempo intermedio\nEscriba un 3 si el primer termino del vector dti1 es de tiempo intermedio y el ultimo de duracion\n'); A2=input('Escriba un 0 si el primer termino del vector dti2 es de duracion y el ultimo tambien\nEscriba un 1 si el primer termino del vector dti2 es de tiempo intermedio y el ultimo tambien\nEscriba un 2 si el primer termino del vector dti2 es de duracion y el ultimo de tiempo intermedio\nEscriba un 3 si el primer termino del vector dti2 es de tiempo intermedio y el ultimo de duracion\n'); A3=input('Escriba un 0 si el primer termino del vector dti3 es de duracion y el ultimo tambien\nEscriba un 1 si el primer termino del vector dti3 es de tiempo intermedio y el ultimo tambien\nEscriba un 2 si el primer termino del vector dti3 es de duracion y el ultimo de tiempo intermedio\nEscriba un 3 si el primer termino del vector dti3 es de tiempo intermedio y el ultimo de duracion\n'); [d1,ti1]=reseparacion(dti1,A1) %separa el vector de duracion y tiempo intermedio una vez divididos en corta, media y larga duracion 165 [d2,ti2]=reseparacion(dti2,A2) %separa el vector de duracion y tiempo intermedio una vez divididos en corta, media y larga duracion [d3,ti3]=reseparacion(dti3,A3) %separa el vector de duracion y tiempo intermedio una vez divididos en corta, media y larga duracion medd1=feval(@media,d1'); %calcula la media de un vector columna detipd1=desvtip(d1'); %calcula la desviacion tipica de un vector columna medd2=feval(@media,d2'); %calcula la media de un vector columna detipd2=desvtip(d2'); %calcula la desviacion tipica de un vector columna medd3=feval(@media,d3'); %calcula la media de un vector columna detipd3=desvtip(d3'); %calcula la desviacion tipica de un vector columna medti1=feval(@media,ti1'); %calcula la media de un vector columna medti2=feval(@media,ti2'); %calcula la media de un vector columna medti3=feval(@media,ti3'); %calcula la media de un vector columna corta=sprintf('TMP1=LOGNORML(%d,%d)\nTFMIP1=NEGEXP(%d)',medd1,detip d1,medti1); media=sprintf('TMP2=LOGNORML(%d,%d)\nTFMIP2=NEGEXP(%d)',medd2,deti pd2,medti2); larga=sprintf('TMP3=LOGNORML(%d,%d)\nTFMIP3=NEGEXP(%d)',medd3,detip d3,medti3); Función B.2.5: function c=tiempo1(a,b) %intercala duracion y tiempo intermedio sin sumar n=size(a); m=size(b); c=zeros(n(1)+m(1),1); %es el vector intercalado c(1,1)=a(n(1),1); i=m(1); j=2; for j=2:2:m(1)*2 c(j,1)=b(i,1); c(j+1,1)=a(i,1); i=i-1; end Función B.2.6: function [dti11,dti22,dti33]=division(dti,a1,a2) %divide el vector en duracion corta, media y larga, sumando los tiempos intermedios [n,m]=size(dti); dti1=zeros(n,1); dti2=zeros(n,1); dti3=zeros(n,1); dtiant1=0; dtiant2=0; dtiant3=0; j=1; for i=1:2:n if dti(i)<=a1 166 dti1(j)=dti(i); if i>1 & j>1 dti1(j-1)=dti1(j-1)+dti(i-1); end j=j+2; elseif i>1 & j>1 dti1(j-1)=dti1(j-1)+dti(i)+dti(i-1); else dtiant1=dtiant1+dti(i)+dti(i+1); end end j=1; for i=1:2:n if dti(i)>a1&dti(i)<=a2 dti2(j)=dti(i); if i>1 & j>1 dti2(j-1)=dti2(j-1)+dti(i-1); end j=j+2; elseif i>1 & j>1 dti2(j-1)=dti2(j-1)+dti(i)+dti(i-1); else dtiant2=dtiant2+dti(i)+dti(i+1); end end j=1; for i=1:2:n if dti(i)>a2 dti3(j)=dti(i); if i>1 & j>1 dti3(j-1)=dti3(j-1)+dti(i-1); end j=j+2; elseif i>1 & j>1 dti3(j-1)=dti3(j-1)+dti(i)+dti(i-1); else dtiant3=dtiant3+dti(i)+dti(i+1); end end for i=1:n if dti1(i)>0 dti11(i)=dti1(i); end if dti2(i)>0 dti22(i)=dti2(i); end if dti3(i)>0 dti33(i)=dti3(i); end end 167 if dtiant1>0 dti11=[dtiant1,dti11]; end if dtiant2>0 dti22=[dtiant2,dti22]; end if dtiant3>0 dti33=[dtiant3,dti33]; end dti11=dti11'; dti22=dti22'; dti33=dti33'; Función B.2.7: function [d,ti]=reseparacion(dti,A) %separa el vector de duracion y tiempo intermedio una vez divididos en corta, media y larga duracion [n,m]=size(dti); j=1; if A==0 %representa que el primer termino es de duracion y el ultimo tambien for i=1:2:n-1 d(j)=dti(i); ti(j)=dti(i+1); j=j+1; end d=[d,dti(n)]; elseif A==1 %representa que el primer termino es de tiempo intermedio y el ultimo tambien for i=2:2:n d(j)=dti(i); ti(j)=dti(i+1); j=j+1; end ti=[dti(1);ti]; elseif A==2 %representa que el primer termino es de duracion y el ultimo de tiempo intermedio for i=1:2:n-1 d(j)=dti(i); ti(j)=dti(i+1); j=j+1; end elseif A==3 %representa que el primer termino es de tiempo intermedio y el ultimo de duracion for i=2:2:n d(j)=dti(i); ti(j)=dti(i+1); j=j+1; end end 168 Función B.2.8: function med=media(d) %calcula la media de un vector columna [n,m]=size(d); med=d(1); for i=2:n med=med+d(i); end med=med/n; Función B.2.8: function dt=desvtip(d) %calcula la desviacion tipica de un vector columna [n,m]=size(d); m=media(d); dt=0; for i=1:n dt=dt+(d(i)-m)^2; end dt=sqrt(dt/n); 169