BioTek EL406#

The BioTek EL406 plate washer is controlled by the BioTekEL406Backend class. It communicates via FTDI USB serial.

The EL406 has three fluid delivery subsystems — manifold, syringe pump, and peristaltic pump — plus an integrated plate shaker. All operations require a Plate object to configure plate-specific parameters automatically.

Setup#

from pylabrobot.plate_washing.biotek.el406 import ExperimentalBioTekEL406Backend
from pylabrobot.resources import Cor_96_wellplate_360ul_Fb

backend = ExperimentalBioTekEL406Backend()  # ExperimentalBioTekEL406Backend(device_id="YOUR_FTDI_ID_HERE")
await backend.setup()

plate = Cor_96_wellplate_360ul_Fb(name="plate")

Manifold#

The wash manifold is the primary fluid system. Prime the lines before use to fill tubing with buffer.

await backend.manifold_prime(plate, volume=10000, buffer="A")  # 10 mL

Dispense and aspirate individually, or use manifold_wash for repeated dispense-aspirate cycles.

await backend.manifold_dispense(plate, volume=200, buffer="A")
await backend.manifold_aspirate(plate)
await backend.manifold_wash(plate, cycles=3, buffer="A")

manifold_wash supports many options: shake/soak between cycles, secondary aspirate, bottom wash, and per-cycle pre-dispense.

await backend.manifold_wash(
    plate,
    cycles=3,
    buffer="A",
    dispense_volume=300,
    soak_duration=10,
    shake_duration=5,
    shake_intensity="Medium",
)

Run an auto-clean cycle to flush the manifold lines.

await backend.manifold_auto_clean(plate, buffer="A", duration=60)

Syringe pump#

The syringe pump provides precise low-volume dispensing.

await backend.syringe_prime(plate, syringe="A", volume=5000, flow_rate=5, refills=2)
await backend.syringe_dispense(plate, volume=50, syringe="A")

Peristaltic pump#

await backend.peristaltic_prime(plate, volume=300, flow_rate="High")
await backend.peristaltic_dispense(plate, volume=100, flow_rate="High")
await backend.peristaltic_purge(plate, volume=300, flow_rate="High")

Shaking#

await backend.shake(plate, duration=30, intensity="Medium")

Batching#

Each step command automatically starts and cleans up a batch. To group multiple steps into a single batch (avoiding repeated start/cleanup overhead), use the batch() context manager.

async with backend.batch(plate):
    await backend.manifold_prime(plate, volume=10000, buffer="A")
    await backend.manifold_wash(plate, cycles=3, buffer="A")
    await backend.manifold_aspirate(plate)

Queries#

await backend.request_serial_number()
await backend.request_washer_manifold()
await backend.request_instrument_settings()

Teardown#

await backend.stop()