Scaling & Monitoring

Suivre la calibration des équipements

Validez le statut de calibration des instruments avant chaque exécution de test. Suivez les dates de calibration comme métadonnées et détectez les.

JJulien Buteau
intermediate6 min de lecture14 mars 2026

Les instruments de test dérivent avec le temps. Un multimètre qui était précis il y a six mois peut maintenant lire 50 mV de trop, poussant les unités limites au-delà de leurs limites. Suivre le statut de calibration dans votre flux de test empêche les instruments expirés de corrompre vos données de production.

Pourquoi le suivi de calibration est important

Les référentiels réglementaires comme l'ISO 17025 et l'ISO 9001 exigent une calibration traçable des équipements de test. Mais au-delà de la conformité, la raison pratique est simple : si vos instruments ne sont pas précis, vos décisions pass/fail ne sont pas fiables.

Une alimentation non calibrée peut délivrer 5,08 V quand elle affiche 5,00 V. Un multimètre avec de la dérive peut lire 3,28 V alors que la vraie valeur est 3,31 V. Ces erreurs décalent vos distributions de mesure et peuvent provoquer aussi bien des faux succès (expédition d'unités défectueuses) que des faux échecs (mise au rebut d'unités conformes).

Valider la calibration avant de tester

Intégrez une vérification de calibration dans votre séquence de test. Avant d'effectuer toute mesure sur le DUT, interrogez la date de calibration de l'instrument et comparez-la à la fenêtre d'expiration.

test_with_cal_check.py
import openhtf as htf
from openhtf.util import units
from tofupilot.openhtf import TofuPilot
from datetime import datetime, timedelta

CALIBRATION_INTERVAL_DAYS = 180

@htf.measures(
    htf.Measurement("dmm_cal_days_remaining")
    .in_range(minimum=0)
    .doc("Jours restants avant expiration de la calibration du multimètre. Échoue si expiré.")
)
def check_dmm_calibration(test):
    # Lire la dernière date de calibration depuis l'instrument ou la configuration locale
    last_cal_date = datetime(2026, 1, 15)
    expiry_date = last_cal_date + timedelta(days=CALIBRATION_INTERVAL_DAYS)
    days_remaining = (expiry_date - datetime.now()).days
    test.measurements.dmm_cal_days_remaining = days_remaining

@htf.measures(
    htf.Measurement("output_voltage")
    .in_range(minimum=3.25, maximum=3.35)
    .with_units(units.VOLT),
    htf.Measurement("ripple")
    .in_range(maximum=50.0),
)
def test_voltage_regulator(test):
    test.measurements.output_voltage = 3.30
    test.measurements.ripple = 12.4

def main():
    test = htf.Test(
        check_dmm_calibration,
        test_voltage_regulator,
        station_id="SZ-L1-FCT-03",
    )
    with TofuPilot(test):
        test.execute(test_start=lambda: "REG-2026-08841")

if __name__ == "__main__":
    main()

La phase check_dmm_calibration s'exécute en premier. Si la calibration a expiré (jours restants négatifs), la mesure échoue à sa limite minimum=0 et l'exécution de test complète échoue. Aucune mesure DUT n'est effectuée avec un instrument hors calibration.

Suivre plusieurs instruments par station

La plupart des stations de test utilisent plusieurs instruments. Vérifiez chacun d'eux.

test_with_multi_cal.py
import openhtf as htf
from tofupilot.openhtf import TofuPilot
from datetime import datetime, timedelta

CAL_INTERVAL = timedelta(days=180)

def days_until_expiry(last_cal_date):
    return (last_cal_date + CAL_INTERVAL - datetime.now()).days

@htf.measures(
    htf.Measurement("cal_dmm_days_remaining").in_range(minimum=0),
    htf.Measurement("cal_scope_days_remaining").in_range(minimum=0),
    htf.Measurement("cal_psu_days_remaining").in_range(minimum=0),
)
def check_all_calibrations(test):
    # Lire depuis la mémoire de l'instrument, un fichier de config ou une base de calibration
    test.measurements.cal_dmm_days_remaining = days_until_expiry(datetime(2026, 1, 15))
    test.measurements.cal_scope_days_remaining = days_until_expiry(datetime(2025, 11, 20))
    test.measurements.cal_psu_days_remaining = days_until_expiry(datetime(2026, 2, 1))

