Manufatura inteligente

Monitoramento de desgaste de ferramentas com potência do spindle, vibração e MQTT

Use a potência do spindle e a vibração publicadas via MQTT para criar um índice de desgaste por ferramenta, comparar cada corte com a referência da ferramenta nova e trocar ferramentas pela condição, e não por uma contagem fixa de peças.

Monitoramento de desgaste de ferramentas em um spindle de fresadora CNC com gráficos de potência e vibração transmitidos para um dashboard MQTT na nuvem
Rode isso no seu próprio broker MQTTTenha um broker MQTT privado e gerenciado no plano Free e comece com exemplos de código prontos.
Teste grátis Exemplos de código Sem cartão de crédito

O monitoramento de desgaste de ferramentas permite que uma usinagem troque as ferramentas de corte quando elas estão realmente desgastadas, e não depois de uma contagem fixa e conservadora. Este caso de uso mostra como publicar a potência do spindle e a vibração de cada corte via MQTT, construir um índice de desgaste para cada ferramenta e programar as trocas a partir dos dados, antes que uma ferramenta gasta gere refugo ou quebre.

O problema da vida útil fixa

A maioria das usinagens CNC gerencia a vida útil das ferramentas com um contador: troca-se o inserto depois de um número definido de peças ou de minutos em corte. O número é escolhido de forma conservadora, porque uma ferramenta quebrada pode refugar uma peça cara, danificar o spindle ou o dispositivo de fixação e parar a máquina por muito mais tempo que uma troca planejada.

O resultado é um meio-termo errado nas duas direções. Quando o material é macio e as condições são boas, ferramentas são descartadas ainda com vida útil. Quando um lote de material é mais duro, um bico de refrigeração está desalinhado ou um inserto tem defeito, a ferramenta se desgasta antes de o contador expirar e o dano acontece de qualquer jeito. O monitoramento de desgaste de ferramentas substitui o contador fixo, ou ao menos o complementa, com uma medição de como cada ferramenta está realmente se comportando.

Quais sinais revelam o desgaste da ferramenta

À medida que uma aresta de corte se desgasta, ela atrita mais e corta de forma menos limpa. Isso aparece de várias formas mensuráveis:

Sinal Como muda com o desgaste Como obter
Potência ou carga do spindle Sobe gradualmente para a mesma operação Dados do comando CNC (carga do spindle em percentual) ou um transdutor de potência ou TC na alimentação do acionamento do spindle
Carga dos eixos de avanço Sobe conforme as forças de corte aumentam Dados de carga dos eixos do comando CNC
Vibração O RMS e o conteúdo de alta frequência sobem; pode surgir trepidação Acelerômetro na carcaça do spindle
Emissão acústica Mudanças na emissão de alta frequência da zona de corte Sensor de EA dedicado, principalmente em sistemas de alto padrão
Qualidade da peça As dimensões derivam e o acabamento superficial piora Medição em processo ou pós-processo

A potência do spindle é o ponto de partida mais prático. Muitos comandos modernos expõem a carga do spindle via OPC UA, MTConnect ou uma interface do fabricante, e em máquinas mais antigas um medidor de potência no acionamento do spindle fornece a mesma informação sem mexer no comando. A vibração acrescenta sensibilidade a lascamentos e trepidação que a potência sozinha pode não captar. O artigo sobre monitoramento de máquinas CNC explica como extrair dados de diferentes comandos.

A ideia-chave: comparar igual com igual

A potência bruta do spindle não significa nada sozinha. Desbastar um bolsão em aço consome muito mais potência do que fazer o acabamento de uma face em alumínio, independentemente do desgaste. Por isso, o monitoramento de desgaste de ferramentas compara cada corte com a mesma operação executada pela mesma ferramenta quando ela estava nova.

Isso exige contexto em cada mensagem:

  • ID da ferramenta (número do magazine ou, melhor ainda, um identificador da ferramenta vindo do sistema de gestão de ferramentas)
  • ID da operação (programa e faixa de blocos, ou um nome de operação)
  • Contador de cortes da ferramenta atual desde que foi instalada
  • Características do corte: potência média durante o corte, potência de pico, energia, RMS de vibração

O gateway de borda, que lê o comando e os sensores, segmenta o sinal em cortes. Um método simples é considerar como corte o período em que a potência do spindle supera um limite de ociosidade durante uma operação conhecida e calcular as características apenas sobre esse segmento. Cortes em vazio e movimentos rápidos ficam de fora, o que elimina a maior parte do ruído.

Fluxo de dados e payload

Cada corte concluído gera uma mensagem:

