Two production lines running the same product should produce the same yield. When they don't, the gap points to equipment issues, process variation, or operator training problems. TofuPilot lets you compare lines side by side without exporting data or building reports manually.
Why Yield Comparison Matters
A 2% yield difference between lines might look small. On 10,000 units per month, that's 200 extra failures, each costing rework time, replacement components, and delayed shipments. Catching the gap early and fixing the root cause pays for itself quickly.
Common causes of line-to-line yield variation:
| Cause | What to look for |
|---|---|
| Equipment calibration | One line's measurements consistently offset from the other |
| Fixture wear | Increasing contact resistance on older test fixtures |
| Operator technique | Manual steps done differently between shifts or lines |
| Component lots | Different reels or batches feeding each line |
| Environment | Temperature or humidity differences between areas |
Tag Runs with Line Information
Use station_id to encode which line produced each unit. TofuPilot uses this field to group and filter results.
import openhtf as htf
from openhtf.util import units
from tofupilot.openhtf import TofuPilot
@htf.measures(
htf.Measurement("rail_3v3_voltage")
.in_range(minimum=3.25, maximum=3.40)
.with_units(units.VOLT),
htf.Measurement("rail_5v0_voltage")
.in_range(minimum=4.90, maximum=5.10)
.with_units(units.VOLT),
htf.Measurement("standby_current")
.in_range(maximum=0.015)
.with_units(units.AMPERE),
)
def test_power_rails(test):
test.measurements.rail_3v3_voltage = 3.31
test.measurements.rail_5v0_voltage = 5.02
test.measurements.standby_current = 0.0114
def main():
test = htf.Test(test_power_rails)
with TofuPilot(test):
test.execute(test_start=lambda: "PWR-2026-07823")
if __name__ == "__main__":
main()Each station on Line A gets an ID like LINE-A-FCT-01, LINE-A-FCT-02. Line B uses LINE-B-FCT-01, LINE-B-FCT-02. This lets you filter at both the line level and the individual station level.
Run Identical Tests on Every Line
Yield comparison is only valid when every line runs the exact same test procedure with the same limits. Version-control your test scripts and deploy the same commit to all lines.
import openhtf as htf
from openhtf.util import units
from tofupilot.openhtf import TofuPilot
@htf.measures(
htf.Measurement("wifi_rssi")
.in_range(minimum=-55.0),
htf.Measurement("ble_rssi")
.in_range(minimum=-65.0),
htf.Measurement("antenna_impedance")
.in_range(minimum=45.0, maximum=55.0)
.with_units(units.OHM),
)
def test_wireless(test):
test.measurements.wifi_rssi = -42.3
test.measurements.ble_rssi = -51.7
test.measurements.antenna_impedance = 49.8
def main():
test = htf.Test(test_wireless)
with TofuPilot(test):
test.execute(test_start=lambda: "COMMS-2026-11045")
if __name__ == "__main__":
main()If one line uses different firmware or a modified fixture, document that difference. Otherwise your yield comparison is measuring two different things.
Compare Lines in TofuPilot
With runs uploading from both lines, TofuPilot's filtering and analytics give you direct comparison:
- FPY by station shows yield for each station grouped by line prefix. If Line B consistently trails Line A, the problem is systemic to that line.
- Measurement histograms reveal whether one line's values are shifted or have wider spread. A shifted mean suggests calibration offset. Wider spread suggests fixture or process inconsistency.
- Failure Pareto by line shows which specific tests fail more often on each line. If Line B fails
antenna_impedancethree times more than Line A, start investigating that fixture. - Trend charts show whether the gap is constant, growing, or appeared suddenly after a change.
Investigate and Act on Differences
When you find a yield gap, narrow down the cause systematically:
- Check measurement distributions. If one line's values are offset, it's likely calibration or equipment. If they're wider, it's process variation.
- Check by time of day. Yield drops on night shifts point to operator training or environmental changes.
- Check by component lot. If you track lot numbers, filter by lot to see if specific batches drive the difference.
- Check individual stations. Sometimes the "line" problem is actually one bad station dragging down the average.
Fix the root cause, then watch TofuPilot's trend data to confirm the gap closes. The measurement-level detail in each run gives you the evidence to verify the fix worked.