diff --git a/unilabos/devices/liquid_handling/liquid_handler_abstract.py b/unilabos/devices/liquid_handling/liquid_handler_abstract.py index 9bc56d4d..e849ffb9 100644 --- a/unilabos/devices/liquid_handling/liquid_handler_abstract.py +++ b/unilabos/devices/liquid_handling/liquid_handler_abstract.py @@ -988,6 +988,18 @@ class LiquidHandlerAbstract(LiquidHandlerMiddleware): dis_vols = [float(dis_vols)] else: dis_vols = [float(v) for v in dis_vols] + + # 统一混合次数为标量,防止数组/列表与 int 比较时报错 + if mix_times is not None and not isinstance(mix_times, (int, float)): + try: + mix_times = mix_times[0] if len(mix_times) > 0 else None + except Exception: + try: + mix_times = next(iter(mix_times)) + except Exception: + pass + if mix_times is not None: + mix_times = int(mix_times) # 识别传输模式 num_sources = len(sources) diff --git a/unilabos/devices/liquid_handling/prcxi/prcxi.py b/unilabos/devices/liquid_handling/prcxi/prcxi.py index cca11f84..cd20f4c9 100644 --- a/unilabos/devices/liquid_handling/prcxi/prcxi.py +++ b/unilabos/devices/liquid_handling/prcxi/prcxi.py @@ -5,6 +5,7 @@ import json import os import socket import time +import uuid from typing import Any, List, Dict, Optional, Tuple, TypedDict, Union, Sequence, Iterator, Literal from pylabrobot.liquid_handling import ( @@ -856,7 +857,30 @@ class PRCXI9300Api: def _raw_request(self, payload: str) -> str: if self.debug: - return " " + # 调试/仿真模式下直接返回可解析的模拟 JSON,避免后续 json.loads 报错 + try: + req = json.loads(payload) + method = req.get("MethodName") + except Exception: + method = None + + data: Any = True + if method in {"AddSolution"}: + data = str(uuid.uuid4()) + elif method in {"AddWorkTabletMatrix", "AddWorkTabletMatrix2"}: + data = {"Success": True, "Message": "debug mock"} + elif method in {"GetErrorCode"}: + data = "" + elif method in {"RemoveErrorCodet", "Reset", "Start", "LoadSolution", "Pause", "Resume", "Stop"}: + data = True + elif method in {"GetStepStateList", "GetStepStatus", "GetStepState"}: + data = [] + elif method in {"GetLocation"}: + data = {"X": 0, "Y": 0, "Z": 0} + elif method in {"GetResetStatus"}: + data = False + + return json.dumps({"Success": True, "Msg": "debug mock", "Data": data}) with contextlib.closing(socket.socket()) as sock: sock.settimeout(self.timeout) sock.connect((self.host, self.port))