From 7f4b57f589d5d8aa6cd958e7f7b5417558bdc938 Mon Sep 17 00:00:00 2001 From: ALITTLELZ Date: Wed, 25 Mar 2026 17:16:04 +0800 Subject: [PATCH] Fix Deck slot Y-axis inversion: T1 should be top-left, not bottom-left Upstream rewrite of PRCXI9300Deck lost the Y-axis flip logic from the original `(3-row)*96+13` formula. T1-T4 were rendered at the bottom instead of the top. Reversed _DEFAULT_SITE_POSITIONS Y coordinates and updated prcxi_9320_slim.json accordingly. Also added "plateadapter" and "module" to slim JSON content_type entries. Co-Authored-By: Claude Opus 4.6 --- .../devices/liquid_handling/prcxi/prcxi.py | 10 +- .../test/experiments/prcxi_9320_slim.json | 472 ++++++++++-------- 2 files changed, 257 insertions(+), 225 deletions(-) diff --git a/unilabos/devices/liquid_handling/prcxi/prcxi.py b/unilabos/devices/liquid_handling/prcxi/prcxi.py index 6d4922ee..3b7c7b13 100644 --- a/unilabos/devices/liquid_handling/prcxi/prcxi.py +++ b/unilabos/devices/liquid_handling/prcxi/prcxi.py @@ -93,12 +93,12 @@ class PRCXI9300Deck(Deck): 该类定义了 PRCXI 9300 的工作台布局和槽位信息。 """ - # T1-T16 默认位置 (4列×4行) + # T1-T16 默认位置 (4列×4行, Y轴从上往下递减, T1在左上角) _DEFAULT_SITE_POSITIONS = [ - (0, 0, 0), (138, 0, 0), (276, 0, 0), (414, 0, 0), # T1-T4 - (0, 96, 0), (138, 96, 0), (276, 96, 0), (414, 96, 0), # T5-T8 - (0, 192, 0), (138, 192, 0), (276, 192, 0), (414, 192, 0), # T9-T12 - (0, 288, 0), (138, 288, 0), (276, 288, 0), (414, 288, 0), # T13-T16 + (0, 288, 0), (138, 288, 0), (276, 288, 0), (414, 288, 0), # T1-T4 (第1行, 最上) + (0, 192, 0), (138, 192, 0), (276, 192, 0), (414, 192, 0), # T5-T8 (第2行) + (0, 96, 0), (138, 96, 0), (276, 96, 0), (414, 96, 0), # T9-T12 (第3行) + (0, 0, 0), (138, 0, 0), (276, 0, 0), (414, 0, 0), # T13-T16 (第4行, 最下) ] _DEFAULT_SITE_SIZE = {"width": 128.0, "height": 86, "depth": 0} _DEFAULT_CONTENT_TYPE = ["plate", "tip_rack", "plates", "tip_racks", "tube_rack", "adaptor", "plateadapter", "module"] diff --git a/unilabos/test/experiments/prcxi_9320_slim.json b/unilabos/test/experiments/prcxi_9320_slim.json index 2aaee6a7..1ad470d1 100644 --- a/unilabos/test/experiments/prcxi_9320_slim.json +++ b/unilabos/test/experiments/prcxi_9320_slim.json @@ -74,7 +74,7 @@ "occupied_by": null, "position": { "x": 0, - "y": 0, + "y": 288, "z": 0 }, "size": { @@ -89,7 +89,9 @@ "plates", "tip_racks", "tube_rack", - "adaptor" + "adaptor", + "plateadapter", + "module" ] }, { @@ -98,7 +100,7 @@ "occupied_by": null, "position": { "x": 138, - "y": 0, + "y": 288, "z": 0 }, "size": { @@ -112,7 +114,9 @@ "plates", "tip_racks", "tube_rack", - "adaptor" + "adaptor", + "plateadapter", + "module" ] }, { @@ -121,7 +125,7 @@ "occupied_by": null, "position": { "x": 276, - "y": 0, + "y": 288, "z": 0 }, "size": { @@ -135,7 +139,9 @@ "plates", "tip_racks", "tube_rack", - "adaptor" + "adaptor", + "plateadapter", + "module" ] }, { @@ -144,6 +150,231 @@ "occupied_by": null, "position": { "x": 414, + "y": 288, + "z": 0 + }, + "size": { + "width": 128.0, + "height": 86, + "depth": 0 + }, + "content_type": [ + "plate", + "tip_rack", + "plates", + "tip_racks", + "tube_rack", + "adaptor", + "plateadapter", + "module" + ] + }, + { + "label": "T5", + "visible": true, + "occupied_by": null, + "position": { + "x": 0, + "y": 192, + "z": 0 + }, + "size": { + "width": 128.0, + "height": 86, + "depth": 0 + }, + "content_type": [ + "plate", + "tip_rack", + "plates", + "tip_racks", + "tube_rack", + "adaptor", + "plateadapter", + "module" + ] + }, + { + "label": "T6", + "visible": true, + "occupied_by": null, + "position": { + "x": 138, + "y": 192, + "z": 0 + }, + "size": { + "width": 128.0, + "height": 86, + "depth": 0 + }, + "content_type": [ + "plate", + "tip_rack", + "plates", + "tip_racks", + "tube_rack", + "adaptor", + "plateadapter", + "module" + ] + }, + { + "label": "T7", + "visible": true, + "occupied_by": null, + "position": { + "x": 276, + "y": 192, + "z": 0 + }, + "size": { + "width": 128.0, + "height": 86, + "depth": 0 + }, + "content_type": [ + "plate", + "tip_rack", + "plates", + "tip_racks", + "tube_rack", + "adaptor", + "plateadapter", + "module" + ] + }, + { + "label": "T8", + "visible": true, + "occupied_by": null, + "position": { + "x": 414, + "y": 192, + "z": 0 + }, + "size": { + "width": 128.0, + "height": 86, + "depth": 0 + }, + "content_type": [ + "plate", + "tip_rack", + "plates", + "tip_racks", + "tube_rack", + "adaptor", + "plateadapter", + "module" + ] + }, + { + "label": "T9", + "visible": true, + "occupied_by": null, + "position": { + "x": 0, + "y": 96, + "z": 0 + }, + "size": { + "width": 128.0, + "height": 86, + "depth": 0 + }, + "content_type": [ + "plate", + "tip_rack", + "plates", + "tip_racks", + "tube_rack", + "adaptor", + "plateadapter", + "module" + ] + }, + { + "label": "T10", + "visible": true, + "occupied_by": null, + "position": { + "x": 138, + "y": 96, + "z": 0 + }, + "size": { + "width": 128.0, + "height": 86, + "depth": 0 + }, + "content_type": [ + "plate", + "tip_rack", + "plates", + "tip_racks", + "tube_rack", + "adaptor", + "plateadapter", + "module" + ] + }, + { + "label": "T11", + "visible": true, + "occupied_by": null, + "position": { + "x": 276, + "y": 96, + "z": 0 + }, + "size": { + "width": 128.0, + "height": 86, + "depth": 0 + }, + "content_type": [ + "plate", + "tip_rack", + "plates", + "tip_racks", + "tube_rack", + "adaptor", + "plateadapter", + "module" + ] + }, + { + "label": "T12", + "visible": true, + "occupied_by": null, + "position": { + "x": 414, + "y": 96, + "z": 0 + }, + "size": { + "width": 128.0, + "height": 86, + "depth": 0 + }, + "content_type": [ + "plate", + "tip_rack", + "plates", + "tip_racks", + "tube_rack", + "adaptor", + "plateadapter", + "module" + ] + }, + { + "label": "T13", + "visible": true, + "occupied_by": null, + "position": { + "x": 0, "y": 0, "z": 0 }, @@ -158,214 +389,9 @@ "plates", "tip_racks", "tube_rack", - "adaptor" - ] - }, - { - "label": "T5", - "visible": true, - "occupied_by": null, - "position": { - "x": 0, - "y": 96, - "z": 0 - }, - "size": { - "width": 128.0, - "height": 86, - "depth": 0 - }, - "content_type": [ - "plate", - "tip_rack", - "plates", - "tip_racks", - "tube_rack", - "adaptor" - ] - }, - { - "label": "T6", - "visible": true, - "occupied_by": null, - "position": { - "x": 138, - "y": 96, - "z": 0 - }, - "size": { - "width": 128.0, - "height": 86, - "depth": 0 - }, - "content_type": [ - "plate", - "tip_rack", - "plates", - "tip_racks", - "tube_rack", - "adaptor" - ] - }, - { - "label": "T7", - "visible": true, - "occupied_by": null, - "position": { - "x": 276, - "y": 96, - "z": 0 - }, - "size": { - "width": 128.0, - "height": 86, - "depth": 0 - }, - "content_type": [ - "plate", - "tip_rack", - "plates", - "tip_racks", - "tube_rack", - "adaptor" - ] - }, - { - "label": "T8", - "visible": true, - "occupied_by": null, - "position": { - "x": 414, - "y": 96, - "z": 0 - }, - "size": { - "width": 128.0, - "height": 86, - "depth": 0 - }, - "content_type": [ - "plate", - "tip_rack", - "plates", - "tip_racks", - "tube_rack", - "adaptor" - ] - }, - { - "label": "T9", - "visible": true, - "occupied_by": null, - "position": { - "x": 0, - "y": 192, - "z": 0 - }, - "size": { - "width": 128.0, - "height": 86, - "depth": 0 - }, - "content_type": [ - "plate", - "tip_rack", - "plates", - "tip_racks", - "tube_rack", - "adaptor" - ] - }, - { - "label": "T10", - "visible": true, - "occupied_by": null, - "position": { - "x": 138, - "y": 192, - "z": 0 - }, - "size": { - "width": 128.0, - "height": 86, - "depth": 0 - }, - "content_type": [ - "plate", - "tip_rack", - "plates", - "tip_racks", - "tube_rack", - "adaptor" - ] - }, - { - "label": "T11", - "visible": true, - "occupied_by": null, - "position": { - "x": 276, - "y": 192, - "z": 0 - }, - "size": { - "width": 128.0, - "height": 86, - "depth": 0 - }, - "content_type": [ - "plate", - "tip_rack", - "plates", - "tip_racks", - "tube_rack", - "adaptor" - ] - }, - { - "label": "T12", - "visible": true, - "occupied_by": null, - "position": { - "x": 414, - "y": 192, - "z": 0 - }, - "size": { - "width": 128.0, - "height": 86, - "depth": 0 - }, - "content_type": [ - "plate", - "tip_rack", - "plates", - "tip_racks", - "tube_rack", - "adaptor" - ] - }, - { - "label": "T13", - "visible": true, - "occupied_by": null, - "position": { - "x": 0, - "y": 288, - "z": 0 - }, - "size": { - "width": 128.0, - "height": 86, - "depth": 0 - }, - "content_type": [ - "plate", - "tip_rack", - "plates", - "tip_racks", - "tube_rack", - "adaptor" + "adaptor", + "plateadapter", + "module" ] }, { @@ -374,7 +400,7 @@ "occupied_by": null, "position": { "x": 138, - "y": 288, + "y": 0, "z": 0 }, "size": { @@ -388,7 +414,9 @@ "plates", "tip_racks", "tube_rack", - "adaptor" + "adaptor", + "plateadapter", + "module" ] }, { @@ -397,7 +425,7 @@ "occupied_by": null, "position": { "x": 276, - "y": 288, + "y": 0, "z": 0 }, "size": { @@ -411,7 +439,9 @@ "plates", "tip_racks", "tube_rack", - "adaptor" + "adaptor", + "plateadapter", + "module" ] }, { @@ -420,7 +450,7 @@ "occupied_by": null, "position": { "x": 414, - "y": 288, + "y": 0, "z": 0 }, "size": { @@ -434,7 +464,9 @@ "plates", "tip_racks", "tube_rack", - "adaptor" + "adaptor", + "plateadapter", + "module" ] } ]