diff --git a/api/src/opentrons/hardware_control/ot3api.py b/api/src/opentrons/hardware_control/ot3api.py index 6d567b7a667..ab3f94e232f 100644 --- a/api/src/opentrons/hardware_control/ot3api.py +++ b/api/src/opentrons/hardware_control/ot3api.py @@ -2631,6 +2631,14 @@ async def liquid_probe( ) max_speeds = self.config.motion_settings.default_max_speed p_prep_speed = max_speeds[self.gantry_load][OT3AxisKind.P] + # We need to significatly slow down the 96 channel liquid probe + if self.gantry_load == GantryLoad.HIGH_THROUGHPUT: + max_plunger_speed = self.config.motion_settings.max_speed_discontinuity[ + GantryLoad.HIGH_THROUGHPUT + ][OT3AxisKind.P] + probe_settings.plunger_speed = min( + max_plunger_speed, probe_settings.plunger_speed + ) error: Optional[PipetteLiquidNotFoundError] = None pos = await self.gantry_position(checked_mount, refresh=True) diff --git a/hardware-testing/hardware_testing/liquid_sense/__main__.py b/hardware-testing/hardware_testing/liquid_sense/__main__.py index ca0b632290c..f17c08677fd 100644 --- a/hardware-testing/hardware_testing/liquid_sense/__main__.py +++ b/hardware-testing/hardware_testing/liquid_sense/__main__.py @@ -37,9 +37,11 @@ from .post_process import process_csv_directory, process_google_sheet from hardware_testing.protocols.liquid_sense_lpc import ( - liquid_sense_ot3_p50_single_vial, - liquid_sense_ot3_p1000_96_well, - liquid_sense_ot3_p50_multi, + liquid_sense_ot3_p50_single_96well, + liquid_sense_ot3_p1000_96_1well, + liquid_sense_ot3_p1000_single_96well, + liquid_sense_ot3_p50_multi_12well, + liquid_sense_ot3_p1000_multi_12well, ) try: @@ -71,13 +73,13 @@ LIQUID_SENSE_CFG: Dict[int, Dict[int, Any]] = { 50: { - 1: liquid_sense_ot3_p50_single_vial, - 8: liquid_sense_ot3_p50_multi, + 1: liquid_sense_ot3_p50_single_96well, + 8: liquid_sense_ot3_p50_multi_12well, }, 1000: { - 1: liquid_sense_ot3_p1000_96_well, - 8: None, - 96: None, + 1: liquid_sense_ot3_p1000_single_96well, + 8: liquid_sense_ot3_p1000_multi_12well, + 96: liquid_sense_ot3_p1000_96_1well, }, } diff --git a/hardware-testing/hardware_testing/protocols/liquid_sense_lpc/liquid_sense_ot3_p1000_96_1well.py b/hardware-testing/hardware_testing/protocols/liquid_sense_lpc/liquid_sense_ot3_p1000_96_1well.py new file mode 100644 index 00000000000..ae89b4550a7 --- /dev/null +++ b/hardware-testing/hardware_testing/protocols/liquid_sense_lpc/liquid_sense_ot3_p1000_96_1well.py @@ -0,0 +1,41 @@ +"""lld OT3 P1000.""" +from opentrons.protocol_api import ProtocolContext, OFF_DECK + +metadata = {"protocolName": "liquid-sense-ot3-p1000-96"} +requirements = {"robotType": "Flex", "apiLevel": "2.17"} + +SLOT_SCALE = 1 +SLOT_DIAL = 9 + +SLOTS_TIPRACK = { + 50: [2, 3, 4, 5, 6], + 200: [2, 3, 4, 5, 6], + 1000: [2, 3, 4, 5, 6], +} + +LABWARE_ON_SCALE = "nest_1_reservoir_195ml" + + +def run(ctx: ProtocolContext) -> None: + """Run.""" + trash = ctx.load_trash_bin("A3") + vial = ctx.load_labware(LABWARE_ON_SCALE, SLOT_SCALE) + dial = ctx.load_labware("dial_indicator", SLOT_DIAL) + pipette = ctx.load_instrument("flex_96channel_1000", "left") + adapters = [ + ctx.load_adapter("opentrons_flex_96_tiprack_adapter", slot) + for slot in SLOTS_TIPRACK[50] + ] + for size, slots in SLOTS_TIPRACK.items(): + tipracks = [ + adapter.load_labware(f"opentrons_flex_96_tiprack_{size}uL") + for adapter in adapters + ] + for rack in tipracks: + pipette.pick_up_tip(rack["A1"]) + pipette.aspirate(10, vial["A1"].top()) + pipette.dispense(10, vial["A1"].top()) + pipette.aspirate(10, dial["A1"].top()) + pipette.dispense(10, dial["A1"].top()) + pipette.drop_tip(trash) + ctx.move_labware(rack, OFF_DECK) diff --git a/hardware-testing/hardware_testing/protocols/liquid_sense_lpc/liquid_sense_ot3_p1000_multi_12well.py b/hardware-testing/hardware_testing/protocols/liquid_sense_lpc/liquid_sense_ot3_p1000_multi_12well.py new file mode 100644 index 00000000000..b77461598c8 --- /dev/null +++ b/hardware-testing/hardware_testing/protocols/liquid_sense_lpc/liquid_sense_ot3_p1000_multi_12well.py @@ -0,0 +1,32 @@ +"""Liquid Sense OT3 P1000.""" +from opentrons.protocol_api import ProtocolContext, OFF_DECK + +metadata = {"protocolName": "liquid-sense-ot3-p50-multi"} +requirements = {"robotType": "Flex", "apiLevel": "2.15"} + +SLOT_SCALE = 1 +SLOT_DIAL = 9 +SLOTS_TIPRACK = { + 50: [3], + 200: [3], + 1000: [3], +} +LABWARE_ON_SCALE = "nest_12_reservoir_15ml" + + +def run(ctx: ProtocolContext) -> None: + """Run.""" + trash = ctx.load_trash_bin("A3") + vial = ctx.load_labware(LABWARE_ON_SCALE, SLOT_SCALE) + dial = ctx.load_labware("dial_indicator", SLOT_DIAL) + pipette = ctx.load_instrument("flex_8channel_1000", "left") + for size, slots in SLOTS_TIPRACK.items(): + for slot in slots: + rack = ctx.load_labware(f"opentrons_flex_96_tiprack_{size}uL", slot) + pipette.pick_up_tip(rack["A1"]) + pipette.aspirate(10, vial["A1"].top()) + pipette.dispense(10, vial["A1"].top()) + pipette.aspirate(10, dial["A1"].top()) + pipette.dispense(10, dial["A1"].top()) + pipette.drop_tip(trash) + ctx.move_labware(rack, OFF_DECK) diff --git a/hardware-testing/hardware_testing/protocols/liquid_sense_lpc/liquid_sense_ot3_p1000_96_well.py b/hardware-testing/hardware_testing/protocols/liquid_sense_lpc/liquid_sense_ot3_p1000_single_96well.py similarity index 93% rename from hardware-testing/hardware_testing/protocols/liquid_sense_lpc/liquid_sense_ot3_p1000_96_well.py rename to hardware-testing/hardware_testing/protocols/liquid_sense_lpc/liquid_sense_ot3_p1000_single_96well.py index 306abe2d48d..af96858af57 100644 --- a/hardware-testing/hardware_testing/protocols/liquid_sense_lpc/liquid_sense_ot3_p1000_96_well.py +++ b/hardware-testing/hardware_testing/protocols/liquid_sense_lpc/liquid_sense_ot3_p1000_single_96well.py @@ -1,7 +1,7 @@ """Liquid Sense OT3.""" from opentrons.protocol_api import ProtocolContext, OFF_DECK -metadata = {"protocolName": "liquid-sense-ot3-p1000-single-vial"} +metadata = {"protocolName": "liquid-sense-ot3-p1000-single-96well"} requirements = {"robotType": "Flex", "apiLevel": "2.17"} SLOT_SCALE = 1 diff --git a/hardware-testing/hardware_testing/protocols/liquid_sense_lpc/liquid_sense_ot3_p50_multi.py b/hardware-testing/hardware_testing/protocols/liquid_sense_lpc/liquid_sense_ot3_p50_multi_12well.py similarity index 93% rename from hardware-testing/hardware_testing/protocols/liquid_sense_lpc/liquid_sense_ot3_p50_multi.py rename to hardware-testing/hardware_testing/protocols/liquid_sense_lpc/liquid_sense_ot3_p50_multi_12well.py index 69d571f0259..455565001cf 100644 --- a/hardware-testing/hardware_testing/protocols/liquid_sense_lpc/liquid_sense_ot3_p50_multi.py +++ b/hardware-testing/hardware_testing/protocols/liquid_sense_lpc/liquid_sense_ot3_p50_multi_12well.py @@ -12,6 +12,7 @@ def run(ctx: ProtocolContext) -> None: """Run.""" + trash = ctx.load_trash_bin("A3") tipracks = [ ctx.load_labware(f"opentrons_flex_96_tiprack_{size}uL", slot) for size, slots in SLOTS_TIPRACK.items() @@ -26,4 +27,4 @@ def run(ctx: ProtocolContext) -> None: pipette.dispense(10, vial["A1"].top()) pipette.aspirate(1, dial["A1"].top()) pipette.dispense(1, dial["A1"].top()) - pipette.drop_tip(home_after=False) + pipette.drop_tip(trash) diff --git a/hardware-testing/hardware_testing/protocols/liquid_sense_lpc/liquid_sense_ot3_p50_single_vial.py b/hardware-testing/hardware_testing/protocols/liquid_sense_lpc/liquid_sense_ot3_p50_single_96well.py similarity index 88% rename from hardware-testing/hardware_testing/protocols/liquid_sense_lpc/liquid_sense_ot3_p50_single_vial.py rename to hardware-testing/hardware_testing/protocols/liquid_sense_lpc/liquid_sense_ot3_p50_single_96well.py index 7a7e607d08e..9b597074a34 100644 --- a/hardware-testing/hardware_testing/protocols/liquid_sense_lpc/liquid_sense_ot3_p50_single_vial.py +++ b/hardware-testing/hardware_testing/protocols/liquid_sense_lpc/liquid_sense_ot3_p50_single_96well.py @@ -1,7 +1,7 @@ """Liquid Sense OT3.""" from opentrons.protocol_api import ProtocolContext, OFF_DECK -metadata = {"protocolName": "liquid-sense-ot3-p50-single-vial"} +metadata = {"protocolName": "liquid-sense-ot3-p50-single-96well"} requirements = {"robotType": "Flex", "apiLevel": "2.17"} SLOT_SCALE = 1 @@ -9,7 +9,7 @@ SLOTS_TIPRACK = { 50: [3], } -LABWARE_ON_SCALE = "radwag_pipette_calibration_vial" +LABWARE_ON_SCALE = "corning_96_wellplate_360ul_flat" def run(ctx: ProtocolContext) -> None: