Skip to content

Commit 7e1aa5d

Browse files
authored
feat(hardware, shared-data, api): Support LV 96 channel (#16747)
<!-- Thanks for taking the time to open a Pull Request (PR)! Please make sure you've read the "Opening Pull Requests" section of our Contributing Guide: https://github.com/Opentrons/opentrons/blob/edge/CONTRIBUTING.md#opening-pull-requests GitHub provides robust markdown to format your PR. Links, diagrams, pictures, and videos along with text formatting make it possible to create a rich and informative PR. For more information on GitHub markdown, see: https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax To ensure your code is reviewed quickly and thoroughly, please fill out the sections below to the best of your ability! --> # Overview Add all of the string constants for the pipette type, and then update some of the loading/checking of pipette types that were explicitly checking only the 1000ul version of the 96. <!-- Describe your PR at a high level. State acceptance criteria and how this PR fits into other work. Link issues, PRs, and other relevant resources. --> ## Test Plan and Hands on Testing <!-- Describe your testing of the PR. Emphasize testing not reflected in the code. Attach protocols, logs, screenshots and any other assets that support your testing. --> ## Changelog <!-- List changes introduced by this PR considering future developers and the end user. Give careful thought and clear documentation to breaking changes. --> ## Review requests <!-- - What do you need from reviewers to feel confident this PR is ready to merge? - Ask questions. --> ## Risk assessment <!-- - Indicate the level of attention this PR needs. - Provide context to guide reviewers. - Discuss trade-offs, coupling, and side effects. - Look for the possibility, even if you think it's small, that your change may affect some other part of the system. - For instance, changing return tip behavior may also change the behavior of labware calibration. - How do your unit tests and on hands on testing mitigate this PR's risks and the risk of future regressions? - Especially in high risk PRs, explain how you know your testing is enough. -->
1 parent 4655512 commit 7e1aa5d

File tree

11 files changed

+20
-4
lines changed

11 files changed

+20
-4
lines changed

api/src/opentrons/hardware_control/backends/ot3controller.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1012,6 +1012,7 @@ def _lookup_serial_key(pipette_name: FirmwarePipetteName) -> str:
10121012
FirmwarePipetteName.p50_multi: "P50M",
10131013
FirmwarePipetteName.p1000_96: "P1KH",
10141014
FirmwarePipetteName.p50_96: "P50H",
1015+
FirmwarePipetteName.p200_96: "P2HH",
10151016
}
10161017
return lookup_name[pipette_name]
10171018

api/src/opentrons/protocol_api/protocol_context.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -957,7 +957,10 @@ def load_instrument(
957957
mount, checked_instrument_name
958958
)
959959

960-
is_96_channel = checked_instrument_name == PipetteNameType.P1000_96
960+
is_96_channel = checked_instrument_name in [
961+
PipetteNameType.P1000_96,
962+
PipetteNameType.P200_96,
963+
]
961964

962965
tip_racks = tip_racks or []
963966

api/src/opentrons/protocol_api/validation.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@
7272
"flex_1channel_1000": PipetteNameType.P1000_SINGLE_FLEX,
7373
"flex_8channel_1000": PipetteNameType.P1000_MULTI_FLEX,
7474
"flex_96channel_1000": PipetteNameType.P1000_96,
75+
"flex_96channel_200": PipetteNameType.P200_96,
7576
}
7677

7778

@@ -111,7 +112,7 @@ def ensure_mount_for_pipette(
111112
mount: Union[str, Mount, None], pipette: PipetteNameType
112113
) -> Mount:
113114
"""Ensure that an input value represents a valid mount, and is valid for the given pipette."""
114-
if pipette == PipetteNameType.P1000_96:
115+
if pipette in [PipetteNameType.P1000_96, PipetteNameType.P200_96]:
115116
# Always validate the raw mount input, even if the pipette is a 96-channel and we're not going
116117
# to use the mount value.
117118
if mount is not None:

hardware/opentrons_hardware/firmware_bindings/constants.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,7 @@ class PipetteName(int, Enum):
358358
p50_multi = 0x03
359359
p1000_96 = 0x04
360360
p50_96 = 0x05
361+
p200_96 = 0x06
361362
unknown = 0xFFFF
362363

363364

hardware/opentrons_hardware/instruments/pipettes/serials.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
"P50M": PipetteName.p50_multi,
3232
"P1KH": PipetteName.p1000_96,
3333
"P50H": PipetteName.p50_96,
34+
"P2HH": PipetteName.p200_96,
3435
}
3536

3637
SERIAL_FORMAT_MSG = (

shared-data/command/schemas/10.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1774,7 +1774,8 @@
17741774
"p1000_single_gen2",
17751775
"p1000_single_flex",
17761776
"p1000_multi_flex",
1777-
"p1000_96"
1777+
"p1000_96",
1778+
"p200_96"
17781779
],
17791780
"type": "string"
17801781
},

shared-data/command/schemas/11.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1787,7 +1787,8 @@
17871787
"p1000_single_gen2",
17881788
"p1000_single_flex",
17891789
"p1000_multi_flex",
1790-
"p1000_96"
1790+
"p1000_96",
1791+
"p200_96"
17911792
],
17921793
"type": "string"
17931794
},

shared-data/js/constants.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ export const OT3_PIPETTES = [
146146
'p50_multi_flex',
147147
'p1000_multi_flex',
148148
'p1000_96',
149+
'p200_96',
149150
]
150151
export const OT2_PIPETTES = [
151152
'p300_single',

shared-data/python/opentrons_shared_data/pipette/dev_types.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
"p1000_single_flex",
3333
"p1000_multi_flex",
3434
"p1000_96",
35+
"p200_96",
3536
]
3637

3738

@@ -57,6 +58,7 @@ class PipetteNameType(str, Enum):
5758
P1000_SINGLE_FLEX = "p1000_single_flex"
5859
P1000_MULTI_FLEX = "p1000_multi_flex"
5960
P1000_96 = "p1000_96"
61+
P200_96 = "p200_96"
6062

6163

6264
# Generic NewType for models because we get new ones frequently and theres

shared-data/python/opentrons_shared_data/pipette/pipette_load_name_conversions.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,7 @@ def generation_from_string(pipette_name_list: List[str]) -> PipetteGenerationTyp
198198
"flex" in pipette_name_list
199199
or "3." in pipette_name_list[-1]
200200
or pipette_name_list == ["p1000", "96"]
201+
or pipette_name_list == ["p200", "96"]
201202
):
202203
return PipetteGenerationType.FLEX
203204
elif "gen2" in pipette_name_list or "2." in pipette_name_list[-1]:

0 commit comments

Comments
 (0)