Contrôle en cours de processus des billes de roulement : mesure nanométrique avec Python en 10 minutes
Un fabricant d’éléments roulants sphériques, de billes de roulement et de rouleaux produit en grande série selon des tolérances dimensionnelles strictes. Le diamètre et la longueur sont contrôlés par échantillonnage après la sortie de la pièce du processus de fabrication. À ce stade, toute pièce hors tolérance détectée a déjà été mélangée aux pièces conformes, a déjà progressé dans le processus et a parfois même déjà été expédiée. Les rebuts sont détectés tardivement, les retouches sont coûteuses et une réclamation client coûte plus cher encore.
1. Défi
Mesurer une pièce en mouvement est un problème différent de celui consistant à la mesurer sur un banc.
La tolérance constitue la première contrainte : sur un élément roulant de précision, les écarts significatifs se situent bien en dessous du micromètre. La chaîne de mesure doit donc détecter les variations dimensionnelles à une échelle où le bruit des câbles, la dérive thermique et un convertisseur analogique-numérique lent deviennent les principales sources d’erreur. La deuxième contrainte est temporelle : la pièce ne reste que brièvement dans la zone de mesure et aucun temps d’arrêt ne permet d’effectuer une mesure minutieuse. La troisième contrainte concerne l’architecture : plusieurs palpeurs doivent être acquis simultanément et associés à la même pièce lors de son passage, puis leurs mesures doivent être réduites à une seule valeur conforme/non conforme suffisamment rapidement pour que le PLC puisse agir au cours du même cycle.
La plupart des intégrations résolvent ce problème en ajoutant du matériel : un capteur de présence indiquant le passage de la pièce, un PC pour effectuer les calculs et un rack de conditionnement entre les palpeurs et le système d’acquisition. Chaque ajout représente un élément supplémentaire à câbler, aligner, alimenter et entretenir, ainsi qu’une nouvelle source potentielle d’erreur de mesure.
2. Solution
Installez le système d’acquisition sur la machine et laissez-le effectuer lui-même la réduction des données.
Le MSX-E3701 est un système Ethernet robuste doté d’un boîtier métallique IP 65 et fonctionnant de −40 à +85 °C. Il commande directement 8 ou 16 transducteurs de déplacement inductifs, de type demi-pont, LVDT, compatible Mahr ou Knaebel, sans conditionneur externe. Il génère lui-même l’alimentation des transducteurs, sous la forme d’un signal sinusoïdal différentiel de 5 à 50 kHz, et effectue la numérisation sur 24 bits.
Dans cette application, six palpeurs sont montés sous forme de trois paires opposées sur une bague à travers laquelle la pièce est entraînée. Le module réalise une acquisition avec maintien des valeurs crêtes (min./max.): il suit matériellement la valeur extrême de chaque canal pendant le passage de la pièce. Cette fonction permet de retirer des composants de la nomenclature, car le module peut s’arrêter automatiquement lors du franchissement d’un seuil. Lorsqu’un palpeur surveillé repasse sous une valeur configurée, cela signifie que la pièce a quitté la zone de mesure et l’acquisition prend fin. Aucun capteur de présence. Aucune boucle de scrutation chargée de déterminer l’arrivée de la pièce.

