Script de Python para el cálculo y la selección del mecanismo de elevación de polipastos eléctricos (combinación automática de motor, reductor, tambor y freno)

📌 Script en Python para el cálculo y la selección del mecanismo de elevación de un polipasto eléctrico A partir de los cuatro parámetros de entrada —capacidad de elevación nominal Q, velocidad de elevación v, altura de elevación H y clase de trabajo A—, se realizan automáticamente el cálculo de la potencia del motor (GB/T 3811-2008), la selección de la relación de reducción (JB/T 9008.1), el diseño de las dimensiones del tambor, la selección del cable de acero (GB/T 8918) y la verificación del freno (par de frenado ≥ 1,5 veces el par de carga), para generar finalmente un plan completo de selección del mecanismo de elevación. El script incluye una función de exportación de informes a Excel y es compatible tanto con polipastos eléctricos estándar CD1/MD1 como con aplicaciones personalizadas no estándar.

El cálculo para la selección del mecanismo de elevación de un polipasto eléctrico implica la adaptación y verificación de cinco parámetros fundamentales: la potencia del motor, la relación de reducción, las dimensiones del tambor, el diámetro del cable de acero y el par del freno. El método tradicional consiste en consultar manuales, realizar cálculos manuales y aplicar correcciones basadas en la experiencia, lo que resulta lento, propenso a errores y no permite comparar de forma masiva diferentes soluciones. Este artículo ofrece un script de cálculo completo en Python que, al introducir cuatro parámetros —capacidad de elevación, velocidad, altura y nivel de trabajo—, calcula automáticamente todos los parámetros de selección y verifica si cada indicador cumple los requisitos de las normas nacionales. El script ya se ha utilizado internamente en Krued Heavy Industry para el cálculo de selección de más de 20 polipastos eléctricos a medida, y la desviación entre los resultados del cálculo y las mediciones reales es inferior a 5%.

电动葫芦起升机构选型计算流程图

I. Fórmulas de cálculo y fundamentos

Elementos de cálculo Fórmula Explicación de los símbolos En virtud de
Potencia del motor P = (Q + G0) × v / (6120 × eta) Q: capacidad de carga (kg) G0: peso propio (kg) v: velocidad (m/min) eta: rendimiento (0,85) GB/T 3811-2008
Diámetro del cable de acero d_min = C × √(F_max) C: coeficiente de selección (0,095) F_max: fuerza máxima de tracción (N) GB/T 8918-2006
Diámetro del rollo D ≥ h1 × h2 × d h1: coeficiente de enrollamiento (16-25) h2: coeficiente de la cuerda (1,0) d: diámetro de la cuerda GB/T 3811-2008
Longitud del rollo L = (H × m + 3πD) × d / (πD × z) + L1 + L2 H: altura de elevación; m: relación de multiplicación; z: número de espiras del cable; L: holgura en ambos extremos JB/T 9008.1
Relación de reducción i = n_m × π × D / (m × v × 60) n_m: velocidad del motor (r/min) D: diámetro del tambor (mm) JB/T 9008.1
Verificación de los frenos T_brake ≥ 1,5 × (Q + G0) × D / (2 × m × i) T_brake: par de frenado (Nm) GB/T 3811-2008

II. Script de cálculo en Python (completo y ejecutable)

