diff --git a/unilabos/devices/liquid_handling/biomek.py b/unilabos/devices/liquid_handling/biomek.py index e4189e7c..925ac53c 100644 --- a/unilabos/devices/liquid_handling/biomek.py +++ b/unilabos/devices/liquid_handling/biomek.py @@ -23,8 +23,8 @@ class LiquidHandlerBiomek(LiquidHandlerAbstract): 该类用于处理Biomek液体处理器的特定操作。 """ - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) + def __init__(self, backend=None, deck=None, *args, **kwargs): + super().__init__(backend, deck, *args, **kwargs) self._status = "Idle" # 初始状态为 Idle self._success = False # 初始成功状态为 False self._status_queue = kwargs.get("status_queue", None) # 状态队列 @@ -421,7 +421,6 @@ class LiquidHandlerBiomek(LiquidHandlerAbstract): if __name__ == "__main__": - steps_info = ''' { "steps": [ @@ -874,35 +873,35 @@ labware_with_liquid = ''' handler = LiquidHandlerBiomek() -handler.temp_protocol = { - "meta": {}, - "labwares": [], - "steps": [] -} + handler.temp_protocol = { + "meta": {}, + "labwares": [], + "steps": [] + } -input_steps = json.loads(steps_info) -labwares = json.loads(labware_with_liquid) + input_steps = json.loads(steps_info) + labwares = json.loads(labware_with_liquid) -for step in input_steps['steps']: - operation = step['operation'] - parameters = step['parameters'] + for step in input_steps['steps']: + operation = step['operation'] + parameters = step['parameters'] - if operation == 'transfer': - handler.transfer_biomek(source=parameters['source'], - target=parameters['target'], - volume=parameters['volume'], - tip_rack=parameters['tip_rack'], - aspirate_techniques='MC P300 high', - dispense_techniques='MC P300 high') - elif operation == 'move_labware': - handler.move_biomek(source=parameters['source'], - target=parameters['target']) - elif operation == 'oscillation': - handler.oscillation_biomek(rpm=parameters['rpm'], - time=parameters['time']) - elif operation == 'incubation': - handler.incubation_biomek(time=parameters['time']) + if operation == 'transfer': + handler.transfer_biomek(source=parameters['source'], + target=parameters['target'], + volume=parameters['volume'], + tip_rack=parameters['tip_rack'], + aspirate_techniques='MC P300 high', + dispense_techniques='MC P300 high') + elif operation == 'move_labware': + handler.move_biomek(source=parameters['source'], + target=parameters['target']) + elif operation == 'oscillation': + handler.oscillation_biomek(rpm=parameters['rpm'], + time=parameters['time']) + elif operation == 'incubation': + handler.incubation_biomek(time=parameters['time']) -print(json.dumps(handler.temp_protocol, indent=4)) + print(json.dumps(handler.temp_protocol, indent=4)) diff --git a/unilabos/registry/devices/liquid_handler.yaml b/unilabos/registry/devices/liquid_handler.yaml index eba2e0bc..c891fb22 100644 --- a/unilabos/registry/devices/liquid_handler.yaml +++ b/unilabos/registry/devices/liquid_handler.yaml @@ -340,6 +340,21 @@ liquid_handler.biomek: none_keys: none_keys feedback: {} result: {} + handles: + input: + - handler_key: liquid-input + label: Liquid Input + data_type: resource + io_type: target + data_source: handle + data_key: liquid + output: + - handler_key: liquid-output + label: Liquid Output + data_type: resource + io_type: source + data_source: executor + data_key: liquid transfer_biomek: type: LiquidHandlerTransferBiomek goal: @@ -351,6 +366,21 @@ liquid_handler.biomek: dispense_techniques: dispense_techniques feedback: {} result: {} + handles: + input: + - handler_key: liquid-input + label: Liquid Input + data_type: resource + io_type: target + data_source: handle + data_key: liquid + output: + - handler_key: liquid-output + label: Liquid Output + data_type: resource + io_type: source + data_source: executor + data_key: liquid schema: type: object properties: {} diff --git a/unilabos/registry/registry.py b/unilabos/registry/registry.py index e95d25aa..9a5e3b59 100644 --- a/unilabos/registry/registry.py +++ b/unilabos/registry/registry.py @@ -64,6 +64,7 @@ class Registry: "goal_default": yaml.safe_load( io.StringIO(get_yaml_from_goal_type(self.ResourceCreateFromOuter.Goal)) ), + "handles": {}, }, "create_resource": { "type": self.ResourceCreateFromOuterEasy, @@ -84,6 +85,7 @@ class Registry: "goal_default": yaml.safe_load( io.StringIO(get_yaml_from_goal_type(self.ResourceCreateFromOuterEasy.Goal)) ), + "handles": {}, }, "test_latency": { "type": self.EmptyIn, @@ -92,6 +94,7 @@ class Registry: "result": {"latency_ms": "latency_ms", "time_diff_ms": "time_diff_ms"}, "schema": ros_action_to_json_schema(self.EmptyIn), "goal_default": {}, + "handles": {}, }, }, }, @@ -214,6 +217,8 @@ class Registry: # 处理动作值映射 if "action_value_mappings" in device_config["class"]: for action_name, action_config in device_config["class"]["action_value_mappings"].items(): + if "handles" not in action_config: + action_config["handles"] = [] if "type" in action_config: action_config["type"] = self._replace_type_with_class( action_config["type"], device_id, f"动作 {action_name}"