Où s’intègre-t-il dans votre architecture ? Vos palpeurs restent les vôtres. Votre PLC et votre infrastructure informatique restent également les vôtres, sans aucune modification. Le MSX-E3701 prend en charge le niveau intermédiaire, de l’acquisition à la réduction des données, et transmet un résultat qui constitue déjà une mesure, et non un signal brut.
Exactitude : ce que signifient réellement les valeurs
L’étendue de mesure n’est pas imposée par le module. Elle est définie par le transducteur installé et sélectionné dans le logiciel. Le même matériel peut ainsi être utilisé aussi bien pour un contrôle micrométrique que pour une application de positionnement sur une plage millimétrique.
L’exactitude est de 16 bits, quelle que soit l’étendue choisie. Exemple de calcul issu de la fiche technique : un TESA GT21 offrant une étendue de ±2 mm (Δ 4 mm) donne 4 mm ÷ 2¹⁶ = ±61 nm, soit 0,061 µm. Avec un palpeur offrant une étendue plus réduite, les mêmes 16 bits permettent une résolution proportionnellement plus fine. Cette relation, selon laquelle l’exactitude évolue avec l’étendue sélectionnée, est précisément ce qui rend viable le contrôle en cours de processus avec des tolérances strictes sur une plateforme polyvalente.
Caractéristiques principales
- 8 ou 16 entrées pour transducteurs inductifs, 24 bits, connecteurs femelles M18 à 5 broches
- Demi-pont, LVDT, compatible Mahr ou Knaebel, sans conditionneur de signal externe
- Générateur sinusoïdal embarqué pour l’alimentation des transducteurs (5 / 7,69 / 10 / 12,5 / 20 / 50 kHz)
- Acquisition avec maintien des valeurs crêtes (min./max.) calculée par le module, avec arrêt automatique sur seuil
- Diagnostic des transducteurs : détection des ruptures de ligne et des courts-circuits pour chaque canal
- Base de données embarquée des transducteurs et étalonnage guidé
- Entrée/sortie de trigger matériel 24 V ; synchronisation à la microseconde entre les systèmes montés en cascade
- Processeur ARM®9 32 bits, boîtier métallique robuste et normalisé, IP 65
- Isolation galvanique 1000 V, protection contre les surtensions de ±40 V, câble CAT5E jusqu’à 150 m
3. Démarrage rapide en dix minutes
Étape 1 : Configurer le MSX-E
Connectez le MSX-E3701 à votre réseau Ethernet. Le module est livré avec une adresse IP par défaut ; configurez-la en fonction de votre réseau à l’aide d’ADDI-DATA ConfigTools, inclus dans la livraison.

Vue d'ensemble de la fenêtre ConfigTools

