Fabricación inteligente

Cómo calcular el OEE: disponibilidad, rendimiento y calidad con ejemplos resueltos

Una explicación clara de cómo calcular el OEE: los tres factores, un ejemplo completo de un turno, los errores que inflan la cifra y código Python que calcula el OEE a partir de mensajes MQTT de estado de máquina.

Ilustración de cómo calcular el OEE con barras de disponibilidad, rendimiento y calidad que se multiplican en una única puntuación de eficiencia general de los equipos
Pruébalo en tu propio broker MQTTConsigue un broker MQTT privado y gestionado con el plan Free y empieza con ejemplos de código listos para usar.
Pruébalo gratis Ejemplos de código Sin tarjeta

Saber cómo calcular el OEE correctamente importa más que la cifra en sí, porque pequeñas decisiones de definición pueden mover el resultado muchos puntos. Esta guía explica los tres factores, desarrolla un ejemplo completo de un turno, enumera los errores que inflan el OEE sin que nadie lo note y muestra código Python que lo calcula a partir de mensajes de estado de máquina publicados por MQTT. Al terminar podrás calcular el OEE a mano y con datos en vivo, y defender cada dato de entrada.

Qué mide el OEE

La eficiencia general de los equipos (OEE, Overall Equipment Effectiveness) compara lo que una máquina produjo realmente con lo que podría haber producido en el tiempo en que estaba programada para funcionar. Responde a una sola pregunta: del tiempo de producción planificado, ¿cuánto se dedicó a fabricar piezas buenas a la velocidad ideal?

El OEE combina tres pérdidas:

  • Disponibilidad recoge las paradas: averías, cambios de formato y esperas.
  • Rendimiento recoge la velocidad: funcionar más despacio de lo ideal y las paradas cortas que no se registran como paradas.
  • Calidad recoge los defectos: desechos y reprocesos.

Multiplicar los tres factores da el OEE. Una máquina con disponibilidad y calidad perfectas pero que funciona a media velocidad tiene un OEE del 50 por ciento, que es exactamente la señal que quieres.

La fórmula del OEE

Factor Fórmula Usa
Disponibilidad Tiempo de funcionamiento / Tiempo de producción planificado Duración de las paradas
Rendimiento (Tiempo de ciclo ideal x Recuento total) / Tiempo de funcionamiento Recuento y tiempo de ciclo ideal
Calidad Recuento bueno / Recuento total Recuentos de piezas buenas y rechazadas
OEE Disponibilidad x Rendimiento x Calidad Los tres

Un atajo equivalente es OEE = (Recuento bueno x Tiempo de ciclo ideal) / Tiempo de producción planificado. Da el mismo resultado y es una comprobación útil de tus cálculos. Aun así, merece la pena calcular la versión de tres factores, porque te dice dónde están las pérdidas.

Definiciones que deben fijarse antes de empezar:

  • Tiempo de producción planificado es el tiempo del turno menos las paradas planificadas, como descansos y mantenimiento planificado. Si los cambios de formato cuentan como planificados o no planificados es una decisión de cada planta; la mayoría de los profesionales lean los tratan como pérdidas de disponibilidad para que sigan siendo visibles.
  • Tiempo de funcionamiento es el tiempo de producción planificado menos todo el tiempo de paradas no planificadas.
  • Tiempo de ciclo ideal es lo más rápido que la máquina puede fabricar la pieza de forma fiable, normalmente según el diseño del equipo o una mejor tasa demostrada, no el estándar que se usa para costes.
  • Recuento total incluye piezas buenas y rechazadas.

Ejemplo resuelto: un turno en una llenadora

Toma un turno de ocho horas (480 minutos) con dos descansos de 15 minutos.

  1. Tiempo de producción planificado = 480 - 30 = 450 minutos.
  2. Paradas durante el turno: un cambio de formato de 25 minutos y una avería de 20 minutos, es decir, 45 minutos de parada.
  3. Tiempo de funcionamiento = 450 - 45 = 405 minutos.
  4. Tiempo de ciclo ideal: 1,0 segundo por unidad, así que la tasa ideal es de 60 unidades por minuto.
  5. Recuento total = 21.000 unidades.
  6. Rechazos = 420 unidades, así que el recuento bueno = 20.580.

Ahora los factores:

  • Disponibilidad = 405 / 450 = 0,900 (90,0 por ciento)
  • Rendimiento = (1,0 s x 21.000) / (405 x 60 s) = 21.000 / 24.300 = 0,864 (86,4 por ciento)
  • Calidad = 20.580 / 21.000 = 0,980 (98,0 por ciento)
  • OEE = 0,900 x 0,864 x 0,980 = 0,762 (76,2 por ciento)