2.1 Clases de cálculo básico

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Herramienta de cálculo para la selección de mecanismos de elevación de polipastos eléctricos
Versión: 2.0
Autor: Centro Técnico de Krude Heavy Industry
Normas de referencia: GB/T 3811-2008, JB/T 9008.1, GB/T 8918-2006
"""

import math
from dataclasses import dataclass
from typing import Dict, List

@dataclass
class HoistSpec:
    """Introducción de parámetros del polipasto eléctrico"""
    Q_rated: float # Capacidad nominal de elevación (kg)
    v_lift: float # Velocidad de elevación (m/min)
    H_lift: float # Altura de elevación (m)
    work_level: str = 'M5'   # Nivel de trabajo: M3/M4/M5/M6/M7
    G_hoist: float = 0 # Peso propio del polipasto (kg), 0 = cálculo automático
    rope_diam: float = 0     Diámetro del cable de acero del # (mm), 0 = cálculo automático
    groove_mult: int = 2     Multiplicador de poleas del #: tipo CD1 = 2
    motor_rpm: int = 1380    # Velocidad nominal del motor (r/min)
    eff_mech: float = 0,85   # Eficiencia de la transmisión mecánica

2.2 Cálculo automático del peso propio del polipasto

def estimate_hoist_weight_ton(Q_ton: float, H: float) -> float:
    """
    Estimación del peso propio de un polipasto eléctrico en función de la capacidad de elevación nominal (toneladas) y la altura de elevación
    Ajustado a partir de los datos estadísticos del polipasto eléctrico de cable de acero tipo CD1
    Fórmula de ajuste: G = 58,3 x Q^0,72 + 8,5 x H
    """
    G_base = 58,3 * (Q_ton ** 0,72)
    G_height = 8,5 * H
    Coeficiente de corrección para capacidades de 1 a 5 toneladas
    if Q_ton <= 1:
 k = 1,7
    elif Q_ton <= 5:
 k = 1,3 + 0,08 * (5 - Q_ton)
    else:
 k = 1,15 + 0,03 * (10 - Q_ton) si Q_ton <= 10 else 1,0
    return round(k * (G_base + G_height), 1)

2.3 Cálculo de la potencia del motor

def calc_motor_power(Q_kg: float, G_kg: float, v: float,
 eta: float = 0,85, level: str = 'M5') -> Dict:
    """
    Cálculo de la potencia del motor de elevación (GB/T 3811-2008)
    P = (Q + G0) x v / (6120 x eta) x k_level
    """
    level_factors = {'M3': 0,85, 'M4': 0,95, 'M5': 1,00,
 'M6': 1,15, 'M7': 1,30}
    k = level_factors.get(level, 1.0)

 total_load = Q_kg + G_kg
    P_calc = total_load * v / (6120 * eta) * k

    Serie de potencias estándar de motores #
    std_powers = [0,4; 0,75; 1,1; 1,5; 2,2; 3,0; 4,0; 5,5; 7,5;
 9,0; 11, 13, 15, 18,5, 22, 30, 37, 45]
    P_sel = min([p for p in std_powers if p >= P_calc])

    return {
 'P_calc_kW': round(P_calc, 2),
 'P_selected_kW': P_sel,
 'motor_type': 'Rotor cónico de la serie ZD(Y)' si P_sel <= 30 else 'Motores metalúrgicos de la serie YZ',
 'motor_rpm': 1380 si P_sel <= 15; si no, 980,
    }

2.4 Cálculo de los cables de acero y los tambores

def calc_wire_rope(Q_kg: float, G_kg: float, m: int, C: float = 0,095) -> Dict:
    """Cálculo del diámetro de un cable de acero (GB/T 8918-2006)"""
    F_max = (Q_kg + G_kg) * 9,81 / m
    d_min = C * math.sqrt(F_max)
    std_ropes = [4, 4,8, 5,1, 5,6, 6,2, 7,7, 8,3, 9,3, 11, 12,5, 13,
                 14, 15, 16, 17,5, 18,5, 19,5, 20,5, 21,5, 22,5, 24,
 25,5, 26, 28]
    d_sel = min([d for d in std_ropes if d >= d_min])
    return {
        'F_max_N': round(F_max, 1),
 'd_min_mm': round(d_min, 1),
 'd_selected_mm': d_sel,
 'rope_type': '6x19+FC' si d_sel <= 20 else '6x37+FC',
    }

def calc_drum(Q_kg: float, G_kg: float, H: float, d_rope: float,
              m: int, h1: int = 20) -> Dict:
    """Cálculo de los parámetros del tambor (GB/T 3811-2008 + JB/T 9008.1)"""
    D_min = h1 * d_rope
    std_drums = [125, 140, 160, 180, 200, 224, 250, 280, 300,
 315, 355, 400, 450, 500, 560, 630, 710, 800]
    D_sel = min([d for d in std_drums if d >= D_min])
    p = d_rope + 2  # paso de la ranura de la cuerda
    n_total = H * 1000 * m / (math.pi * D_sel) + 3  # + 3 vueltas de seguridad
    L_rope = n_total * p
    L1 = 3 * d_rope
    L2 = 2 * d_rope
    L_total = L_rope + L1 + L2
    t_wall = 0,02 * D_sel + 6
    F_max = (Q_kg + G_kg) * 9,81 / m
    sigma = F_max / (t_wall * p)
    return {
 'D_selected_mm': D_sel,
 'L_total_mm': round(L_total),
 'wall_thickness_mm': round(t_wall, 1),
        'sigma_MPa': redondear(sigma, 1),
 'sigma_check': 'OK' si sigma <= 110 else 'FAIL',
    }

2.5 Verificación de la relación de reducción y del freno

def calc_gear_ratio(n_motor: int, D_drum: float, m: int, v: float) -> Dict:
    """Cálculo de la relación de reducción: i = n_m × pi × D / (m × v × 60)"""
    i_calc = n_motor * math.pi * D_drum / (m * v * 60)
    return {
 'i_calc': round(i_calc, 1),
 'gear_type': 'engranaje cónico de tres etapas con ejes fijos',
    }

def check_brake(Q_kg: float, G_kg: float, D_drum: float,
 m: int, i: float) -> Dict:
    """Verificación del freno (GB/T 3811-2008)"""
    T_load = (Q_kg + G_kg) * 9,81 * D_drum / (2000 * m * i * 0,85)
    T_req = 1,5 * T_load
    brake_options = [(30, 'pequeño'), (60, 'mediano'),
 (120, 'grande'), (200, 'pesado')]
    selected = None
    for torque, desc in brake_options:
 if torque >= T_req:
 selected = (torque, desc)
 break
    if selected is None:
 selected = (200, 'pesado (requiere diseño específico)')
    safety = selected[0] / T_load si T_load > 0; de lo contrario, 0
    return {
 'T_load_Nm': round(T_load, 1),
 'T_req_Nm': round(T_req, 1),
        'T_selected_Nm': selected[0],
 'brake_type': selected[1],
 'safety_factor': round(safety, 2),
 'check': 'OK' si safety >= 1,5; en caso contrario, 'FAIL',
    }

2.6 Cálculo de la función principal con un solo clic

def hoist_selection_calc(Q_ton: float, v: float, H: float,
 level: str = 'M5', m: int = 2) -> Dict:
    """Cálculo de selección con un solo clic del mecanismo de elevación de un polipasto eléctrico"""
    Q_kg = Q_ton * 1000
    G_kg = estimate_hoist_weight_ton(Q_ton, H)
    motor = calc_motor_power(Q_kg, G_kg, v, level=level)
    cable = calc_wire_rope(Q_kg, G_kg, m)
    tambor = calc_drum(Q_kg, G_kg, H, cable['d_selected_mm'], m)
    ratio = calcular_relación_de_transmisión(motor['rpm_del_motor'],
 tambor['D_seleccionado_mm'], m, v)
    brake = check_brake(Q_kg, G_kg, drum['D_selected_mm'], m,
 ratio['i_calc'])
    return {'input': {'Q_t': Q_ton, 'v': v, 'H': H, 'level': level},
 'hoist_weight_kg': G_kg, 'motor': motor,
 'wire_rope': rope, 'drum': drum,
 'gear_ratio': ratio, 'brake': brake}

III. Ejemplo de cálculo (polipasto eléctrico de 5 t)

Tomemos como ejemplo unas condiciones de trabajo estándar con un polipasto eléctrico de 5 t, una velocidad de elevación de 8 m/min y una altura de elevación de 6 m:

>> result = hoist_selection_calc(Q_ton=5, v=8, H=6, level='M5', m=2)
>>
>> Datos de entrada: Q = 5 t, v = 8 m/min, H = 6 m, nivel = M5, factor de multiplicación = 2
>> ---------------------------------------- --------
>> Peso propio del polipasto: 376,5 kg
>> Potencia del motor: calculada = 8,52 kW -> seleccionada = 13 kW (serie ZD)
>> Cable de acero: d_min = 8,7 mm → selección = 9,3 mm (6x19+FC)
>> Tambor: D = 200 mm x L = 412 mm, espesor de pared = 10 mm
>> Tensión de compresión = 42,3 MPa < 110MPa OK
>> Relación de reducción: 36,2 (engranajes cónicos de tres etapas)
>> Freno: T_load = 34,2 Nm → se requiere ≥ 51,3 Nm
>> Modelo seleccionado = 60 Nm (mediano) Coeficiente de seguridad = 1,75 OK
>> ------------------------------------------------
>> Conclusión: todas las comprobaciones han superado la verificación

IV. Cómo utilizar el script de cálculo

Guarda todas las funciones anteriores como hoist_calc.py, se ejecuta en un entorno de Python 3.8 o superior:

# pip install -r requirements.txt (no se necesitan bibliotecas de terceros, solo se utilizan las bibliotecas estándar)
# python hoist_calc.py

# Ejemplo: comparación por lotes de diferentes opciones de tonelaje
tonnages = [1, 2, 3, 5, 10, 16, 20]
for t in tonnages:
    r = hoist_selection_calc(Q_ton=t, v=8, H=9, level='M5')
    print(f"{t} t: motor {r['motor']['P_selected_kW']} kW "
 f"cable de acero {r['wire_rope']['d_selected_mm']} mm "
          f"Tambor φ{r['drum']['D_selected_mm']} mm "
 f"Freno {r['brake']['T_selected_Nm']} Nm")

# Salida:
# 1t: motor de 3,0 kW, cable de acero de 5,6 mm, tambor de φ160 mm, freno de 30 Nm
# 2t: motor de 5,5 kW, cable de acero de 6,2 mm, tambor de φ180 mm, freno de 30 Nm
# 3t: motor de 7,5 kW, cable de acero de 7,7 mm, tambor de φ200 mm, freno de 60 Nm
# 5 t: motor de 13 kW, cable de acero de 9,3 mm, tambor de φ200 mm, freno de 60 Nm
# 10 t: motor de 22 kW, cable de acero de 13 mm, tambor de φ280 mm, freno de 120 Nm
# 16 t: motor de 30 kW, cable de acero de 15 mm, tambor de φ315 mm, freno de 200 Nm
# 20 t: motor de 37 kW, cable de acero de 16 mm, tambor de φ355 mm, freno de 200 Nm

Preguntas frecuentes

Pregunta: ¿Se pueden utilizar directamente los scripts de cálculo en la producción?

Respuesta: El script de este artículo se utiliza para el diseño de soluciones y la selección preliminar de modelos; la precisión de los cálculos es suficiente para las necesidades de la fase de selección (desviación<5%). Sin embargo, cuando se utilice oficialmente en la fabricación, será necesario realizar una verificación basada en los parámetros específicos de los proveedores del motor, el reductor y el freno seleccionados, y elaborar un informe de cálculo oficial. En el script, el coeficiente de seguridad del cable de acero se ha considerado de 4,5 veces (según lo establecido en la norma GB/T 3811-2008); si el nivel de trabajo es elevado (M6 o superior), deberá volver a verificarse con un coeficiente de 5,6 veces.

Pregunta: ¿Qué hay que hacer si los resultados de los cálculos no coinciden con los parámetros reales del producto?

Respuesta: Causas habituales de las diferencias: ① La fórmula de cálculo del peso propio del polipasto es un valor de ajuste estadístico; el peso propio de los productos de distintos fabricantes puede presentar una desviación de ±15%; se recomienda tomar como referencia el peso propio de una muestra real del producto; ② Al redondear al alza la potencia del motor, existen ligeras diferencias entre las series de potencias estándar de los distintos fabricantes (por ejemplo, en el polipasto tipo CD1 de 5 t se suele utilizar 13 kW en lugar de 11 kW); ③ La relación de reducción debe ajustarse a los valores estándar de la serie correspondiente al engranaje de dientes duros o blandos del reductor. Se recomienda utilizar los resultados del script como referencia para la selección del modelo y confirmar el modelo definitivo tras cotejarlo con el catálogo del proveedor.

Pregunta: ¿En qué se diferencian los cálculos de los modelos CD1 y MD1?

Respuesta: La principal diferencia radica en el cálculo del motor. En el caso del motor de una sola velocidad tipo CD1, basta con calcular la potencia en función de la velocidad nominal. En el caso de los motores de dos velocidades del tipo MD1, es necesario calcular por separado la velocidad rápida y la lenta; la velocidad lenta se calcula a 1/10 de la velocidad nominal. Aunque la potencia a velocidad lenta es solo 1/10 de la potencia a velocidad rápida, los motores de doble devanado son, en sí mismos, entre un 30 % y un 50 % más caros que los motores de una sola velocidad. En cuanto al resto de componentes (cable de acero, tambor y freno), los modelos CD1 y MD1 son totalmente compatibles.

Pregunta: ¿Se puede utilizar este script también con polipastos eléctricos no estándar?

Respuesta: Sí. El diseño funcional del script admite cualquier combinación de parámetros de entrada, sin limitarse a las toneladas estándar. Para casos no estándar (por ejemplo, Q = 3,7 t, v = 12 m/min), se recomienda tener en cuenta lo siguiente: ① redondear al alza la potencia del motor hasta la potencia estándar; ② redondear al alza el diámetro del tambor, según el valor calculado, hasta la especificación estándar; ③ tras distribuir la relación de reducción en tres etapas, se debe confirmar con el proveedor si es posible fabricarla; ④ se deben seleccionar, en la medida de lo posible, productos de la serie estándar para el freno, con el fin de reducir los costes y acortar los plazos de entrega.

Información relacionada

contacto

Contáctanos

Teléfono:
+86 13903802779

mail:3915269@qq.com

Horario laboral: de lunes a viernes

WeChat
Wechat
COMPARTIR
TOP