Sei sulla pagina 1di 10

Para el inicio del código, se realizo la interfaz grafica que se añadirá en el documento adjunto.

En
esta interfaz se colocaron 6 edit text donde el usuario podrá colocar los valores requeridos por el
programa, además de esto se coloco una base de datos de cuatro tipos de aceros. Luego se añadió
una grafica en donde se encontrará el diagrama de Goodman, para esto se usó un botón en donde
se programo la forma en la que se graficaría este diagrama, como también, con los valores
necesarios para la gráfica están relacionados con los valores que el usuario ingresa al programa. Se
restringieron los valores que el usuario puede ingresar, debido a hay datos que no están definidos
en los números reales. Los valores que se ingresaran al programa deben ser en MPa, además los
valores de esfuerzo de fluencia y esfuerzo ultimo a tensión están en MPa

Se coloco un botón de calcular en donde se añadió como se obtenían los valores de los edit text,
además se colocaron los 4 casos de cómo se calcularía el factor de seguridad, y también se
encuentra las graficas de las trayectorias en el mismo botón. Para el calculo de estos factores fue
necesario colocar un pop-up menú en donde el usuario podrá ingresar si la pieza a analizar tiene
vida finita o infinita, además los factores de seguridad se calcularán por aparte y se mostraran en
un estatic text.

Se coloco un botón de limpiar con el fin de reiniciar el programa. este botón limpiara todo el
programa incluyendo los edit text.

Se coloco un botón de limpiar gráfica, de manera que cada vez que se quiera cambiar un punto sea
necesario limpiar la gráfica.

