Skip to content
Scaling & Monitoring

Track Equipment Calibration

Validate instrument calibration status before every test run. Track calibration dates as metadata and catch expired calibrations before they corrupt your data.

JJulien Buteau
intermediate6 min readMarch 14, 2026

Test instruments drift over time. A multimeter that was accurate six months ago might now read 50mV high, pushing borderline units past their limits. Tracking calibration status in your test workflow prevents expired instruments from corrupting your production data.

Why Calibration Tracking Matters

Regulatory frameworks like ISO 17025 and ISO 9001 require traceable calibration for test equipment. But compliance aside, the practical reason is simple: if your instruments aren't accurate, your pass/fail decisions aren't reliable.

An uncalibrated power supply might output 5.08V when it claims 5.00V. A DMM with drift might read 3.28V when the true value is 3.31V. These errors shift your measurement distributions and can cause both false passes (shipping bad units) and false failures (scrapping good ones).

Validate Calibration Before Testing

Build a calibration check into your test sequence. Before running any DUT measurements, query the instrument's calibration date and compare it against the expiration window.

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("Days until DMM calibration expires. Fails if expired.")
)
def check_dmm_calibration(test):
    # Read last calibration date from instrument or local config
    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()

The check_dmm_calibration phase runs first. If the calibration has expired (days remaining is negative), the measurement fails its minimum=0 limit and the entire test run fails. No DUT measurements are taken with an out-of-cal instrument.

Track Multiple Instruments Per Station

Most test stations use several instruments. Check each one.

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):
    # Read from instrument memory, config file, or calibration database
    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()

Each instrument gets its own measurement. If the oscilloscope's calibration expires but the DMM and PSU are fine, TofuPilot shows exactly which instrument needs attention.

Store Calibration Metadata

Beyond the pass/fail check, record calibration details so you have a full audit trail.

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 stores every run with its full measurement data. If a quality audit asks "was the DMM calibrated when unit PSU-2026-00219 was tested?", you can answer definitively by looking up that run.

Use Fixture Validation Phases

Beyond instrument calibration, test fixtures themselves need validation. Add a fixture check phase that measures a known reference standard before testing DUTs.

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("Golden reference resistor. Validates fixture contacts and DMM.")
)
def validate_fixture(test):
    # Measure a known 100 ohm reference on the fixture
    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()

The fixture validation phase measures a golden reference. If the reading is outside tolerance, the fixture contacts are worn, the DMM has drifted, or both. Either way, the test stops before producing unreliable DUT data.

Monitor Calibration Health in TofuPilot

TofuPilot's measurement trends show your calibration health over time:

  • Track cal_*_days_remaining trends to see when instruments are approaching expiration across all stations
  • Watch fixture validation measurements for slow drift that indicates contact wear
  • Filter by station to see which specific machines need calibration soon
  • Set up alerts for when calibration days remaining drops below a threshold (e.g., 14 days) so you can schedule recalibration proactively

More Guides

Put this guide into practice