Fabrication intelligente

Surveillance de l'usure des outils avec la puissance broche, les vibrations et MQTT

Utilisez la puissance broche et les vibrations publiées en MQTT pour construire un indice d'usure par outil, comparer chaque passe à la référence de l'outil neuf et changer les outils selon leur état plutôt qu'après un nombre fixe de pièces.

Surveillance de l'usure des outils sur une broche de fraiseuse CNC avec courbes de puissance et de vibration transmises vers un tableau de bord MQTT cloud
Essayez-le sur votre propre broker MQTTObtenez un broker MQTT privé et managé avec l’offre Free et partez d’exemples de code prêts à l’emploi.
Essayer gratuitement Exemples de code Aucune carte bancaire requise

La surveillance de l'usure des outils permet à un atelier d'usinage de changer ses outils coupants lorsqu'ils sont réellement usés, et non après un nombre fixe et prudent de pièces. Ce cas d'usage montre comment publier la puissance broche et les vibrations par passe en MQTT, construire un indice d'usure pour chaque outil et planifier les changements d'outil à partir des données, avant qu'un outil usé ne produise du rebut ou ne casse.

Le problème de la durée de vie fixe

La plupart des ateliers CNC gèrent la durée de vie des outils avec un compteur : on change la plaquette après un nombre donné de pièces ou de minutes en coupe. Ce nombre est choisi de façon prudente, car un outil cassé peut rebuter une pièce coûteuse, endommager la broche ou le montage, et arrêter la machine bien plus longtemps qu'un changement planifié.

Le résultat est un compromis faux dans les deux sens. Quand la matière est tendre et les conditions bonnes, des outils sont jetés alors qu'il leur reste une durée de vie utile. Quand un lot de matière est plus dur, qu'une buse de lubrification est mal orientée ou qu'une plaquette présente un défaut, l'outil s'use avant l'expiration du compteur et les dégâts surviennent malgré tout. La surveillance de l'usure des outils remplace le compteur fixe, ou du moins le complète, par une mesure du comportement réel de chaque outil.

Les signaux qui révèlent l'usure

À mesure qu'une arête de coupe s'use, elle frotte davantage et coupe moins proprement. Cela se manifeste de plusieurs façons mesurables :

Signal Évolution avec l'usure Comment l'obtenir
Puissance ou charge broche Augmente progressivement pour la même opération Données de la commande numérique (charge broche en pourcentage), ou transducteur de puissance ou TC sur l'alimentation du variateur de broche
Charge des axes d'avance Augmente à mesure que les efforts de coupe croissent Données de charge des axes de la commande numérique
Vibrations La valeur RMS et le contenu haute fréquence augmentent ; du broutage peut apparaître Accéléromètre sur le corps de broche
Émission acoustique Évolution de l'émission haute fréquence de la zone de coupe Capteur EA dédié, surtout dans les systèmes haut de gamme
Qualité pièce Les cotes dérivent, l'état de surface se dégrade Mesure en cours d'usinage ou contrôle après usinage

La puissance broche est le point de départ le plus pratique. De nombreuses commandes modernes exposent la charge broche via OPC UA, MTConnect ou une interface constructeur, et sur les machines plus anciennes un compteur de puissance sur le variateur de broche fournit la même information sans toucher à la commande. Les vibrations ajoutent une sensibilité à l'écaillage et au broutage que la puissance seule peut manquer. L'article surveillance des machines CNC explique comment extraire les données de différentes commandes.

L'idée clé : comparer ce qui est comparable

La puissance broche brute ne signifie rien en soi. L'ébauche d'une poche dans l'acier consomme bien plus de puissance que la finition d'une face dans l'aluminium, quelle que soit l'usure. La surveillance de l'usure des outils compare donc chaque passe à la même opération réalisée par le même outil lorsqu'il était neuf.

Cela exige du contexte dans chaque message :

  • ID de l'outil (numéro de poche ou, mieux, un identifiant d'outil issu du système de gestion des outils)
  • ID de l'opération (programme et plage de blocs, ou nom d'opération)
  • Compteur de passes de l'outil actuel depuis son montage
  • Caractéristiques de la passe : puissance moyenne en coupe, puissance crête, énergie, vibrations RMS

La passerelle edge, qui lit la commande et les capteurs, découpe le signal en passes. Une méthode simple consiste à considérer comme passe la période où la puissance broche dépasse un seuil de ralenti pendant une opération connue, puis à calculer les caractéristiques sur ce seul segment. Les coupes dans le vide et les déplacements rapides sont exclus, ce qui élimine l'essentiel du bruit.

Flux de données et payload

Chaque passe terminée produit un message :

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
}

Un changement d'outil est un événement distinct qui réinitialise la référence pour cette poche :

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

Publier par passe plutôt que diffuser les échantillons bruts réduit le trafic et donne du sens à chaque message. Si vous avez besoin plus tard des formes d'onde brutes pour une analyse, capturez-les localement et publiez-les uniquement à la demande.

Service d'indice d'usure en Python

Le service ci-dessous apprend la puissance moyenne et les vibrations de référence sur les cinq premières passes de chaque nouvel outil et de chaque opération, puis calcule pour chaque passe suivante un indice d'usure égal au rapport à cette référence. Lorsque l'indice lissé franchit une limite d'avertissement ou de changement, il publie une recommandation qu'un tableau de bord ou le pupitre opérateur peut afficher. Il utilise paho-mqtt 2.x avec le serveur MQTT public gratuit.

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 % au-dessus de la puissance de l'outil neuf
CHANGE_INDEX = 1.35    # changement recommandé
VIB_WEIGHT = 0.3       # part des vibrations dans l'indice combiné
SMOOTH = 3             # médiane des N dernières passes

