From ad05e8c73eb55c5e5ae8a5be2ec6c80e7ea0f9a5 Mon Sep 17 00:00:00 2001 From: q434343 <554662886@qq.com> Date: Mon, 18 May 2026 02:34:29 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9Z=E8=BD=B4=E6=9C=80=E5=A4=A7?= =?UTF-8?q?=E5=80=BC=E6=97=A0=E6=B3=95=E8=B5=8B=E4=BA=88=E7=9A=84bug?= =?UTF-8?q?=EF=BC=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devices/liquid_handling/liquid_handler_abstract.py | 7 ++++++- unilabos/devices/liquid_handling/prcxi/prcxi.py | 4 ++-- unilabos/test/experiments/prcxi_9320_slim.json | 2 +- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/unilabos/devices/liquid_handling/liquid_handler_abstract.py b/unilabos/devices/liquid_handling/liquid_handler_abstract.py index ad0b8267..6c8e7ff4 100644 --- a/unilabos/devices/liquid_handling/liquid_handler_abstract.py +++ b/unilabos/devices/liquid_handling/liquid_handler_abstract.py @@ -158,6 +158,11 @@ class LiquidHandlerMiddleware(LiquidHandler): if self._simulator: return await self._simulate_handler.pick_up_tips(tip_spots, use_channels, offsets, **backend_kwargs) + # 让 PLR 走标准链路:tracker.remove_tip -> 成功 commit / 失败 rollback, + # 由此 TipSpot.has_tip() 自动反映为 False,符合 LiquidHandler 规范。 + result = await super().pick_up_tips(tip_spots, use_channels, offsets, **backend_kwargs) + for tip_spot in tip_spots: + tip_spot.empty() if hasattr(self, "_ros_node") and self._ros_node is not None: task = ROS2DeviceNode.run_async_func(self._ros_node.update_resource, True, **{"resources": tip_spots}) submit_time = time.time() @@ -166,7 +171,7 @@ class LiquidHandlerMiddleware(LiquidHandler): self._ros_node.lab_logger().info(f"pick_up_tips {tip_spots} 超时") break time.sleep(0.01) - return await super().pick_up_tips(tip_spots, use_channels, offsets, **backend_kwargs) + return result async def drop_tips( self, diff --git a/unilabos/devices/liquid_handling/prcxi/prcxi.py b/unilabos/devices/liquid_handling/prcxi/prcxi.py index 95731fcd..fa28218c 100644 --- a/unilabos/devices/liquid_handling/prcxi/prcxi.py +++ b/unilabos/devices/liquid_handling/prcxi/prcxi.py @@ -1078,7 +1078,7 @@ class PRCXI9300Handler(LiquidHandlerAbstract): "ZAgainstTheWall": pip_pos.z - z_wall, "X2Pos": pip_pos.x + self.right_2_left.x, "Y2Pos": pip_pos.y + self.right_2_left.y, - "Z2Pos": max(min(pip_pos.z + self.right_2_left.z, self.max_z_pipetting),0), + "Z2Pos": max(min((pip_pos.z + self.right_2_left.z), self.max_z_pipetting),0), "X2_Left": half_x, "X2_Right": half_x, "ZAgainstTheWall2": pip_pos.z - z_wall, @@ -2053,7 +2053,7 @@ class PRCXI9300Backend(LiquidHandlerBackend): step = self.api_client.Imbibing( axis=axis, - dosage=int(volumes[0]), + dosage=float(volumes[0]), plate_no=PlateNo, is_whole_plate=False, hole_row=hole_row, diff --git a/unilabos/test/experiments/prcxi_9320_slim.json b/unilabos/test/experiments/prcxi_9320_slim.json index 4c4ea49f..73ccd4a2 100644 --- a/unilabos/test/experiments/prcxi_9320_slim.json +++ b/unilabos/test/experiments/prcxi_9320_slim.json @@ -26,7 +26,7 @@ "is_9320": true, "timeout": 10, "matrix_id": "", - "simulator": true, + "simulator": false, "channel_num": 2, "step_mode": false, "calibration_points": {