diff --git a/unilabos/compile/heatchill_protocol.py b/unilabos/compile/heatchill_protocol.py index 260d9bc..3e7f551 100644 --- a/unilabos/compile/heatchill_protocol.py +++ b/unilabos/compile/heatchill_protocol.py @@ -247,6 +247,142 @@ def generate_heat_chill_protocol( return action_sequence + +def generate_heat_chill_to_temp_protocol( + G: nx.DiGraph, + vessel: str, + temp: float = 25.0, + time: float = 300.0, + temp_spec: str = "", + time_spec: str = "", + pressure: str = "", + reflux_solvent: str = "", + stir: bool = False, + stir_speed: float = 300.0, + purpose: str = "", + **kwargs # 🔧 接受额外参数,增强兼容性 +) -> List[Dict[str, Any]]: + """ + 生成加热/冷却操作的协议序列 + + Args: + G: 设备图 + vessel: 加热容器名称(必需) + temp: 目标温度 (°C) + time: 加热时间 (秒) + temp_spec: 温度规格(如 'room temperature', 'reflux') + time_spec: 时间规格(如 'overnight', '2 h') + pressure: 压力规格(如 '1 mbar'),不做特殊处理 + reflux_solvent: 回流溶剂名称,不做特殊处理 + stir: 是否搅拌 + stir_speed: 搅拌速度 (RPM) + purpose: 操作目的 + **kwargs: 其他参数(兼容性) + + Returns: + List[Dict[str, Any]]: 加热操作的动作序列 + """ + + debug_print("=" * 50) + debug_print("开始生成加热冷却协议") + debug_print(f"输入参数:") + debug_print(f" - vessel: {vessel}") + debug_print(f" - temp: {temp}°C") + debug_print(f" - time: {time}s ({time / 60:.1f}分钟)") + debug_print(f" - temp_spec: {temp_spec}") + debug_print(f" - time_spec: {time_spec}") + debug_print(f" - pressure: {pressure}") + debug_print(f" - reflux_solvent: {reflux_solvent}") + debug_print(f" - stir: {stir}") + debug_print(f" - stir_speed: {stir_speed} RPM") + debug_print(f" - purpose: {purpose}") + debug_print(f" - 其他参数: {kwargs}") + debug_print("=" * 50) + + action_sequence = [] + + # === 参数验证 === + debug_print("步骤1: 参数验证...") + + # 验证必需参数 + if not vessel: + raise ValueError("vessel 参数不能为空") + + if vessel not in G.nodes(): + raise ValueError(f"容器 '{vessel}' 不存在于系统中") + + # 温度解析:优先使用 temp_spec,然后是 temp + final_temp = temp + if temp_spec: + final_temp = parse_temp_spec(temp_spec) + debug_print(f"温度解析: '{temp_spec}' → {final_temp}°C") + + # 时间解析:优先使用 time_spec,然后是 time + final_time = time + if time_spec: + final_time = parse_time_spec(time_spec) + debug_print(f"时间解析: '{time_spec}' → {final_time}s ({final_time / 60:.1f}分钟)") + + # 参数范围验证 + if final_temp < -50.0 or final_temp > 300.0: + debug_print(f"温度 {final_temp}°C 超出范围,修正为 25°C") + final_temp = 25.0 + + if final_time < 0: + debug_print(f"时间 {final_time}s 无效,修正为 300s") + final_time = 300.0 + + if stir_speed < 0 or stir_speed > 1500.0: + debug_print(f"搅拌速度 {stir_speed} RPM 超出范围,修正为 300 RPM") + stir_speed = 300.0 + + debug_print(f"✅ 参数验证通过") + + # === 查找加热设备 === + debug_print("步骤2: 查找加热设备...") + + try: + heatchill_id = find_connected_heatchill(G, vessel) + debug_print(f"设备配置: 加热设备 = {heatchill_id}") + + except Exception as e: + debug_print(f"❌ 设备查找失败: {str(e)}") + raise ValueError(f"无法找到加热设备: {str(e)}") + + # === 执行加热操作 === + debug_print("步骤3: 执行加热操作...") + + heatchill_action = { + "device_id": heatchill_id, + "action_name": "heat_chill", + "action_kwargs": { + "vessel": vessel, + "temp": final_temp, + "time": final_time, + "stir": stir, + "stir_speed": stir_speed, + "purpose": purpose or f"加热到 {final_temp}°C" + } + } + + action_sequence.append(heatchill_action) + + # === 总结 === + debug_print("=" * 50) + debug_print(f"加热冷却协议生成完成") + debug_print(f"总动作数: {len(action_sequence)}") + debug_print(f"加热容器: {vessel}") + debug_print(f"目标温度: {final_temp}°C") + debug_print(f"加热时间: {final_time}s ({final_time / 60:.1f}分钟)") + if pressure: + debug_print(f"压力参数: {pressure} (已接收,不做特殊处理)") + if reflux_solvent: + debug_print(f"回流溶剂: {reflux_solvent} (已接收,不做特殊处理)") + debug_print("=" * 50) + + return action_sequence + + def generate_heat_chill_start_protocol( G: nx.DiGraph, vessel: str, diff --git a/unilabos/compile/pump_protocol.py b/unilabos/compile/pump_protocol.py index 5200188..acdb52c 100644 --- a/unilabos/compile/pump_protocol.py +++ b/unilabos/compile/pump_protocol.py @@ -778,17 +778,17 @@ def generate_pump_protocol_with_rinsing( ) # 为每个动作添加唯一标识 - for i, action in enumerate(pump_action_sequence): - if isinstance(action, dict): - action['_protocol_id'] = protocol_id - action['_action_sequence'] = i - elif isinstance(action, list): - for j, sub_action in enumerate(action): - if isinstance(sub_action, dict): - sub_action['_protocol_id'] = protocol_id - sub_action['_action_sequence'] = f"{i}_{j}" - - debug_print(f"📊 协议 {protocol_id} 生成完成,共 {len(pump_action_sequence)} 个动作") + # for i, action in enumerate(pump_action_sequence): + # if isinstance(action, dict): + # action['_protocol_id'] = protocol_id + # action['_action_sequence'] = i + # elif isinstance(action, list): + # for j, sub_action in enumerate(action): + # if isinstance(sub_action, dict): + # sub_action['_protocol_id'] = protocol_id + # sub_action['_action_sequence'] = f"{i}_{j}" + # + # debug_print(f"📊 协议 {protocol_id} 生成完成,共 {len(pump_action_sequence)} 个动作") debug_print(f"🔓 释放执行锁") return pump_action_sequence diff --git a/unilabos/messages/__init__.py b/unilabos/messages/__init__.py index dfdbab3..52fd97f 100644 --- a/unilabos/messages/__init__.py +++ b/unilabos/messages/__init__.py @@ -372,6 +372,30 @@ class HeatChillProtocol(BaseModel): return 300.0 # 默认5分钟 + +class HeatChillStartProtocol(BaseModel): + # === 必需参数 === + vessel: str = Field(..., description="加热容器名称") + + # === 可选参数 - 温度相关 === + temp: float = Field(25.0, description="目标温度 (°C)") + temp_spec: str = Field("", description="温度规格(如 'room temperature', 'reflux')") + + # === 可选参数 - 其他XDL参数 === + pressure: str = Field("", description="压力规格(如 '1 mbar'),不做特殊处理") + reflux_solvent: str = Field("", description="回流溶剂名称,不做特殊处理") + + # === 可选参数 - 搅拌相关 === + stir: bool = Field(False, description="是否搅拌") + stir_speed: float = Field(300.0, description="搅拌速度 (RPM)") + purpose: str = Field("", description="操作目的") + + +class HeatChillStopProtocol(BaseModel): + # === 必需参数 === + vessel: str = Field(..., description="加热容器名称") + + class StirProtocol(BaseModel): # === 必需参数 === vessel: str = Field(..., description="搅拌容器名称") @@ -608,7 +632,8 @@ __all__ = [ "Point3D", "PumpTransferProtocol", "CleanProtocol", "SeparateProtocol", "EvaporateProtocol", "EvacuateAndRefillProtocol", "AGVTransferProtocol", "CentrifugeProtocol", "AddProtocol", "FilterProtocol", - "HeatChillProtocol", "HeatChillStartProtocol", "HeatChillStopProtocol", + "HeatChillProtocol", + "HeatChillStartProtocol", "HeatChillStopProtocol", "StirProtocol", "StartStirProtocol", "StopStirProtocol", "TransferProtocol", "CleanVesselProtocol", "DissolveProtocol", "FilterThroughProtocol", "RunColumnProtocol", "WashSolidProtocol", diff --git a/unilabos/registry/devices/mock_devices.yaml b/unilabos/registry/devices/mock_devices.yaml index 4341434..ea5c7e8 100644 --- a/unilabos/registry/devices/mock_devices.yaml +++ b/unilabos/registry/devices/mock_devices.yaml @@ -842,11 +842,15 @@ mock_heater: time: time vessel: vessel goal_default: + pressure: '' purpose: '' + reflux_solvent: '' stir: false stir_speed: 0.0 temp: 0.0 + temp_spec: '' time: 0.0 + time_spec: '' vessel: '' handles: [] result: @@ -866,22 +870,34 @@ mock_heater: goal: description: Action 目标 - 从客户端发送到服务器 properties: + pressure: + type: string purpose: type: string + reflux_solvent: + type: string stir: type: boolean stir_speed: type: number temp: type: number + temp_spec: + type: string time: type: number + time_spec: + type: string vessel: type: string required: - vessel - temp - time + - temp_spec + - time_spec + - pressure + - reflux_solvent - stir - stir_speed - purpose @@ -890,13 +906,16 @@ mock_heater: result: description: Action 结果 - 完成后从服务器发送到客户端 properties: + message: + type: string return_info: type: string success: type: boolean required: - - return_info - success + - message + - return_info title: HeatChill_Result type: object required: @@ -1270,13 +1289,18 @@ mock_pump: volume: volume goal_default: amount: '' + event: '' + flowrate: 0.0 from_vessel: '' + rate_spec: '' rinsing_repeats: 0 rinsing_solvent: '' rinsing_volume: 0.0 solid: false + through: '' time: 0.0 to_vessel: '' + transfer_flowrate: 0.0 viscous: false volume: 0.0 handles: [] @@ -1334,8 +1358,14 @@ mock_pump: properties: amount: type: string + event: + type: string + flowrate: + type: number from_vessel: type: string + rate_spec: + type: string rinsing_repeats: maximum: 2147483647 minimum: -2147483648 @@ -1346,10 +1376,14 @@ mock_pump: type: number solid: type: boolean + through: + type: string time: type: number to_vessel: type: string + transfer_flowrate: + type: number viscous: type: boolean volume: @@ -1365,6 +1399,11 @@ mock_pump: - rinsing_volume - rinsing_repeats - solid + - flowrate + - transfer_flowrate + - rate_spec + - event + - through title: PumpTransfer_Goal type: object result: @@ -2281,6 +2320,7 @@ mock_separator: goal_default: from_vessel: '' product_phase: '' + product_vessel: '' purpose: '' repeats: 0 separation_vessel: '' @@ -2291,7 +2331,10 @@ mock_separator: stir_time: 0.0 through: '' to_vessel: '' + vessel: '' + volume: '' waste_phase_to_vessel: '' + waste_vessel: '' handles: [] result: success: success @@ -2349,6 +2392,8 @@ mock_separator: type: string product_phase: type: string + product_vessel: + type: string purpose: type: string repeats: @@ -2371,8 +2416,14 @@ mock_separator: type: string to_vessel: type: string + vessel: + type: string + volume: + type: string waste_phase_to_vessel: type: string + waste_vessel: + type: string required: - purpose - product_phase @@ -2387,18 +2438,25 @@ mock_separator: - stir_time - stir_speed - settling_time + - vessel + - volume + - product_vessel + - waste_vessel title: Separate_Goal type: object result: description: Action 结果 - 完成后从服务器发送到客户端 properties: + message: + type: string return_info: type: string success: type: boolean required: - - return_info - success + - message + - return_info title: Separate_Result type: object required: @@ -3472,9 +3530,13 @@ mock_stirrer_new: stir_speed: stir_speed stir_time: stir_time goal_default: + event: '' settling_time: 0.0 stir_speed: 0.0 stir_time: 0.0 + time: '' + time_spec: '' + vessel: '' handles: [] result: success: success @@ -3493,13 +3555,25 @@ mock_stirrer_new: goal: description: Action 目标 - 从客户端发送到服务器 properties: + event: + type: string settling_time: type: number stir_speed: type: number stir_time: type: number + time: + type: string + time_spec: + type: string + vessel: + type: string required: + - vessel + - time + - event + - time_spec - stir_time - stir_speed - settling_time @@ -3508,13 +3582,16 @@ mock_stirrer_new: result: description: Action 结果 - 完成后从服务器发送到客户端 properties: + message: + type: string return_info: type: string success: type: boolean required: - - return_info - success + - message + - return_info title: Stir_Result type: object required: diff --git a/unilabos/registry/devices/organic_miscellaneous.yaml b/unilabos/registry/devices/organic_miscellaneous.yaml index 00e7550..9549705 100644 --- a/unilabos/registry/devices/organic_miscellaneous.yaml +++ b/unilabos/registry/devices/organic_miscellaneous.yaml @@ -324,9 +324,13 @@ separator.homemade: stir_speed: stir_speed stir_time: stir_time, goal_default: + event: '' settling_time: 0.0 stir_speed: 0.0 stir_time: 0.0 + time: '' + time_spec: '' + vessel: '' handles: [] result: success: success @@ -345,13 +349,25 @@ separator.homemade: goal: description: Action 目标 - 从客户端发送到服务器 properties: + event: + type: string settling_time: type: number stir_speed: type: number stir_time: type: number + time: + type: string + time_spec: + type: string + vessel: + type: string required: + - vessel + - time + - event + - time_spec - stir_time - stir_speed - settling_time @@ -360,13 +376,16 @@ separator.homemade: result: description: Action 结果 - 完成后从服务器发送到客户端 properties: + message: + type: string return_info: type: string success: type: boolean required: - - return_info - success + - message + - return_info title: Stir_Result type: object required: diff --git a/unilabos/registry/devices/temperature.yaml b/unilabos/registry/devices/temperature.yaml index 68a4f5e..6c60670 100644 --- a/unilabos/registry/devices/temperature.yaml +++ b/unilabos/registry/devices/temperature.yaml @@ -377,11 +377,15 @@ heaterstirrer.dalong: time: time vessel: vessel goal_default: + pressure: '' purpose: '' + reflux_solvent: '' stir: false stir_speed: 0.0 temp: 0.0 + temp_spec: '' time: 0.0 + time_spec: '' vessel: '' handles: [] result: @@ -401,22 +405,34 @@ heaterstirrer.dalong: goal: description: Action 目标 - 从客户端发送到服务器 properties: + pressure: + type: string purpose: type: string + reflux_solvent: + type: string stir: type: boolean stir_speed: type: number temp: type: number + temp_spec: + type: string time: type: number + time_spec: + type: string vessel: type: string required: - vessel - temp - time + - temp_spec + - time_spec + - pressure + - reflux_solvent - stir - stir_speed - purpose @@ -425,13 +441,16 @@ heaterstirrer.dalong: result: description: Action 结果 - 完成后从服务器发送到客户端 properties: + message: + type: string return_info: type: string success: type: boolean required: - - return_info - success + - message + - return_info title: HeatChill_Result type: object required: diff --git a/unilabos/registry/devices/virtual_device.yaml b/unilabos/registry/devices/virtual_device.yaml index 387f986..1bbc5f7 100644 --- a/unilabos/registry/devices/virtual_device.yaml +++ b/unilabos/registry/devices/virtual_device.yaml @@ -318,6 +318,12 @@ virtual_column: goal_default: column: '' from_vessel: '' + pct1: '' + pct2: '' + ratio: '' + rf: '' + solvent1: '' + solvent2: '' to_vessel: '' handles: [] result: @@ -346,12 +352,30 @@ virtual_column: type: string from_vessel: type: string + pct1: + type: string + pct2: + type: string + ratio: + type: string + rf: + type: string + solvent1: + type: string + solvent2: + type: string to_vessel: type: string required: - from_vessel - to_vessel - column + - rf + - pct1 + - pct2 + - solvent1 + - solvent2 + - ratio title: RunColumn_Goal type: object result: @@ -1155,11 +1179,15 @@ virtual_heatchill: time: time vessel: vessel goal_default: + pressure: '' purpose: '' + reflux_solvent: '' stir: false stir_speed: 0.0 temp: 0.0 + temp_spec: '' time: 0.0 + time_spec: '' vessel: '' handles: [] result: @@ -1179,22 +1207,34 @@ virtual_heatchill: goal: description: Action 目标 - 从客户端发送到服务器 properties: + pressure: + type: string purpose: type: string + reflux_solvent: + type: string stir: type: boolean stir_speed: type: number temp: type: number + temp_spec: + type: string time: type: number + time_spec: + type: string vessel: type: string required: - vessel - temp - time + - temp_spec + - time_spec + - pressure + - reflux_solvent - stir - stir_speed - purpose @@ -1203,13 +1243,16 @@ virtual_heatchill: result: description: Action 结果 - 完成后从服务器发送到客户端 properties: + message: + type: string return_info: type: string success: type: boolean required: - - return_info - success + - message + - return_info title: HeatChill_Result type: object required: @@ -2048,13 +2091,18 @@ virtual_pump: volume: volume goal_default: amount: '' + event: '' + flowrate: 0.0 from_vessel: '' + rate_spec: '' rinsing_repeats: 0 rinsing_solvent: '' rinsing_volume: 0.0 solid: false + through: '' time: 0.0 to_vessel: '' + transfer_flowrate: 0.0 viscous: false volume: 0.0 handles: [] @@ -2112,8 +2160,14 @@ virtual_pump: properties: amount: type: string + event: + type: string + flowrate: + type: number from_vessel: type: string + rate_spec: + type: string rinsing_repeats: maximum: 2147483647 minimum: -2147483648 @@ -2124,10 +2178,14 @@ virtual_pump: type: number solid: type: boolean + through: + type: string time: type: number to_vessel: type: string + transfer_flowrate: + type: number viscous: type: boolean volume: @@ -2143,6 +2201,11 @@ virtual_pump: - rinsing_volume - rinsing_repeats - solid + - flowrate + - transfer_flowrate + - rate_spec + - event + - through title: PumpTransfer_Goal type: object result: @@ -2325,6 +2388,7 @@ virtual_rotavap: vessel: vessel goal_default: pressure: 0.0 + solvent: '' stir_speed: 0.0 temp: 0.0 time: 0.0 @@ -2385,6 +2449,8 @@ virtual_rotavap: properties: pressure: type: number + solvent: + type: string stir_speed: type: number temp: @@ -2399,6 +2465,7 @@ virtual_rotavap: - temp - time - stir_speed + - solvent title: Evaporate_Goal type: object result: @@ -2641,6 +2708,7 @@ virtual_separator: goal_default: from_vessel: '' product_phase: '' + product_vessel: '' purpose: '' repeats: 0 separation_vessel: '' @@ -2651,7 +2719,10 @@ virtual_separator: stir_time: 0.0 through: '' to_vessel: '' + vessel: '' + volume: '' waste_phase_to_vessel: '' + waste_vessel: '' handles: [] result: message: message @@ -2710,6 +2781,8 @@ virtual_separator: type: string product_phase: type: string + product_vessel: + type: string purpose: type: string repeats: @@ -2732,8 +2805,14 @@ virtual_separator: type: string to_vessel: type: string + vessel: + type: string + volume: + type: string waste_phase_to_vessel: type: string + waste_vessel: + type: string required: - purpose - product_phase @@ -2748,18 +2827,25 @@ virtual_separator: - stir_time - stir_speed - settling_time + - vessel + - volume + - product_vessel + - waste_vessel title: Separate_Goal type: object result: description: Action 结果 - 完成后从服务器发送到客户端 properties: + message: + type: string return_info: type: string success: type: boolean required: - - return_info - success + - message + - return_info title: Separate_Result type: object required: @@ -3149,6 +3235,180 @@ virtual_solenoid_valve: - valve_position - state type: object +virtual_solid_dispenser: + class: + action_value_mappings: + add_solid: + feedback: + current_status: status + progress: progress + goal: + mass: mass + mol: mol + purpose: purpose + reagent: reagent + vessel: vessel + goal_default: + mass: '' + mol: '' + purpose: '' + reagent: '' + vessel: '' + handles: [] + result: + message: message + return_info: return_info + success: success + schema: + description: ROS Action AddSolid 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + current_status: + type: string + progress: + type: number + required: + - current_status + - progress + title: AddSolid_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + mass: + type: string + mol: + type: string + purpose: + type: string + reagent: + type: string + vessel: + type: string + required: + - vessel + - reagent + - mass + - mol + - purpose + title: AddSolid_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: AddSolid_Result + type: object + required: + - goal + title: AddSolid + type: object + type: AddSolid + auto-add_solid: + feedback: {} + goal: {} + goal_default: + mass: '' + mol: '' + purpose: '' + reagent: '' + vessel: main_reactor + handles: [] + result: {} + schema: + description: add_solid的参数schema + type: object + type: UniLabJsonCommandAsync + auto-cleanup: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: cleanup的参数schema + type: object + type: UniLabJsonCommandAsync + auto-initialize: + feedback: {} + goal: {} + goal_default: {} + handles: [] + result: {} + schema: + description: initialize的参数schema + type: object + type: UniLabJsonCommandAsync + module: unilabos.devices.virtual.virtual_solid_dispenser:VirtualSolidDispenser + status_types: + current_reagent: str + dispensed_amount: float + status: str + total_operations: int + type: python + description: Virtual Solid Dispenser for Add Protocol Solid Reagents + handles: + - data_key: SolidIn + data_source: handle + data_type: resource + description: 固体试剂进料口 + handler_key: SolidIn + io_type: target + label: SolidIn + side: WEST + - data_key: SolidOut + data_source: executor + data_type: resource + description: 固体试剂出料口 + handler_key: SolidOut + io_type: source + label: SolidOut + side: EAST + icon: '' + init_param_schema: + config: + properties: + config: + type: object + device_id: + type: string + max_capacity: + default: 100.0 + description: 最大加样容量 (g) + type: number + precision: + default: 0.001 + description: 加样精度 (g) + type: number + required: [] + type: object + data: + properties: + current_reagent: + type: string + dispensed_amount: + type: number + status: + type: string + total_operations: + type: integer + required: + - status + - current_reagent + - dispensed_amount + - total_operations + type: object virtual_stirrer: class: action_value_mappings: @@ -3183,7 +3443,6 @@ virtual_stirrer: properties: feedback: {} goal: - properties: {} required: [] type: object @@ -3356,9 +3615,13 @@ virtual_stirrer: stir_speed: stir_speed stir_time: stir_time goal_default: + event: '' settling_time: 0.0 stir_speed: 0.0 stir_time: 0.0 + time: '' + time_spec: '' + vessel: '' handles: [] result: success: success @@ -3377,13 +3640,25 @@ virtual_stirrer: goal: description: Action 目标 - 从客户端发送到服务器 properties: + event: + type: string settling_time: type: number stir_speed: type: number stir_time: type: number + time: + type: string + time_spec: + type: string + vessel: + type: string required: + - vessel + - time + - event + - time_spec - stir_time - stir_speed - settling_time @@ -3392,13 +3667,16 @@ virtual_stirrer: result: description: Action 结果 - 完成后从服务器发送到客户端 properties: + message: + type: string return_info: type: string success: type: boolean required: - - return_info - success + - message + - return_info title: Stir_Result type: object required: @@ -4367,125 +4645,3 @@ virtual_vacuum_pump: required: - status type: object -virtual_solid_dispenser: - class: - action_value_mappings: - auto-cleanup: - feedback: {} - goal: {} - goal_default: {} - handles: [] - result: {} - schema: - description: cleanup的参数schema - type: object - type: UniLabJsonCommandAsync - auto-initialize: - feedback: {} - goal: {} - goal_default: {} - handles: [] - result: {} - schema: - description: initialize的参数schema - type: object - type: UniLabJsonCommandAsync - auto-add_solid: - feedback: {} - goal: {} - goal_default: - vessel: main_reactor - reagent: '' - mass: '' - mol: '' - purpose: '' - handles: [] - result: {} - schema: - description: add_solid的参数schema - type: object - type: UniLabJsonCommandAsync - add_solid: - feedback: - current_status: status - progress: progress - goal: - vessel: vessel - reagent: reagent - mass: mass - mol: mol - purpose: purpose - goal_default: - vessel: 'main_reactor' - reagent: '' - mass: '' - mol: '' - purpose: '' - handles: [] - result: - message: message - success: success - return_info: return_info - schema: - description: ROS Action AddSolid 的 JSON Schema - type: object - type: AddSolid - module: unilabos.devices.virtual.virtual_solid_dispenser:VirtualSolidDispenser - status_types: - status: str - current_reagent: str - dispensed_amount: float - total_operations: int - type: python - description: Virtual Solid Dispenser for Add Protocol Solid Reagents - handles: - - data_key: SolidIn - data_source: handle - data_type: resource - description: 固体试剂进料口 - handler_key: SolidIn - io_type: target - label: SolidIn - side: WEST - - data_key: SolidOut - data_source: executor - data_type: resource - description: 固体试剂出料口 - handler_key: SolidOut - io_type: source - label: SolidOut - side: EAST - icon: '' - init_param_schema: - config: - properties: - config: - type: object - device_id: - type: string - max_capacity: - type: number - default: 100.0 - description: 最大加样容量 (g) - precision: - type: number - default: 0.001 - description: 加样精度 (g) - required: [] - type: object - data: - properties: - status: - type: string - current_reagent: - type: string - dispensed_amount: - type: number - total_operations: - type: integer - required: - - status - - current_reagent - - dispensed_amount - - total_operations - type: object diff --git a/unilabos/registry/devices/work_station.yaml b/unilabos/registry/devices/work_station.yaml index 3c4e3b6..91ea9bd 100644 --- a/unilabos/registry/devices/work_station.yaml +++ b/unilabos/registry/devices/work_station.yaml @@ -257,8 +257,13 @@ workstation: volume: volume goal_default: amount: '' + equiv: '' + event: '' mass: 0.0 + mol: '' purpose: '' + rate_spec: '' + ratio: '' reagent: '' stir: false stir_speed: 0.0 @@ -305,10 +310,20 @@ workstation: properties: amount: type: string + equiv: + type: string + event: + type: string mass: type: number + mol: + type: string purpose: type: string + rate_spec: + type: string + ratio: + type: string reagent: type: string stir: @@ -334,6 +349,11 @@ workstation: - stir_speed - viscous - purpose + - event + - mol + - rate_spec + - equiv + - ratio title: Add_Goal type: object result: @@ -356,6 +376,85 @@ workstation: title: Add type: object type: Add + AdjustPHProtocol: + feedback: {} + goal: + ph_value: ph_value + reagent: reagent + vessel: vessel + goal_default: + ph_value: 0.0 + reagent: '' + vessel: '' + handles: + input: + - data_key: vessel + data_source: handle + data_type: resource + handler_key: Vessel + label: Vessel + - data_key: reagent + data_source: handle + data_type: resource + handler_key: reagent + label: Reagent + output: + - data_key: vessel + data_source: executor + data_type: resource + handler_key: VesselOut + label: Vessel + result: {} + schema: + description: ROS Action AdjustPH 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + progress: + type: number + status: + type: string + required: + - status + - progress + title: AdjustPH_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + ph_value: + type: number + reagent: + type: string + vessel: + type: string + required: + - vessel + - ph_value + - reagent + title: AdjustPH_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: AdjustPH_Result + type: object + required: + - goal + title: AdjustPH + type: object + type: AdjustPH CentrifugeProtocol: feedback: {} goal: @@ -664,6 +763,9 @@ workstation: volume: volume goal_default: amount: '' + mass: '' + mol: '' + reagent: '' solvent: '' stir_speed: 0.0 temp: 0.0 @@ -709,6 +811,12 @@ workstation: properties: amount: type: string + mass: + type: string + mol: + type: string + reagent: + type: string solvent: type: string stir_speed: @@ -729,6 +837,9 @@ workstation: - temp - time - stir_speed + - mass + - mol + - reagent title: Dissolve_Goal type: object result: @@ -751,6 +862,75 @@ workstation: title: Dissolve type: object type: Dissolve + DryProtocol: + feedback: {} + goal: + compound: compound + vessel: vessel + goal_default: + compound: '' + vessel: '' + handles: + input: + - data_key: vessel + data_source: handle + data_type: resource + handler_key: Vessel + label: Vessel + output: + - data_key: vessel + data_source: executor + data_type: resource + handler_key: VesselOut + label: Vessel + result: {} + schema: + description: ROS Action Dry 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + progress: + type: number + status: + type: string + required: + - status + - progress + title: Dry_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + compound: + type: string + vessel: + type: string + required: + - compound + - vessel + title: Dry_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: Dry_Result + type: object + required: + - goal + title: Dry + type: object + type: Dry EvacuateAndRefillProtocol: feedback: {} goal: @@ -852,19 +1032,19 @@ workstation: EvaporateProtocol: feedback: {} goal: - vessel: vessel pressure: pressure + solvent: solvent + stir_speed: stir_speed temp: temp time: time - stir_speed: stir_speed - solvent: solvent + vessel: vessel goal_default: - vessel: '' - pressure: 0.1 - temp: 60.0 - time: 1800.0 - stir_speed: 100.0 + pressure: 0.0 solvent: '' + stir_speed: 0.0 + temp: 0.0 + time: 0.0 + vessel: '' handles: input: - data_key: vessel @@ -882,36 +1062,86 @@ workstation: schema: description: ROS Action Evaporate 的 JSON Schema properties: - goal: - description: Action 目标 + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 properties: - vessel: + current_device: type: string - description: 蒸发容器名称 + status: + type: string + time_remaining: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Duration + type: object + time_spent: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Duration + type: object + required: + - status + - current_device + - time_spent + - time_remaining + title: Evaporate_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: pressure: type: number - default: 0.1 - description: 真空度 (bar) - temp: - type: number - default: 60.0 - description: 加热温度 (°C) - time: - type: number - default: 1800.0 - description: 蒸发时间 (秒) - stir_speed: - type: number - default: 100.0 - description: 旋转速度 (RPM) solvent: type: string - default: '' - description: 溶剂名称 + stir_speed: + type: number + temp: + type: number + time: + type: number + vessel: + type: string required: - vessel + - pressure + - temp + - time + - stir_speed + - solvent title: Evaporate_Goal type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + return_info: + type: string + success: + type: boolean + required: + - return_info + - success + title: Evaporate_Result + type: object required: - goal title: Evaporate @@ -920,20 +1150,20 @@ workstation: FilterProtocol: feedback: {} goal: - vessel: vessel + continue_heatchill: continue_heatchill filtrate_vessel: filtrate_vessel stir: stir stir_speed: stir_speed temp: temp - continue_heatchill: continue_heatchill + vessel: vessel volume: volume goal_default: - vessel: '' + continue_heatchill: false filtrate_vessel: '' stir: false stir_speed: 0.0 - temp: 25.0 - continue_heatchill: false + temp: 0.0 + vessel: '' volume: 0.0 handles: input: @@ -983,35 +1213,28 @@ workstation: goal: description: Action 目标 - 从客户端发送到服务器 properties: - vessel: - type: string - description: 过滤容器名称 - filtrate_vessel: - type: string - default: '' - description: 滤液容器名称(可选) - stir: - type: boolean - default: false - description: 是否搅拌 - stir_speed: - type: number - default: 0.0 - description: 搅拌速度 - temp: - type: number - default: 25.0 - description: 温度 continue_heatchill: type: boolean - default: false - description: 是否继续加热冷却 + filtrate_vessel: + type: string + stir: + type: boolean + stir_speed: + type: number + temp: + type: number + vessel: + type: string volume: type: number - default: 0.0 - description: 过滤体积 required: - vessel + - filtrate_vessel + - stir + - stir_speed + - temp + - continue_heatchill + - volume title: Filter_Goal type: object result: @@ -1148,27 +1371,27 @@ workstation: HeatChillProtocol: feedback: {} goal: - vessel: vessel - temp: temp - time: time - temp_spec: temp_spec - time_spec: time_spec pressure: pressure + purpose: purpose reflux_solvent: reflux_solvent stir: stir stir_speed: stir_speed - purpose: purpose + temp: temp + temp_spec: temp_spec + time: time + time_spec: time_spec + vessel: vessel goal_default: - vessel: '' - temp: 25.0 - time: 300.0 - temp_spec: '' - time_spec: '' pressure: '' + purpose: '' reflux_solvent: '' stir: false - stir_speed: 300.0 - purpose: '' + stir_speed: 0.0 + temp: 0.0 + temp_spec: '' + time: 0.0 + time_spec: '' + vessel: '' handles: input: - data_key: vessel @@ -1187,7 +1410,7 @@ workstation: description: ROS Action HeatChill 的 JSON Schema properties: feedback: - description: Action 反馈 + description: Action 反馈 - 执行过程中从服务器发送到客户端 properties: status: type: string @@ -1196,53 +1419,43 @@ workstation: title: HeatChill_Feedback type: object goal: - description: Action 目标 + description: Action 目标 - 从客户端发送到服务器 properties: - vessel: - type: string - description: 加热容器名称 - temp: - type: number - default: 25.0 - description: 目标温度 - time: - type: number - default: 300.0 - description: 加热时间 - temp_spec: - type: string - default: '' - description: 温度规格 - time_spec: - type: string - default: '' - description: 时间规格 pressure: type: string - default: '' - description: 压力规格 - reflux_solvent: - type: string - default: '' - description: 回流溶剂名称 - stir: - type: boolean - default: false - description: 是否搅拌 - stir_speed: - type: number - default: 300.0 - description: 搅拌速度 purpose: type: string - default: '' - description: 操作目的 + reflux_solvent: + type: string + stir: + type: boolean + stir_speed: + type: number + temp: + type: number + temp_spec: + type: string + time: + type: number + time_spec: + type: string + vessel: + type: string required: - vessel + - temp + - time + - temp_spec + - time_spec + - pressure + - reflux_solvent + - stir + - stir_speed + - purpose title: HeatChill_Goal type: object result: - description: Action 结果 + description: Action 结果 - 完成后从服务器发送到客户端 properties: message: type: string @@ -1387,40 +1600,114 @@ workstation: title: HeatChillStop type: object type: HeatChillStop + HydrogenateProtocol: + feedback: {} + goal: + temp: temp + time: time + vessel: vessel + goal_default: + temp: '' + time: '' + vessel: '' + handles: + input: + - data_key: vessel + data_source: handle + data_type: resource + handler_key: Vessel + label: Vessel + output: + - data_key: vessel + data_source: executor + data_type: resource + handler_key: VesselOut + label: Vessel + result: {} + schema: + description: ROS Action Hydrogenate 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + progress: + type: number + status: + type: string + required: + - status + - progress + title: Hydrogenate_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + temp: + type: string + time: + type: string + vessel: + type: string + required: + - temp + - time + - vessel + title: Hydrogenate_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: Hydrogenate_Result + type: object + required: + - goal + title: Hydrogenate + type: object + type: Hydrogenate PumpTransferProtocol: feedback: {} goal: amount: amount + event: event + flowrate: flowrate from_vessel: from_vessel + rate_spec: rate_spec rinsing_repeats: rinsing_repeats rinsing_solvent: rinsing_solvent rinsing_volume: rinsing_volume solid: solid + through: through time: time to_vessel: to_vessel + transfer_flowrate: transfer_flowrate viscous: viscous volume: volume - flowrate: flowrate - transfer_flowrate: transfer_flowrate - rate_spec: rate_spec - event: event - through: through goal_default: amount: '' + event: '' + flowrate: 0.0 from_vessel: '' + rate_spec: '' rinsing_repeats: 0 rinsing_solvent: '' rinsing_volume: 0.0 solid: false + through: '' time: 0.0 to_vessel: '' + transfer_flowrate: 0.0 viscous: false volume: 0.0 - flowrate: 0.0 - transfer_flowrate: 0.0 - rate_spec: '' - event: '' - through: '' handles: input: - data_key: vessel @@ -1451,7 +1738,7 @@ workstation: label: To Vessel result: {} schema: - description: ROS Action PumpTransfer 的 JSON Schema(兼容增强版) + description: ROS Action PumpTransfer 的 JSON Schema properties: feedback: description: Action 反馈 - 执行过程中从服务器发送到客户端 @@ -1461,8 +1748,34 @@ workstation: status: type: string time_remaining: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Duration type: object time_spent: + properties: + nanosec: + maximum: 4294967295 + minimum: 0 + type: integer + sec: + maximum: 2147483647 + minimum: -2147483648 + type: integer + required: + - sec + - nanosec + title: Duration type: object required: - status @@ -1476,37 +1789,52 @@ workstation: properties: amount: type: string + event: + type: string + flowrate: + type: number from_vessel: type: string - to_vessel: + rate_spec: type: string - volume: - type: number - time: - type: number - viscous: - type: boolean + rinsing_repeats: + maximum: 2147483647 + minimum: -2147483648 + type: integer rinsing_solvent: type: string rinsing_volume: type: number - rinsing_repeats: - type: integer solid: type: boolean - flowrate: - type: number - transfer_flowrate: - type: number - rate_spec: - type: string - event: - type: string through: type: string + time: + type: number + to_vessel: + type: string + transfer_flowrate: + type: number + viscous: + type: boolean + volume: + type: number required: - from_vessel - to_vessel + - volume + - amount + - time + - viscous + - rinsing_solvent + - rinsing_volume + - rinsing_repeats + - solid + - flowrate + - transfer_flowrate + - rate_spec + - event + - through title: PumpTransfer_Goal type: object result: @@ -1526,6 +1854,159 @@ workstation: title: PumpTransfer type: object type: PumpTransfer + RecrystallizeProtocol: + feedback: {} + goal: + ratio: ratio + solvent1: solvent1 + solvent2: solvent2 + vessel: vessel + volume: volume + goal_default: + ratio: '' + solvent1: '' + solvent2: '' + vessel: '' + volume: 0.0 + handles: + input: + - data_key: vessel + data_source: handle + data_type: resource + handler_key: Vessel + label: Vessel + - data_key: solvent1 + data_source: handle + data_type: resource + handler_key: solvent1 + label: Solvent 1 + - data_key: solvent2 + data_source: handle + data_type: resource + handler_key: solvent2 + label: Solvent 2 + output: + - data_key: vessel + data_source: executor + data_type: resource + handler_key: VesselOut + label: Vessel + result: {} + schema: + description: ROS Action Recrystallize 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + progress: + type: number + status: + type: string + required: + - status + - progress + title: Recrystallize_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + ratio: + type: string + solvent1: + type: string + solvent2: + type: string + vessel: + type: string + volume: + type: number + required: + - ratio + - solvent1 + - solvent2 + - vessel + - volume + title: Recrystallize_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: Recrystallize_Result + type: object + required: + - goal + title: Recrystallize + type: object + type: Recrystallize + ResetHandlingProtocol: + feedback: {} + goal: + solvent: solvent + goal_default: + solvent: '' + handles: + input: + - data_key: solvent + data_source: handle + data_type: resource + handler_key: solvent + label: Solvent + output: [] + result: {} + schema: + description: ROS Action ResetHandling 的 JSON Schema + properties: + feedback: + description: Action 反馈 - 执行过程中从服务器发送到客户端 + properties: + progress: + type: number + status: + type: string + required: + - status + - progress + title: ResetHandling_Feedback + type: object + goal: + description: Action 目标 - 从客户端发送到服务器 + properties: + solvent: + type: string + required: + - solvent + title: ResetHandling_Goal + type: object + result: + description: Action 结果 - 完成后从服务器发送到客户端 + properties: + message: + type: string + return_info: + type: string + success: + type: boolean + required: + - success + - message + - return_info + title: ResetHandling_Result + type: object + required: + - goal + title: ResetHandling + type: object + type: ResetHandling RunColumnProtocol: feedback: {} goal: @@ -1535,6 +2016,12 @@ workstation: goal_default: column: '' from_vessel: '' + pct1: '' + pct2: '' + ratio: '' + rf: '' + solvent1: '' + solvent2: '' to_vessel: '' handles: input: @@ -1582,12 +2069,30 @@ workstation: type: string from_vessel: type: string + pct1: + type: string + pct2: + type: string + ratio: + type: string + rf: + type: string + solvent1: + type: string + solvent2: + type: string to_vessel: type: string required: - from_vessel - to_vessel - column + - rf + - pct1 + - pct2 + - solvent1 + - solvent2 + - ratio title: RunColumn_Goal type: object result: @@ -1629,6 +2134,7 @@ workstation: goal_default: from_vessel: '' product_phase: '' + product_vessel: '' purpose: '' repeats: 0 separation_vessel: '' @@ -1639,7 +2145,10 @@ workstation: stir_time: 0.0 through: '' to_vessel: '' + vessel: '' + volume: '' waste_phase_to_vessel: '' + waste_vessel: '' handles: input: - data_key: vessel @@ -1723,6 +2232,8 @@ workstation: type: string product_phase: type: string + product_vessel: + type: string purpose: type: string repeats: @@ -1745,8 +2256,14 @@ workstation: type: string to_vessel: type: string + vessel: + type: string + volume: + type: string waste_phase_to_vessel: type: string + waste_vessel: + type: string required: - purpose - product_phase @@ -1761,18 +2278,25 @@ workstation: - stir_time - stir_speed - settling_time + - vessel + - volume + - product_vessel + - waste_vessel title: Separate_Goal type: object result: description: Action 结果 - 完成后从服务器发送到客户端 properties: + message: + type: string return_info: type: string success: type: boolean required: - - return_info - success + - message + - return_info title: Separate_Result type: object required: @@ -1860,21 +2384,21 @@ workstation: StirProtocol: feedback: {} goal: - vessel: vessel - time: time event: event - time_spec: time_spec - stir_time: stir_time - stir_speed: stir_speed settling_time: settling_time + stir_speed: stir_speed + stir_time: stir_time + time: time + time_spec: time_spec + vessel: vessel goal_default: - vessel: '' - time: '5 min' event: '' + settling_time: 0.0 + stir_speed: 0.0 + stir_time: 0.0 + time: '' time_spec: '' - stir_time: 300.0 - stir_speed: 200.0 - settling_time: 60.0 + vessel: '' handles: input: - data_key: vessel @@ -1893,7 +2417,7 @@ workstation: description: ROS Action Stir 的 JSON Schema properties: feedback: - description: Action 反馈 + description: Action 反馈 - 执行过程中从服务器发送到客户端 properties: status: type: string @@ -1902,41 +2426,34 @@ workstation: title: Stir_Feedback type: object goal: - description: Action 目标 + description: Action 目标 - 从客户端发送到服务器 properties: - vessel: - type: string - description: 搅拌容器名称 - time: - type: string - default: '5 min' - description: 搅拌时间 event: type: string - default: '' - description: 事件标识 - time_spec: - type: string - default: '' - description: 时间规格 - stir_time: - type: number - default: 300.0 - description: 搅拌时间(秒) - stir_speed: - type: number - default: 200.0 - description: 搅拌速度 settling_time: type: number - default: 60.0 - description: 沉降时间 + stir_speed: + type: number + stir_time: + type: number + time: + type: string + time_spec: + type: string + vessel: + type: string required: - vessel + - time + - event + - time_spec + - stir_time + - stir_speed + - settling_time title: Stir_Goal type: object result: - description: Action 结果 + description: Action 结果 - 完成后从服务器发送到客户端 properties: message: type: string @@ -2002,13 +2519,16 @@ workstation: result: description: Action 结果 - 完成后从服务器发送到客户端 properties: + message: + type: string return_info: type: string success: type: boolean required: - - return_info - success + - message + - return_info title: StopStir_Result type: object required: @@ -2148,25 +2668,25 @@ workstation: WashSolidProtocol: feedback: {} goal: - vessel: vessel - solvent: solvent - volume: volume filtrate_vessel: filtrate_vessel - temp: temp + repeats: repeats + solvent: solvent stir: stir stir_speed: stir_speed + temp: temp time: time - repeats: repeats + vessel: vessel + volume: volume goal_default: - vessel: '' - solvent: '' - volume: 0.0 filtrate_vessel: '' - temp: 25.0 + repeats: 0 + solvent: '' stir: false stir_speed: 0.0 + temp: 0.0 time: 0.0 - repeats: 1 + vessel: '' + volume: 0.0 handles: input: - data_key: vessel @@ -2214,45 +2734,36 @@ workstation: goal: description: Action 目标 - 从客户端发送到服务器 properties: - vessel: - type: string - description: 装有固体的容器名称 - solvent: - type: string - description: 清洗溶剂名称 - volume: - type: number - description: 清洗溶剂体积 filtrate_vessel: type: string - default: '' - description: 滤液收集容器(可选) - temp: - type: number - default: 25.0 - description: 清洗温度 + repeats: + maximum: 2147483647 + minimum: -2147483648 + type: integer + solvent: + type: string stir: type: boolean - default: false - description: 是否搅拌 stir_speed: type: number - default: 0.0 - description: 搅拌速度 + temp: + type: number time: type: number - default: 0.0 - description: 清洗时间 - repeats: - type: integer - default: 1 - minimum: 1 - maximum: 10 - description: 重复次数 + vessel: + type: string + volume: + type: number required: - vessel - solvent - volume + - filtrate_vessel + - temp + - stir + - stir_speed + - time + - repeats title: WashSolid_Goal type: object result: @@ -2363,381 +2874,6 @@ workstation: title: initialize_device参数 type: object type: UniLabJsonCommand - AdjustPHProtocol: - feedback: {} - goal: - vessel: vessel - ph_value: ph_value - reagent: reagent - goal_default: - vessel: '' - ph_value: 7.0 - reagent: '' - handles: - input: - - data_key: vessel - data_source: handle - data_type: resource - handler_key: Vessel - label: Vessel - - data_key: reagent - data_source: handle - data_type: resource - handler_key: reagent - label: Reagent - output: - - data_key: vessel - data_source: executor - data_type: resource - handler_key: VesselOut - label: Vessel - result: {} - schema: - description: ROS Action AdjustPH 的 JSON Schema - properties: - feedback: - description: Action 反馈 - 执行过程中从服务器发送到客户端 - properties: - status: - type: string - progress: - type: number - required: - - status - - progress - title: AdjustPH_Feedback - type: object - goal: - description: Action 目标 - 从客户端发送到服务器 - properties: - vessel: - type: string - ph_value: - type: number - reagent: - type: string - required: - - vessel - - ph_value - - reagent - title: AdjustPH_Goal - type: object - result: - description: Action 结果 - 完成后从服务器发送到客户端 - properties: - message: - type: string - return_info: - type: string - success: - type: boolean - required: - - success - - message - - return_info - title: AdjustPH_Result - type: object - required: - - goal - title: AdjustPH - type: object - type: AdjustPH - ResetHandlingProtocol: - feedback: {} - goal: - solvent: solvent - goal_default: - solvent: '' - handles: - input: - - data_key: solvent - data_source: handle - data_type: resource - handler_key: solvent - label: Solvent - output: [] - result: {} - schema: - description: ROS Action ResetHandling 的 JSON Schema - properties: - feedback: - description: Action 反馈 - 执行过程中从服务器发送到客户端 - properties: - status: - type: string - progress: - type: number - required: - - status - - progress - title: ResetHandling_Feedback - type: object - goal: - description: Action 目标 - 从客户端发送到服务器 - properties: - solvent: - type: string - required: - - solvent - title: ResetHandling_Goal - type: object - result: - description: Action 结果 - 完成后从服务器发送到客户端 - properties: - message: - type: string - return_info: - type: string - success: - type: boolean - required: - - success - - message - - return_info - title: ResetHandling_Result - type: object - required: - - goal - title: ResetHandling - type: object - type: ResetHandling - DryProtocol: - feedback: {} - goal: - compound: compound - vessel: vessel - goal_default: - compound: '' - vessel: '' - handles: - input: - - data_key: vessel - data_source: handle - data_type: resource - handler_key: Vessel - label: Vessel - output: - - data_key: vessel - data_source: executor - data_type: resource - handler_key: VesselOut - label: Vessel - result: {} - schema: - description: ROS Action Dry 的 JSON Schema - properties: - feedback: - description: Action 反馈 - 执行过程中从服务器发送到客户端 - properties: - status: - type: string - progress: - type: number - required: - - status - - progress - title: Dry_Feedback - type: object - goal: - description: Action 目标 - 从客户端发送到服务器 - properties: - compound: - type: string - vessel: - type: string - required: - - compound - - vessel - title: Dry_Goal - type: object - result: - description: Action 结果 - 完成后从服务器发送到客户端 - properties: - message: - type: string - return_info: - type: string - success: - type: boolean - required: - - success - - message - - return_info - title: Dry_Result - type: object - required: - - goal - title: Dry - type: object - type: Dry - HydrogenateProtocol: - feedback: {} - goal: - temp: temp - time: time - vessel: vessel - goal_default: - temp: '' - time: '' - vessel: '' - handles: - input: - - data_key: vessel - data_source: handle - data_type: resource - handler_key: Vessel - label: Vessel - output: - - data_key: vessel - data_source: executor - data_type: resource - handler_key: VesselOut - label: Vessel - result: {} - schema: - description: ROS Action Hydrogenate 的 JSON Schema - properties: - feedback: - description: Action 反馈 - 执行过程中从服务器发送到客户端 - properties: - status: - type: string - progress: - type: number - required: - - status - - progress - title: Hydrogenate_Feedback - type: object - goal: - description: Action 目标 - 从客户端发送到服务器 - properties: - temp: - type: string - time: - type: string - vessel: - type: string - required: - - temp - - time - - vessel - title: Hydrogenate_Goal - type: object - result: - description: Action 结果 - 完成后从服务器发送到客户端 - properties: - message: - type: string - return_info: - type: string - success: - type: boolean - required: - - success - - message - - return_info - title: Hydrogenate_Result - type: object - required: - - goal - title: Hydrogenate - type: object - type: Hydrogenate - RecrystallizeProtocol: - feedback: {} - goal: - ratio: ratio - solvent1: solvent1 - solvent2: solvent2 - vessel: vessel - volume: volume - goal_default: - ratio: 1.0 - solvent1: '' - solvent2: '' - vessel: '' - volume: 0.0 - handles: - input: - - data_key: vessel - data_source: handle - data_type: resource - handler_key: Vessel - label: Vessel - - data_key: solvent1 - data_source: handle - data_type: resource - handler_key: solvent1 - label: Solvent 1 - - data_key: solvent2 - data_source: handle - data_type: resource - handler_key: solvent2 - label: Solvent 2 - output: - - data_key: vessel - data_source: executor - data_type: resource - handler_key: VesselOut - label: Vessel - result: {} - schema: - description: ROS Action Recrystallize 的 JSON Schema - properties: - feedback: - description: Action 反馈 - 执行过程中从服务器发送到客户端 - properties: - progress: - type: number - status: - type: string - required: - - status - - progress - title: Recrystallize_Feedback - type: object - goal: - description: Action 目标 - 从客户端发送到服务器 - properties: - ratio: - type: number - solvent1: - type: string - solvent2: - type: string - vessel: - type: string - volume: - type: number - required: - - ratio - - solvent1 - - solvent2 - - vessel - - volume - title: Recrystallize_Goal - type: object - result: - description: Action 结果 - 完成后从服务器发送到客户端 - properties: - message: - type: string - return_info: - type: string - success: - type: boolean - required: - - success - - message - - return_info - title: Recrystallize_Result - type: object - required: - - goal - title: Recrystallize - type: object - type: Recrystallize module: unilabos.ros.nodes.presets.protocol_node:ROS2ProtocolNode status_types: {} type: ros2 diff --git a/unilabos_msgs/CMakeLists.txt b/unilabos_msgs/CMakeLists.txt index 7e8a146..b2c1bc7 100644 --- a/unilabos_msgs/CMakeLists.txt +++ b/unilabos_msgs/CMakeLists.txt @@ -41,6 +41,7 @@ set(action_files "action/WashSolid.action" "action/Filter.action" "action/Add.action" + "action/AddSolid.action" "action/Centrifuge.action" "action/Crystallize.action" "action/Purge.action" diff --git a/unilabos_msgs/action/RunColumn.action b/unilabos_msgs/action/RunColumn.action index 889b4a5..1f8e9ba 100644 --- a/unilabos_msgs/action/RunColumn.action +++ b/unilabos_msgs/action/RunColumn.action @@ -2,7 +2,7 @@ string from_vessel # 源容器的名称,即样品起始所在的容器(必需) string to_vessel # 目标容器的名称,分离后的样品要到达的容器(必需) string column # 所使用的柱子的名称(必需) -string Rf # Rf值(可选) +string rf # Rf值(可选) string pct1 # 第一种溶剂百分比(如 "40 %",可选) string pct2 # 第二种溶剂百分比(如 "50 %",可选) string solvent1 # 第一种溶剂名称(可选)