baseline = {}                        # (outil, op) -> (puissance, 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()

Les messages de passe arrivent sur .../cnc4/tool/cut, les événements de changement sur .../cnc4/tool/event, et le service écrit ses résultats sur .../cnc4/tool/<tool_id>/wear. Comme les résultats sont retained, le pupitre opérateur affiche toujours l'indice d'usure courant de chaque outil, même juste après un redémarrage.

Notez le lissage par médiane : une seule passe lourde due à une pièce de fonderie avec une surépaisseur ne doit pas déclencher de changement. En revanche, un saut brutal qui persiste sur plusieurs passes signale souvent une arête écaillée et mérite une attention immédiate. De nombreux ateliers ajoutent une règle distincte pour ce cas : si l'indice bondit fortement entre deux passes consécutives, une alerte est levée quelle que soit la valeur lissée.

Ajuster les limites

Les valeurs ci-dessus sont des points de départ, pas des constantes universelles. Ajustez-les par famille d'outils :

  1. Commencez en surveillance seule. Conservez la durée de vie fixe existante et enregistrez simplement l'indice d'usure pendant quelques semaines.
  2. Inspectez les outils usés. Lorsque les outils sont démontés, mesurez l'usure en dépouille ou évaluez leur état, et notez l'indice au moment du retrait.
  3. Corrélez. Trouvez le niveau d'indice auquel les outils atteignent votre limite d'usure acceptable, et fixez la limite de changement légèrement en dessous.
  4. Prolongez prudemment. Une fois que l'indice prédit l'état de manière fiable, autorisez les outils encore sains à dépasser l'ancien compteur fixe, par petits paliers.
  5. Gardez un plafond absolu. Maintenez un nombre maximal généreux comme filet de sécurité en cas de défaillance d'un capteur ou de la passerelle.

Ce que l'atelier y gagne

Lorsque les changements d'outil sont pilotés par l'état, les outils qui travaillent dans des conditions faciles sont utilisés plus longtemps, ceux qui s'usent vite sont retirés avant de casser, et le magasin d'outillage peut planifier ses achats d'après la consommation réelle. Les données d'usure par outil alimentent aussi le travail de fiabilité : les arrêts liés aux outils deviennent visibles dans votre calcul du MTBF et du MTTR, et des vitesses d'usure anormales pointent vers des problèmes de procédé comme des soucis de lubrification ou des variations de matière. Combiner l'indice d'usure avec les données d'un capteur de surveillance vibratoire sur les roulements de broche permet de distinguer les problèmes d'outil des problèmes de machine.

Remarques sur l'infrastructure

  • La segmentation en edge limite la charge du broker : un message par passe au lieu de milliers d'échantillons par seconde.
  • La QoS 1 pour les messages de passe et de changement d'outil garantit que le service ne manque jamais une réinitialisation.
  • Des topics ISA-95 comme acme/plant1/machining/cell2/cnc4/... permettent au portail ConnectMQ de regrouper les machines par zone et par cellule dans sa vue des appareils.
  • Un broker privé pour la production. La démo sur le serveur public est lisible par tout le monde. Utilisez les identifiants du portail et TLS sur le port 8883.

Un broker MQTT cloud permet aux mêmes données d'atteindre le pupitre de l'atelier, le magasin d'outillage et un ingénieur méthodes en télétravail, sans ouvrir de ports entrants vers le réseau des machines. Pour l'architecture d'ensemble, consultez le guide de l'usine intelligente.

Connectez vos machines CNC à ConnectMQ

ConnectMQ est un broker MQTT managé avec MQTT 5, TLS, retained messages, un explorateur de topics en direct et des alertes à seuil dans le portail. Créez un broker sur l'offre Serverless gratuite sur app.connectmq.com, sans carte bancaire, et commencez à enregistrer les données d'usure de votre première machine.

Questions fréquentes

Quel est le meilleur signal pour la surveillance de l'usure des outils ?

La puissance ou la charge broche est le signal de départ le plus pratique, car de nombreuses commandes le fournissent déjà. L'ajout des vibrations de broche améliore la détection de l'écaillage et du broutage.

La surveillance de l'usure peut-elle remplacer complètement la durée de vie fixe ?

Elle peut allonger ou raccourcir la durée de vie des outils selon leur état, mais la plupart des ateliers conservent un nombre maximal généreux comme filet de sécurité en cas de défaillance des capteurs ou de la collecte de données.

Pourquoi comparer chaque passe à une référence d'outil neuf ?

La puissance dépend fortement de l'opération, de la matière et de l'outil. Comparer le même outil et la même opération à leur propre état neuf isole la variation causée par l'usure.

Quelle quantité de données cela envoie-t-il en MQTT ?

Un seul petit message par passe, plus les événements de changement d'outil. Les signaux bruts haute fréquence restent en edge, sauf si vous en avez explicitement besoin.

Articles liés

TRS (OEE) vs TEEP vs OOE : quel indicateur utiliser ?

Le TRS (OEE), l'OOE et le TEEP partagent les mêmes facteurs de performance et de qualité, mais se mesurent sur des bases de temps différentes. Ce comparatif déroule un exemple unique et liste les signaux MQTT nécessaires à chaque indicateur.

7 min de lecture

Tous les articles →

Votre broker MQTT privé, à quelques clics

Créez un compte, récupérez les identifiants de votre broker et connectez votre premier appareil — aucun serveur à installer, mettre à jour ou dimensionner.