Boton De Graficar:
Sm=get(handles.edit4,'String');
Sm=str2double(Sm);
if isnan(Sm)
msgbox('Valor de sigma medio no valido, ingrese un nuevo valor')
end
Sa=get(handles.edit5,'String');
Sa=str2double(Sa);
if isnan(Sa)
msgbox('Valor de sigma alternante no valido, ingrese un nuevo
valor')
end
N=get(handles.edit6,'String');
N=str2double(N);
if isnan(N)
msgbox('Valor de numero de ciclos no valido, ingrese un nuevo
valor')
end
Cn=get(handles.edit7,'String');
Cn=str2double(Cn);
if isnan(Cn)
msgbox('Valor de factores de correcion no valido, ingrese un nuevo
valor')
end
if N>=0
if Sa>=0
if Cn<=1
if Cn>0
valor=get(handles.popupmenu3,'Value')
switch valor
case 1
Sy=get(handles.edit1,'String');
Sy=str2double(Sy);
Sut=get(handles.edit2,'String');
Sut=str2double(Sut);
if isnan(Sy)
msgbox('Valor de esfuerzo de fluencia no valido, ingrese un
nuevo valor')
end
if isnan(Sut)
msgbox('Valor de esfuerzo ultimo a la tensión no valido,
ingrese un nuevo valor')
end
case 2
Sut=525E6
Sy=290E6
case 3
Sut=620E6
Sy=485E6
case 4
Sut=420E6
Sy=350e6
case 5
Sut=772e6
Sy=425e6

end
if Sut>Sy
a1=-Sy-(Sy/2)
a2=Sy+(Sy/2)
x=a1:a2;
Sep=0.5*Sut;
val=get(handles.popupmenu1,'Value')
a=((0.9*Sut)^2)/Sep
b=-(1/3)*log10((0.9*Sut)/Sep)
No=(Sep/a)^(1/b)
switch val
case 1
Sf=a*(N^b)
Se=Cn*Sf
case 2
if No<N
Se=Sep*Cn
else
Sf=a*(N^b)
Se=Cn*Sf
end
end

U=(Sut*(Se-Sy))/(Se-Sut);
y1=0;
y2=x+Sy;
y3=Se;
y4=((-(Se/Sut))*x)+Se;
y5=-x+Sy;
y=(0).*(x<-Sy)+y2.*((x>=-Sy)&(x<=(Se-Sy)))+y3.*((x>(Se-
Sy))&(x<=(0)))+y4.*((x>(0))&(x<=(U)))+y5.*((x>(U))&(x<=(Sy)));

H=0:(Sm/100000):Sm;
I=(Sa/Sm)*H;

hold
plot(handles.axes1,x,y,'b');
hold
plot(handles.axes1,Sm,Sa,'ro');
plot(handles.axes1,H,I,'g--');

xlabel('Sigma Medio')
ylabel('Sigma Alternante')
grid on
title('Diagrama Goodman')

else
msgbox('Error para graficar, debido a inconcistencias en las
caracteristicas del material')
end
else
msgbox('Error para graficar, debido a inconcistencias en los
factores de correccion')
end
else
msgbox('Error para graficar, debido a inconcistencias en los
factores de correccion')
end
else
msgbox('Error para calcular factor de seguridad, debido a
inconcistencias en el valor de sigma alternante')
end
else
msgbox('Error para calcular factor de seguridad, debido a
inconcistencias en el numero de ciclos')
end

Boton De Calcular:
Sm=get(handles.edit4,'String');
Sm=str2double(Sm);
if isnan(Sm)
msgbox('Valor de sigma medio no valido, ingrese un nuevo valor')
end
Sa=get(handles.edit5,'String');
Sa=str2double(Sa);
if isnan(Sa)
msgbox('Valor de sigma alternante no valido, ingrese un nuevo
valor')
end
N=get(handles.edit6,'String');
N=str2double(N);
if isnan(N)
msgbox('Valor de numero de ciclos no valido, ingrese un nuevo
valor')
end
Cn=get(handles.edit7,'String');
Cn=str2double(Cn);
if isnan(Cn)
msgbox('Valor de factores de corrección no valido, ingrese un nuevo
valor')
end
if N>=0
if Sa>=0
if Cn<=1
if Cn>0
valor=get(handles.popupmenu3,'Value')
switch valor
case 1
Sy=get(handles.edit1,'String');
Sy=str2double(Sy);
Sut=get(handles.edit2,'String');
Sut=str2double(Sut);
if isnan(Sy)
msgbox('Valor de esfuerzo de fluencia no valido, ingrese un nuevo
valor')
end
if isnan(Sut)
msgbox('Valor de esfuerzo ultimo a tension no valido, ingrese un
nuevo valor')
end
case 2
Sut=525
Sy=290
case 3
Sut=620
Sy=485
case 4
Sut=420
Sy=350
case 5
Sut=772
Sy=425

end
if Sut>Sy
Sep=0.5*Sut;
val=get(handles.popupmenu1,'Value')
a=((0.9*Sut)^2)/Sep
b=-(1/3)*log10((0.9*Sut)/Sep)
No=(Sep/a)^(1/b)
switch val
case 1
Sf=a*(N^b)
Se=Cn*Sf
case 2
if No<N
Se=Sep*Cn
else
Sf=a*(N^b)
Se=Cn*Sf
end
end
valo=get(handles.popupmenu2,'Value')
if Sm>=0
switch valo
case 1
v=(Sut*(Se-Sy))/(Se-Sut)
if Sm<=Sy
if Sm<=v
NF=(Se/Sa)*(1-(Sm/Sut))
Tx=[Sm,Sm]
Ty=[Sa,(((-Se/Sut)*Sm)+Se)]
else
NF=(Sy/Sa)*(1-(Sm/Sy))
Tx=[Sm,Sm]
Ty=[Sa,(-Sm+Sy)]
end
else
msgbox('La pieza fallara')
NF=0
end
if NF<1
msgbox('La pieza fallara')
else
msgbox('La pieza no fallara')

end
case 2
w=Sy-((Sut*(Se-Sy))/(Se-Sut))
if Sa<=Se
if Sa<=w
NF=(Sy/Sm)*(1-(Sa/Sy))
Ty=[Sa,Sa]
Tx=[Sm,(Sy-Sa)]
else
NF=(Sut/Sm)*(1-(Sa/Se))
Ty=[Sa,Sa]
Tx=[Sm,(((-Sut/Se)*Sa)+Sut)]
end
else
msgbox('La pieza fallara')
NF=0

end
if NF<1
msgbox('La pieza fallara')
else
msgbox('La pieza no fallara')

end
case 3
teta1=atan((Se*(Sy-Sut))/(Sut*(Se-Sy)))
teta=atan(Sa/Sm)
if teta<=teta1
NF=Sy/(Sa+Sm)
m2=Sy/(1+(Sa/Sm))
Tx=[Sm,m2]
Ty=[Sa,(-m2+Sy)]
else
NF=(Sut*Se)/((Sa*Sut)+(Se*Sm))
m1=(Se)/((Sa/Sm)+(Se/Sut))
Tx=[Sm,m1]
Ty=[Sa,(((-Se/Sut)*((Se)/((Sa/Sm)+(Se/Sut))))+Se)]
end
if NF<1
msgbox('La pieza fallara por prueba de primer ciclo o por
fatiga')
else
msgbox('La pieza no fallara')
end
case 4
m2=Sut/Se
b2=Sa-(Sm*m2)
m3=1
b3=Sa-Sm
if Sa<=((-Se/Sut)*Sm)+Se
if Sa<=(-Sm+Sy)
sm=(Se-b2)/((Se/Sut)+m2)
sa=(m2*((Se-b2)/((Se/Sut)+m2)))+b2
L=((sa-Sa)^2)+((sm-Sm)^2)
sm2=(Sy-b3)/2
sa2=(Sy+b3)/2
G=((sa2-Sa)^2)+((sm2-Sm)^2)
if L<G
Smm=(Sut*((Se^2)-(Se*Sa)+(Sut*Sm)))/((Se^2)+(Sut^2))
Saa=((-Se/Sut)*(Smm))+Se
ZS=(((Sm-Smm)^2)+((Sa-Saa)^2))^(1/2)
OZ=(((Sa)^2)+((Sm)^2))^(1/2)
NF=(OZ+ZS)/OZ
Tx=[Sm,((Se-b2)/((Se/Sut)+m2))]
Ty=[Sa,((m2*((Se-b2)/((Se/Sut)+m2)))+b2)]
else
Smm=(Sy-Sa+Sm)/2
Saa=((Sa-Sy-Sm)/2)+Se
ZS=(((Sm-Smm)^2)+((Sa-Saa)^2))^(1/2)
OZ=(((Sa)^2)+((Sm)^2))^(1/2)
NF=(OZ+ZS)/OZ
Tx=[Sm,((Sy-b3)/2)]
Ty=[Sa,((Sy+b3)/2)]
end
else
NF=Sy/(Sa+Sm)
msgbox('La pieza fallara por prueba de primer ciclo')
Tx=[Sm,m2]
Ty=[Sa,(-m2+Sy)]
end
else
teta1=atan((Se*(Sy-Sut))/(Sut*(Se-Sy)))
teta=atan(Sa/Sm)
if teta<=teta1
NF=Sy/(Sa+Sm)
Tx=[Sm,m2]
Ty=[Sa,(-m2+Sy)]
else
NF=(Sut*Se)/((Sa*Sut)+(Se*Sm))
m1=(Se)/((Sa/Sm)+(Se/Sut))
Tx=[Sm,m1]
Ty=[Sa,(((-Se/Sut)*((Se)/((Sa/Sm)+(Se/Sut))))+Se)]
end
msgbox('La pieza fallara por prueba de primer ciclo o por
fatiga')

end
if NF<1
msgbox('La pieza fallara')
else
msgbox('La pieza no fallara')

end

end
else
switch valo

case 1
p=Se-Sy
if Sm>=-Sy
if Sm<=p
NF=(Sy/Sa)*(1+(Sm/Sy))
Tx=[Sm,Sm]
Ty=[Sa,(Sy+Sm)]
else
NF=Se/Sa
Tx=[Sm,Sm]
Ty=[Sa,Se]
end
else
msgbox('La pieza fallara')
NF=0
end
if NF<1
msgbox('La pieza fallara')
else
msgbox('La pieza no fallara')

end

case 2
if Sa<=Se
NF=(Sy/Sm)*((Sa/Sy)-1)
Ty=[Sa,Sa]
Tx=[Sm,(Sa-Sy)]
else
msgbox('La pieza fallara')
NF=0
end
if NF<1
msgbox('La pieza fallara')
else
msgbox('La pieza no fallara')

end
case 3
p=Se-Sy
teta2=atan(Se/p)
teta3=atan(Sa/Sm)
if teta3<=teta2
NF=Sy/(Sa-Sm)
m2=Sy/((Sa/Sm)-1)
Tx=[Sm,m2]
Ty=[Sa,(m2+Sy)]
else
NF=Se/Sa
Tx=[Sm,((Sm*Se)/Sa)]
Ty=[Sa,Se]
end
if NF<1
msgbox('La pieza fallara')
else
msgbox('La pieza no fallara')

end
case 4
m4=-1
b4=Sa-Sm
m5=0
b5=Se
if Sa<=(Sy*Sm)+Se
if Sa<=Se
sm3=(b4-Sy)/(1-m4)
sa3=((b4-Sy)/(1-m4))+Sy
M=((sa3-Sa)^2)+((sm3-Sm)^2)
sm4=Sm
sa4=b5
Q=((sa4-Sa)^2)+((sm4-Sm)^2)
H=((Sm^2)+(Sa^2))^(1/2)
if M<Q
NF=((M^(1/2))+H)/H
Tx=[Sm,(b4-Sy)/(1-m4)]
Ty=[Sa,(((b4-Sy)/(1-m4))+Sy)]
else
NF=((Q^(1/2))+H)/H
Tx=[Sm,Sm]
Ty=[Sa,Se]
end
else
NF=Se/Sa
msgbox('La pieza fallara')
Tx=[Sm,((Sm*Se)/Sa)]
Ty=[Sa,Se]

end
else
p=Se-Sy
teta2=atan(Se/p)
teta3=atan(Sa/Sm)
if teta3<=teta2
NF=Sy/(Sa-Sm)
m2=Sy/(1-(Sa/Sm))
Tx=[Sm,m2]
Ty=[Sa,(m2+Sy)]
else
NF=Se/Sa
Tx=[Sm,((Sm*Se)/Sa)]
Ty=[Sa,Se]

msgbox('La pieza fallara por prueba de primer ciclo o por


fatiga')

end
if NF<1
msgbox('La pieza fallara')
else
msgbox('La pieza no fallara')

end
end
end
end
NF=num2str(NF)
Up=set(handles.text12,'String',NF)
else
msgbox('Error para calcular factor de seguridad, debido a
inconcistencias en las caracteristicas del material')

end
else
msgbox('Error para calcular factor de seguridad, debido a
inconcistencias en los factores de correccion')

end
else
msgbox('Error para calcular factor de seguridad, debido a
inconcistencias en los factores de correccion')

end
else
msgbox('Error para calcular factor de seguridad, debido a
inconcistencias en el valor de sigma alternante')

end
else
msgbox('Error para calcular factor de seguridad, debido a
inconcistencias en el numero de ciclos')

end

plot(handles.axes1,Tx,Ty,'r--')
hold off

Boton De Limpiar:
set(handles.edit1,'String','')
set(handles.edit2,'String','')
set(handles.edit4,'String','')
set(handles.edit5,'String','')
set(handles.edit6,'String','')
set(handles.edit7,'String','')
set(handles.text12,'String','')
cla(handles.axes1,'reset')