Comprobación con el atajo: (20.580 x 1,0 s) / (450 x 60 s) = 20.580 / 27.000 = 0,762. Los dos métodos coinciden.

¿Qué le dice esto al equipo? La mayor pérdida individual es el rendimiento: en 405 minutos de funcionamiento, la máquina fabricó 3.300 unidades menos de las que podría haber hecho. Esa pérdida se compone de microparadas y velocidad reducida, que rara vez aparecen en un registro manual. El artículo de monitorización de líneas de envasado muestra cómo desglosar aún más la pérdida de rendimiento.

Errores comunes al calcular el OEE

Estos son los errores que hacen que el OEE parezca mejor que la realidad o que impiden comparar máquinas:

  1. Usar un tiempo de ciclo ideal lento. Si el "ideal" es el estándar de planificación con holgura, el rendimiento puede superar el 100 por ciento o parecer artificialmente alto. Usa la tasa real de diseño o la mejor demostrada.
  2. Excluir los cambios de formato. Llamar "planificado" a cada cambio oculta una gran oportunidad de mejora.
  3. Contar solo piezas buenas en el rendimiento. El rendimiento usa el recuento total. Usar el recuento bueno cuenta dos veces la pérdida de calidad.
  4. Promediar porcentajes de OEE entre máquinas. Una máquina pequeña y una grande no deben pesar lo mismo. Suma los tiempos y recuentos subyacentes y luego calcula.
  5. Contar en cada estación de una línea. Para una línea, el OEE debe usar la producción de la última estación y la tasa ideal de la restricción.
  6. Mezclar productos con distintos tiempos de ciclo. Calcula el tiempo ideal por producto (recuento x tiempo de ciclo ideal de cada producto) y súmalo, en lugar de usar una única tasa para todo el turno.

En turnos con varios productos, la forma abreviada maneja las mezclas limpiamente: OEE = suma por producto de (recuento bueno x tiempo de ciclo ideal) / tiempo de producción planificado.

Elegir el tiempo de ciclo ideal

El tiempo de ciclo ideal es el dato de entrada más discutido, y el que más afecta al rendimiento. Hay tres fuentes habituales:

  • Tasa nominal o de diseño del proveedor del equipo. Honesta, pero a veces inalcanzable para un producto concreto.
  • Mejor tasa demostrada, el ciclo más rápido que la máquina ha mantenido durante un periodo significativo con ese producto. Práctica y defendible.
  • Tasa estándar de costes o planificación. Normalmente con holgura y, por tanto, la elección equivocada para el OEE.

Elige la tasa de diseño o la mejor demostrada, regístrala por producto y máquina, y cámbiala solo mediante una revisión deliberada. Si mantienes datos maestros como este en un mensaje MQTT retenido por máquina (por ejemplo, un topic config en tu broker de ConnectMQ), todos los servicios de cálculo y dashboards leen el mismo valor, y cualquier cambio es visible para todos a la vez.

Cómo calcular el OEE a partir de datos MQTT de máquina

El cálculo a mano está bien para una sesión de formación, pero en la práctica el OEE debe salir de las señales de la máquina. Una configuración típica publica dos tipos de mensajes por máquina en un broker MQTT:

connectmq/demo/<your-id>/plant1/line2/filler/state   {"state": "RUNNING", "ts": 1792130400}
connectmq/demo/<your-id>/plant1/line2/filler/counts  {"total": 21000, "reject": 420, "ts": 1792159200}

Los mensajes de estado se publican en cada cambio; los recuentos son acumulados del turno y se publican periódicamente. La función siguiente calcula el OEE de una ventana a partir de una lista de eventos de estado y de los recuentos inicial y final. Trata PLANNED_STOP como excluido del tiempo planificado y cualquier otro estado distinto de funcionamiento como parada.

from dataclasses import dataclass


@dataclass
class StateEvent:
    ts: float      # unix seconds
    state: str     # RUNNING, DOWN, IDLE, SETUP, PLANNED_STOP


def calculate_oee(events, window_start, window_end, total_count, reject_count, ideal_cycle_s):
    """Return availability, performance, quality and OEE for one window."""
    events = sorted(events, key=lambda e: e.ts)
    planned_stop = 0.0
    run_time = 0.0

    for i, ev in enumerate(events):
        start = max(ev.ts, window_start)
        end = events[i + 1].ts if i + 1 < len(events) else window_end
        end = min(end, window_end)
        if end <= start:
            continue
        duration = end - start
        if ev.state == "PLANNED_STOP":
            planned_stop += duration
        elif ev.state == "RUNNING":
            run_time += duration

    planned_time = (window_end - window_start) - planned_stop
    if planned_time <= 0 or run_time <= 0 or total_count <= 0:
        return {"availability": 0.0, "performance": 0.0, "quality": 0.0, "oee": 0.0}

    availability = run_time / planned_time
    performance = min((ideal_cycle_s * total_count) / run_time, 1.0)
    quality = (total_count - reject_count) / total_count
    return {
        "availability": round(availability, 4),
        "performance": round(performance, 4),
        "quality": round(quality, 4),
        "oee": round(availability * performance * quality, 4),
    }