acme/plant1/machining/cell2/cnc4/tool/cut
{
  "ts": "2026-10-16T10:42:18Z",
  "tool_id": "T12-EM10-4F",
  "operation": "OP20-rough-pocket",
  "cut_no": 143,
  "duration_s": 38.2,
  "power_mean_kw": 4.61,
  "power_peak_kw": 6.02,
  "energy_kj": 176.1,
  "vib_rms_g": 0.84
}

Uma troca de ferramenta é um evento separado que zera a referência daquela posição:

{"ts": "2026-10-16T11:05:00Z", "event": "tool_changed", "tool_id": "T12-EM10-4F", "reason": "wear_index"}

Publicar por corte, em vez de transmitir amostras brutas, mantém o tráfego pequeno e torna cada mensagem significativa. Se mais tarde você precisar das formas de onda brutas para análise, capture-as localmente e publique-as apenas sob demanda.

Serviço de índice de desgaste em Python

O serviço abaixo aprende a potência média e a vibração de referência nos primeiros cinco cortes de cada nova combinação de ferramenta e operação e depois calcula um índice de desgaste para cada corte seguinte, como a razão em relação a essa referência. Quando o índice suavizado ultrapassa um limite de aviso ou de troca, ele publica uma recomendação que um dashboard ou o painel do operador pode exibir. Ele usa paho-mqtt 2.x com o servidor MQTT público de testes.

import json
from collections import defaultdict, deque
import paho.mqtt.client as mqtt

PREFIX = "connectmq/demo/e93f10/cnc4"
BASELINE_CUTS = 5
WARN_INDEX = 1.20      # 20 % acima da potência da ferramenta nova
CHANGE_INDEX = 1.35    # recomenda a troca
VIB_WEIGHT = 0.3       # peso da vibração no índice combinado
SMOOTH = 3             # mediana dos últimos N cortes

baseline = {}                        # (tool, op) -> (power, vib)
learning = defaultdict(list)
recent = defaultdict(lambda: deque(maxlen=SMOOTH))
status = {}

def on_connect(client, userdata, flags, reason_code, properties):
    client.subscribe(f"{PREFIX}/tool/#", qos=1)

