# 虚拟设备清单及连接特性 # 1. virtual_pump - 虚拟泵 # 描述:具有多通道阀门特性的泵,根据valve_position可连接多个容器 # 连接特性:1个输入口 + 1个输出口(当前配置,实际应该有多个输出口) # 数据类型:fluid(流体连接) # 2. virtual_stirrer - 虚拟搅拌器 # 描述:机械连接设备,提供搅拌功能 # 连接特性:1个双向连接点(undirected) # 数据类型:mechanical(机械连接) # 3a. virtual_valve - 虚拟八通阀门 # 描述:8通阀门(实际配置为7通),可切换流向 # 连接特性:1个口连接注射泵 + 7个输出口 # 数据类型:fluid(流体连接) # 3b. virtual_solenoid_valve (电磁阀门) # 描述:简单的开关型电磁阀,只有开启和关闭两个状态 # 连接特性:1个输入口 + 1个输出口,控制通断 # 数据类型:fluid(流体连接) # 4. virtual_centrifuge - 虚拟离心机 # 描述:单个样品处理设备,原地处理样品 # 连接特性:1个输入口 + 1个输出口 # 数据类型:resource(资源/样品连接) # 5. virtual_filter - 虚拟过滤器 # 描述:分离设备,将样品分离为滤液和滤渣 # 连接特性:1个输入口 + 2个输出口(滤液和滤渣) # 数据类型:resource(资源/样品连接) # 6. virtual_heatchill - 虚拟加热/冷却器 # 描述:温控设备,容器直接放置在设备上进行温度控制 # 连接特性:1个双向连接点(undirected) # 数据类型:mechanical(机械/物理接触连接) # 7. virtual_transfer_pump - 虚拟转移泵(注射器式) # 描述:注射器式转移泵,通过同一个口吸入和排出液体 # 连接特性:1个双向连接点(undirected) # 数据类型:fluid(流体连接) # 8. virtual_column - 虚拟色谱柱 # 描述:分离纯化设备,用于样品纯化 # 连接特性:1个输入口 + 1个输出口 # 数据类型:resource(资源/样品连接) # 9. virtual_rotavap - 虚拟旋转蒸发仪 # 描述:旋转蒸发仪用于溶剂蒸发和浓缩,具有加热、旋转和真空功能 # 连接特性:1个输入口(样品),1个输出口(浓缩物),1个冷凝器出口(回收溶剂) # 数据类型:resource(资源/样品连接) # 10. virtual_separator - 虚拟分液器 # 描述:分液器用于两相液体的分离,可进行萃取和洗涤操作 # 连接特性:1个输入口(混合液),2个输出口(上相和下相) # 数据类型:fluid(流体连接) # 11. virtual_vacuum_pump - 虚拟真空泵 # 描述:真空泵设备,用于抽真空操作和真空/充气循环 # 连接特性:1个输入口(连接需要抽真空的系统) # 数据类型:fluid(流体连接) # 主要功能:开启/关闭、状态控制(ON/OFF) # 12. virtual_gas_source - 虚拟气源 # 描述:气源设备,用于充气操作和真空/充气循环 # 连接特性:1个输出口(向系统提供加压气体) # 数据类型:fluid(流体连接) # 主要功能:开启/关闭、状态控制(ON/OFF) virtual_pump: description: Virtual Pump for PumpTransferProtocol Testing #icon: 这个注册的设备应该是写错了,后续删掉 class: module: unilabos.devices.virtual.virtual_pump:VirtualPump type: python status_types: status: String position: Float64 valve_position: Int32 # 修复:使用 Int32 而不是 String max_volume: Float64 current_volume: Float64 action_value_mappings: transfer: type: PumpTransfer goal: from_vessel: from_vessel to_vessel: to_vessel volume: volume amount: amount time: time viscous: viscous rinsing_solvent: rinsing_solvent rinsing_volume: rinsing_volume rinsing_repeats: rinsing_repeats solid: solid feedback: status: status result: success: success set_valve_position: type: FloatSingleInput goal: float_in: valve_position feedback: status: status result: success: success # 虚拟泵节点配置 - 具有多通道阀门特性,根据valve_position可连接多个容器 handles: - handler_key: pumpio label: pumpio data_type: fluid io_type: source data_source: handle data_key: fluid_in description: "泵的进液口,连接源容器" schema: type: object properties: port: type: string default: "VIRTUAL" max_volume: type: number default: 25.0 additionalProperties: false virtual_stirrer: description: Virtual Stirrer for StirProtocol Testing icon: Stirrer.webp class: module: unilabos.devices.virtual.virtual_stirrer:VirtualStirrer type: python status_types: status: String operation_mode: String # 操作模式 current_vessel: String # 当前容器 current_speed: Float64 # 当前搅拌速度 is_stirring: Bool # 是否搅拌 remaining_time: Float64 # 剩余时间 action_value_mappings: stir: type: Stir goal: stir_time: stir_time stir_speed: stir_speed settling_time: settling_time feedback: status: status result: success: success start_stir: type: StartStir goal: vessel: vessel stir_speed: stir_speed purpose: purpose feedback: status: status result: success: success stop_stir: type: StopStir goal: vessel: vessel feedback: status: status result: success: success # 虚拟搅拌器节点配置 - 机械连接设备,双向连接点用于搅拌容器 handles: - handler_key: stirrer label: stirrer data_type: mechanical side: NORTH io_type: undirected data_source: handle data_key: vessel description: "搅拌器的机械连接口,容器通过机械连接进行搅拌" schema: type: object properties: port: type: string default: "VIRTUAL" max_speed: type: number default: 1500.0 min_speed: type: number default: 50.0 additionalProperties: false virtual_multiway_valve: description: Virtual 8-Way Valve for flow direction control icon: EightPipeline.webp class: module: unilabos.devices.virtual.virtual_multiway_valve:VirtualMultiwayValve type: python status_types: status: String valve_state: String current_position: Int32 target_position: Int32 max_positions: Int32 action_value_mappings: set_position: type: SendCmd goal: command: command feedback: {} result: success: success set_valve_position: type: SendCmd goal: command: command feedback: {} result: success: success # 八通阀门节点配置 - 1个输入口,8个输出口,可切换流向 handles: - handler_key: transferpump label: transferpump data_type: fluid side: NORTH io_type: target data_source: handle data_key: fluid_in description: "八通阀门进液口,接收来源流体" - handler_key: 1 label: 1 data_type: fluid side: NORTH io_type: source data_source: executor data_key: fluid_port_1 description: "八通阀门端口1,position=1时流体从此口流出" - handler_key: 2 label: 2 data_type: fluid side: EAST io_type: source data_source: executor data_key: fluid_port_2 description: "八通阀门端口2,position=2时流体从此口流出" - handler_key: 3 label: 3 data_type: fluid side: EAST io_type: source data_source: executor data_key: fluid_port_3 description: "八通阀门端口3,position=3时流体从此口流出" - handler_key: 4 label: 4 data_type: fluid side: SOUTH io_type: source data_source: executor data_key: fluid_port_4 description: "八通阀门端口4,position=4时流体从此口流出" - handler_key: 5 label: 5 data_type: fluid side: SOUTH io_type: source data_source: executor data_key: fluid_port_5 description: "八通阀门端口5,position=5时流体从此口流出" - handler_key: 7 label: 7 data_type: fluid side: WEST io_type: source data_source: executor data_key: fluid_port_7 description: "八通阀门端口7,position=7时流体从此口流出" - handler_key: 6 label: 6 data_type: fluid side: WEST io_type: source data_source: executor data_key: fluid_port_6 description: "八通阀门端口6,position=6时流体从此口流出" - handler_key: 8 label: 8 data_type: fluid side: NORTH io_type: source data_source: executor data_key: fluid_port_8 description: "八通阀门端口8,position=8时流体从此口流出" schema: type: object properties: port: type: string default: "VIRTUAL" positions: type: integer default: 8 additionalProperties: false virtual_solenoid_valve: description: Virtual Solenoid Valve for simple on/off flow control #icon: SolenoidValve.webp暂时还没有 class: module: unilabos.devices.virtual.virtual_solenoid_valve:VirtualSolenoidValve type: python status_types: status: String valve_state: String # "open" or "closed" is_open: Bool action_value_mappings: set_valve_position: type: SendCmd goal: command: command # 确保参数名匹配 feedback: {} result: success: success open: type: SendCmd goal: command: "OPEN" feedback: {} result: success: success close: type: SendCmd goal: command: "CLOSED" feedback: {} result: success: success set_state: type: SendCmd goal: command: command feedback: {} result: success: success # 电磁阀门节点配置 - 双向流通的开关型阀门,流动方向由泵决定 handles: - handler_key: inlet label: inlet data_type: fluid side: NORTH io_type: target data_source: handle data_key: fluid_port_in description: "电磁阀的进液口" - handler_key: outlet label: outlet data_type: fluid side: SOUTH io_type: source data_source: handle data_key: fluid_port_out description: "电磁阀的出液口" schema: type: object properties: port: type: string default: "VIRTUAL" voltage: type: number default: 12.0 response_time: type: number default: 0.1 additionalProperties: false virtual_centrifuge: description: Virtual Centrifuge for CentrifugeProtocol Testing #icon: Centrifuge.webp暂时还没有 class: module: unilabos.devices.virtual.virtual_centrifuge:VirtualCentrifuge type: python status_types: status: String current_speed: Float64 target_speed: Float64 current_temp: Float64 target_temp: Float64 max_speed: Float64 max_temp: Float64 min_temp: Float64 centrifuge_state: String time_remaining: Float64 progress: Float64 # 添加这个状态 message: String # 添加这个状态 action_value_mappings: centrifuge: type: Centrifuge goal: vessel: vessel speed: speed time: time temp: temp feedback: progress: progress current_speed: current_speed current_temp: current_temp current_status: status result: success: success message: message # 虚拟离心机节点配置 - 单个样品处理设备,输入输出都是同一个样品容器 handles: - handler_key: centrifuge label: centrifuge data_type: transport side: NORTH io_type: target data_source: handle data_key: vessel description: "需要离心的样品容器" schema: type: object properties: port: type: string default: "VIRTUAL" max_speed: type: number default: 15000.0 max_temp: type: number default: 40.0 min_temp: type: number default: 4.0 additionalProperties: false virtual_filter: description: Virtual Filter for FilterProtocol Testing #icon: Filter.webp暂时还没有 class: module: unilabos.devices.virtual.virtual_filter:VirtualFilter type: python status_types: status: String progress: Float64 current_temp: Float64 filtered_volume: Float64 current_status: String message: String max_temp: Float64 max_stir_speed: Float64 max_volume: Float64 action_value_mappings: filter: type: Filter goal: vessel: vessel filtrate_vessel: filtrate_vessel stir: stir stir_speed: stir_speed temp: temp continue_heatchill: continue_heatchill volume: volume feedback: progress: progress current_temp: current_temp filtered_volume: filtered_volume current_status: current_status result: success: success message: message return_info: message # 过滤器节点配置 - 固液分离设备 handles: - handler_key: filter label: filter data_type: transport side: NORTH io_type: source data_source: handle data_key: vessel description: "需要过滤的样品容器" schema: type: object properties: port: type: string default: "VIRTUAL" max_temp: type: number default: 100.0 max_stir_speed: type: number default: 1000.0 max_volume: type: number default: 500.0 additionalProperties: false virtual_heatchill: description: Virtual HeatChill for HeatChillProtocol Testing icon: Heater.webp class: module: unilabos.devices.virtual.virtual_heatchill:VirtualHeatChill type: python status_types: status: String operation_mode: String # 保留:操作模式 is_stirring: Bool # 保留:是否搅拌 stir_speed: Float64 # 保留:搅拌速度 # remaining_time: Float64 # 保留:剩余时间 action_value_mappings: heat_chill: type: HeatChill goal: vessel: vessel temp: temp time: time stir: stir stir_speed: stir_speed purpose: purpose feedback: status: status result: success: success heat_chill_start: type: HeatChillStart goal: vessel: vessel temp: temp purpose: purpose feedback: status: status result: success: success heat_chill_stop: type: HeatChillStop goal: vessel: vessel feedback: status: status result: success: success # 虚拟加热/冷却器节点配置 handles: - handler_key: heatchill label: heatchill data_type: mechanical side: NORTH io_type: source data_source: handle data_key: vessel description: "加热/冷却器的物理连接口,容器直接放置在设备上进行温度控制" schema: type: object properties: port: type: string default: "VIRTUAL" max_temp: type: number default: 200.0 min_temp: type: number default: -80 max_stir_speed: type: number default: 1000.0 additionalProperties: false virtual_transfer_pump: description: Virtual Transfer Pump for TransferProtocol Testing (Syringe-style) icon: Pump.webp class: module: unilabos.devices.virtual.virtual_transferpump:VirtualTransferPump type: python status_types: status: String current_volume: Float64 max_volume: Float64 transfer_rate: Float64 position: Float64 action_value_mappings: transfer: type: Transfer goal: from_vessel: from_vessel to_vessel: to_vessel volume: volume amount: amount time: time viscous: viscous rinsing_solvent: rinsing_solvent rinsing_volume: rinsing_volume rinsing_repeats: rinsing_repeats solid: solid feedback: progress: progress transferred_volume: transferred_volume current_status: current_status result: success: success message: message set_position: type: SetPumpPosition # ← 使用新的动作类型 goal: position: position # ← 直接映射参数名 max_velocity: max_velocity # ← 直接映射参数名 feedback: status: status current_position: current_position progress: progress result: success: success message: message # 注射器式转移泵节点配置 - 只有一个双向连接口,可吸入和排出液体 handles: - handler_key: transferpump label: transferpump data_type: fluid side: SOUTH io_type: source data_source: handle data_key: fluid_port description: "注射器式转移泵的唯一连接口,通过阀门切换实现吸入和排出" schema: type: object properties: port: type: string default: "VIRTUAL" description: "通信端口" max_volume: type: number default: 50.0 description: "最大注射器容量 (mL)" transfer_rate: type: number default: 5.0 description: "默认转移速率 (mL/s)" additionalProperties: false virtual_column: description: Virtual Column Chromatography Device for RunColumn Protocol Testing #icon: Column.webp暂时还没有 class: module: unilabos.devices.virtual.virtual_column:VirtualColumn type: python status_types: status: String column_state: String current_flow_rate: Float64 max_flow_rate: Float64 column_length: Float64 column_diameter: Float64 processed_volume: Float64 progress: Float64 current_status: String action_value_mappings: run_column: type: RunColumn goal: from_vessel: from_vessel to_vessel: to_vessel column: column feedback: progress: progress processed_volume: processed_volume current_status: current_status result: success: success message: current_status return_info: current_status # 柱层析设备节点配置 - 色谱分离设备 handles: - handler_key: columnin label: columnin data_type: transport side: WEST io_type: sink data_source: handle data_key: from_vessel description: "样品输入口" - handler_key: columnout label: columnout data_type: transport side: EAST io_type: source data_source: handle data_key: to_vessel description: "产物输出口" schema: type: object properties: port: type: string default: "VIRTUAL" max_flow_rate: type: number default: 10.0 column_length: type: number default: 25.0 column_diameter: type: number default: 2.0 additionalProperties: false virtual_rotavap: description: Virtual Rotary Evaporator for EvaporateProtocol Testing icon: Rotaryevaporator.webp class: module: unilabos.devices.virtual.virtual_rotavap:VirtualRotavap type: python status_types: status: String rotavap_state: String current_temp: Float64 rotation_speed: Float64 vacuum_pressure: Float64 evaporated_volume: Float64 progress: Float64 remaining_time: Float64 message: String max_temp: Float64 max_rotation_speed: Float64 action_value_mappings: evaporate: type: Evaporate goal: vessel: vessel pressure: pressure temp: temp time: time stir_speed: stir_speed feedback: progress: progress current_temp: current_temp evaporated_volume: evaporated_volume status: status result: success: success message: message # 虚拟旋转蒸发仪节点配置 - 1个样品口 handles: - handler_key: rotavap-sample label: rotavap-sample data_type: fluid side: NORTH io_type: target data_source: handle data_key: vessel description: "样品连接口,放入需要蒸发的样品" schema: type: object properties: port: type: string default: "VIRTUAL" max_temp: type: number default: 180.0 max_rotation_speed: type: number default: 280.0 additionalProperties: false virtual_separator: description: Virtual Separator for SeparateProtocol Testing icon: Separator.webp class: module: unilabos.devices.virtual.virtual_separator:VirtualSeparator type: python status_types: status: String separator_state: String volume: Float64 has_phases: Bool phase_separation: Bool stir_speed: Float64 settling_time: Float64 progress: Float64 message: String action_value_mappings: separate: type: Separate goal: purpose: purpose product_phase: product_phase from_vessel: from_vessel separation_vessel: separation_vessel to_vessel: to_vessel waste_phase_to_vessel: waste_phase_to_vessel solvent: solvent solvent_volume: solvent_volume through: through repeats: repeats stir_time: stir_time stir_speed: stir_speed settling_time: settling_time feedback: progress: progress current_status: status result: success: success message: message # 虚拟分液器节点配置 - 分离设备,1个输入口(混合液),2个输出口(上相和下相) handles: - handler_key: separatorin label: separatorin data_type: fluid side: NORTH io_type: target data_source: handle data_key: from_vessel description: "需要分离的混合液体输入口" - handler_key: separatorout label: separatorout data_type: fluid side: SOUTH io_type: source data_source: executor data_key: bottom_outlet description: "下相(重相)液体输出口" schema: type: object properties: port: type: string default: "VIRTUAL" volume: type: number default: 250.0 has_phases: type: boolean default: true additionalProperties: false virtual_vacuum_pump: description: Virtual vacuum pump icon: Vacuum.webp class: module: unilabos.devices.virtual.virtual_vacuum_pump:VirtualVacuumPump type: python status_types: status: String action_value_mappings: open: type: EmptyIn goal: {} feedback: {} result: {} close: type: EmptyIn goal: {} feedback: {} result: {} set_status: type: StrSingleInput goal: string: string feedback: {} result: {} # 虚拟真空泵节点配置 - 真空设备,1个输入口连接需要抽真空的系统 handles: - handler_key: vacuumpump label: vacuumpump data_type: fluid side: SOUTH io_type: source data_source: handle data_key: fluid_in description: "真空泵进气口,连接需要抽真空的容器或管路" schema: type: object properties: port: type: string default: "VIRTUAL" description: "通信端口" additionalProperties: false virtual_gas_source: description: Virtual gas source #icon: GasSource.webp暂时还没有 class: module: unilabos.devices.virtual.virtual_gas_source:VirtualGasSource type: python status_types: status: String action_value_mappings: open: type: EmptyIn goal: {} feedback: {} result: {} close: type: EmptyIn goal: {} feedback: {} result: {} set_status: type: StrSingleInput goal: string: string feedback: {} result: {} # 虚拟气源节点配置 - 气体供应设备,1个输出口提供加压气体 handles: - handler_key: gassource label: gassource data_type: fluid side: SOUTH io_type: source data_source: executor data_key: fluid_out description: "气源出气口,向容器或管路提供加压气体" schema: type: object properties: port: type: string default: "VIRTUAL" description: "通信端口" gas_type: type: string default: "nitrogen" description: "气体类型" max_pressure: type: number default: 5.0 description: "最大输出压力 (bar)" additionalProperties: false