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.
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.
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.
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.
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_remainingtrends 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