if __name__ == "__main__":
    t0 = 0
    shift = [
        StateEvent(t0, "RUNNING"),
        StateEvent(t0 + 120 * 60, "PLANNED_STOP"),   # descanso
        StateEvent(t0 + 135 * 60, "SETUP"),          # cambio de formato 25 min
        StateEvent(t0 + 160 * 60, "RUNNING"),
        StateEvent(t0 + 300 * 60, "PLANNED_STOP"),   # descanso
        StateEvent(t0 + 315 * 60, "RUNNING"),
        StateEvent(t0 + 400 * 60, "DOWN"),           # avería 20 min
        StateEvent(t0 + 420 * 60, "RUNNING"),
    ]
    print(calculate_oee(shift, t0, t0 + 480 * 60, 21000, 420, 1.0))

Al ejecutarlo se reproduce el ejemplo resuelto: disponibilidad 0.9, rendimiento 0.8642, calidad 0.98, OEE 0.7622. Fíjate en el tope min(..., 1.0) del rendimiento. Si lo alcanzas con frecuencia, el tiempo de ciclo ideal está mal; corrige los datos maestros en lugar de confiar en el tope.

Para convertirlo en una cifra en vivo, suscríbete a los topics de estado y recuento, guarda en memoria los eventos del turno actual y recalcula cada minuto. El tutorial de monitorización del OEE en tiempo real construye exactamente ese servicio, y la comparativa OEE frente a TEEP explica qué cambia cuando mides contra el tiempo de calendario en lugar del tiempo planificado.

Probarlo en un broker real

Puedes probar el flujo de mensajes sin hardware usando el servidor MQTT público gratuito en broker.connectmq.com. Publica un cambio de estado a mano:

mosquitto_pub -h broker.connectmq.com -p 1883 -i oee-test-h4v7 -t "connectmq/demo/h4v7/plant1/line2/filler/state" -m '{"state":"RUNNING","ts":1792130400}' -r

Recuerda que cualquiera puede leer la zona pública, así que úsala solo para pruebas y prototipos. Para datos reales de producción, ConnectMQ te ofrece un broker MQTT gestionado privado con credenciales, TLS y un portal donde puedes ver los topics en vivo. Para saber cómo encaja el OEE con otras métricas de planta, consulta la guía de fabricación inteligente; y si quieres mostrar el OEE de cada máquina sobre un gemelo digital 3D de la línea, los mismos topics de estado y recuento sirven de fuente.

Empieza con ConnectMQ

Crea un broker Serverless gratuito en app.connectmq.com sin tarjeta de crédito, publica los estados y recuentos de tus máquinas y calcula el OEE con datos reales en lugar de estimaciones a final de turno.

Preguntas frecuentes

¿Qué es una buena puntuación de OEE?

Depende del proceso y de lo estrictamente que definas los datos de entrada. Usa el OEE para seguir la mejora en la misma máquina con definiciones fijas, en lugar de compararlo con referencias genéricas.

¿Puede el rendimiento superar el 100 por ciento?

No, si el tiempo de ciclo ideal es correcto. Un rendimiento superior al 100 por ciento significa que el tiempo de ciclo ideal es demasiado lento y debe corregirse.

¿Deben los cambios de formato contar contra la disponibilidad?

La mayoría de los programas de mejora los incluyen como pérdida de disponibilidad para que la reducción de los tiempos de cambio siga siendo visible. Elijas lo que elijas, aplícalo de forma coherente en todas las máquinas y turnos.

¿Cómo calculo el OEE de una línea completa?

Usa el recuento de producción de la estación final, la tasa ideal de la máquina restrictiva y el tiempo de parada a nivel de línea. No promedies el OEE de las máquinas individuales.

Artículos relacionados

OEE vs TEEP vs OOE: ¿qué indicador deberías usar?

OEE, OOE y TEEP comparten los mismos factores de rendimiento y calidad, pero se miden frente a bases de tiempo distintas. Esta comparativa resuelve un único ejemplo y enumera las señales MQTT que necesita cada indicador.

8 min de lectura

Todos los artículos →

Tu broker MQTT privado, a unos pocos clics

Crea una cuenta, obtén las credenciales de tu broker y conecta tu primer dispositivo, sin servidores que instalar, parchear ni escalar.