Étape 2 : Installer l’API
Clonez les exemples open source depuis github.com/ADDI-DATA/msxe-samples et installez les dépendances d’exécution :
pip install zeep numpy
Les définitions de services WSDL sont intégrées à l’API. Le client démarre entièrement hors ligne, sans accès à Internet ni configuration de proxy.
Étape 3 : Demander au module quels transducteurs il peut utiliser pour les mesures
Avant toute chose, déterminez les types de transducteurs reconnus par ce module et l’étendue couverte par chacun d’eux. La valeur selection_index affichée ici est requise par chaque appel d’acquisition.
from msxe_api import MSXE370xAPI
from msxe_api.msxe370x import TYPE_NAMES
msxe = MSXE370xAPI("192.168.99.99") # SOAP control on :5555
for index in range(msxe.get_number_of_types()):
info = msxe.get_type_information(index)
print(f"[{info['selection_index']}] {info['name']} "
f"({TYPE_NAMES.get(info['type'])})")
print(f" range : {info['range_mm']} mm")
print(f" sensitivity : {info['sensitivity_mv_v_mm']} mV/V/mm")
print(f" frequency : {info['frequency_hz']} Hz")
Il est important de lire l’étendue directement depuis l’appareil plutôt que de la coder en dur : une constante fixe produirait silencieusement des valeurs erronées en millimètres dès qu’un autre palpeur serait installé.
Étape 4 : Première mesure avec maintien des valeurs crêtes
Il s’agit du schéma de contrôle classique. Lancez une acquisition min./max., laissez passer la pièce, puis lisez la valeur extrême de chaque canal. Dans ce mode, aucune donnée n’est transmise au serveur de données : les valeurs sont renvoyées par l’appel d’état.
import time
from msxe_api import MSXE370xAPI
from msxe_api.msxe370x import counts_to_mm
TRANSDUCER = 1 # selection_index from Step 3
PAIR = [0, 1] # one facing pair of probes
msxe = MSXE370xAPI("192.168.99.99")
range_mm = next(
i["range_mm"]
for i in (msxe.get_type_information(n)
for n in range(msxe.get_number_of_types()))
if i["selection_index"] == TRANSDUCER
)
msxe.minmax_start(TRANSDUCER, PAIR, division_factor=12)
try:
time.sleep(5.0) # let the part pass
state = msxe.minmax_get_status()
for ch in PAIR:
low = counts_to_mm(state["min_values"][ch], range_mm)
high = counts_to_mm(state["max_values"][ch], range_mm)
print(f"Ch{ch}: min={low:+9.6f} mm max={high:+9.6f} mm "
f"span={high - low:.6f} mm")
finally:
msxe.minmax_stop() # always release the acquisition
Étape 5 : Laisser le module détecter lui-même la pièce
En l’absence de pièce, les palpeurs sont à leur déflexion maximale. Définissez un canal d’arrêt et un seuil pour l’acquisition. Le module arrête alors automatiquement la séquence dès que la pièce quitte la zone de mesure, ce qui supprime le capteur de présence de la conception.
from msxe_api.msxe370x import STOP_CONDITION_LESS, MINMAX_END
THRESHOLD_COUNTS = 0x400000 # 24-bit value; set it from your own reference run
msxe.minmax_start(
TRANSDUCER,
channels=[0, 1, 2, 3, 4, 5], # three facing pairs, six probes
division_factor=12,
stop_channels=[0, 1], # the pair that watches for the part
stop_condition=STOP_CONDITION_LESS,
stop_value=THRESHOLD_COUNTS,
)
while msxe.minmax_get_status()["flag"] != MINMAX_END:
time.sleep(0.01)
print("part has passed — peaks are held on the module")
Une seule sélection de transducteur s’applique à tous les canaux d’une acquisition min./max. Si vos palpeurs sont de types différents, effectuez les contrôles lors d’acquisitions distinctes.
Étape 6 : Des valeurs crêtes au diamètre
Chaque paire de palpeurs opposés fournit deux valeurs extrêmes. La somme de ces deux valeurs, à laquelle s’ajoute l’offset déterminé lors du réglage du système à l’aide d’une pièce de référence connue, correspond au diamètre.
MASTER_OFFSET_MM = 0.0 # from mastering: gauge a certified reference ball once
state = msxe.minmax_get_status()
for a, b in ((0, 1), (2, 3), (4, 5)):
peak_a = counts_to_mm(state["max_values"][a], range_mm)
peak_b = counts_to_mm(state["max_values"][b], range_mm)
diameter = peak_a + peak_b + MASTER_OFFSET_MM
print(f"pair {a}-{b}: max diameter = {diameter:.6f} mm")
# Raw counts stay visible — calibration is what ties them to a physical
# position, so the counts are the traceable value.
print(f" raw counts: {state['max_values'][a]}, {state['max_values'][b]}")
La fonction counts_to_mm() est volontairement facultative. L’API renvoie toujours les valeurs brutes des compteurs, car la relation réelle entre le nombre de points et la position est établie par l’étalonnage, et non par une formule. Vérifiez la conversion à l’aide d’un transducteur étalonné avant d’utiliser les valeurs en millimètres à des fins de mesure.
Étape 7 : Vérifier la chaîne de mesure avant de lui faire confiance
Un poste de contrôle qui perd silencieusement le signal d’un palpeur produit des valeurs erronées présentées avec assurance. Le module teste lui-même son câblage.
msxe.init_primary_connection_test()
msxe.test_primary_connection() # transducer supply present?
msxe.test_primary_short_circuit()
for ch in range(6):
msxe.test_secondary_connection(ch) # line break on this probe?
msxe.test_secondary_short_circuit(ch)
Consultez sample_connection_diagnostic.py pour connaître le décodage complet des états et la procédure de récupération rearm_primary().
Étape 8 : Affichage en direct pendant la configuration

Installez matplotlib et exécutez sample_length_dashboard.py afin d’afficher un graphique en direct de chaque palpeur. Cet affichage est utile pour aligner la bague et choisir la valeur de seuil de l’étape 5.
Les applications plus avancées peuvent se présenter comme suit :