def on_message(client, userdata, msg):
    d = json.loads(msg.payload)
    if msg.topic.endswith("/event") and d.get("event") == "tool_changed":
        for key in [k for k in baseline if k[0] == d["tool_id"]]:
            baseline.pop(key)
            recent.pop(key, None)
            status.pop(key, None)
        for key in [k for k in learning if k[0] == d["tool_id"]]:
            learning.pop(key)
        print("reset", d["tool_id"])
        return
    if not msg.topic.endswith("/cut"):
        return

    key = (d["tool_id"], d["operation"])
    if key not in baseline:
        learning[key].append((d["power_mean_kw"], d["vib_rms_g"]))
        if len(learning[key]) >= BASELINE_CUTS:
            p = sorted(x[0] for x in learning[key])[BASELINE_CUTS // 2]
            v = sorted(x[1] for x in learning[key])[BASELINE_CUTS // 2]
            baseline[key] = (p, v)
            print("baseline", key, baseline[key])
        return

    p0, v0 = baseline[key]
    index = (1 - VIB_WEIGHT) * d["power_mean_kw"] / p0 + VIB_WEIGHT * d["vib_rms_g"] / v0
    recent[key].append(index)
    smoothed = sorted(recent[key])[len(recent[key]) // 2]
    level = "change" if smoothed >= CHANGE_INDEX else "warn" if smoothed >= WARN_INDEX else "ok"

    out = {"tool_id": key[0], "operation": key[1], "cut_no": d["cut_no"],
           "wear_index": round(smoothed, 3), "level": level}
    client.publish(f"{PREFIX}/tool/{key[0]}/wear", json.dumps(out), qos=1, retain=True)
    if level != status.get(key):
        status[key] = level
        print("STATUS", out)

client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, client_id="tool-wear-e93f10")
client.on_connect = on_connect
client.on_message = on_message
client.connect("broker.connectmq.com", 1883, keepalive=60)
client.loop_forever()

As mensagens de corte vão para .../cnc4/tool/cut, os eventos de troca para .../cnc4/tool/event, e o serviço grava os resultados em .../cnc4/tool/<tool_id>/wear. Como os resultados são retained, o painel do operador sempre mostra o índice de desgaste atual de cada ferramenta, mesmo logo após um reinício.

Repare na suavização pela mediana: um único corte pesado, causado por uma peça fundida com sobremetal, não deve disparar uma troca. Já um salto repentino que persiste por vários cortes costuma indicar uma aresta lascada e merece atenção imediata. Muitas usinagens acrescentam uma regra separada para esse caso: se o índice saltar bruscamente entre dois cortes consecutivos, gerar um alerta independentemente do valor suavizado.

Ajustando os limites

Os valores acima são pontos de partida, não constantes universais. Ajuste-os por família de ferramentas:

  1. Rode apenas monitorando. Mantenha a vida útil fixa atual e apenas registre o índice de desgaste por algumas semanas.
  2. Inspecione as ferramentas gastas. Quando as ferramentas saírem, meça o desgaste de flanco ou avalie a condição delas e anote o índice no momento da remoção.
  3. Correlacione. Encontre o nível de índice em que as ferramentas atingem o seu limite aceitável de desgaste e defina o limite de troca um pouco abaixo dele.
  4. Estenda com cuidado. Quando o índice prever a condição de forma confiável, permita que ferramentas ainda saudáveis rodem além da antiga contagem fixa, em pequenos passos.
  5. Mantenha um teto rígido. Deixe uma contagem máxima generosa como rede de segurança, caso um sensor ou o gateway falhe.

O que a usinagem ganha

Quando as trocas de ferramenta são guiadas pela condição, as ferramentas que trabalham em condições fáceis são usadas por mais tempo, as que se desgastam rápido são retiradas antes de quebrar e o almoxarifado de ferramentas pode planejar as compras a partir do consumo real. Os dados de desgaste por ferramenta também alimentam o trabalho de confiabilidade: as paradas ligadas a ferramentas ficam visíveis no seu cálculo de MTBF e MTTR, e taxas de desgaste anormais apontam para problemas de processo, como falhas de refrigeração ou variação de material. Combinar o índice de desgaste com dados de um sensor de monitoramento de vibração nos rolamentos do spindle separa problemas da ferramenta de problemas da máquina. O mesmo histórico de cortes e trocas também enriquece um gêmeo digital da máquina.

Notas de infraestrutura

  • A segmentação na borda mantém a carga do broker pequena: uma mensagem por corte em vez de milhares de amostras por segundo.
  • QoS 1 nas mensagens de corte e de troca de ferramenta garante que o serviço nunca perca um reset.
  • Topics ISA-95 como acme/plant1/machining/cell2/cnc4/... permitem que o portal ConnectMQ agrupe as máquinas por área e célula na visão de dispositivos.
  • Broker privado para produção. A demonstração pública, no servidor MQTT público, pode ser lida por qualquer pessoa e serve apenas para testes. Use credenciais do portal e TLS na porta 8883.

Um broker MQTT na nuvem permite que os mesmos dados cheguem ao painel do chão de fábrica, ao almoxarifado de ferramentas e a um engenheiro de processos trabalhando remotamente, sem abrir portas de entrada na rede das máquinas. Para a arquitetura mais ampla, veja o guia de manufatura inteligente.

Conecte suas máquinas CNC ao ConnectMQ

O ConnectMQ é um broker MQTT gerenciado com MQTT 5, TLS, retained messages, explorador de topics ao vivo e alertas por limite no portal. Crie um broker no plano Serverless gratuito em app.connectmq.com, sem cartão de crédito, e comece a registrar dados de desgaste da sua primeira máquina.

Perguntas frequentes

Qual é o melhor sinal para o monitoramento de desgaste de ferramentas?

A potência ou carga do spindle é o sinal inicial mais prático, porque muitos comandos já o fornecem. Acrescentar a vibração do spindle melhora a detecção de lascamentos e trepidação.

O monitoramento de desgaste pode substituir totalmente a vida útil fixa?

Ele pode estender ou encurtar a vida útil com base na condição, mas a maioria das usinagens mantém uma contagem máxima generosa como rede de segurança, caso os sensores ou a coleta de dados falhem.

Por que comparar cada corte com a referência da ferramenta nova?

A potência depende muito da operação, do material e da ferramenta. Comparar a mesma ferramenta e operação com o seu próprio estado novo isola a mudança causada pelo desgaste.

Quantos dados isso envia via MQTT?

Apenas uma pequena mensagem por corte, mais os eventos de troca de ferramenta. Os sinais brutos de alta frequência ficam na borda, a menos que você precise explicitamente deles.

Artigos relacionados

OEE vs TEEP vs OOE: qual indicador você deve usar?

OEE, OOE e TEEP compartilham os mesmos fatores de desempenho e qualidade, mas medem contra bases de tempo diferentes. Esta comparação resolve um único exemplo e lista os sinais MQTT de que cada indicador precisa.

8 min de leitura

Todos os artigos →

Seu broker MQTT privado está a poucos cliques de distância

Crie uma conta, receba as credenciais do seu broker e conecte seu primeiro dispositivo — sem servidores para instalar, atualizar ou escalar.