Este documento describe la teoría implementada en el código weld_calculator.py para el análisis de tensiones en uniones soldadas de filete. El método sigue el enfoque clásico de proyección sobre el área de garganta presentado en textos como Shigley, y se ha extendido para manejar cordones con orientación arbitraria y estados de carga generales (fuerzas y momentos en 3D). Todas las ecuaciones se presentan en unidades del Sistema Internacional (m, N, Pa).
En una soldadura de filete, la sección resistente se idealiza como el área de garganta, un plano inclinado a 45° respecto a las caras del cordón. Sobre esta área actúan tensiones normales (
- Definir cordones mediante sus puntos extremos y su garganta
$h$ . - Calcular propiedades geométricas globales (centroide, momentos de inercia, etc.).
- Aplicar múltiples cargas (fuerzas en cualquier dirección) y obtener las tensiones en puntos a lo largo de los cordones.
- Evaluar el factor de seguridad según los criterios de von Mises o Tresca.
- Visualizar los resultados mediante gráficos vectoriales y de barras.
Cada cordón se representa como un segmento rectilíneo en el plano
La longitud del cordón es la distancia entre sus puntos extremos:
El área de la garganta (superficie de falla) es un rectángulo de dimensiones
El centroide del cordón (punto medio del segmento) es:
Respecto a su centroide, el área de garganta (rectángulo) tiene dos momentos de inercia principales:
- Eje longitudinal (paralelo al cordón):
- Eje transversal (perpendicular al cordón en el plano de la garganta):
El momento polar del cordón (respecto a su centroide) es la suma de ambos:
Cuando el cordón forma un ángulo
donde
Para la unión completa (varios cordones), se calculan propiedades globales utilizando el teorema de Steiner (transporte de ejes paralelos).
El centroide del conjunto se obtiene como promedio ponderado por área:
El momento polar total (respecto al centroide global) se calcula sumando el momento local de cada cordón más el término de transporte
Los momentos y producto de inercia globales (respecto a los ejes
Estos valores definen completamente la respuesta de la unión ante momentos flectores.
Dado un conjunto de fuerzas
El vector
Para un punto de evaluación
Debida a las componentes de fuerza en el plano
El signo negativo es convencional (la tensión se opone a la fuerza aplicada).
El momento torsor
La tensión cortante total es:
La tensión normal en el punto
-
Axial (debida a
$F_z$ ):
-
Flexión alrededor de
$X$ e$Y$ : cuando los ejes no son principales, se utiliza la fórmula general de flexión asimétrica. Sea$\mathbf{r} = \mathbf{P} - \mathbf{C}_G = (x, y, 0)$ . La tensión por flexión es:
Esta expresión reduce a
La tensión normal total es:
Para evaluar el riesgo de fluencia en materiales dúctiles, se combinan las tensiones normal y cortante mediante el criterio de von Mises:
El factor de seguridad
Dos criterios están implementados:
-
von Mises:
$\sigma_{\text{eq}} = \sigma_{\text{VM}}$ (recomendado para materiales dúctiles). -
Tresca (máxima cortante):
$\sigma_{\text{eq}} = 2 \sqrt{(\sigma/2)^2 + |\boldsymbol{\tau}|^2 }$ .
El código devuelve tanto el factor de seguridad mínimo (punto más crítico) como una lista con los valores en todos los puntos evaluados.
El módulo incluye varias funciones gráficas:
-
plot_vectors: dibuja los cordones, el centroide y, sobre los puntos de evaluación, vectores (para$\boldsymbol{\tau}$ ) o círculos coloreados (para$\sigma$ o$\sigma_{\text{VM}}$ ). Permite escalar y superponer componentes. -
plot_sigma_unfolded: genera un gráfico de barras con la tensión normal$\sigma$ (en MPa) a lo largo de la unión "desplegada". Cada cordón aparece en una región separada con su color y etiqueta. -
plot_n_unfolded: similar al anterior, pero muestra el factor de seguridad$n$ . Incluye una línea horizontal en$n=1$ para identificar zonas de falla inminente.
A continuación se muestra un ejemplo básico (para Jupyter Lab) que define tres cordones (horizontal, vertical y oblicuo), aplica dos cargas y visualiza los resultados.
import numpy as np
import matplotlib.pyplot as plt
import weld_calculator as wc
# Crear cordones con nombres
c1 = wc.Weld(name="Horizontal")
c1.start_point = [0, 0, 0]
c1.end_point = [0.05, 0, 0]
c1.h = 0.005
c1.weld_calcs()
c1.color = "black"
c2 = wc.Weld(name="Vertical")
c2.start_point = [0, 0, 0]
c2.end_point = [0, 0.05, 0]
c2.weld_calcs()
c2.color = "green"
c3 = wc.Weld(name="Oblicuo")
c3.start_point = [0.05, 0, 0]
c3.end_point = [0.1, 0.05, 0]
c3.weld_calcs()
c3.color = "blue"
# Unión
wj = wc.Weld_joint()
wj.welds = [c1, c2, c3]
wj.weld_calcs()
# Cargas
F1 = np.array([0, -1000, 0])
p1 = np.array([0.15, 0.05, 0])
F2 = np.array([0, 0, 500])
p2 = np.array([0.025, 0.025, 0])
forces = [F1, F2]
points_F = [p1, p2]
# Puntos de evaluación
pts1 = wc.equidistant_points(c1, 15)
pts2 = wc.equidistant_points(c2, 15)
pts3 = wc.equidistant_points(c3, 15)
weld_points = wc.remove_repeats(np.vstack((pts1, pts2, pts3)))
# Evaluar
wj.weld_evaluation(forces, points_F, weld_points)
# Visualizar tensiones cortantes
wj.plot_vectors(weld_points, plot_type='tau', scale_vectors=0.5, scale_magnitud=1e-6)
# Visualizar tensión normal desplegada
wj.plot_sigma_unfolded(weld_points)
# Visualizar factor de seguridad (suponiendo fluencia de 250 MPa)
wj.plot_n_unfolded(weld_points, fluencia=250e6, criterio='vm')- Shigley, J. E., & Mischke, C. R. (2011). Diseño en ingeniería mecánica. McGraw-Hill.
- Blodgett, O. W. (1966). Design of Welded Structures. The James F. Lincoln Arc Welding Foundation.