Étape 9 : Des exemples à votre infrastructure de production
Le dépôt contient une suite complète d’exemples exécutables pour les MSX-E3701/3700. Chaque exemple lit l’adresse de l’appareil depuis l’environnement et comporte des commentaires détaillant chaque étape.
| Sample | Ce qu’il montre |
|---|---|
| sample_transducer_types.py | Types de transducteurs pris en charge et valeur selection_index requise par tous les autres exemples |
| sample_transducer_database.py | Lecture, ajout et enregistrement des définitions de transducteurs dans le module |
| sample_minmax_measurement.py | Contrôle avec maintien des valeurs crêtes, le schéma utilisé dans cet article |
| sample_length_polling.py | Scrutation temporisée des positions, avec sortie sous forme de tableau |
| sample_length_continuous.py | Affichage en direct de chaque canal jusqu’à l’utilisation de Ctrl+C |
| sample_length_stream.py | sample_length_stream.py |
| sample_length_csv_logger.py | Enregistreur de données avec export CSV directement exploitable dans pandas, Excel ou Grafana |
| sample_length_dashboard.py | Graphique matplotlib en direct |
| sample_acquisition_finite.py | Acquisition finie de N séquences |
| sample_acquisition_continuous.py | Diffusion sans limite vers votre propre fonction de rappel |
| sample_calibration.py | Procédure d’étalonnage guidée, étape par étape |
| sample_connection_diagnostic.py | Détection des ruptures de ligne et des courts-circuits pour chaque canal |
4. Principales fonctionnalités de l’API
| Opération | Fonction |
|---|---|
| get_number_of_types() / get_type_information(i) | Demande au module quels transducteurs il prend en charge : nom, type, étendue, sensibilité, fréquence d’excitation, impédance et valeur selection_index utilisée par toutes les autres fonctions. |
| minmax_start(…) / minmax_get_status() / minmax_stop() | Contrôle avec maintien des valeurs crêtes calculé par le module. Arrêt automatique facultatif lorsqu’un canal surveillé franchit un seuil. L’état renvoie les valeurs brutes minimales et maximales des 16 canaux. |
| auto_refresh_start() / auto_refresh_get_values() / auto_refresh_stop() | Scrutation continue des positions via SOAP, destinée à l’affichage en direct et à la configuration. |
| acquire_finite(…) / acquire_continuous(callback, …) | Acquisition par blocs et diffusion sans limite via le serveur de données dédié, afin que le trafic de contrôle et les données de mesure ne soient jamais en concurrence. |
| Diagnostic des connexions | Tests de la connexion primaire, des connexions secondaires de chaque canal et des courts-circuits, ainsi que procédure de récupération rearm_primary(). |
| Étalonnage | calibration_start() / calibration_get_status() / calibration_next_step(), une procédure guidée comprenant le retour de la connexion primaire, le point zéro à 0 mm et la position déplacée définie par l’utilisateur. |
| Base de données des transducteurs | Ajout, suppression et enregistrement permanent des définitions de transducteurs dans le module lui-même, afin que la configuration reste associée au matériel. |
| Conçu pour fonctionner hors ligne | Les fichiers WSDL sont intégrés au package ; le client s’instancie sans accès à Internet. |
5. Configurations prises en charge
| Version | Transducteurs | Type de transducteur | Protection |
|---|---|---|---|
| MSX-E3701-HB-16 | 16 | Half-Bridge | IP 65 |
| MSX-E3701-HB-8 | 8 | Half-Bridge | IP 65 |
| MSX-E3701-LVDT-16 | 16 | LVDT | IP 65 |
| MSX-E3701-LVDT-8 | 8 | LVDT | IP 65 |
| MSX-E3701-K-8 | 8 | Knaebel | IP 65 |
| MSX-E3701-M-8 | 8 | Compatible Mahr | IP 65 |
| MSX-E3700-HB-16 | 16 | Half-Bridge | IP 40 |
| MSX-E3700-HB-8 | 8 | Half-Bridge | IP 40 |
| MSX-E3700-LVDT-16 | 16 | LVDT | IP 40 |
| MSX-E3700-LVDT-8 | 8 | LVDT | IP 40 |
- IP 65 - étanche à la poussière et protégé contre les jets d’eau provenant de toutes les directions. Installation sur la machine.
- IP 40 - protégé contre les corps étrangers de plus de 1 mm. Montage en armoire.
Toutes les versions fonctionnent de −40 °C à +85 °C. Les variantes Knaebel et compatibles Mahr sont proposées uniquement pour le MSX-E3701, en version 8 canaux. Si vous utilisez déjà ces palpeurs, le choix de la variante est donc prédéfini.
6. Ce que cela change sur la ligne
- Chaque pièce est mesurée, et non un simple échantillon. Le contrôle s’effectue dans le flux, ce qui permet un taux d’inspection de 100 % sans pénaliser la cadence.
- Moins de composants. L’arrêt automatique sur seuil supprime le capteur de présence ; les entrées directes pour transducteurs suppriment le rack de conditionnement.
- Préservation du temps de cycle du PLC. La valeur extrême est calculée par le module ; le PLC reçoit un résultat, et non un signal à traiter.
- L’étendue est définie par logiciel. Changez le palpeur et l’étendue : le même module et le même code couvrent l’application de contrôle suivante.
- Traçabilité intégrée dès la conception. Les valeurs brutes des compteurs restent visibles à côté des millimètres, et l’étalonnage constitue le processus documenté permettant de passer des unes aux autres.
- Alimentation directe du SPC. Les données CSV peuvent être importées telles quelles dans Excel, pandas ou Grafana ; la diffusion continue alimente une base de données de séries temporelles ou un pipeline de machine learning afin de détecter les dérives du processus de rectification en amont.
7. Trois façons de commencer, selon votre activité :
Vous exploitez un banc d’essai ou menez un programme de validation ?
Validez la technologie sur votre propre application avant d’engager votre budget.
Nous mettons à votre disposition un appareil de prêt gratuit accompagné d’un exemple fonctionnel adapté à votre tâche de mesure. Nous vous aidons à atteindre les performances visées et vous fournissons la documentation requise pour votre processus de validation interne.
Validez d’abord le concept. Investissez ensuite.
Vous intégrez des solutions de surveillance d’état pour vos clients?
Commencez avec un composant de base documenté et éprouvé.
Demandez notre architecture de référence, comprenant le matériel, l’API Python, des exemples de code et des recommandations d’intégration. Vous bénéficiez ainsi d’une mise en service prévisible, d’interfaces clairement définies et d’engagements relatifs au cycle de vie.
Réduisez les risques. Accélérez le déploiement.
Vous construisez la machine ?
Intégrez la solution une seule fois et utilisez-la pendant toute la durée de vie de votre machine.
Nous vous accompagnons dans votre intégration avec des variantes de produits, des références dédiées et un firmware personnalisé lorsque l’offre standard ne répond pas entièrement à vos exigences. Les engagements de disponibilité à long terme et de gestion du cycle de vie sont fournis par écrit.
Une plateforme de mesure conçue pour les programmes de machines à long terme.
8. Démarrer
Téléchargez l’API Python et les exemples depuis notre dépôt GitHub :
- GitHub: https://github.com/ADDI-DATA/msxe-samples
- ConfigTools: http://www.addi-data.com/fr/configtools
- Documentation: consultez le fichier README.md du dépôt pour obtenir la référence complète de l’API
Pour toute assistance technique, veuillez nous contacter à l’adresse suivante : [email protected]
Souhaitez-vous en savoir plus ?
Pour en savoir plus sur le MSX-E3701, vous trouverez des informations complémentaires directement sur la page du produit.
SOLUTIONS ADDI-DATA
Cartes d'acquisition
• Pour différents types de signaux
• Haute précision
• Robuste et résistant aux interférences

Systèmes temps réel
• EtherCAT et Profinet
• Systèmes Linux avec extension temps réel
• Cartes PC avec pilotes RTX temps réel

Systèmes Ethernet
• Connexion directe des capteurs
• Connexion directe des capteurs
• Pour une utilisation sur le terrain, degrés de protection jusqu’à IP 67

Enregistreurs de données
• Enregistrement de longue durée de nombreux types de signaux
• Configuration du point de mesure sans connaissances en programmation
• Visualisation des données en direct

Solutions sur mesure
La meilleure solution est souvent une solution sur mesure. En tant que fabricant, nous pouvons vous proposer des solutions adaptées à vos besoins de manière rapide et efficace. C'est avec plaisir que nous vous conseillons afin de trouver la solution idéale pour votre application. Nous procédons également aux adaptations ou aux développements nécessaires.
Contactez-nous !




