Saber como calcular o OEE corretamente importa mais do que o próprio número, porque pequenas escolhas de definição podem mover o resultado em muitos pontos. Este guia explica os três fatores, resolve um exemplo completo de turno, lista os erros que inflam o OEE silenciosamente e mostra um código Python que o calcula a partir de mensagens de estado da máquina publicadas via MQTT. Ao final, você conseguirá calcular o OEE à mão e a partir de dados ao vivo, e defender cada entrada.
O que o OEE mede
O OEE (Overall Equipment Effectiveness, ou eficiência global do equipamento) compara o que uma máquina realmente produziu com o que ela poderia ter produzido no tempo em que estava programada para operar. Ele responde a uma única pergunta: do tempo planejado de produção, quanto foi gasto fazendo peças boas na velocidade ideal?
O OEE combina três perdas:
- Disponibilidade captura as paradas: quebras, setups e esperas.
- Desempenho captura a velocidade: operar mais devagar que o ideal e pequenas paradas que não são registradas como parada.
- Qualidade captura os defeitos: refugo e retrabalho.
Multiplicar os três fatores dá o OEE. Uma máquina com disponibilidade e qualidade perfeitas, mas operando na metade da velocidade, tem 50 por cento de OEE, que é exatamente o sinal que você quer.
A fórmula do OEE
| Fator | Fórmula | Usa |
|---|---|---|
| Disponibilidade | Tempo de operação / Tempo planejado de produção | Durações das paradas |
| Desempenho | (Tempo de ciclo ideal x Contagem total) / Tempo de operação | Contagem e tempo de ciclo ideal |
| Qualidade | Contagem de peças boas / Contagem total | Contagens de peças boas e rejeitadas |
| OEE | Disponibilidade x Desempenho x Qualidade | Os três |
Um atalho equivalente é OEE = (Contagem de peças boas x Tempo de ciclo ideal) / Tempo planejado de produção. Ele produz o mesmo resultado e é uma conferência útil da sua aritmética. Ainda vale calcular a versão com três fatores, porque ela mostra onde estão as perdas.
Definições que precisam ser fixadas antes de começar:
- Tempo planejado de produção é o tempo do turno menos as paradas planejadas, como intervalos e manutenção planejada. Se os setups contam como planejados ou não planejados é uma decisão de cada site; a maioria dos praticantes de lean os trata como perdas de disponibilidade para que continuem visíveis.
- Tempo de operação é o tempo planejado de produção menos todo o tempo de paradas não planejadas.
- Tempo de ciclo ideal é o mais rápido que a máquina consegue fazer a peça de forma confiável, normalmente obtido do projeto do equipamento ou de uma melhor taxa demonstrada, e não o padrão usado para custeio.
- Contagem total inclui peças boas e rejeitadas.
Exemplo resolvido: um turno em uma enchedora
Considere um turno de oito horas (480 minutos) com dois intervalos de 15 minutos.
- Tempo planejado de produção = 480 - 30 = 450 minutos.
- Paradas durante o turno: um setup de 25 minutos e uma quebra de 20 minutos, ou seja, 45 minutos de parada.
- Tempo de operação = 450 - 45 = 405 minutos.
- Tempo de ciclo ideal é de 1,0 segundo por unidade, portanto a taxa ideal é de 60 unidades por minuto.
- Contagem total = 21.000 unidades.
- Rejeitos = 420 unidades, portanto a contagem de peças boas = 20.580.
Agora os fatores:
- Disponibilidade = 405 / 450 = 0,900 (90,0 por cento)
- Desempenho = (1,0 s x 21.000) / (405 x 60 s) = 21.000 / 24.300 = 0,864 (86,4 por cento)
- Qualidade = 20.580 / 21.000 = 0,980 (98,0 por cento)
- OEE = 0,900 x 0,864 x 0,980 = 0,762 (76,2 por cento)
Confira com o atalho: (20.580 x 1,0 s) / (450 x 60 s) = 20.580 / 27.000 = 0,762. Os dois métodos concordam.
O que isso diz à equipe? A maior perda individual é de desempenho: em 405 minutos de operação, a máquina fez 3.300 unidades a menos do que poderia. Essa perda é composta de microparadas e velocidade reduzida, que raramente aparecem em um registro manual. O artigo de monitoramento de linha de embalagem mostra como detalhar ainda mais a perda de desempenho.
Erros comuns ao calcular o OEE
Estes são os erros que fazem o OEE parecer melhor que a realidade ou tornam as máquinas impossíveis de comparar:
- Usar um tempo de ciclo ideal lento. Se o "ideal" é o padrão de planejamento com folga, o desempenho pode passar de 100 por cento ou parecer artificialmente alto. Use a taxa real de projeto ou a melhor taxa demonstrada.
- Excluir os setups. Chamar todo setup de "planejado" tira de vista uma grande oportunidade de melhoria.
- Contar apenas peças boas no desempenho. O desempenho usa a contagem total. Usar a contagem de peças boas conta a perda de qualidade duas vezes.
- Fazer a média de percentuais de OEE entre máquinas. Uma máquina pequena e uma grande não devem ter o mesmo peso. Some os tempos e contagens subjacentes e depois calcule.
- Contar em todas as estações de uma linha. Para uma linha, o OEE deve usar a produção da última estação e a taxa ideal da restrição.
- Misturar produtos com tempos de ciclo diferentes. Calcule o tempo ideal por produto (contagem x tempo de ciclo ideal de cada produto) e some, em vez de usar uma única taxa para o turno inteiro.
Em turnos com vários produtos, a forma de atalho lida bem com o mix: OEE = soma, por produto, de (contagem de peças boas x tempo de ciclo ideal) / tempo planejado de produção.
Escolhendo o tempo de ciclo ideal
O tempo de ciclo ideal é a entrada mais contestada e a que tem o maior efeito sobre o desempenho. Três fontes são comuns:
- Taxa de placa ou de projeto informada pelo fornecedor do equipamento. Honesta, mas às vezes inalcançável para determinado produto.
- Melhor taxa demonstrada, o ciclo mais rápido que a máquina sustentou por um período significativo naquele produto. Prática e defensável.
- Taxa padrão de custeio ou planejamento. Geralmente tem folga e, por isso, é a escolha errada para o OEE.
Escolha a taxa de projeto ou a melhor taxa demonstrada, registre-a por produto e máquina e altere-a apenas por meio de uma revisão deliberada. Quando você mantém dados mestres como esse em uma retained message MQTT por máquina (por exemplo, um topic config no seu broker ConnectMQ), todo serviço de cálculo e todo dashboard leem o mesmo valor, e uma alteração fica visível para todos ao mesmo tempo.
Como calcular o OEE a partir de dados MQTT das máquinas
O cálculo à mão serve para um treinamento, mas, na prática, o OEE deve vir dos sinais da máquina. Uma configuração típica publica dois tipos de mensagem por máquina em um 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}
As mensagens de estado são publicadas a cada mudança; as contagens são acumuladas no turno e publicadas periodicamente. A função abaixo calcula o OEE de uma janela a partir de uma lista de eventos de estado e das contagens inicial e final. Ela exclui PLANNED_STOP do tempo planejado e trata todos os outros estados diferentes de operação como parada.
from dataclasses import dataclass
@dataclass
class StateEvent:
ts: float # segundos unix
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"), # intervalo
StateEvent(t0 + 135 * 60, "SETUP"), # setup de 25 min
StateEvent(t0 + 160 * 60, "RUNNING"),
StateEvent(t0 + 300 * 60, "PLANNED_STOP"), # intervalo
StateEvent(t0 + 315 * 60, "RUNNING"),
StateEvent(t0 + 400 * 60, "DOWN"), # quebra de 20 min
StateEvent(t0 + 420 * 60, "RUNNING"),
]
print(calculate_oee(shift, t0, t0 + 480 * 60, 21000, 420, 1.0))
Executá-lo reproduz o exemplo resolvido: disponibilidade 0.9, desempenho 0.8642, qualidade 0.98, OEE 0.7622. Observe o limite min(..., 1.0) no desempenho. Se você o atinge com frequência, o tempo de ciclo ideal está errado; corrija os dados mestres em vez de depender do limite.
Para transformar isso em um número ao vivo, assine os topics de estado e de contagem, mantenha em memória os eventos do turno atual e recalcule a cada minuto. O tutorial de monitoramento de OEE em tempo real constrói exatamente esse serviço, e a comparação OEE vs TEEP explica o que muda quando você mede em relação ao tempo de calendário em vez do tempo planejado.
Testando em um broker real
Você pode testar o fluxo de mensagens sem nenhum hardware usando o servidor MQTT público em broker.connectmq.com. Publique uma mudança de estado à mão:
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
Lembre-se de que a área pública pode ser lida por qualquer pessoa e serve para testes, não para dados de produção. Para dados reais de produção, a ConnectMQ oferece um broker MQTT gerenciado privado, com credenciais, TLS e um portal em que você acompanha os topics ao vivo. Para ver como o OEE se encaixa com outras métricas da planta, consulte o guia de manufatura inteligente.
Comece com a ConnectMQ
Crie um broker Serverless gratuito em app.connectmq.com, sem cartão de crédito, publique os estados e as contagens das suas máquinas e calcule o OEE a partir de dados reais, em vez de estimativas de fim de turno.
Perguntas frequentes
Qual é um bom índice de OEE?
Depende do processo e de quão rigorosamente você define as entradas. Use o OEE para acompanhar a melhoria na mesma máquina com definições fixas, em vez de compará-lo com benchmarks genéricos.
O desempenho pode passar de 100 por cento?
Não, se o tempo de ciclo ideal estiver correto. Um desempenho acima de 100 por cento significa que o tempo de ciclo ideal está lento demais e precisa ser corrigido.
Os setups devem contar contra a disponibilidade?
A maioria dos programas de melhoria os inclui como perda de disponibilidade para que a redução de setup continue visível. Seja qual for a escolha, aplique-a de forma consistente entre máquinas e turnos.
Como calcular o OEE de uma linha inteira?
Use a contagem de produção da estação final, a taxa ideal da máquina gargalo e o tempo de parada no nível da linha. Não faça a média do OEE das máquinas individuais.