def main():
    test = htf.Test(
        check_all_calibrations,
        station_id="GDL-L2-FCT-01",
    )
    with TofuPilot(test):
        test.execute(test_start=lambda: "UNIT-2026-12003")

if __name__ == "__main__":
    main()

Chaque instrument a sa propre mesure. Si la calibration de l'oscilloscope expire mais que le multimètre et l'alimentation sont à jour, TofuPilot montre exactement quel instrument nécessite une attention.

Stocker les métadonnées de calibration

Au-delà de la vérification pass/fail, enregistrez les détails de calibration pour disposer d'une piste d'audit complète.

test_with_cal_metadata.py
import openhtf as htf
from openhtf.util import units
from tofupilot.openhtf import TofuPilot

@htf.measures(
    htf.Measurement("cal_dmm_days_remaining").in_range(minimum=0),
)
def check_calibration(test):
    test.measurements.cal_dmm_days_remaining = 47

@htf.measures(
    htf.Measurement("supply_voltage")
    .in_range(minimum=11.8, maximum=12.2)
    .with_units(units.VOLT),
)
def test_supply(test):
    test.measurements.supply_voltage = 12.03

def main():
    test = htf.Test(
        check_calibration,
        test_supply,
        station_id="AUS-L1-EOL-02",
    )
    with TofuPilot(test):
        test.execute(test_start=lambda: "PSU-2026-00219")

if __name__ == "__main__":
    main()

TofuPilot stocke chaque exécution avec l'ensemble de ses données de mesure. Si un audit qualité demande « le multimètre était-il calibré quand l'unité PSU-2026-00219 a été testée ? », vous pouvez répondre de manière définitive en consultant cette exécution.

Utiliser des phases de validation du montage

Au-delà de la calibration des instruments, les montages de test eux-mêmes nécessitent une validation. Ajoutez une phase de vérification du montage qui mesure un étalon de référence connu avant de tester les DUT.

test_with_fixture_check.py
import openhtf as htf
from openhtf.util import units
from tofupilot.openhtf import TofuPilot

@htf.measures(
    htf.Measurement("fixture_ref_resistance")
    .in_range(minimum=99.5, maximum=100.5)
    .with_units(units.OHM)
    .doc("Résistance de référence étalon. Valide les contacts du montage et le multimètre.")
)
def validate_fixture(test):
    # Mesurer une référence connue de 100 ohms sur le montage
    test.measurements.fixture_ref_resistance = 100.1

@htf.measures(
    htf.Measurement("dut_resistance")
    .in_range(minimum=45.0, maximum=55.0)
    .with_units(units.OHM),
)
def test_dut_resistance(test):
    test.measurements.dut_resistance = 49.7

def main():
    test = htf.Test(
        validate_fixture,
        test_dut_resistance,
        station_id="SZ-L3-ICT-01",
    )
    with TofuPilot(test):
        test.execute(test_start=lambda: "HTR-2026-06650")

if __name__ == "__main__":
    main()

La phase de validation du montage mesure une référence étalon. Si la lecture est hors tolérance, les contacts du montage sont usés, le multimètre a dérivé, ou les deux. Dans tous les cas, le test s'arrête avant de produire des données DUT non fiables.

Surveiller la santé de la calibration dans TofuPilot

Les tendances de mesure de TofuPilot montrent la santé de votre calibration dans le temps :

  • Suivez les tendances cal_*_days_remaining pour voir quand les instruments approchent de l'expiration sur toutes les stations
  • Surveillez les mesures de validation de montage pour détecter une dérive lente indiquant l'usure des contacts
  • Filtrez par station pour voir quelles machines spécifiques nécessitent bientôt une calibration
  • Configurez des alertes quand les jours restants de calibration passent sous un seuil (par ex. 14 jours) pour planifier la recalibration de manière proactive

Plus de guides

Mettez ce guide en pratique