Tip Handling
>=0.35.0.The Freedom EVO's Multi-Channel Arm (MCA96) drives all 96 channels on a single plunger plate — every mounted channel aspirates and dispenses the same volume simultaneously. Unlike the Hamilton or Bravo heads, the MCA96 always picks up and puts down the full 96-tip set; there is currently no partial-tip (single column/row/tip) support.
Prerequisites
- A switched on Tecan Freedom EVO device with a Multi-Channel Arm
- A tip carrier with an EVO tip box loaded (see Deck & Carriers)
- A running Tecan Freedom EVO connector
mca_discard_locationset on the instrument configuration
Connect and Prepare the Deck
from unitelabs.sdk import AsyncApiClient
from unitelabs.labware import Vector
from unitelabs.labware.tecan import EvoTipBox_MCA_DiTi_200, EvoTip_MCA_DiTi_200, MP_4Pos_flat
from unitelabs.liquid_handling.tecan import TecanFreedomEvo, TecanFreedomEvoConfiguration
client = AsyncApiClient()
evo = TecanFreedomEvo(
name="Tecan Freedom EVO",
client=client,
configuration=TecanFreedomEvoConfiguration(mca_discard_location=Vector(x=1000, y=100, z=100)),
)
await evo.configure()
await evo.initialize()
await evo.activate()
tip_carrier = MP_4Pos_flat()
tip_box = EvoTipBox_MCA_DiTi_200(identifier="TipBox_200uL")
tip_box.fill(EvoTip_MCA_DiTi_200)
tip_carrier[0] = tip_box
evo.deck.add(tip_carrier, track=7)
Pick Up Tips
pick_up_tips_from() positions channel A1 over the rack's first tip spot and runs the tip-fetch procedure for all 96 channels at once.
await evo.mca.pick_up_tips_from(rack=tip_box)
The pick-up Z bounds are derived automatically from the tip's own geometry. Optional parameters fine-tune the fetch:
offset: aVector(dx, dy, dz)in mm to adjust the pick-up location.z_search: how far above the tip the slow search motion starts, in mm (default10).pwm_limit: maximum force applied while fetching tips,1-249(default65, the device default).
await evo.mca.pick_up_tips_from(rack=tip_box, z_search=15, pwm_limit=80)
pipette_head is a vendor-neutral alias for mca — both refer to the same MultiChannelArm instance, so evo.pipette_head.pick_up_tips_from(...) works identically.Put Tips Back
Return all mounted tips into a rack at the position they were picked up from.
await evo.mca.put_down_tips_to(rack=tip_box)
If no tips are currently mounted, put_down_tips_to() logs a warning and returns without moving.
Discard Tips
Discard the currently mounted tips into the waste location configured as mca_discard_location.
await evo.mca.discard_tips()
discard_tips() raises a RuntimeError if mca_discard_location was never set on the configuration, and a ValueError if the configured location falls outside the head's reachable range.Checking Tip State
tip = evo.mca.get() # the tip type mounted on the first channel that holds one, or None
print(tip)
# <EvoTip_MCA_DiTi_200 ...>
Head Movement
Move the head (channel A1) directly, independent of any pipetting operation:
from unitelabs.liquid_handling.tecan import AxisSpeeds
await evo.mca.move_to(location=Vector(x=200, y=150, z=100))
# Override per-axis traverse speed (mm/s); unset axes use the configured default
await evo.mca.move_to(location=Vector(x=200, y=150, z=100), speed=AxisSpeeds(z=20))
await evo.mca.move_by(offset=Vector(z=-10))
current_location() returns the absolute deck-frame location of channel A1.
location = await evo.mca.current_location()