diff --git a/unilabos/app/main.py b/unilabos/app/main.py index 6b507c6e..fa7bc35d 100644 --- a/unilabos/app/main.py +++ b/unilabos/app/main.py @@ -247,6 +247,12 @@ def parse_args(): default=False, help="Run in check mode for CI: validates registry imports and ensures no file changes", ) + parser.add_argument( + "--complete_registry", + action="store_true", + default=False, + help="Complete and rewrite YAML registry files using AST analysis results", + ) parser.add_argument( "--no_update_feedback", action="store_true", @@ -491,11 +497,13 @@ def main(): # Step 0: AST 分析优先 + YAML 注册表加载 # check_mode 和 upload_registry 都会执行实际 import 验证 devices_dirs = args_dict.get("devices", None) + complete_registry = args_dict.get("complete_registry", False) or check_mode lab_registry = build_registry( registry_paths=args_dict["registry_path"], devices_dirs=devices_dirs, upload_registry=BasicConfig.upload_registry, check_mode=check_mode, + complete_registry=complete_registry, ) # Check mode: 注册表验证完成后直接退出 diff --git a/unilabos/app/register.py b/unilabos/app/register.py index 69355da9..5940364e 100644 --- a/unilabos/app/register.py +++ b/unilabos/app/register.py @@ -1,19 +1,8 @@ -import json import time from typing import Any, Dict, Optional, Tuple from unilabos.utils.log import logger -from unilabos.utils.type_check import TypeEncoder - -try: - import orjson - - def _normalize_device(info: dict) -> dict: - """Serialize via orjson to strip non-JSON types (type objects etc.).""" - return orjson.loads(orjson.dumps(info, default=str)) -except ImportError: - def _normalize_device(info: dict) -> dict: - return json.loads(json.dumps(info, ensure_ascii=False, cls=TypeEncoder)) +from unilabos.utils.tools import normalize_json as _normalize_device def register_devices_and_resources(lab_registry, gather_only=False) -> Optional[Tuple[Dict[str, Any], Dict[str, Any]]]: diff --git a/unilabos/app/web/client.py b/unilabos/app/web/client.py index 41e32514..b1cc67eb 100644 --- a/unilabos/app/web/client.py +++ b/unilabos/app/web/client.py @@ -8,24 +8,7 @@ import json import os from typing import List, Dict, Any, Optional -try: - import orjson as _json_fast - - def _fast_dumps(obj, **kwargs) -> bytes: - return _json_fast.dumps(obj, option=_json_fast.OPT_NON_STR_KEYS, default=str) - - def _fast_dumps_pretty(obj, **kwargs) -> bytes: - return _json_fast.dumps( - obj, option=_json_fast.OPT_NON_STR_KEYS | _json_fast.OPT_INDENT_2, default=str, - ) -except ImportError: - _json_fast = None # type: ignore[assignment] - - def _fast_dumps(obj, **kwargs) -> bytes: - return json.dumps(obj, ensure_ascii=False, default=str).encode("utf-8") - - def _fast_dumps_pretty(obj, **kwargs) -> bytes: - return json.dumps(obj, indent=2, ensure_ascii=False, default=str).encode("utf-8") +from unilabos.utils.tools import fast_dumps as _fast_dumps, fast_dumps_pretty as _fast_dumps_pretty import requests from unilabos.resources.resource_tracker import ResourceTreeSet diff --git a/unilabos/registry/ast_registry_scanner.py b/unilabos/registry/ast_registry_scanner.py index 2fa87873..86c3602e 100644 --- a/unilabos/registry/ast_registry_scanner.py +++ b/unilabos/registry/ast_registry_scanner.py @@ -839,24 +839,39 @@ def _extract_class_body( if _has_decorator(item, "not_action") and _is_registry_decorator("not_action", import_map): continue + # --- get_ 前缀且无额外参数(仅 self)→ status property --- + if method_name.startswith("get_"): + real_args = [a for a in item.args.args if a.arg != "self"] + if len(real_args) == 0: + prop_name = method_name[4:] + return_type = _get_annotation_str(item.returns, import_map) + if prop_name not in result["status_properties"]: + result["status_properties"][prop_name] = { + "name": prop_name, + "return_type": return_type, + "is_property": False, + "topic_config": None, + } + continue + # --- Public method without @action => auto-action --- - # Skip lifecycle / dunder methods that should never be auto-actions if method_name in ("post_init", "__str__", "__repr__"): continue - # 'close' and 'cleanup' could be actions in some drivers -- keep them - method_params = _extract_method_params(item, import_map) return_type = _get_annotation_str(item.returns, import_map) is_async = isinstance(item, ast.AsyncFunctionDef) method_doc = ast.get_docstring(item) - result["auto_methods"][method_name] = { + auto_entry: dict = { "params": method_params, "return_type": return_type, "is_async": is_async, "docstring": method_doc, } + if _has_decorator(item, "always_free") and _is_registry_decorator("always_free", import_map): + auto_entry["always_free"] = True + result["auto_methods"][method_name] = auto_entry return result diff --git a/unilabos/registry/devices/Qone_nmr.yaml b/unilabos/registry/devices/Qone_nmr.yaml index fa182c77..5c5f1f8a 100644 --- a/unilabos/registry/devices/Qone_nmr.yaml +++ b/unilabos/registry/devices/Qone_nmr.yaml @@ -13,21 +13,18 @@ Qone_nmr: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Feedback type: object goal: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Goal type: object result: + additionalProperties: false properties: return_info: type: string - required: - - return_info title: EmptyIn_Result type: object required: @@ -71,31 +68,6 @@ Qone_nmr: title: monitor_folder_for_new_content参数 type: object type: UniLabJsonCommand - auto-post_init: - feedback: {} - goal: {} - goal_default: - ros_node: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - ros_node: - type: string - required: - - ros_node - type: object - result: {} - required: - - goal - title: post_init参数 - type: object - type: UniLabJsonCommand auto-strings_to_txt: feedback: {} goal: {} @@ -138,21 +110,18 @@ Qone_nmr: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Feedback type: object goal: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Goal type: object result: + additionalProperties: false properties: return_info: type: string - required: - - return_info title: EmptyIn_Result type: object required: @@ -167,32 +136,31 @@ Qone_nmr: goal_default: string: '' handles: {} - result: {} + placeholder_keys: {} + result: + return_info: return_info + success: success schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: StrSingleInput_Feedback type: object goal: + additionalProperties: false properties: string: type: string - required: - - string title: StrSingleInput_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: StrSingleInput_Result type: object required: diff --git a/unilabos/registry/devices/bioyond_cell.yaml b/unilabos/registry/devices/bioyond_cell.yaml index fc4b75cb..f57cd35c 100644 --- a/unilabos/registry/devices/bioyond_cell.yaml +++ b/unilabos/registry/devices/bioyond_cell.yaml @@ -22,7 +22,8 @@ bioyond_cell: required: - xlsx_path type: object - result: {} + result: + type: object required: - goal title: auto_batch_outbound_from_xlsx参数 @@ -490,7 +491,9 @@ bioyond_cell: goal: properties: material_names: - type: string + items: + type: string + type: array type_id: default: 3a190ca0-b2f6-9aeb-8067-547e72c11469 type: string @@ -499,7 +502,8 @@ bioyond_cell: type: string required: [] type: object - result: {} + result: + type: object required: - goal title: create_and_inbound_materials参数 @@ -535,7 +539,8 @@ bioyond_cell: - type_id - warehouse_name type: object - result: {} + result: + type: object required: - goal title: create_material参数 @@ -556,11 +561,16 @@ bioyond_cell: goal: properties: mappings: + additionalProperties: + type: object type: object required: - mappings type: object - result: {} + result: + items: + type: object + type: array required: - goal title: create_materials参数 @@ -592,7 +602,8 @@ bioyond_cell: required: - xlsx_path type: object - result: {} + result: + type: object required: - goal title: create_orders参数 @@ -624,7 +635,8 @@ bioyond_cell: required: - xlsx_path type: object - result: {} + result: + type: object required: - goal title: create_orders_v2参数 @@ -665,7 +677,8 @@ bioyond_cell: - bottle_type - location_code type: object - result: {} + result: + type: object required: - goal title: create_sample参数 @@ -718,7 +731,8 @@ bioyond_cell: type: string required: [] type: object - result: {} + result: + type: object required: - goal title: order_list_v2参数 @@ -821,7 +835,8 @@ bioyond_cell: required: - material_obj type: object - result: {} + result: + type: object required: - goal title: report_material_change参数 @@ -875,7 +890,8 @@ bioyond_cell: properties: {} required: [] type: object - result: {} + result: + type: object required: - goal title: scheduler_continue参数 @@ -896,7 +912,8 @@ bioyond_cell: properties: {} required: [] type: object - result: {} + result: + type: object required: - goal title: scheduler_reset参数 @@ -917,7 +934,8 @@ bioyond_cell: properties: {} required: [] type: object - result: {} + result: + type: object required: - goal title: scheduler_start参数 @@ -1362,7 +1380,8 @@ bioyond_cell: type: string required: [] type: object - result: {} + result: + type: object required: - goal title: scheduler_start_and_auto_feeding参数 @@ -1807,7 +1826,8 @@ bioyond_cell: type: string required: [] type: object - result: {} + result: + type: object required: - goal title: scheduler_start_and_auto_feeding_v2参数 @@ -1828,7 +1848,8 @@ bioyond_cell: properties: {} required: [] type: object - result: {} + result: + type: object required: - goal title: scheduler_stop参数 @@ -1850,12 +1871,15 @@ bioyond_cell: properties: items: items: + additionalProperties: + type: string type: object type: array required: - items type: object - result: {} + result: + type: object required: - goal title: storage_batch_inbound参数 @@ -1884,7 +1908,8 @@ bioyond_cell: - material_id - location_id type: object - result: {} + result: + type: object required: - goal title: storage_inbound参数 @@ -1905,7 +1930,8 @@ bioyond_cell: properties: {} required: [] type: object - result: {} + result: + type: object required: - goal title: transfer_1_to_2参数 @@ -1946,7 +1972,8 @@ bioyond_cell: type: integer required: [] type: object - result: {} + result: + type: object required: - goal title: transfer_3_to_2参数 @@ -1983,7 +2010,8 @@ bioyond_cell: type: integer required: [] type: object - result: {} + result: + type: object required: - goal title: transfer_3_to_2_to_1参数 @@ -2007,10 +2035,11 @@ bioyond_cell: ip: type: string port: - type: string + type: integer required: [] type: object - result: {} + result: + type: object required: - goal title: update_push_ip参数 @@ -2039,7 +2068,8 @@ bioyond_cell: required: - order_code type: object - result: {} + result: + type: object required: - goal title: wait_for_order_finish参数 @@ -2072,7 +2102,8 @@ bioyond_cell: required: - order_code type: object - result: {} + result: + type: object required: - goal title: wait_for_order_finish_polling参数 @@ -2104,7 +2135,8 @@ bioyond_cell: type: integer required: [] type: object - result: {} + result: + type: boolean required: - goal title: wait_for_transfer_task参数 @@ -2112,8 +2144,7 @@ bioyond_cell: type: UniLabJsonCommand module: unilabos.devices.workstation.bioyond_studio.bioyond_cell.bioyond_cell_workstation:BioyondCellWorkstation status_types: - device_id: String - material_info: dict + device_id: '' type: python config_info: [] description: '' @@ -2134,11 +2165,7 @@ bioyond_cell: properties: device_id: type: string - material_info: - type: object required: - device_id - - material_info type: object - registry_type: device version: 1.0.0 diff --git a/unilabos/registry/devices/bioyond_dispensing_station.yaml b/unilabos/registry/devices/bioyond_dispensing_station.yaml index 7b9ebc90..547b54ff 100644 --- a/unilabos/registry/devices/bioyond_dispensing_station.yaml +++ b/unilabos/registry/devices/bioyond_dispensing_station.yaml @@ -24,7 +24,8 @@ bioyond_dispensing_station: required: - data type: object - result: {} + result: + type: object required: - goal title: brief_step_parameters参数 @@ -53,7 +54,8 @@ bioyond_dispensing_station: - report_request - used_materials type: object - result: {} + result: + type: object required: - goal title: process_order_finish_report参数 @@ -78,7 +80,8 @@ bioyond_dispensing_station: required: - order_id type: object - result: {} + result: + type: object required: - goal title: project_order_report参数 @@ -128,7 +131,8 @@ bioyond_dispensing_station: required: - workflow_id type: object - result: {} + result: + type: object required: - goal title: workflow_sample_locations参数 @@ -144,12 +148,12 @@ bioyond_dispensing_station: temperature: temperature titration: titration goal_default: - delay_time: '600' - hold_m_name: '' + delay_time: null + hold_m_name: null liquid_material_name: NMP - speed: '400' - temperature: '40' - titration: '' + speed: null + temperature: null + titration: null handles: input: - data_key: titration @@ -165,20 +169,16 @@ bioyond_dispensing_station: handler_key: BATCH_CREATE_RESULT io_type: sink label: Complete Batch Create Result JSON (contains order_codes and order_ids) - result: - return_info: return_info + placeholder_keys: {} + result: {} schema: description: 批量创建90%10%小瓶投料任务。从计算节点接收titration数据,包含物料名称、主称固体质量、滴定固体质量和滴定溶剂体积。返回的return_info中包含order_codes和order_ids列表。 properties: feedback: - properties: {} - required: [] title: BatchCreate9010VialFeedingTasks_Feedback - type: object goal: properties: delay_time: - default: '600' description: 延迟时间(秒),默认600 type: string hold_m_name: @@ -189,11 +189,9 @@ bioyond_dispensing_station: description: 10%物料的液体物料名称,默认为"NMP" type: string speed: - default: '400' description: 搅拌速度,默认400 type: string temperature: - default: '40' description: 温度(℃),默认40 type: string titration: @@ -202,21 +200,14 @@ bioyond_dispensing_station: type: string required: - titration - - hold_m_name title: BatchCreate9010VialFeedingTasks_Goal type: object result: - properties: - return_info: - description: 批量任务创建结果汇总JSON字符串,包含total(总数)、success(成功数)、failed(失败数)、order_codes(任务编码数组)、order_ids(任务ID数组)、details(每个任务的详细信息) - type: string - required: - - return_info title: BatchCreate9010VialFeedingTasks_Result - type: object + type: string required: - goal - title: BatchCreate9010VialFeedingTasks + title: batch_create_90_10_vial_feeding_tasks参数 type: object type: UniLabJsonCommand batch_create_diamine_solution_tasks: @@ -228,11 +219,11 @@ bioyond_dispensing_station: speed: speed temperature: temperature goal_default: - delay_time: '600' + delay_time: null liquid_material_name: NMP - solutions: '' - speed: '400' - temperature: '20' + solutions: null + speed: null + temperature: null handles: input: - data_key: solutions @@ -248,20 +239,16 @@ bioyond_dispensing_station: handler_key: BATCH_CREATE_RESULT io_type: sink label: Complete Batch Create Result JSON (contains order_codes and order_ids) - result: - return_info: return_info + placeholder_keys: {} + result: {} schema: description: 批量创建二胺溶液配置任务。自动为多个二胺样品创建溶液配置任务,每个任务包含固体物料称量、溶剂添加、搅拌混合等步骤。返回的return_info中包含order_codes和order_ids列表。 properties: feedback: - properties: {} - required: [] title: BatchCreateDiamineSolutionTasks_Feedback - type: object goal: properties: delay_time: - default: '600' description: 溶液配置完成后的延迟时间(秒),用于充分混合和溶解,默认600秒 type: string liquid_material_name: @@ -275,11 +262,9 @@ bioyond_dispensing_station: 4.5, "solvent_volume": 18}]' type: string speed: - default: '400' description: 搅拌速度(rpm),用于混合溶液,默认400转/分钟 type: string temperature: - default: '20' description: 配置温度(℃),溶液配置过程的目标温度,默认20℃(室温) type: string required: @@ -287,17 +272,11 @@ bioyond_dispensing_station: title: BatchCreateDiamineSolutionTasks_Goal type: object result: - properties: - return_info: - description: 批量任务创建结果汇总JSON字符串,包含total(总数)、success(成功数)、failed(失败数)、order_codes(任务编码数组)、order_ids(任务ID数组)、details(每个任务的详细信息) - type: string - required: - - return_info title: BatchCreateDiamineSolutionTasks_Result - type: object + type: string required: - goal - title: BatchCreateDiamineSolutionTasks + title: batch_create_diamine_solution_tasks参数 type: object type: UniLabJsonCommand compute_experiment_design: @@ -309,7 +288,7 @@ bioyond_dispensing_station: wt_percent: wt_percent goal_default: m_tot: '70' - ratio: '' + ratio: null titration_percent: '0.03' wt_percent: '0.25' handles: @@ -338,12 +317,8 @@ bioyond_dispensing_station: handler_key: feeding_order io_type: sink label: Feeding Order Data From Calculation Node - result: - feeding_order: feeding_order - return_info: return_info - solutions: solutions - solvents: solvents - titration: titration + placeholder_keys: {} + result: {} schema: description: 计算实验设计,输出solutions/titration/solvents/feeding_order用于后续节点。 properties: @@ -356,7 +331,7 @@ bioyond_dispensing_station: type: string ratio: description: 组分摩尔比的对象,保持输入顺序,如{"MDA":1,"BTDA":1} - type: string + type: object titration_percent: default: '0.03' description: 滴定比例(10%部分) @@ -371,14 +346,23 @@ bioyond_dispensing_station: result: properties: feeding_order: + items: {} + title: Feeding Order type: array return_info: + title: Return Info type: string solutions: + items: {} + title: Solutions type: array solvents: + additionalProperties: true + title: Solvents type: object titration: + additionalProperties: true + title: Titration type: object required: - solutions @@ -386,11 +370,11 @@ bioyond_dispensing_station: - solvents - feeding_order - return_info - title: ComputeExperimentDesign_Result + title: ComputeExperimentDesignReturn type: object required: - goal - title: ComputeExperimentDesign + title: compute_experiment_design参数 type: object type: UniLabJsonCommand create_90_10_vial_feeding_task: @@ -444,17 +428,18 @@ bioyond_dispensing_station: speed: '' temperature: '' handles: {} + placeholder_keys: {} result: return_info: return_info schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: DispenStationVialFeed_Feedback type: object goal: + additionalProperties: false properties: delay_time: type: string @@ -502,38 +487,13 @@ bioyond_dispensing_station: type: string temperature: type: string - required: - - order_name - - percent_90_1_assign_material_name - - percent_90_1_target_weigh - - percent_90_2_assign_material_name - - percent_90_2_target_weigh - - percent_90_3_assign_material_name - - percent_90_3_target_weigh - - percent_10_1_assign_material_name - - percent_10_1_target_weigh - - percent_10_1_volume - - percent_10_1_liquid_material_name - - percent_10_2_assign_material_name - - percent_10_2_target_weigh - - percent_10_2_volume - - percent_10_2_liquid_material_name - - percent_10_3_assign_material_name - - percent_10_3_target_weigh - - percent_10_3_volume - - percent_10_3_liquid_material_name - - speed - - temperature - - delay_time - - hold_m_name title: DispenStationVialFeed_Goal type: object result: + additionalProperties: false properties: return_info: type: string - required: - - return_info title: DispenStationVialFeed_Result type: object required: @@ -564,17 +524,18 @@ bioyond_dispensing_station: temperature: '' volume: '' handles: {} + placeholder_keys: {} result: return_info: return_info schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: DispenStationSolnPrep_Feedback type: object goal: + additionalProperties: false properties: delay_time: type: string @@ -594,24 +555,13 @@ bioyond_dispensing_station: type: string volume: type: string - required: - - order_name - - material_name - - target_weigh - - volume - - liquid_material_name - - speed - - temperature - - delay_time - - hold_m_name title: DispenStationSolnPrep_Goal type: object result: + additionalProperties: false properties: return_info: type: string - required: - - return_info title: DispenStationSolnPrep_Result type: object required: @@ -624,8 +574,8 @@ bioyond_dispensing_station: goal: {} goal_default: {} handles: {} - result: - return_info: return_info + placeholder_keys: {} + result: {} schema: description: 启动调度器 - 启动Bioyond配液站的任务调度器,开始执行队列中的任务 properties: @@ -635,12 +585,6 @@ bioyond_dispensing_station: required: [] type: object result: - properties: - return_info: - description: 调度器启动结果,成功返回1,失败返回0 - type: integer - required: - - return_info title: scheduler_start结果 type: object required: @@ -654,8 +598,8 @@ bioyond_dispensing_station: target_device_id: target_device_id transfer_groups: transfer_groups goal_default: - target_device_id: '' - transfer_groups: '' + target_device_id: null + transfer_groups: null handles: {} placeholder_keys: target_device_id: unilabos_devices @@ -671,32 +615,13 @@ bioyond_dispensing_station: type: string transfer_groups: description: 转移任务组列表,每组包含物料名称、目标堆栈和目标库位,可以添加多组 - items: - properties: - materials: - description: 物料名称(手动输入,系统将通过RPC查询验证) - type: string - target_sites: - description: 目标库位(手动输入,如"A01") - type: string - target_stack: - description: 目标堆栈名称(从列表选择) - enum: - - 堆栈1左 - - 堆栈1右 - - 站内试剂存放堆栈 - type: string - required: - - materials - - target_stack - - target_sites - type: object type: array required: - target_device_id - transfer_groups type: object - result: {} + result: + type: object required: - goal title: transfer_materials_to_reaction_station参数 @@ -709,9 +634,9 @@ bioyond_dispensing_station: check_interval: check_interval timeout: timeout goal_default: - batch_create_result: '' - check_interval: '10' - timeout: '7200' + batch_create_result: null + check_interval: 10 + timeout: 7200 handles: input: - data_key: batch_create_result @@ -727,47 +652,35 @@ bioyond_dispensing_station: handler_key: batch_reports_result io_type: sink label: Batch Order Completion Reports - result: - return_info: return_info + placeholder_keys: {} + result: {} schema: description: 同时等待多个任务完成并获取所有实验报告。从上游batch_create任务接收包含order_codes和order_ids的结果对象,并行监控所有任务状态并返回每个任务的报告。 properties: feedback: - properties: {} - required: [] title: WaitForMultipleOrdersAndGetReports_Feedback - type: object goal: properties: batch_create_result: description: 批量创建任务的返回结果对象,包含order_codes和order_ids数组。从上游batch_create节点通过handle传递 type: string check_interval: - default: '10' + default: 10 description: 检查任务状态的时间间隔(秒),默认每10秒检查一次所有待完成任务 - type: string + type: integer timeout: - default: '7200' + default: 7200 description: 等待超时时间(秒),默认7200秒(2小时)。超过此时间未完成的任务将标记为timeout - type: string - required: - - batch_create_result + type: integer + required: [] title: WaitForMultipleOrdersAndGetReports_Goal type: object result: - properties: - return_info: - description: 'JSON格式的批量任务完成信息,包含: total(总数), completed(成功数), timeout(超时数), - error(错误数), elapsed_time(总耗时), reports(报告数组,每个元素包含order_code, - order_id, status, completion_status, report, elapsed_time)' - type: string - required: - - return_info title: WaitForMultipleOrdersAndGetReports_Result type: object required: - goal - title: WaitForMultipleOrdersAndGetReports + title: wait_for_multiple_orders_and_get_reports参数 type: object type: UniLabJsonCommand module: unilabos.devices.workstation.bioyond_studio.dispensing_station.dispensing_station:BioyondDispensingStation diff --git a/unilabos/registry/devices/camera.yaml b/unilabos/registry/devices/camera.yaml deleted file mode 100644 index c8b9d944..00000000 --- a/unilabos/registry/devices/camera.yaml +++ /dev/null @@ -1,81 +0,0 @@ -camera: - category: - - camera - class: - action_value_mappings: - auto-destroy_node: - feedback: {} - goal: {} - goal_default: {} - handles: {} - placeholder_keys: {} - result: {} - schema: - description: 用于安全地关闭摄像头设备,释放摄像头资源,停止视频采集和发布服务。调用此函数将清理OpenCV摄像头连接并销毁ROS2节点。 - properties: - feedback: {} - goal: - properties: {} - required: [] - type: object - result: {} - required: - - goal - title: destroy_node参数 - type: object - type: UniLabJsonCommand - auto-timer_callback: - feedback: {} - goal: {} - goal_default: {} - handles: {} - placeholder_keys: {} - result: {} - schema: - description: 定时器回调函数的参数schema。此函数负责定期采集摄像头视频帧,将OpenCV格式的图像转换为ROS Image消息格式,并发布到指定的视频话题。默认以10Hz频率执行,确保视频流的连续性和实时性。 - properties: - feedback: {} - goal: - properties: {} - required: [] - type: object - result: {} - required: - - goal - title: timer_callback参数 - type: object - type: UniLabJsonCommand - module: unilabos.ros.nodes.presets.camera:VideoPublisher - status_types: {} - type: ros2 - config_info: [] - description: VideoPublisher摄像头设备节点,用于实时视频采集和流媒体发布。该设备通过OpenCV连接本地摄像头(如USB摄像头、内置摄像头等),定时采集视频帧并将其转换为ROS2的sensor_msgs/Image消息格式发布到视频话题。主要用于实验室自动化系统中的视觉监控、图像分析、实时观察等应用场景。支持可配置的摄像头索引、发布频率等参数。 - handles: [] - icon: '' - init_param_schema: - config: - properties: - camera_index: - default: 0 - type: string - device_id: - default: video_publisher - type: string - device_uuid: - default: '' - type: string - period: - default: 0.1 - type: number - registry_name: - default: '' - type: string - resource_tracker: - type: object - required: [] - type: object - data: - properties: {} - required: [] - type: object - version: 1.0.0 diff --git a/unilabos/registry/devices/cameraSII.yaml b/unilabos/registry/devices/cameraSII.yaml index ad2df955..446357d0 100644 --- a/unilabos/registry/devices/cameraSII.yaml +++ b/unilabos/registry/devices/cameraSII.yaml @@ -18,7 +18,7 @@ cameracontroller_device: goal: properties: config: - type: string + type: object required: [] type: object result: {} @@ -42,7 +42,8 @@ cameracontroller_device: properties: {} required: [] type: object - result: {} + result: + type: object required: - goal title: stop参数 @@ -50,7 +51,7 @@ cameracontroller_device: type: UniLabJsonCommand module: unilabos.devices.cameraSII.cameraUSB:CameraController status_types: - status: dict + status: Dict[str, Any] type: python config_info: [] description: Uni-Lab-OS 摄像头驱动(Linux USB 摄像头版,无 PTZ) @@ -103,5 +104,4 @@ cameracontroller_device: required: - status type: object - registry_type: device version: 1.0.0 diff --git a/unilabos/registry/devices/characterization_chromatic.yaml b/unilabos/registry/devices/characterization_chromatic.yaml index f3059b58..1b33b9e2 100644 --- a/unilabos/registry/devices/characterization_chromatic.yaml +++ b/unilabos/registry/devices/characterization_chromatic.yaml @@ -141,30 +141,26 @@ hplc.agilent: description: '' properties: feedback: + additionalProperties: false properties: status: type: string - required: - - status title: SendCmd_Feedback type: object goal: + additionalProperties: false properties: command: type: string - required: - - command title: SendCmd_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: SendCmd_Result type: object required: @@ -175,7 +171,6 @@ hplc.agilent: module: unilabos.devices.hplc.AgilentHPLC:HPLCDriver status_types: could_run: bool - data_file: String device_status: str driver_init_ok: bool finish_status: str @@ -199,10 +194,6 @@ hplc.agilent: properties: could_run: type: boolean - data_file: - items: - type: string - type: array device_status: type: string driver_init_ok: @@ -216,14 +207,13 @@ hplc.agilent: success: type: boolean required: - - status_text - - device_status - could_run + - device_status - driver_init_ok - - is_running - - success - finish_status - - data_file + - is_running + - status_text + - success type: object version: 1.0.0 hplc.agilent-zhida: @@ -236,26 +226,25 @@ hplc.agilent-zhida: goal: {} goal_default: {} handles: {} - result: {} + placeholder_keys: {} + result: + return_info: return_info schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Feedback type: object goal: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Goal type: object result: + additionalProperties: false properties: return_info: type: string - required: - - return_info title: EmptyIn_Result type: object required: @@ -315,21 +304,18 @@ hplc.agilent-zhida: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Feedback type: object goal: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Goal type: object result: + additionalProperties: false properties: return_info: type: string - required: - - return_info title: EmptyIn_Result type: object required: @@ -341,35 +327,35 @@ hplc.agilent-zhida: feedback: {} goal: string: string + text: text goal_default: string: '' handles: {} - result: {} + placeholder_keys: {} + result: + return_info: return_info + success: success schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: StrSingleInput_Feedback type: object goal: + additionalProperties: false properties: string: type: string - required: - - string title: StrSingleInput_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: StrSingleInput_Result type: object required: @@ -407,7 +393,7 @@ hplc.agilent-zhida: status: type: object required: - - status - methods + - status type: object version: 1.0.0 diff --git a/unilabos/registry/devices/characterization_optic.yaml b/unilabos/registry/devices/characterization_optic.yaml index 80dcf93d..a7c0e98d 100644 --- a/unilabos/registry/devices/characterization_optic.yaml +++ b/unilabos/registry/devices/characterization_optic.yaml @@ -120,42 +120,41 @@ raman.home_made: type: object type: UniLabJsonCommand raman_cmd: - feedback: {} + feedback: + status: status goal: command: command goal_default: command: '' handles: {} + placeholder_keys: {} result: + return_info: return_info success: success schema: description: '' properties: feedback: + additionalProperties: false properties: status: type: string - required: - - status title: SendCmd_Feedback type: object goal: + additionalProperties: false properties: command: type: string - required: - - command title: SendCmd_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: SendCmd_Result type: object required: diff --git a/unilabos/registry/devices/chinwe.yaml b/unilabos/registry/devices/chinwe.yaml index 2078d0f0..ac4d00bb 100644 --- a/unilabos/registry/devices/chinwe.yaml +++ b/unilabos/registry/devices/chinwe.yaml @@ -19,7 +19,8 @@ separator.chinwe: properties: {} required: [] type: object - result: {} + result: + type: boolean required: - goal title: connect参数 @@ -65,135 +66,145 @@ separator.chinwe: required: - command_dict type: object - result: {} + result: + type: boolean required: - goal title: execute_command_from_outer参数 type: object type: UniLabJsonCommand motor_rotate_quarter: + feedback: {} goal: direction: 顺时针 motor_id: 4 speed: 60 + goal_default: + direction: 顺时针 + motor_id: null + speed: 60 handles: {} + placeholder_keys: {} + result: {} schema: description: 电机旋转 1/4 圈 properties: + feedback: {} goal: properties: direction: default: 顺时针 description: 旋转方向 - enum: - - 顺时针 - - 逆时针 type: string motor_id: - default: '4' description: 选择电机 (4:搅拌, 5:旋钮) - enum: - - '4' - - '5' - type: string + type: integer speed: default: 60 description: 速度 (RPM) type: integer required: - motor_id - - speed type: object + result: {} + required: + - goal + title: motor_rotate_quarter参数 + type: object type: UniLabJsonCommand motor_run_continuous: + feedback: {} goal: direction: 顺时针 motor_id: 4 speed: 60 + goal_default: + direction: 顺时针 + motor_id: null + speed: null handles: {} + placeholder_keys: {} + result: {} schema: description: 电机一直旋转 (速度模式) properties: + feedback: {} goal: properties: direction: default: 顺时针 description: 旋转方向 - enum: - - 顺时针 - - 逆时针 type: string motor_id: - default: '4' description: 选择电机 (4:搅拌, 5:旋钮) - enum: - - '4' - - '5' - type: string + type: integer speed: - default: 60 description: 速度 (RPM) type: integer required: - motor_id - speed type: object + result: {} + required: + - goal + title: motor_run_continuous参数 + type: object type: UniLabJsonCommand motor_stop: + feedback: {} goal: motor_id: 4 + goal_default: + motor_id: null handles: {} + placeholder_keys: {} + result: {} schema: description: 停止指定步进电机 properties: + feedback: {} goal: properties: motor_id: - default: '4' description: 选择电机 - enum: - - '4' - - '5' title: '注: 4=搅拌, 5=旋钮' - type: string + type: integer required: - motor_id type: object + result: {} + required: + - goal + title: motor_stop参数 + type: object type: UniLabJsonCommand pump_aspirate: + feedback: {} goal: pump_id: 1 valve_port: 1 volume: 1000 + goal_default: + pump_id: null + valve_port: null + volume: null handles: {} + placeholder_keys: {} + result: {} schema: description: 注射泵吸液 properties: + feedback: {} goal: properties: pump_id: - default: '1' description: 选择泵 - enum: - - '1' - - '2' - - '3' - type: string + type: integer valve_port: - default: '1' description: 阀门端口 - enum: - - '1' - - '2' - - '3' - - '4' - - '5' - - '6' - - '7' - - '8' - type: string + type: integer volume: - default: 1000 description: 吸液步数 type: integer required: @@ -201,41 +212,38 @@ separator.chinwe: - volume - valve_port type: object + result: {} + required: + - goal + title: pump_aspirate参数 + type: object type: UniLabJsonCommand pump_dispense: + feedback: {} goal: pump_id: 1 valve_port: 1 volume: 1000 + goal_default: + pump_id: null + valve_port: null + volume: null handles: {} + placeholder_keys: {} + result: {} schema: description: 注射泵排液 properties: + feedback: {} goal: properties: pump_id: - default: '1' description: 选择泵 - enum: - - '1' - - '2' - - '3' - type: string + type: integer valve_port: - default: '1' description: 阀门端口 - enum: - - '1' - - '2' - - '3' - - '4' - - '5' - - '6' - - '7' - - '8' - type: string + type: integer volume: - default: 1000 description: 排液步数 type: integer required: @@ -243,121 +251,152 @@ separator.chinwe: - volume - valve_port type: object + result: {} + required: + - goal + title: pump_dispense参数 + type: object type: UniLabJsonCommand pump_initialize: + feedback: {} goal: drain_port: 0 output_port: 0 pump_id: 1 speed: 10 + goal_default: + drain_port: 0 + output_port: 0 + pump_id: null + speed: 10 handles: {} + placeholder_keys: {} + result: {} schema: description: 初始化指定注射泵 properties: + feedback: {} goal: properties: drain_port: default: 0 description: 排液口索引 - type: integer + type: string output_port: default: 0 description: 输出口索引 - type: integer - pump_id: - default: '1' - description: 选择泵 - enum: - - '1' - - '2' - - '3' - title: '注: 1号泵, 2号泵, 3号泵' type: string + pump_id: + description: 选择泵 + title: '注: 1号泵, 2号泵, 3号泵' + type: integer speed: default: 10 description: 运动速度 - type: integer + type: string required: - pump_id type: object + result: {} + required: + - goal + title: pump_initialize参数 + type: object type: UniLabJsonCommand pump_valve: + feedback: {} goal: port: 1 pump_id: 1 + goal_default: + port: null + pump_id: null handles: {} + placeholder_keys: {} + result: {} schema: description: 切换指定泵的阀门端口 properties: + feedback: {} goal: properties: port: - default: '1' description: 阀门端口号 (1-8) - enum: - - '1' - - '2' - - '3' - - '4' - - '5' - - '6' - - '7' - - '8' - type: string + type: integer pump_id: - default: '1' description: 选择泵 - enum: - - '1' - - '2' - - '3' - type: string + type: integer required: - pump_id - port type: object + result: {} + required: + - goal + title: pump_valve参数 + type: object type: UniLabJsonCommand wait_sensor_level: + feedback: {} goal: target_state: 有液 timeout: 30 + goal_default: + target_state: 有液 + timeout: 30 handles: {} + placeholder_keys: {} + result: {} schema: description: 等待传感器液位条件 properties: + feedback: {} goal: properties: target_state: default: 有液 description: 目标液位状态 - enum: - - 有液 - - 无液 type: string timeout: default: 30 description: 超时时间 (秒) type: integer - required: - - target_state + required: [] type: object + result: + type: boolean + required: + - goal + title: wait_sensor_level参数 + type: object type: UniLabJsonCommand wait_time: + feedback: {} goal: duration: 10 + goal_default: + duration: null handles: {} + placeholder_keys: {} + result: {} schema: description: 等待指定时间 properties: + feedback: {} goal: properties: duration: - default: 10 description: 等待时间 (秒) type: integer required: - duration type: object + result: + type: boolean + required: + - goal + title: wait_time参数 + type: object type: UniLabJsonCommand module: unilabos.devices.separator.chinwe:ChinweDevice status_types: @@ -406,8 +445,8 @@ separator.chinwe: sensor_rssi: type: integer required: + - is_connected - sensor_level - sensor_rssi - - is_connected type: object version: 2.1.0 diff --git a/unilabos/registry/devices/coin_cell_workstation.yaml b/unilabos/registry/devices/coin_cell_workstation.yaml index 2e9f6073..df5a3508 100644 --- a/unilabos/registry/devices/coin_cell_workstation.yaml +++ b/unilabos/registry/devices/coin_cell_workstation.yaml @@ -64,7 +64,8 @@ coincellassemblyworkstation_device: properties: {} required: [] type: object - result: {} + result: + type: boolean required: - goal title: fun_wuliao_test参数 @@ -109,7 +110,8 @@ coincellassemblyworkstation_device: - elec_num - elec_use_num type: object - result: {} + result: + type: object required: - goal title: func_allpack_cmd参数 @@ -220,7 +222,8 @@ coincellassemblyworkstation_device: - elec_num - elec_use_num type: object - result: {} + result: + type: object required: - goal title: func_allpack_cmd_simp参数 @@ -309,7 +312,8 @@ coincellassemblyworkstation_device: type: boolean required: [] type: object - result: {} + result: + type: boolean required: - goal title: func_pack_device_init_auto_start_combined参数 @@ -351,7 +355,8 @@ coincellassemblyworkstation_device: properties: {} required: [] type: object - result: {} + result: + type: boolean required: - goal title: func_pack_device_stop参数 @@ -376,7 +381,8 @@ coincellassemblyworkstation_device: type: string required: [] type: object - result: {} + result: + type: boolean required: - goal title: func_pack_get_msg_cmd参数 @@ -430,7 +436,8 @@ coincellassemblyworkstation_device: properties: {} required: [] type: object - result: {} + result: + type: boolean required: - goal title: func_pack_send_finished_cmd参数 @@ -467,7 +474,8 @@ coincellassemblyworkstation_device: - assembly_type - assembly_pressure type: object - result: {} + result: + type: boolean required: - goal title: func_pack_send_msg_cmd参数 @@ -611,7 +619,8 @@ coincellassemblyworkstation_device: - elec_num - elec_use_num type: object - result: {} + result: + type: object required: - goal title: func_sendbottle_allpack_multi参数 @@ -663,31 +672,6 @@ coincellassemblyworkstation_device: title: modify_deck_name参数 type: object type: UniLabJsonCommand - auto-post_init: - feedback: {} - goal: {} - goal_default: - ros_node: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - ros_node: - type: object - required: - - ros_node - type: object - result: {} - required: - - goal - title: post_init参数 - type: object - type: UniLabJsonCommand auto-qiming_coin_cell_code: feedback: {} goal: {} @@ -735,7 +719,8 @@ coincellassemblyworkstation_device: required: - fujipian_panshu type: object - result: {} + result: + type: boolean required: - goal title: qiming_coin_cell_code参数 @@ -826,25 +811,24 @@ coincellassemblyworkstation_device: sys_status: type: string required: - - sys_status - - sys_mode - - request_rec_msg_status - - request_send_msg_status - data_assembly_coin_cell_num + - data_assembly_pressure - data_assembly_time - - data_open_circuit_voltage - data_axis_x_pos - data_axis_y_pos - data_axis_z_pos - - data_pole_weight - - data_assembly_pressure - - data_electrolyte_volume - - data_coin_num - data_coin_cell_code + - data_coin_num - data_electrolyte_code - - data_glove_box_pressure + - data_electrolyte_volume - data_glove_box_o2_content + - data_glove_box_pressure - data_glove_box_water_content + - data_open_circuit_voltage + - data_pole_weight + - request_rec_msg_status + - request_send_msg_status + - sys_mode + - sys_status type: object - registry_type: device version: 1.0.0 diff --git a/unilabos/registry/devices/gas_handler.yaml b/unilabos/registry/devices/gas_handler.yaml index 65218619..ad212575 100644 --- a/unilabos/registry/devices/gas_handler.yaml +++ b/unilabos/registry/devices/gas_handler.yaml @@ -50,26 +50,25 @@ gas_source.mock: goal: {} goal_default: {} handles: {} - result: {} + placeholder_keys: {} + result: + return_info: return_info schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Feedback type: object goal: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Goal type: object result: + additionalProperties: false properties: return_info: type: string - required: - - return_info title: EmptyIn_Result type: object required: @@ -82,26 +81,25 @@ gas_source.mock: goal: {} goal_default: {} handles: {} - result: {} + placeholder_keys: {} + result: + return_info: return_info schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Feedback type: object goal: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Goal type: object result: + additionalProperties: false properties: return_info: type: string - required: - - return_info title: EmptyIn_Result type: object required: @@ -116,32 +114,31 @@ gas_source.mock: goal_default: string: '' handles: {} - result: {} + placeholder_keys: {} + result: + return_info: return_info + success: success schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: StrSingleInput_Feedback type: object goal: + additionalProperties: false properties: string: type: string - required: - - string title: StrSingleInput_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: StrSingleInput_Result type: object required: @@ -232,26 +229,25 @@ vacuum_pump.mock: goal: {} goal_default: {} handles: {} - result: {} + placeholder_keys: {} + result: + return_info: return_info schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Feedback type: object goal: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Goal type: object result: + additionalProperties: false properties: return_info: type: string - required: - - return_info title: EmptyIn_Result type: object required: @@ -264,26 +260,25 @@ vacuum_pump.mock: goal: {} goal_default: {} handles: {} - result: {} + placeholder_keys: {} + result: + return_info: return_info schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Feedback type: object goal: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Goal type: object result: + additionalProperties: false properties: return_info: type: string - required: - - return_info title: EmptyIn_Result type: object required: @@ -298,32 +293,31 @@ vacuum_pump.mock: goal_default: string: '' handles: {} - result: {} + placeholder_keys: {} + result: + return_info: return_info + success: success schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: StrSingleInput_Feedback type: object goal: + additionalProperties: false properties: string: type: string - required: - - string title: StrSingleInput_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: StrSingleInput_Result type: object required: diff --git a/unilabos/registry/devices/hotel.yaml b/unilabos/registry/devices/hotel.yaml index 3fd0ea5b..fdcc89dd 100644 --- a/unilabos/registry/devices/hotel.yaml +++ b/unilabos/registry/devices/hotel.yaml @@ -5,7 +5,7 @@ hotel.thermo_orbitor_rs2_hotel: action_value_mappings: {} module: unilabos.devices.resource_container.container:HotelContainer status_types: - rotation: String + rotation: '' type: python config_info: [] description: Thermo Orbitor RS2 Hotel容器设备,用于实验室样品的存储和管理。该设备通过HotelContainer类实现容器的旋转控制和状态监控,主要用于存储实验样品、试剂瓶或其他实验器具,支持旋转功能以便于样品的自动化存取。适用于需要有序存储和快速访问大量样品的实验室自动化场景。 diff --git a/unilabos/registry/devices/laiyu_liquid_test.yaml b/unilabos/registry/devices/laiyu_liquid_test.yaml index dcaa9818..6d87f429 100644 --- a/unilabos/registry/devices/laiyu_liquid_test.yaml +++ b/unilabos/registry/devices/laiyu_liquid_test.yaml @@ -22,7 +22,8 @@ xyz_stepper_controller: required: - degrees type: object - result: {} + result: + type: integer required: - goal title: degrees_to_steps参数 @@ -47,7 +48,8 @@ xyz_stepper_controller: required: - axis type: object - result: {} + result: + type: boolean required: - goal title: emergency_stop参数 @@ -72,7 +74,10 @@ xyz_stepper_controller: type: boolean required: [] type: object - result: {} + result: + additionalProperties: + type: boolean + type: object required: - goal title: enable_all_axes参数 @@ -101,7 +106,8 @@ xyz_stepper_controller: required: - axis type: object - result: {} + result: + type: boolean required: - goal title: enable_motor参数 @@ -122,7 +128,10 @@ xyz_stepper_controller: properties: {} required: [] type: object - result: {} + result: + additionalProperties: + type: boolean + type: object required: - goal title: home_all_axes参数 @@ -147,7 +156,8 @@ xyz_stepper_controller: required: - axis type: object - result: {} + result: + type: boolean required: - goal title: home_axis参数 @@ -188,7 +198,8 @@ xyz_stepper_controller: - axis - position type: object - result: {} + result: + type: boolean required: - goal title: move_to_position参数 @@ -229,7 +240,8 @@ xyz_stepper_controller: - axis - degrees type: object - result: {} + result: + type: boolean required: - goal title: move_to_position_degrees参数 @@ -270,7 +282,8 @@ xyz_stepper_controller: - axis - revolutions type: object - result: {} + result: + type: boolean required: - goal title: move_to_position_revolutions参数 @@ -301,14 +314,17 @@ xyz_stepper_controller: default: 5000 type: integer x: - type: string + type: integer y: - type: string + type: integer z: - type: string + type: integer required: [] type: object - result: {} + result: + additionalProperties: + type: boolean + type: object required: - goal title: move_xyz参数 @@ -339,14 +355,17 @@ xyz_stepper_controller: default: 5000 type: integer x_deg: - type: string + type: number y_deg: - type: string + type: number z_deg: - type: string + type: number required: [] type: object - result: {} + result: + additionalProperties: + type: boolean + type: object required: - goal title: move_xyz_degrees参数 @@ -377,14 +396,17 @@ xyz_stepper_controller: default: 5000 type: integer x_rev: - type: string + type: number y_rev: - type: string + type: number z_rev: - type: string + type: number required: [] type: object - result: {} + result: + additionalProperties: + type: boolean + type: object required: - goal title: move_xyz_revolutions参数 @@ -409,7 +431,8 @@ xyz_stepper_controller: required: - revolutions type: object - result: {} + result: + type: integer required: - goal title: revolutions_to_steps参数 @@ -442,7 +465,8 @@ xyz_stepper_controller: - axis - speed type: object - result: {} + result: + type: boolean required: - goal title: set_speed_mode参数 @@ -467,7 +491,8 @@ xyz_stepper_controller: required: - steps type: object - result: {} + result: + type: number required: - goal title: steps_to_degrees参数 @@ -492,7 +517,8 @@ xyz_stepper_controller: required: - steps type: object - result: {} + result: + type: number required: - goal title: steps_to_revolutions参数 @@ -513,7 +539,10 @@ xyz_stepper_controller: properties: {} required: [] type: object - result: {} + result: + additionalProperties: + type: boolean + type: object required: - goal title: stop_all_axes参数 @@ -542,7 +571,8 @@ xyz_stepper_controller: required: - axis type: object - result: {} + result: + type: boolean required: - goal title: wait_for_completion参数 @@ -550,8 +580,7 @@ xyz_stepper_controller: type: UniLabJsonCommand module: unilabos.devices.liquid_handling.laiyu.drivers.xyz_stepper_driver:XYZStepperController status_types: - all_positions: dict - motor_status: unilabos.devices.liquid_handling.laiyu.drivers.xyz_stepper_driver:MotorPosition + all_positions: Dict[MotorAxis, MotorPosition] type: python config_info: [] description: 新XYZ控制器 @@ -574,12 +603,10 @@ xyz_stepper_controller: data: properties: all_positions: - type: object - motor_status: + additionalProperties: + type: object type: object required: - - motor_status - all_positions type: object - registry_type: device version: 1.0.0 diff --git a/unilabos/registry/devices/liquid_handler.yaml b/unilabos/registry/devices/liquid_handler.yaml index b04d6317..31872303 100644 --- a/unilabos/registry/devices/liquid_handler.yaml +++ b/unilabos/registry/devices/liquid_handler.yaml @@ -8,6 +8,7 @@ liquid_handler: goal: asp_vols: asp_vols blow_out_air_volume: blow_out_air_volume + delays: delays dis_vols: dis_vols flow_rates: flow_rates is_96_well: is_96_well @@ -23,84 +24,38 @@ liquid_handler: targets: targets use_channels: use_channels goal_default: - asp_vols: - - 0.0 - blow_out_air_volume: - - 0.0 - dis_vols: - - 0.0 - flow_rates: - - 0.0 + asp_vols: [] + blow_out_air_volume: [] + dis_vols: [] + flow_rates: [] is_96_well: false - liquid_height: - - 0.0 + liquid_height: [] mix_liquid_height: 0.0 mix_rate: 0 mix_time: 0 mix_vol: 0 - none_keys: - - '' - offsets: - - x: 0.0 - y: 0.0 - z: 0.0 - reagent_sources: - - category: '' - children: [] - config: '' - data: '' - id: '' - name: '' - parent: '' - pose: - orientation: - w: 1.0 - x: 0.0 - y: 0.0 - z: 0.0 - position: - x: 0.0 - y: 0.0 - z: 0.0 - sample_id: '' - type: '' + none_keys: [] + offsets: [] + reagent_sources: [] spread: '' - targets: - - category: '' - children: [] - config: '' - data: '' - id: '' - name: '' - parent: '' - pose: - orientation: - w: 1.0 - x: 0.0 - y: 0.0 - z: 0.0 - position: - x: 0.0 - y: 0.0 - z: 0.0 - sample_id: '' - type: '' - use_channels: - - 0 + targets: [] + use_channels: [] handles: {} placeholder_keys: reagent_sources: unilabos_resources targets: unilabos_resources - result: {} + result: + return_info: return_info + success: success schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: LiquidHandlerAdd_Feedback type: object goal: + additionalProperties: false properties: asp_vols: items: @@ -125,6 +80,8 @@ liquid_handler: type: number type: array mix_liquid_height: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number mix_rate: maximum: 2147483647 @@ -155,7 +112,6 @@ liquid_handler: - x - y - z - title: offsets type: object type: array reagent_sources: @@ -230,7 +186,6 @@ liquid_handler: - pose - config - data - title: reagent_sources type: object type: array spread: @@ -307,43 +262,21 @@ liquid_handler: - pose - config - data - title: targets type: object type: array use_channels: items: - maximum: 2147483647 - minimum: -2147483648 type: integer type: array - required: - - asp_vols - - dis_vols - - reagent_sources - - targets - - use_channels - - flow_rates - - offsets - - liquid_height - - blow_out_air_volume - - spread - - is_96_well - - mix_time - - mix_vol - - mix_rate - - mix_liquid_height - - none_keys title: LiquidHandlerAdd_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: LiquidHandlerAdd_Result type: object required: @@ -362,41 +295,14 @@ liquid_handler: use_channels: use_channels vols: vols goal_default: - blow_out_air_volume: - - 0.0 - flow_rates: - - 0.0 - liquid_height: - - 0.0 - offsets: - - x: 0.0 - y: 0.0 - z: 0.0 - resources: - - category: '' - children: [] - config: '' - data: '' - id: '' - name: '' - parent: '' - pose: - orientation: - w: 1.0 - x: 0.0 - y: 0.0 - z: 0.0 - position: - x: 0.0 - y: 0.0 - z: 0.0 - sample_id: '' - type: '' + blow_out_air_volume: [] + flow_rates: [] + liquid_height: [] + offsets: [] + resources: [] spread: '' - use_channels: - - 0 - vols: - - 0.0 + use_channels: [] + vols: [] handles: {} result: name: name @@ -404,11 +310,11 @@ liquid_handler: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: LiquidHandlerAspirate_Feedback type: object goal: + additionalProperties: false properties: blow_out_air_volume: items: @@ -435,7 +341,6 @@ liquid_handler: - x - y - z - title: offsets type: object type: array resources: @@ -510,41 +415,27 @@ liquid_handler: - pose - config - data - title: resources type: object type: array spread: type: string use_channels: items: - maximum: 2147483647 - minimum: -2147483648 type: integer type: array vols: items: type: number type: array - required: - - resources - - vols - - use_channels - - flow_rates - - offsets - - liquid_height - - blow_out_air_volume - - spread title: LiquidHandlerAspirate_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: LiquidHandlerAspirate_Result type: object required: @@ -574,7 +465,9 @@ liquid_handler: properties: none_keys: default: [] - type: string + items: + type: string + type: array protocol_author: type: string protocol_date: @@ -644,41 +537,19 @@ liquid_handler: goal: properties: tip_racks: - type: string + items: + type: object + type: array required: - tip_racks type: object - result: {} + result: + type: string required: - goal title: iter_tips参数 type: object type: UniLabJsonCommand - auto-post_init: - feedback: {} - goal: {} - goal_default: - ros_node: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - ros_node: - type: string - required: - - ros_node - type: object - result: {} - required: - - goal - title: post_init参数 - type: object - type: UniLabJsonCommand auto-set_group: feedback: {} goal: {} @@ -698,9 +569,13 @@ liquid_handler: group_name: type: string volumes: - type: string + items: + type: number + type: array wells: - type: string + items: + type: object + type: array required: - group_name - wells @@ -712,6 +587,259 @@ liquid_handler: title: set_group参数 type: object type: UniLabJsonCommand + auto-set_liquid: + feedback: {} + goal: {} + goal_default: + liquid_names: null + volumes: null + wells: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: set_liquid的参数schema + properties: + feedback: {} + goal: + properties: + liquid_names: + items: + type: string + type: array + volumes: + items: + type: number + type: array + wells: + items: + type: object + type: array + required: + - wells + - liquid_names + - volumes + type: object + result: + $defs: + ResourceDict: + properties: + class: + description: Resource class name + title: Class + type: string + config: + additionalProperties: true + description: Resource configuration + title: Config + type: object + data: + additionalProperties: true + description: 'Resource data, eg: container liquid data' + title: Data + type: object + description: + default: '' + description: Resource description + title: Description + type: string + extra: + additionalProperties: true + description: 'Extra data, eg: slot index' + title: Extra + type: object + icon: + default: '' + description: Resource icon + title: Icon + type: string + id: + description: Resource ID + title: Id + type: string + machine_name: + default: '' + description: Machine this resource belongs to + title: Machine Name + type: string + model: + additionalProperties: true + description: Resource model + title: Model + type: object + name: + description: Resource name + title: Name + type: string + parent: + anyOf: + - $ref: '#/$defs/ResourceDict' + - type: 'null' + default: null + description: Parent resource object + parent_uuid: + anyOf: + - type: string + - type: 'null' + default: null + description: Parent resource uuid + title: Parent Uuid + pose: + $ref: '#/$defs/ResourceDictPosition' + description: Resource position + schema: + additionalProperties: true + description: Resource schema + title: Schema + type: object + type: + anyOf: + - const: device + type: string + - type: string + description: Resource type + title: Type + uuid: + description: Resource UUID + title: Uuid + type: string + required: + - id + - uuid + - name + - type + - class + - config + - data + - extra + title: ResourceDict + type: object + ResourceDictPosition: + properties: + cross_section_type: + default: rectangle + description: Cross section type + enum: + - rectangle + - circle + - rounded_rectangle + title: Cross Section Type + type: string + extra: + anyOf: + - additionalProperties: true + type: object + - type: 'null' + default: null + description: Extra data + title: Extra + layout: + default: x-y + description: Resource layout + enum: + - 2d + - x-y + - z-y + - x-z + title: Layout + type: string + position: + $ref: '#/$defs/ResourceDictPositionObject' + description: Resource position + position3d: + $ref: '#/$defs/ResourceDictPositionObject' + description: Resource position in 3D space + rotation: + $ref: '#/$defs/ResourceDictPositionObject' + description: Resource rotation + scale: + $ref: '#/$defs/ResourceDictPositionScale' + description: Resource scale + size: + $ref: '#/$defs/ResourceDictPositionSize' + description: Resource size + title: ResourceDictPosition + type: object + ResourceDictPositionObject: + properties: + x: + default: 0.0 + description: X coordinate + title: X + type: number + y: + default: 0.0 + description: Y coordinate + title: Y + type: number + z: + default: 0.0 + description: Z coordinate + title: Z + type: number + title: ResourceDictPositionObject + type: object + ResourceDictPositionScale: + properties: + x: + default: 0.0 + description: x scale + title: X + type: number + y: + default: 0.0 + description: y scale + title: Y + type: number + z: + default: 0.0 + description: z scale + title: Z + type: number + title: ResourceDictPositionScale + type: object + ResourceDictPositionSize: + properties: + depth: + default: 0.0 + description: Depth + title: Depth + type: number + height: + default: 0.0 + description: Height + title: Height + type: number + width: + default: 0.0 + description: Width + title: Width + type: number + title: ResourceDictPositionSize + type: object + properties: + volumes: + items: + type: number + title: Volumes + type: array + wells: + items: + items: + $ref: '#/$defs/ResourceDict' + type: array + title: Wells + type: array + required: + - wells + - volumes + title: SetLiquidReturn + type: object + required: + - goal + title: set_liquid参数 + type: object + type: UniLabJsonCommand auto-set_liquid_from_plate: feedback: {} goal: {} @@ -721,7 +849,8 @@ liquid_handler: volumes: null well_names: null handles: {} - placeholder_keys: {} + placeholder_keys: + plate: unilabos_resources result: {} schema: description: '' @@ -730,20 +859,366 @@ liquid_handler: goal: properties: liquid_names: - type: string + items: + type: string + type: array plate: - type: string + additionalProperties: false + properties: + category: + description: Field of type + type: string + children: + description: Field of type + items: + description: Field of type + type: string + type: array + config: + description: Field of type + type: string + data: + description: Field of type + type: string + id: + description: Field of type + type: string + name: + description: Field of type + type: string + parent: + description: Field of type + type: string + pose: + additionalProperties: false + description: Field of type + properties: + orientation: + additionalProperties: false + description: Field of type + properties: + w: + description: Field of type + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 + type: number + x: + description: Field of type + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 + type: number + y: + description: Field of type + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 + type: number + z: + description: Field of type + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 + type: number + required: + - x + - y + - z + - w + title: orientation + type: object + position: + additionalProperties: false + description: Field of type + properties: + x: + description: Field of type + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 + type: number + y: + description: Field of type + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 + type: number + z: + description: Field of type + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 + type: number + required: + - x + - y + - z + title: position + type: object + required: + - position + - orientation + title: pose + type: object + sample_id: + description: Field of type + type: string + type: + description: Field of type + type: string + title: plate + type: object volumes: - type: string + items: + type: number + type: array well_names: - type: string + items: + type: string + type: array required: - plate - well_names - liquid_names - volumes type: object - result: {} + result: + $defs: + ResourceDict: + properties: + class: + description: Resource class name + title: Class + type: string + config: + additionalProperties: true + description: Resource configuration + title: Config + type: object + data: + additionalProperties: true + description: 'Resource data, eg: container liquid data' + title: Data + type: object + description: + default: '' + description: Resource description + title: Description + type: string + extra: + additionalProperties: true + description: 'Extra data, eg: slot index' + title: Extra + type: object + icon: + default: '' + description: Resource icon + title: Icon + type: string + id: + description: Resource ID + title: Id + type: string + machine_name: + default: '' + description: Machine this resource belongs to + title: Machine Name + type: string + model: + additionalProperties: true + description: Resource model + title: Model + type: object + name: + description: Resource name + title: Name + type: string + parent: + anyOf: + - $ref: '#/$defs/ResourceDict' + - type: 'null' + default: null + description: Parent resource object + parent_uuid: + anyOf: + - type: string + - type: 'null' + default: null + description: Parent resource uuid + title: Parent Uuid + pose: + $ref: '#/$defs/ResourceDictPosition' + description: Resource position + schema: + additionalProperties: true + description: Resource schema + title: Schema + type: object + type: + anyOf: + - const: device + type: string + - type: string + description: Resource type + title: Type + uuid: + description: Resource UUID + title: Uuid + type: string + required: + - id + - uuid + - name + - type + - class + - config + - data + - extra + title: ResourceDict + type: object + ResourceDictPosition: + properties: + cross_section_type: + default: rectangle + description: Cross section type + enum: + - rectangle + - circle + - rounded_rectangle + title: Cross Section Type + type: string + extra: + anyOf: + - additionalProperties: true + type: object + - type: 'null' + default: null + description: Extra data + title: Extra + layout: + default: x-y + description: Resource layout + enum: + - 2d + - x-y + - z-y + - x-z + title: Layout + type: string + position: + $ref: '#/$defs/ResourceDictPositionObject' + description: Resource position + position3d: + $ref: '#/$defs/ResourceDictPositionObject' + description: Resource position in 3D space + rotation: + $ref: '#/$defs/ResourceDictPositionObject' + description: Resource rotation + scale: + $ref: '#/$defs/ResourceDictPositionScale' + description: Resource scale + size: + $ref: '#/$defs/ResourceDictPositionSize' + description: Resource size + title: ResourceDictPosition + type: object + ResourceDictPositionObject: + properties: + x: + default: 0.0 + description: X coordinate + title: X + type: number + y: + default: 0.0 + description: Y coordinate + title: Y + type: number + z: + default: 0.0 + description: Z coordinate + title: Z + type: number + title: ResourceDictPositionObject + type: object + ResourceDictPositionScale: + properties: + x: + default: 0.0 + description: x scale + title: X + type: number + y: + default: 0.0 + description: y scale + title: Y + type: number + z: + default: 0.0 + description: z scale + title: Z + type: number + title: ResourceDictPositionScale + type: object + ResourceDictPositionSize: + properties: + depth: + default: 0.0 + description: Depth + title: Depth + type: number + height: + default: 0.0 + description: Height + title: Height + type: number + width: + default: 0.0 + description: Width + title: Width + type: number + title: ResourceDictPositionSize + type: object + properties: + plate: + items: + items: + $ref: '#/$defs/ResourceDict' + type: array + title: Plate + type: array + volumes: + items: + type: number + title: Volumes + type: array + wells: + items: + items: + $ref: '#/$defs/ResourceDict' + type: array + title: Wells + type: array + required: + - plate + - wells + - volumes + title: SetLiquidFromPlateReturn + type: object required: - goal title: set_liquid_from_plate参数 @@ -764,7 +1239,9 @@ liquid_handler: goal: properties: tip_racks: - type: string + items: + type: object + type: array required: - tip_racks type: object @@ -789,7 +1266,9 @@ liquid_handler: goal: properties: targets: - type: string + items: + type: object + type: array required: - targets type: object @@ -837,8 +1316,7 @@ liquid_handler: goal: use_channels: use_channels goal_default: - use_channels: - - 0 + use_channels: [] handles: {} result: name: name @@ -846,31 +1324,25 @@ liquid_handler: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: LiquidHandlerDiscardTips_Feedback type: object goal: + additionalProperties: false properties: use_channels: items: - maximum: 2147483647 - minimum: -2147483648 type: integer type: array - required: - - use_channels title: LiquidHandlerDiscardTips_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: LiquidHandlerDiscardTips_Result type: object required: @@ -889,39 +1361,13 @@ liquid_handler: use_channels: use_channels vols: vols goal_default: - blow_out_air_volume: - - 0 - flow_rates: - - 0.0 - offsets: - - x: 0.0 - y: 0.0 - z: 0.0 - resources: - - category: '' - children: [] - config: '' - data: '' - id: '' - name: '' - parent: '' - pose: - orientation: - w: 1.0 - x: 0.0 - y: 0.0 - z: 0.0 - position: - x: 0.0 - y: 0.0 - z: 0.0 - sample_id: '' - type: '' + blow_out_air_volume: [] + flow_rates: [] + offsets: [] + resources: [] spread: '' - use_channels: - - 0 - vols: - - 0.0 + use_channels: [] + vols: [] handles: {} result: name: name @@ -929,16 +1375,14 @@ liquid_handler: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: LiquidHandlerDispense_Feedback type: object goal: + additionalProperties: false properties: blow_out_air_volume: items: - maximum: 2147483647 - minimum: -2147483648 type: integer type: array flow_rates: @@ -958,7 +1402,6 @@ liquid_handler: - x - y - z - title: offsets type: object type: array resources: @@ -1033,40 +1476,27 @@ liquid_handler: - pose - config - data - title: resources type: object type: array spread: type: string use_channels: items: - maximum: 2147483647 - minimum: -2147483648 type: integer type: array vols: items: type: number type: array - required: - - resources - - vols - - use_channels - - flow_rates - - offsets - - blow_out_air_volume - - spread title: LiquidHandlerDispense_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: LiquidHandlerDispense_Result type: object required: @@ -1083,32 +1513,9 @@ liquid_handler: use_channels: use_channels goal_default: allow_nonzero_volume: false - offsets: - - x: 0.0 - y: 0.0 - z: 0.0 - tip_spots: - - category: '' - children: [] - config: '' - data: '' - id: '' - name: '' - parent: '' - pose: - orientation: - w: 1.0 - x: 0.0 - y: 0.0 - z: 0.0 - position: - x: 0.0 - y: 0.0 - z: 0.0 - sample_id: '' - type: '' - use_channels: - - 0 + offsets: [] + tip_spots: [] + use_channels: [] handles: {} placeholder_keys: tip_spots: unilabos_resources @@ -1118,11 +1525,11 @@ liquid_handler: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: LiquidHandlerDropTips_Feedback type: object goal: + additionalProperties: false properties: allow_nonzero_volume: type: boolean @@ -1139,7 +1546,6 @@ liquid_handler: - x - y - z - title: offsets type: object type: array tip_spots: @@ -1214,31 +1620,21 @@ liquid_handler: - pose - config - data - title: tip_spots type: object type: array use_channels: items: - maximum: 2147483647 - minimum: -2147483648 type: integer type: array - required: - - tip_spots - - use_channels - - offsets - - allow_nonzero_volume title: LiquidHandlerDropTips_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: LiquidHandlerDropTips_Result type: object required: @@ -1285,21 +1681,28 @@ liquid_handler: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: LiquidHandlerDropTips96_Feedback type: object goal: + additionalProperties: false properties: allow_nonzero_volume: type: boolean offset: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -1308,6 +1711,7 @@ liquid_handler: title: offset type: object tip_rack: + additionalProperties: false properties: category: type: string @@ -1326,16 +1730,26 @@ liquid_handler: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -1345,12 +1759,19 @@ liquid_handler: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -1380,21 +1801,15 @@ liquid_handler: - data title: tip_rack type: object - required: - - tip_rack - - offset - - allow_nonzero_volume title: LiquidHandlerDropTips96_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: LiquidHandlerDropTips96_Result type: object required: @@ -1417,47 +1832,31 @@ liquid_handler: mix_rate: 0.0 mix_time: 0 mix_vol: 0 - none_keys: - - '' - offsets: - - x: 0.0 - y: 0.0 - z: 0.0 - targets: - - category: '' - children: [] - config: '' - data: '' - id: '' - name: '' - parent: '' - pose: - orientation: - w: 1.0 - x: 0.0 - y: 0.0 - z: 0.0 - position: - x: 0.0 - y: 0.0 - z: 0.0 - sample_id: '' - type: '' + none_keys: [] + offsets: [] + targets: [] handles: {} - result: {} + placeholder_keys: {} + result: + return_info: return_info + success: success schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: LiquidHandlerMix_Feedback type: object goal: + additionalProperties: false properties: height_to_bottom: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number mix_rate: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number mix_time: maximum: 2147483647 @@ -1484,7 +1883,6 @@ liquid_handler: - x - y - z - title: offsets type: object type: array targets: @@ -1559,28 +1957,17 @@ liquid_handler: - pose - config - data - title: targets type: object type: array - required: - - targets - - mix_time - - mix_vol - - height_to_bottom - - offsets - - mix_rate - - none_keys title: LiquidHandlerMix_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: LiquidHandlerMix_Result type: object required: @@ -1608,10 +1995,7 @@ liquid_handler: z: 0.0 drop_direction: '' get_direction: '' - intermediate_locations: - - x: 0.0 - y: 0.0 - z: 0.0 + intermediate_locations: [] lid: category: '' children: [] @@ -1666,19 +2050,26 @@ liquid_handler: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: LiquidHandlerMoveLid_Feedback type: object goal: + additionalProperties: false properties: destination_offset: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -1703,10 +2094,10 @@ liquid_handler: - x - y - z - title: intermediate_locations type: object type: array lid: + additionalProperties: false properties: category: type: string @@ -1725,16 +2116,26 @@ liquid_handler: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -1744,12 +2145,19 @@ liquid_handler: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -1782,16 +2190,25 @@ liquid_handler: pickup_direction: type: string pickup_distance_from_top: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number put_direction: type: string resource_offset: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -1800,6 +2217,7 @@ liquid_handler: title: resource_offset type: object to: + additionalProperties: false properties: category: type: string @@ -1818,16 +2236,26 @@ liquid_handler: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -1837,12 +2265,19 @@ liquid_handler: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -1872,28 +2307,15 @@ liquid_handler: - data title: to type: object - required: - - lid - - to - - intermediate_locations - - resource_offset - - destination_offset - - pickup_direction - - drop_direction - - get_direction - - put_direction - - pickup_distance_from_top title: LiquidHandlerMoveLid_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: LiquidHandlerMoveLid_Result type: object required: @@ -1921,10 +2343,7 @@ liquid_handler: z: 0.0 drop_direction: '' get_direction: '' - intermediate_locations: - - x: 0.0 - y: 0.0 - z: 0.0 + intermediate_locations: [] pickup_direction: '' pickup_distance_from_top: 0.0 pickup_offset: @@ -1983,19 +2402,26 @@ liquid_handler: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: LiquidHandlerMovePlate_Feedback type: object goal: + additionalProperties: false properties: destination_offset: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -2020,20 +2446,28 @@ liquid_handler: - x - y - z - title: intermediate_locations type: object type: array pickup_direction: type: string pickup_distance_from_top: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number pickup_offset: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -2042,6 +2476,7 @@ liquid_handler: title: pickup_offset type: object plate: + additionalProperties: false properties: category: type: string @@ -2060,16 +2495,26 @@ liquid_handler: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -2079,12 +2524,19 @@ liquid_handler: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -2117,12 +2569,19 @@ liquid_handler: put_direction: type: string resource_offset: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -2131,6 +2590,7 @@ liquid_handler: title: resource_offset type: object to: + additionalProperties: false properties: category: type: string @@ -2149,16 +2609,26 @@ liquid_handler: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -2168,12 +2638,19 @@ liquid_handler: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -2203,29 +2680,15 @@ liquid_handler: - data title: to type: object - required: - - plate - - to - - intermediate_locations - - resource_offset - - pickup_offset - - destination_offset - - pickup_direction - - drop_direction - - get_direction - - put_direction - - pickup_distance_from_top title: LiquidHandlerMovePlate_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: LiquidHandlerMovePlate_Result type: object required: @@ -2253,10 +2716,7 @@ liquid_handler: z: 0.0 drop_direction: '' get_direction: '' - intermediate_locations: - - x: 0.0 - y: 0.0 - z: 0.0 + intermediate_locations: [] pickup_direction: '' pickup_distance_from_top: 0.0 put_direction: '' @@ -2295,19 +2755,26 @@ liquid_handler: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: LiquidHandlerMoveResource_Feedback type: object goal: + additionalProperties: false properties: destination_offset: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -2332,16 +2799,18 @@ liquid_handler: - x - y - z - title: intermediate_locations type: object type: array pickup_direction: type: string pickup_distance_from_top: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number put_direction: type: string resource: + additionalProperties: false properties: category: type: string @@ -2360,16 +2829,26 @@ liquid_handler: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -2379,12 +2858,19 @@ liquid_handler: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -2415,12 +2901,19 @@ liquid_handler: title: resource type: object resource_offset: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -2429,12 +2922,19 @@ liquid_handler: title: resource_offset type: object to: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -2442,28 +2942,15 @@ liquid_handler: - z title: to type: object - required: - - resource - - to - - intermediate_locations - - resource_offset - - destination_offset - - pickup_distance_from_top - - pickup_direction - - drop_direction - - get_direction - - put_direction title: LiquidHandlerMoveResource_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: LiquidHandlerMoveResource_Result type: object required: @@ -2501,24 +2988,30 @@ liquid_handler: sample_id: '' type: '' handles: {} - result: {} + placeholder_keys: {} + result: + return_info: return_info + success: success schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: LiquidHandlerMoveTo_Feedback type: object goal: + additionalProperties: false properties: channel: maximum: 2147483647 minimum: -2147483648 type: integer dis_to_top: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number well: + additionalProperties: false properties: category: type: string @@ -2537,16 +3030,26 @@ liquid_handler: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -2556,12 +3059,19 @@ liquid_handler: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -2591,21 +3101,15 @@ liquid_handler: - data title: well type: object - required: - - well - - dis_to_top - - channel title: LiquidHandlerMoveTo_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: LiquidHandlerMoveTo_Result type: object required: @@ -2620,32 +3124,9 @@ liquid_handler: tip_spots: tip_spots use_channels: use_channels goal_default: - offsets: - - x: 0.0 - y: 0.0 - z: 0.0 - tip_spots: - - category: '' - children: [] - config: '' - data: '' - id: '' - name: '' - parent: '' - pose: - orientation: - w: 1.0 - x: 0.0 - y: 0.0 - z: 0.0 - position: - x: 0.0 - y: 0.0 - z: 0.0 - sample_id: '' - type: '' - use_channels: - - 0 + offsets: [] + tip_spots: [] + use_channels: [] handles: {} result: name: name @@ -2653,11 +3134,11 @@ liquid_handler: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: LiquidHandlerPickUpTips_Feedback type: object goal: + additionalProperties: false properties: offsets: items: @@ -2672,7 +3153,6 @@ liquid_handler: - x - y - z - title: offsets type: object type: array tip_spots: @@ -2747,30 +3227,21 @@ liquid_handler: - pose - config - data - title: tip_spots type: object type: array use_channels: items: - maximum: 2147483647 - minimum: -2147483648 type: integer type: array - required: - - tip_spots - - use_channels - - offsets title: LiquidHandlerPickUpTips_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: LiquidHandlerPickUpTips_Result type: object required: @@ -2815,19 +3286,26 @@ liquid_handler: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: LiquidHandlerPickUpTips96_Feedback type: object goal: + additionalProperties: false properties: offset: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -2836,6 +3314,7 @@ liquid_handler: title: offset type: object tip_rack: + additionalProperties: false properties: category: type: string @@ -2854,16 +3333,26 @@ liquid_handler: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -2873,12 +3362,19 @@ liquid_handler: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -2908,20 +3404,15 @@ liquid_handler: - data title: tip_rack type: object - required: - - tip_rack - - offset title: LiquidHandlerPickUpTips96_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: LiquidHandlerPickUpTips96_Result type: object required: @@ -2946,48 +3437,18 @@ liquid_handler: vols: vols waste_liquid: waste_liquid goal_default: - blow_out_air_volume: - - 0.0 - delays: - - 0 - flow_rates: - - 0.0 + blow_out_air_volume: [] + delays: [] + flow_rates: [] is_96_well: false - liquid_height: - - 0.0 - none_keys: - - '' - offsets: - - x: 0.0 - y: 0.0 - z: 0.0 - sources: - - category: '' - children: [] - config: '' - data: '' - id: '' - name: '' - parent: '' - pose: - orientation: - w: 1.0 - x: 0.0 - y: 0.0 - z: 0.0 - position: - x: 0.0 - y: 0.0 - z: 0.0 - sample_id: '' - type: '' + liquid_height: [] + none_keys: [] + offsets: [] + sources: [] spread: '' - top: - - 0.0 - use_channels: - - 0 - vols: - - 0.0 + top: [] + use_channels: [] + vols: [] waste_liquid: category: '' children: [] @@ -3014,11 +3475,11 @@ liquid_handler: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: LiquidHandlerRemove_Feedback type: object goal: + additionalProperties: false properties: blow_out_air_volume: items: @@ -3026,8 +3487,6 @@ liquid_handler: type: array delays: items: - maximum: 2147483647 - minimum: -2147483648 type: integer type: array flow_rates: @@ -3057,7 +3516,6 @@ liquid_handler: - x - y - z - title: offsets type: object type: array sources: @@ -3132,7 +3590,6 @@ liquid_handler: - pose - config - data - title: sources type: object type: array spread: @@ -3143,8 +3600,6 @@ liquid_handler: type: array use_channels: items: - maximum: 2147483647 - minimum: -2147483648 type: integer type: array vols: @@ -3152,6 +3607,7 @@ liquid_handler: type: number type: array waste_liquid: + additionalProperties: false properties: category: type: string @@ -3170,16 +3626,26 @@ liquid_handler: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -3189,12 +3655,19 @@ liquid_handler: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -3224,31 +3697,15 @@ liquid_handler: - data title: waste_liquid type: object - required: - - vols - - sources - - waste_liquid - - use_channels - - flow_rates - - offsets - - liquid_height - - blow_out_air_volume - - spread - - delays - - is_96_well - - top - - none_keys title: LiquidHandlerRemove_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: LiquidHandlerRemove_Result type: object required: @@ -3273,48 +3730,18 @@ liquid_handler: vols: vols waste_liquid: waste_liquid goal_default: - blow_out_air_volume: - - 0.0 - delays: - - 0 - flow_rates: - - 0.0 + blow_out_air_volume: [] + delays: [] + flow_rates: [] is_96_well: false - liquid_height: - - 0.0 - none_keys: - - '' - offsets: - - x: 0.0 - y: 0.0 - z: 0.0 - sources: - - category: '' - children: [] - config: '' - data: '' - id: '' - name: '' - parent: '' - pose: - orientation: - w: 1.0 - x: 0.0 - y: 0.0 - z: 0.0 - position: - x: 0.0 - y: 0.0 - z: 0.0 - sample_id: '' - type: '' + liquid_height: [] + none_keys: [] + offsets: [] + sources: [] spread: '' - top: - - 0.0 - use_channels: - - 0 - vols: - - 0.0 + top: [] + use_channels: [] + vols: [] waste_liquid: category: '' children: [] @@ -3339,16 +3766,18 @@ liquid_handler: placeholder_keys: sources: unilabos_resources waste_liquid: unilabos_resources - result: {} + result: + return_info: return_info + success: success schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: LiquidHandlerRemove_Feedback type: object goal: + additionalProperties: false properties: blow_out_air_volume: items: @@ -3356,8 +3785,6 @@ liquid_handler: type: array delays: items: - maximum: 2147483647 - minimum: -2147483648 type: integer type: array flow_rates: @@ -3387,7 +3814,6 @@ liquid_handler: - x - y - z - title: offsets type: object type: array sources: @@ -3462,7 +3888,6 @@ liquid_handler: - pose - config - data - title: sources type: object type: array spread: @@ -3473,8 +3898,6 @@ liquid_handler: type: array use_channels: items: - maximum: 2147483647 - minimum: -2147483648 type: integer type: array vols: @@ -3482,6 +3905,7 @@ liquid_handler: type: number type: array waste_liquid: + additionalProperties: false properties: category: type: string @@ -3500,16 +3924,26 @@ liquid_handler: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -3519,12 +3953,19 @@ liquid_handler: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -3554,31 +3995,15 @@ liquid_handler: - data title: waste_liquid type: object - required: - - vols - - sources - - waste_liquid - - use_channels - - flow_rates - - offsets - - liquid_height - - blow_out_air_volume - - spread - - delays - - is_96_well - - top - - none_keys title: LiquidHandlerRemove_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: LiquidHandlerRemove_Result type: object required: @@ -3593,8 +4018,7 @@ liquid_handler: use_channels: use_channels goal_default: allow_nonzero_volume: false - use_channels: - - 0 + use_channels: [] handles: {} result: name: name @@ -3602,34 +4026,27 @@ liquid_handler: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: LiquidHandlerReturnTips_Feedback type: object goal: + additionalProperties: false properties: allow_nonzero_volume: type: boolean use_channels: items: - maximum: 2147483647 - minimum: -2147483648 type: integer type: array - required: - - use_channels - - allow_nonzero_volume title: LiquidHandlerReturnTips_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: LiquidHandlerReturnTips_Result type: object required: @@ -3650,27 +4067,23 @@ liquid_handler: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: LiquidHandlerReturnTips96_Feedback type: object goal: + additionalProperties: false properties: allow_nonzero_volume: type: boolean - required: - - allow_nonzero_volume title: LiquidHandlerReturnTips96_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: LiquidHandlerReturnTips96_Result type: object required: @@ -3737,17 +4150,22 @@ liquid_handler: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: LiquidHandlerStamp_Feedback type: object goal: + additionalProperties: false properties: aspiration_flow_rate: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number dispense_flow_rate: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number source: + additionalProperties: false properties: category: type: string @@ -3766,16 +4184,26 @@ liquid_handler: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -3785,12 +4213,19 @@ liquid_handler: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -3821,6 +4256,7 @@ liquid_handler: title: source type: object target: + additionalProperties: false properties: category: type: string @@ -3839,16 +4275,26 @@ liquid_handler: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -3858,12 +4304,19 @@ liquid_handler: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -3894,24 +4347,18 @@ liquid_handler: title: target type: object volume: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number - required: - - source - - target - - volume - - aspiration_flow_rate - - dispense_flow_rate title: LiquidHandlerStamp_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: LiquidHandlerStamp_Result type: object required: @@ -3944,20 +4391,22 @@ liquid_handler: description: '' properties: feedback: + additionalProperties: false properties: current_status: type: string progress: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number transferred_volume: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number - required: - - progress - - transferred_volume - - current_status title: Transfer_Feedback type: object goal: + additionalProperties: false properties: amount: type: string @@ -3970,31 +4419,27 @@ liquid_handler: rinsing_solvent: type: string rinsing_volume: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number solid: type: boolean time: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number to_vessel: type: string viscous: type: boolean volume: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number - required: - - from_vessel - - to_vessel - - volume - - amount - - time - - viscous - - rinsing_solvent - - rinsing_volume - - rinsing_repeats - - solid title: Transfer_Goal type: object result: + additionalProperties: false properties: message: type: string @@ -4002,10 +4447,6 @@ liquid_handler: type: string success: type: boolean - required: - - success - - message - - return_info title: Transfer_Result type: object required: @@ -4038,96 +4479,27 @@ liquid_handler: touch_tip: touch_tip use_channels: use_channels goal_default: - asp_flow_rates: - - 0.0 - asp_vols: - - 0.0 - blow_out_air_volume: - - 0.0 - delays: - - 0 - dis_flow_rates: - - 0.0 - dis_vols: - - 0.0 + asp_flow_rates: [] + asp_vols: [] + blow_out_air_volume: [] + delays: [] + dis_flow_rates: [] + dis_vols: [] is_96_well: false - liquid_height: - - 0.0 + liquid_height: [] mix_liquid_height: 0.0 mix_rate: 0 mix_stage: '' mix_times: 0 mix_vol: 0 - none_keys: - - '' - offsets: - - x: 0.0 - y: 0.0 - z: 0.0 - sources: - - category: '' - children: [] - config: '' - data: '' - id: '' - name: '' - parent: '' - pose: - orientation: - w: 1.0 - x: 0.0 - y: 0.0 - z: 0.0 - position: - x: 0.0 - y: 0.0 - z: 0.0 - sample_id: '' - type: '' + none_keys: [] + offsets: [] + sources: [] spread: '' - targets: - - category: '' - children: [] - config: '' - data: '' - id: '' - name: '' - parent: '' - pose: - orientation: - w: 1.0 - x: 0.0 - y: 0.0 - z: 0.0 - position: - x: 0.0 - y: 0.0 - z: 0.0 - sample_id: '' - type: '' - tip_racks: - - category: '' - children: [] - config: '' - data: '' - id: '' - name: '' - parent: '' - pose: - orientation: - w: 1.0 - x: 0.0 - y: 0.0 - z: 0.0 - position: - x: 0.0 - y: 0.0 - z: 0.0 - sample_id: '' - type: '' + targets: [] + tip_racks: [] touch_tip: false - use_channels: - - 0 + use_channels: [] handles: input: - data_key: sources @@ -4160,16 +4532,18 @@ liquid_handler: sources: unilabos_resources targets: unilabos_resources tip_racks: unilabos_resources - result: {} + result: + return_info: return_info + success: success schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: LiquidHandlerTransfer_Feedback type: object goal: + additionalProperties: false properties: asp_flow_rates: items: @@ -4185,8 +4559,6 @@ liquid_handler: type: array delays: items: - maximum: 2147483647 - minimum: -2147483648 type: integer type: array dis_flow_rates: @@ -4204,6 +4576,8 @@ liquid_handler: type: number type: array mix_liquid_height: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number mix_rate: maximum: 2147483647 @@ -4236,7 +4610,6 @@ liquid_handler: - x - y - z - title: offsets type: object type: array sources: @@ -4311,7 +4684,6 @@ liquid_handler: - pose - config - data - title: sources type: object type: array spread: @@ -4388,7 +4760,6 @@ liquid_handler: - pose - config - data - title: targets type: object type: array tip_racks: @@ -4463,50 +4834,23 @@ liquid_handler: - pose - config - data - title: tip_racks type: object type: array touch_tip: type: boolean use_channels: items: - maximum: 2147483647 - minimum: -2147483648 type: integer type: array - required: - - asp_vols - - dis_vols - - sources - - targets - - tip_racks - - use_channels - - asp_flow_rates - - dis_flow_rates - - offsets - - touch_tip - - liquid_height - - blow_out_air_volume - - spread - - is_96_well - - mix_stage - - mix_times - - mix_vol - - mix_rate - - mix_liquid_height - - delays - - none_keys title: LiquidHandlerTransfer_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: LiquidHandlerTransfer_Result type: object required: @@ -4525,12 +4869,12 @@ liquid_handler: config: properties: backend: - type: string + type: object channel_num: default: 8 type: integer deck: - type: string + type: object simulator: default: false type: boolean @@ -4573,6 +4917,8 @@ liquid_handler.biomek: goal: properties: bind_location: + additionalProperties: + type: number type: object bind_parent_id: type: string @@ -4612,6 +4958,36 @@ liquid_handler.biomek: title: create_resource参数 type: object type: UniLabJsonCommand + auto-deserialize: + feedback: {} + goal: {} + goal_default: + allow_marshal: false + data: null + handles: {} + placeholder_keys: {} + result: {} + schema: + description: deserialize的参数schema + properties: + feedback: {} + goal: + properties: + allow_marshal: + default: false + type: boolean + data: + type: object + required: + - data + type: object + result: + type: object + required: + - goal + title: deserialize参数 + type: object + type: UniLabJsonCommand auto-instrument_setup_biomek: feedback: {} goal: {} @@ -4678,8 +5054,7 @@ liquid_handler.biomek: protocol_type: protocol_type protocol_version: protocol_version goal_default: - none_keys: - - '' + none_keys: [] protocol_author: '' protocol_date: '' protocol_description: '' @@ -4687,16 +5062,18 @@ liquid_handler.biomek: protocol_type: '' protocol_version: '' handles: {} - result: {} + placeholder_keys: {} + result: + return_info: return_info schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: LiquidHandlerProtocolCreation_Feedback type: object goal: + additionalProperties: false properties: none_keys: items: @@ -4714,22 +5091,13 @@ liquid_handler.biomek: type: string protocol_version: type: string - required: - - protocol_name - - protocol_description - - protocol_version - - protocol_author - - protocol_date - - protocol_type - - none_keys title: LiquidHandlerProtocolCreation_Goal type: object result: + additionalProperties: false properties: return_info: type: string - required: - - return_info title: LiquidHandlerProtocolCreation_Result type: object required: @@ -4756,34 +5124,33 @@ liquid_handler.biomek: data_type: resource handler_key: plate_out label: plate - result: {} + placeholder_keys: {} + result: + return_info: return_info + success: success schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: LiquidHandlerIncubateBiomek_Feedback type: object goal: + additionalProperties: false properties: time: maximum: 2147483647 minimum: -2147483648 type: integer - required: - - time title: LiquidHandlerIncubateBiomek_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: LiquidHandlerIncubateBiomek_Result type: object required: @@ -4794,8 +5161,10 @@ liquid_handler.biomek: move_biomek: feedback: {} goal: - source: sources - target: targets + source: source + sources: sources + target: target + targets: targets goal_default: sources: '' targets: '' @@ -4812,36 +5181,33 @@ liquid_handler.biomek: data_type: resource handler_key: targets label: targets + placeholder_keys: {} result: - name: name + return_info: return_info + success: success schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: LiquidHandlerMoveBiomek_Feedback type: object goal: + additionalProperties: false properties: sources: type: string targets: type: string - required: - - sources - - targets title: LiquidHandlerMoveBiomek_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: LiquidHandlerMoveBiomek_Result type: object required: @@ -4870,16 +5236,19 @@ liquid_handler.biomek: data_type: resource handler_key: plate_out label: plate - result: {} + placeholder_keys: {} + result: + return_info: return_info + success: success schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: LiquidHandlerOscillateBiomek_Feedback type: object goal: + additionalProperties: false properties: rpm: maximum: 2147483647 @@ -4889,20 +5258,15 @@ liquid_handler.biomek: maximum: 2147483647 minimum: -2147483648 type: integer - required: - - rpm - - time title: LiquidHandlerOscillateBiomek_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: LiquidHandlerOscillateBiomek_Result type: object required: @@ -4915,26 +5279,25 @@ liquid_handler.biomek: goal: {} goal_default: {} handles: {} - result: {} + placeholder_keys: {} + result: + return_info: return_info schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Feedback type: object goal: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Goal type: object result: + additionalProperties: false properties: return_info: type: string - required: - - return_info title: EmptyIn_Result type: object required: @@ -4945,9 +5308,13 @@ liquid_handler.biomek: transfer_biomek: feedback: {} goal: + aspirate_technique: aspirate_technique aspirate_techniques: aspirate_techniques + dispense_technique: dispense_technique dispense_techniques: dispense_techniques + source: source sources: sources + target: target targets: targets tip_rack: tip_rack volume: volume @@ -4986,16 +5353,19 @@ liquid_handler.biomek: data_type: resource handler_key: targets_out label: targets - result: {} + placeholder_keys: {} + result: + return_info: return_info + success: success schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: LiquidHandlerTransferBiomek_Feedback type: object goal: + additionalProperties: false properties: aspirate_technique: type: string @@ -5008,25 +5378,18 @@ liquid_handler.biomek: tip_rack: type: string volume: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number - required: - - sources - - targets - - tip_rack - - volume - - aspirate_technique - - dispense_technique title: LiquidHandlerTransferBiomek_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: LiquidHandlerTransferBiomek_Result type: object required: @@ -5059,96 +5422,27 @@ liquid_handler.biomek: touch_tip: touch_tip use_channels: use_channels goal_default: - asp_flow_rates: - - 0.0 - asp_vols: - - 0.0 - blow_out_air_volume: - - 0.0 - delays: - - 0 - dis_flow_rates: - - 0.0 - dis_vols: - - 0.0 + asp_flow_rates: [] + asp_vols: [] + blow_out_air_volume: [] + delays: [] + dis_flow_rates: [] + dis_vols: [] is_96_well: false - liquid_height: - - 0.0 + liquid_height: [] mix_liquid_height: 0.0 mix_rate: 0 mix_stage: '' mix_times: 0 mix_vol: 0 - none_keys: - - '' - offsets: - - x: 0.0 - y: 0.0 - z: 0.0 - sources: - - category: '' - children: [] - config: '' - data: '' - id: '' - name: '' - parent: '' - pose: - orientation: - w: 1.0 - x: 0.0 - y: 0.0 - z: 0.0 - position: - x: 0.0 - y: 0.0 - z: 0.0 - sample_id: '' - type: '' + none_keys: [] + offsets: [] + sources: [] spread: '' - targets: - - category: '' - children: [] - config: '' - data: '' - id: '' - name: '' - parent: '' - pose: - orientation: - w: 1.0 - x: 0.0 - y: 0.0 - z: 0.0 - position: - x: 0.0 - y: 0.0 - z: 0.0 - sample_id: '' - type: '' - tip_racks: - - category: '' - children: [] - config: '' - data: '' - id: '' - name: '' - parent: '' - pose: - orientation: - w: 1.0 - x: 0.0 - y: 0.0 - z: 0.0 - position: - x: 0.0 - y: 0.0 - z: 0.0 - sample_id: '' - type: '' + targets: [] + tip_racks: [] touch_tip: false - use_channels: - - 0 + use_channels: [] handles: input: - data_key: sources @@ -5183,16 +5477,18 @@ liquid_handler.biomek: sources: unilabos_resources targets: unilabos_resources tip_racks: unilabos_resources - result: {} + result: + return_info: return_info + success: success schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: LiquidHandlerTransfer_Feedback type: object goal: + additionalProperties: false properties: asp_flow_rates: items: @@ -5208,8 +5504,6 @@ liquid_handler.biomek: type: array delays: items: - maximum: 2147483647 - minimum: -2147483648 type: integer type: array dis_flow_rates: @@ -5227,6 +5521,8 @@ liquid_handler.biomek: type: number type: array mix_liquid_height: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number mix_rate: maximum: 2147483647 @@ -5259,7 +5555,6 @@ liquid_handler.biomek: - x - y - z - title: offsets type: object type: array sources: @@ -5334,7 +5629,6 @@ liquid_handler.biomek: - pose - config - data - title: sources type: object type: array spread: @@ -5411,7 +5705,6 @@ liquid_handler.biomek: - pose - config - data - title: targets type: object type: array tip_racks: @@ -5486,50 +5779,23 @@ liquid_handler.biomek: - pose - config - data - title: tip_racks type: object type: array touch_tip: type: boolean use_channels: items: - maximum: 2147483647 - minimum: -2147483648 type: integer type: array - required: - - asp_vols - - dis_vols - - sources - - targets - - tip_racks - - use_channels - - asp_flow_rates - - dis_flow_rates - - offsets - - touch_tip - - liquid_height - - blow_out_air_volume - - spread - - is_96_well - - mix_stage - - mix_times - - mix_vol - - mix_rate - - mix_liquid_height - - delays - - none_keys title: LiquidHandlerTransfer_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: LiquidHandlerTransfer_Result type: object required: @@ -5539,7 +5805,7 @@ liquid_handler.biomek: type: LiquidHandlerTransfer module: unilabos.devices.liquid_handling.biomek:LiquidHandlerBiomek status_types: - success: String + success: '' type: python config_info: [] description: Biomek液体处理器设备,基于pylabrobot控制 @@ -5568,6 +5834,7 @@ liquid_handler.laiyu: goal: asp_vols: asp_vols blow_out_air_volume: blow_out_air_volume + delays: delays dis_vols: dis_vols flow_rates: flow_rates is_96_well: is_96_well @@ -5583,84 +5850,38 @@ liquid_handler.laiyu: targets: targets use_channels: use_channels goal_default: - asp_vols: - - 0.0 - blow_out_air_volume: - - 0.0 - dis_vols: - - 0.0 - flow_rates: - - 0.0 + asp_vols: [] + blow_out_air_volume: [] + dis_vols: [] + flow_rates: [] is_96_well: false - liquid_height: - - 0.0 + liquid_height: [] mix_liquid_height: 0.0 mix_rate: 0 mix_time: 0 mix_vol: 0 - none_keys: - - '' - offsets: - - x: 0.0 - y: 0.0 - z: 0.0 - reagent_sources: - - category: '' - children: [] - config: '' - data: '' - id: '' - name: '' - parent: '' - pose: - orientation: - w: 1.0 - x: 0.0 - y: 0.0 - z: 0.0 - position: - x: 0.0 - y: 0.0 - z: 0.0 - sample_id: '' - type: '' + none_keys: [] + offsets: [] + reagent_sources: [] spread: '' - targets: - - category: '' - children: [] - config: '' - data: '' - id: '' - name: '' - parent: '' - pose: - orientation: - w: 1.0 - x: 0.0 - y: 0.0 - z: 0.0 - position: - x: 0.0 - y: 0.0 - z: 0.0 - sample_id: '' - type: '' - use_channels: - - 0 + targets: [] + use_channels: [] handles: {} placeholder_keys: reagent_sources: unilabos_resources targets: unilabos_resources - result: {} + result: + return_info: return_info + success: success schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: LiquidHandlerAdd_Feedback type: object goal: + additionalProperties: false properties: asp_vols: items: @@ -5685,6 +5906,8 @@ liquid_handler.laiyu: type: number type: array mix_liquid_height: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number mix_rate: maximum: 2147483647 @@ -5715,7 +5938,6 @@ liquid_handler.laiyu: - x - y - z - title: offsets type: object type: array reagent_sources: @@ -5790,7 +6012,6 @@ liquid_handler.laiyu: - pose - config - data - title: reagent_sources type: object type: array spread: @@ -5867,43 +6088,21 @@ liquid_handler.laiyu: - pose - config - data - title: targets type: object type: array use_channels: items: - maximum: 2147483647 - minimum: -2147483648 type: integer type: array - required: - - asp_vols - - dis_vols - - reagent_sources - - targets - - use_channels - - flow_rates - - offsets - - liquid_height - - blow_out_air_volume - - spread - - is_96_well - - mix_time - - mix_vol - - mix_rate - - mix_liquid_height - - none_keys title: LiquidHandlerAdd_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: LiquidHandlerAdd_Result type: object required: @@ -5919,57 +6118,33 @@ liquid_handler.laiyu: liquid_height: liquid_height offsets: offsets resources: resources + spread: spread use_channels: use_channels vols: vols goal_default: - blow_out_air_volume: - - 0.0 - flow_rates: - - 0.0 - liquid_height: - - 0.0 - offsets: - - x: 0.0 - y: 0.0 - z: 0.0 - resources: - - category: '' - children: [] - config: '' - data: '' - id: '' - name: '' - parent: '' - pose: - orientation: - w: 1.0 - x: 0.0 - y: 0.0 - z: 0.0 - position: - x: 0.0 - y: 0.0 - z: 0.0 - sample_id: '' - type: '' + blow_out_air_volume: [] + flow_rates: [] + liquid_height: [] + offsets: [] + resources: [] spread: '' - use_channels: - - 0 - vols: - - 0.0 + use_channels: [] + vols: [] handles: {} placeholder_keys: resources: unilabos_resources - result: {} + result: + return_info: return_info + success: success schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: LiquidHandlerAspirate_Feedback type: object goal: + additionalProperties: false properties: blow_out_air_volume: items: @@ -5996,7 +6171,6 @@ liquid_handler.laiyu: - x - y - z - title: offsets type: object type: array resources: @@ -6071,41 +6245,27 @@ liquid_handler.laiyu: - pose - config - data - title: resources type: object type: array spread: type: string use_channels: items: - maximum: 2147483647 - minimum: -2147483648 type: integer type: array vols: items: type: number type: array - required: - - resources - - vols - - use_channels - - flow_rates - - offsets - - liquid_height - - blow_out_air_volume - - spread title: LiquidHandlerAspirate_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: LiquidHandlerAspirate_Result type: object required: @@ -6148,54 +6308,93 @@ liquid_handler.laiyu: goal: properties: asp_flow_rates: - type: string + items: + type: number + type: array asp_vols: - type: string + anyOf: + - items: + type: number + type: array + - type: number blow_out_air_volume: - type: string + items: + type: number + type: array delays: - type: string + items: + type: integer + type: array dis_flow_rates: - type: string + items: + type: number + type: array dis_vols: - type: string + anyOf: + - items: + type: number + type: array + - type: number is_96_well: default: false type: boolean liquid_height: - type: string + items: + type: number + type: array mix_liquid_height: - type: string + type: number mix_rate: - type: string + type: integer mix_stage: default: none + enum: + - none + - before + - after + - both type: string mix_times: - type: string + items: + type: integer + type: array mix_vol: - type: string + type: integer none_keys: default: [] items: type: string type: array offsets: - type: string + items: + type: object + type: array sources: - type: string + items: + type: object + type: array spread: default: wide + enum: + - wide + - tight + - custom type: string targets: - type: string + items: + type: object + type: array tip_racks: - type: string + items: + type: object + type: array touch_tip: default: false type: boolean use_channels: - type: string + items: + type: integer + type: array required: - sources - targets @@ -6217,60 +6416,35 @@ liquid_handler.laiyu: liquid_height: liquid_height offsets: offsets resources: resources + spread: spread use_channels: use_channels vols: vols goal_default: - blow_out_air_volume: - - 0 - flow_rates: - - 0.0 - offsets: - - x: 0.0 - y: 0.0 - z: 0.0 - resources: - - category: '' - children: [] - config: '' - data: '' - id: '' - name: '' - parent: '' - pose: - orientation: - w: 1.0 - x: 0.0 - y: 0.0 - z: 0.0 - position: - x: 0.0 - y: 0.0 - z: 0.0 - sample_id: '' - type: '' + blow_out_air_volume: [] + flow_rates: [] + offsets: [] + resources: [] spread: '' - use_channels: - - 0 - vols: - - 0.0 + use_channels: [] + vols: [] handles: {} placeholder_keys: resources: unilabos_resources - result: {} + result: + return_info: return_info + success: success schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: LiquidHandlerDispense_Feedback type: object goal: + additionalProperties: false properties: blow_out_air_volume: items: - maximum: 2147483647 - minimum: -2147483648 type: integer type: array flow_rates: @@ -6290,7 +6464,6 @@ liquid_handler.laiyu: - x - y - z - title: offsets type: object type: array resources: @@ -6365,40 +6538,27 @@ liquid_handler.laiyu: - pose - config - data - title: resources type: object type: array spread: type: string use_channels: items: - maximum: 2147483647 - minimum: -2147483648 type: integer type: array vols: items: type: number type: array - required: - - resources - - vols - - use_channels - - flow_rates - - offsets - - blow_out_air_volume - - spread title: LiquidHandlerDispense_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: LiquidHandlerDispense_Result type: object required: @@ -6415,45 +6575,24 @@ liquid_handler.laiyu: use_channels: use_channels goal_default: allow_nonzero_volume: false - offsets: - - x: 0.0 - y: 0.0 - z: 0.0 - tip_spots: - - category: '' - children: [] - config: '' - data: '' - id: '' - name: '' - parent: '' - pose: - orientation: - w: 1.0 - x: 0.0 - y: 0.0 - z: 0.0 - position: - x: 0.0 - y: 0.0 - z: 0.0 - sample_id: '' - type: '' - use_channels: - - 0 + offsets: [] + tip_spots: [] + use_channels: [] handles: {} placeholder_keys: tip_spots: unilabos_resources - result: {} + result: + return_info: return_info + success: success schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: LiquidHandlerDropTips_Feedback type: object goal: + additionalProperties: false properties: allow_nonzero_volume: type: boolean @@ -6470,7 +6609,6 @@ liquid_handler.laiyu: - x - y - z - title: offsets type: object type: array tip_spots: @@ -6545,31 +6683,21 @@ liquid_handler.laiyu: - pose - config - data - title: tip_spots type: object type: array use_channels: items: - maximum: 2147483647 - minimum: -2147483648 type: integer type: array - required: - - tip_spots - - use_channels - - offsets - - allow_nonzero_volume title: LiquidHandlerDropTips_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: LiquidHandlerDropTips_Result type: object required: @@ -6592,49 +6720,32 @@ liquid_handler.laiyu: mix_rate: 0.0 mix_time: 0 mix_vol: 0 - none_keys: - - '' - offsets: - - x: 0.0 - y: 0.0 - z: 0.0 - targets: - - category: '' - children: [] - config: '' - data: '' - id: '' - name: '' - parent: '' - pose: - orientation: - w: 1.0 - x: 0.0 - y: 0.0 - z: 0.0 - position: - x: 0.0 - y: 0.0 - z: 0.0 - sample_id: '' - type: '' + none_keys: [] + offsets: [] + targets: [] handles: {} placeholder_keys: targets: unilabos_resources - result: {} + result: + return_info: return_info + success: success schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: LiquidHandlerMix_Feedback type: object goal: + additionalProperties: false properties: height_to_bottom: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number mix_rate: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number mix_time: maximum: 2147483647 @@ -6661,7 +6772,6 @@ liquid_handler.laiyu: - x - y - z - title: offsets type: object type: array targets: @@ -6736,28 +6846,17 @@ liquid_handler.laiyu: - pose - config - data - title: targets type: object type: array - required: - - targets - - mix_time - - mix_vol - - height_to_bottom - - offsets - - mix_rate - - none_keys title: LiquidHandlerMix_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: LiquidHandlerMix_Result type: object required: @@ -6772,45 +6871,24 @@ liquid_handler.laiyu: tip_spots: tip_spots use_channels: use_channels goal_default: - offsets: - - x: 0.0 - y: 0.0 - z: 0.0 - tip_spots: - - category: '' - children: [] - config: '' - data: '' - id: '' - name: '' - parent: '' - pose: - orientation: - w: 1.0 - x: 0.0 - y: 0.0 - z: 0.0 - position: - x: 0.0 - y: 0.0 - z: 0.0 - sample_id: '' - type: '' - use_channels: - - 0 + offsets: [] + tip_spots: [] + use_channels: [] handles: {} placeholder_keys: tip_spots: unilabos_resources - result: {} + result: + return_info: return_info + success: success schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: LiquidHandlerPickUpTips_Feedback type: object goal: + additionalProperties: false properties: offsets: items: @@ -6825,7 +6903,6 @@ liquid_handler.laiyu: - x - y - z - title: offsets type: object type: array tip_spots: @@ -6900,30 +6977,21 @@ liquid_handler.laiyu: - pose - config - data - title: tip_spots type: object type: array use_channels: items: - maximum: 2147483647 - minimum: -2147483648 type: integer type: array - required: - - tip_spots - - use_channels - - offsets title: LiquidHandlerPickUpTips_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: LiquidHandlerPickUpTips_Result type: object required: @@ -6978,6 +7046,7 @@ liquid_handler.prcxi: goal: asp_vols: asp_vols blow_out_air_volume: blow_out_air_volume + delays: delays dis_vols: dis_vols flow_rates: flow_rates is_96_well: is_96_well @@ -6993,84 +7062,38 @@ liquid_handler.prcxi: targets: targets use_channels: use_channels goal_default: - asp_vols: - - 0.0 - blow_out_air_volume: - - 0.0 - dis_vols: - - 0.0 - flow_rates: - - 0.0 + asp_vols: [] + blow_out_air_volume: [] + dis_vols: [] + flow_rates: [] is_96_well: false - liquid_height: - - 0.0 + liquid_height: [] mix_liquid_height: 0.0 mix_rate: 0 mix_time: 0 mix_vol: 0 - none_keys: - - '' - offsets: - - x: 0.0 - y: 0.0 - z: 0.0 - reagent_sources: - - category: '' - children: [] - config: '' - data: '' - id: '' - name: '' - parent: '' - pose: - orientation: - w: 1.0 - x: 0.0 - y: 0.0 - z: 0.0 - position: - x: 0.0 - y: 0.0 - z: 0.0 - sample_id: '' - type: '' + none_keys: [] + offsets: [] + reagent_sources: [] spread: '' - targets: - - category: '' - children: [] - config: '' - data: '' - id: '' - name: '' - parent: '' - pose: - orientation: - w: 1.0 - x: 0.0 - y: 0.0 - z: 0.0 - position: - x: 0.0 - y: 0.0 - z: 0.0 - sample_id: '' - type: '' - use_channels: - - 0 + targets: [] + use_channels: [] handles: {} placeholder_keys: reagent_sources: unilabos_resources targets: unilabos_resources - result: {} + result: + return_info: return_info + success: success schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: LiquidHandlerAdd_Feedback type: object goal: + additionalProperties: false properties: asp_vols: items: @@ -7095,6 +7118,8 @@ liquid_handler.prcxi: type: number type: array mix_liquid_height: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number mix_rate: maximum: 2147483647 @@ -7125,7 +7150,6 @@ liquid_handler.prcxi: - x - y - z - title: offsets type: object type: array reagent_sources: @@ -7200,7 +7224,6 @@ liquid_handler.prcxi: - pose - config - data - title: reagent_sources type: object type: array spread: @@ -7277,43 +7300,21 @@ liquid_handler.prcxi: - pose - config - data - title: targets type: object type: array use_channels: items: - maximum: 2147483647 - minimum: -2147483648 type: integer type: array - required: - - asp_vols - - dis_vols - - reagent_sources - - targets - - use_channels - - flow_rates - - offsets - - liquid_height - - blow_out_air_volume - - spread - - is_96_well - - mix_time - - mix_vol - - mix_rate - - mix_liquid_height - - none_keys title: LiquidHandlerAdd_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: LiquidHandlerAdd_Result type: object required: @@ -7329,57 +7330,33 @@ liquid_handler.prcxi: liquid_height: liquid_height offsets: offsets resources: resources + spread: spread use_channels: use_channels vols: vols goal_default: - blow_out_air_volume: - - 0.0 - flow_rates: - - 0.0 - liquid_height: - - 0.0 - offsets: - - x: 0.0 - y: 0.0 - z: 0.0 - resources: - - category: '' - children: [] - config: '' - data: '' - id: '' - name: '' - parent: '' - pose: - orientation: - w: 1.0 - x: 0.0 - y: 0.0 - z: 0.0 - position: - x: 0.0 - y: 0.0 - z: 0.0 - sample_id: '' - type: '' + blow_out_air_volume: [] + flow_rates: [] + liquid_height: [] + offsets: [] + resources: [] spread: '' - use_channels: - - 0 - vols: - - 0.0 + use_channels: [] + vols: [] handles: {} placeholder_keys: resources: unilabos_resources - result: {} + result: + return_info: return_info + success: success schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: LiquidHandlerAspirate_Feedback type: object goal: + additionalProperties: false properties: blow_out_air_volume: items: @@ -7406,7 +7383,6 @@ liquid_handler.prcxi: - x - y - z - title: offsets type: object type: array resources: @@ -7481,41 +7457,27 @@ liquid_handler.prcxi: - pose - config - data - title: resources type: object type: array spread: type: string use_channels: items: - maximum: 2147483647 - minimum: -2147483648 type: integer type: array vols: items: type: number type: array - required: - - resources - - vols - - use_channels - - flow_rates - - offsets - - liquid_height - - blow_out_air_volume - - spread title: LiquidHandlerAspirate_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: LiquidHandlerAspirate_Result type: object required: @@ -7646,11 +7608,14 @@ liquid_handler.prcxi: goal: properties: tip_racks: - type: string + items: + type: object + type: array required: - tip_racks type: object - result: {} + result: + type: string required: - goal title: iter_tips参数 @@ -7689,31 +7654,6 @@ liquid_handler.prcxi: title: move_to参数 type: object type: UniLabJsonCommandAsync - auto-post_init: - feedback: {} - goal: {} - goal_default: - ros_node: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - ros_node: - type: object - required: - - ros_node - type: object - result: {} - required: - - goal - title: post_init参数 - type: object - type: UniLabJsonCommand auto-run_protocol: feedback: {} goal: {} @@ -7824,7 +7764,9 @@ liquid_handler.prcxi: goal: properties: targets: - type: string + items: + type: object + type: array required: - targets type: object @@ -7870,41 +7812,39 @@ liquid_handler.prcxi: discard_tips: feedback: {} goal: + allow_nonzero_volume: allow_nonzero_volume + offsets: offsets use_channels: use_channels goal_default: - use_channels: - - 0 + use_channels: [] handles: {} - result: {} + placeholder_keys: {} + result: + return_info: return_info + success: success schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: LiquidHandlerDiscardTips_Feedback type: object goal: + additionalProperties: false properties: use_channels: items: - maximum: 2147483647 - minimum: -2147483648 type: integer type: array - required: - - use_channels title: LiquidHandlerDiscardTips_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: LiquidHandlerDiscardTips_Result type: object required: @@ -7917,63 +7857,38 @@ liquid_handler.prcxi: goal: blow_out_air_volume: blow_out_air_volume flow_rates: flow_rates + liquid_height: liquid_height offsets: offsets resources: resources spread: spread use_channels: use_channels vols: vols goal_default: - blow_out_air_volume: - - 0 - flow_rates: - - 0.0 - offsets: - - x: 0.0 - y: 0.0 - z: 0.0 - resources: - - category: '' - children: [] - config: '' - data: '' - id: '' - name: '' - parent: '' - pose: - orientation: - w: 1.0 - x: 0.0 - y: 0.0 - z: 0.0 - position: - x: 0.0 - y: 0.0 - z: 0.0 - sample_id: '' - type: '' + blow_out_air_volume: [] + flow_rates: [] + offsets: [] + resources: [] spread: '' - use_channels: - - 0 - vols: - - 0.0 + use_channels: [] + vols: [] handles: {} placeholder_keys: resources: unilabos_resources - result: {} + result: + return_info: return_info + success: success schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: LiquidHandlerDispense_Feedback type: object goal: + additionalProperties: false properties: blow_out_air_volume: items: - maximum: 2147483647 - minimum: -2147483648 type: integer type: array flow_rates: @@ -7993,7 +7908,6 @@ liquid_handler.prcxi: - x - y - z - title: offsets type: object type: array resources: @@ -8068,40 +7982,27 @@ liquid_handler.prcxi: - pose - config - data - title: resources type: object type: array spread: type: string use_channels: items: - maximum: 2147483647 - minimum: -2147483648 type: integer type: array vols: items: type: number type: array - required: - - resources - - vols - - use_channels - - flow_rates - - offsets - - blow_out_air_volume - - spread title: LiquidHandlerDispense_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: LiquidHandlerDispense_Result type: object required: @@ -8118,45 +8019,24 @@ liquid_handler.prcxi: use_channels: use_channels goal_default: allow_nonzero_volume: false - offsets: - - x: 0.0 - y: 0.0 - z: 0.0 - tip_spots: - - category: '' - children: [] - config: '' - data: '' - id: '' - name: '' - parent: '' - pose: - orientation: - w: 1.0 - x: 0.0 - y: 0.0 - z: 0.0 - position: - x: 0.0 - y: 0.0 - z: 0.0 - sample_id: '' - type: '' - use_channels: - - 0 + offsets: [] + tip_spots: [] + use_channels: [] handles: {} placeholder_keys: tip_spots: unilabos_resources - result: {} + result: + return_info: return_info + success: success schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: LiquidHandlerDropTips_Feedback type: object goal: + additionalProperties: false properties: allow_nonzero_volume: type: boolean @@ -8173,7 +8053,6 @@ liquid_handler.prcxi: - x - y - z - title: offsets type: object type: array tip_spots: @@ -8248,31 +8127,21 @@ liquid_handler.prcxi: - pose - config - data - title: tip_spots type: object type: array use_channels: items: - maximum: 2147483647 - minimum: -2147483648 type: integer type: array - required: - - tip_spots - - use_channels - - offsets - - allow_nonzero_volume title: LiquidHandlerDropTips_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: LiquidHandlerDropTips_Result type: object required: @@ -8295,49 +8164,32 @@ liquid_handler.prcxi: mix_rate: 0.0 mix_time: 0 mix_vol: 0 - none_keys: - - '' - offsets: - - x: 0.0 - y: 0.0 - z: 0.0 - targets: - - category: '' - children: [] - config: '' - data: '' - id: '' - name: '' - parent: '' - pose: - orientation: - w: 1.0 - x: 0.0 - y: 0.0 - z: 0.0 - position: - x: 0.0 - y: 0.0 - z: 0.0 - sample_id: '' - type: '' + none_keys: [] + offsets: [] + targets: [] handles: {} placeholder_keys: targets: unilabos_resources - result: {} + result: + return_info: return_info + success: success schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: LiquidHandlerMix_Feedback type: object goal: + additionalProperties: false properties: height_to_bottom: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number mix_rate: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number mix_time: maximum: 2147483647 @@ -8364,7 +8216,6 @@ liquid_handler.prcxi: - x - y - z - title: offsets type: object type: array targets: @@ -8439,28 +8290,17 @@ liquid_handler.prcxi: - pose - config - data - title: targets type: object type: array - required: - - targets - - mix_time - - mix_vol - - height_to_bottom - - offsets - - mix_rate - - none_keys title: LiquidHandlerMix_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: LiquidHandlerMix_Result type: object required: @@ -8476,6 +8316,7 @@ liquid_handler.prcxi: get_direction: get_direction intermediate_locations: intermediate_locations pickup_direction: pickup_direction + pickup_distance_from_top: pickup_distance_from_top pickup_offset: pickup_offset plate: plate put_direction: put_direction @@ -8488,10 +8329,7 @@ liquid_handler.prcxi: z: 0.0 drop_direction: '' get_direction: '' - intermediate_locations: - - x: 0.0 - y: 0.0 - z: 0.0 + intermediate_locations: [] pickup_direction: '' pickup_distance_from_top: 0.0 pickup_offset: @@ -8548,24 +8386,32 @@ liquid_handler.prcxi: plate: unilabos_resources to: unilabos_resources result: - name: name + return_info: return_info + success: success schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: LiquidHandlerMovePlate_Feedback type: object goal: + additionalProperties: false properties: destination_offset: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -8590,20 +8436,28 @@ liquid_handler.prcxi: - x - y - z - title: intermediate_locations type: object type: array pickup_direction: type: string pickup_distance_from_top: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number pickup_offset: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -8612,6 +8466,7 @@ liquid_handler.prcxi: title: pickup_offset type: object plate: + additionalProperties: false properties: category: type: string @@ -8630,16 +8485,26 @@ liquid_handler.prcxi: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -8649,12 +8514,19 @@ liquid_handler.prcxi: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -8687,12 +8559,19 @@ liquid_handler.prcxi: put_direction: type: string resource_offset: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -8701,6 +8580,7 @@ liquid_handler.prcxi: title: resource_offset type: object to: + additionalProperties: false properties: category: type: string @@ -8719,16 +8599,26 @@ liquid_handler.prcxi: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -8738,12 +8628,19 @@ liquid_handler.prcxi: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -8773,29 +8670,15 @@ liquid_handler.prcxi: - data title: to type: object - required: - - plate - - to - - intermediate_locations - - resource_offset - - pickup_offset - - destination_offset - - pickup_direction - - drop_direction - - get_direction - - put_direction - - pickup_distance_from_top title: LiquidHandlerMovePlate_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: LiquidHandlerMovePlate_Result type: object required: @@ -8810,45 +8693,24 @@ liquid_handler.prcxi: tip_spots: tip_spots use_channels: use_channels goal_default: - offsets: - - x: 0.0 - y: 0.0 - z: 0.0 - tip_spots: - - category: '' - children: [] - config: '' - data: '' - id: '' - name: '' - parent: '' - pose: - orientation: - w: 1.0 - x: 0.0 - y: 0.0 - z: 0.0 - position: - x: 0.0 - y: 0.0 - z: 0.0 - sample_id: '' - type: '' - use_channels: - - 0 + offsets: [] + tip_spots: [] + use_channels: [] handles: {} placeholder_keys: tip_spots: unilabos_resources - result: {} + result: + return_info: return_info + success: success schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: LiquidHandlerPickUpTips_Feedback type: object goal: + additionalProperties: false properties: offsets: items: @@ -8863,7 +8725,6 @@ liquid_handler.prcxi: - x - y - z - title: offsets type: object type: array tip_spots: @@ -8938,30 +8799,21 @@ liquid_handler.prcxi: - pose - config - data - title: tip_spots type: object type: array use_channels: items: - maximum: 2147483647 - minimum: -2147483648 type: integer type: array - required: - - tip_spots - - use_channels - - offsets title: LiquidHandlerPickUpTips_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: LiquidHandlerPickUpTips_Result type: object required: @@ -8986,48 +8838,18 @@ liquid_handler.prcxi: vols: vols waste_liquid: waste_liquid goal_default: - blow_out_air_volume: - - 0.0 - delays: - - 0 - flow_rates: - - 0.0 + blow_out_air_volume: [] + delays: [] + flow_rates: [] is_96_well: false - liquid_height: - - 0.0 - none_keys: - - '' - offsets: - - x: 0.0 - y: 0.0 - z: 0.0 - sources: - - category: '' - children: [] - config: '' - data: '' - id: '' - name: '' - parent: '' - pose: - orientation: - w: 1.0 - x: 0.0 - y: 0.0 - z: 0.0 - position: - x: 0.0 - y: 0.0 - z: 0.0 - sample_id: '' - type: '' + liquid_height: [] + none_keys: [] + offsets: [] + sources: [] spread: '' - top: - - 0.0 - use_channels: - - 0 - vols: - - 0.0 + top: [] + use_channels: [] + vols: [] waste_liquid: category: '' children: [] @@ -9052,16 +8874,18 @@ liquid_handler.prcxi: placeholder_keys: sources: unilabos_resources waste_liquid: unilabos_resources - result: {} + result: + return_info: return_info + success: success schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: LiquidHandlerRemove_Feedback type: object goal: + additionalProperties: false properties: blow_out_air_volume: items: @@ -9069,8 +8893,6 @@ liquid_handler.prcxi: type: array delays: items: - maximum: 2147483647 - minimum: -2147483648 type: integer type: array flow_rates: @@ -9100,7 +8922,6 @@ liquid_handler.prcxi: - x - y - z - title: offsets type: object type: array sources: @@ -9175,7 +8996,6 @@ liquid_handler.prcxi: - pose - config - data - title: sources type: object type: array spread: @@ -9186,8 +9006,6 @@ liquid_handler.prcxi: type: array use_channels: items: - maximum: 2147483647 - minimum: -2147483648 type: integer type: array vols: @@ -9195,6 +9013,7 @@ liquid_handler.prcxi: type: number type: array waste_liquid: + additionalProperties: false properties: category: type: string @@ -9213,16 +9032,26 @@ liquid_handler.prcxi: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -9232,12 +9061,19 @@ liquid_handler.prcxi: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -9267,31 +9103,15 @@ liquid_handler.prcxi: - data title: waste_liquid type: object - required: - - vols - - sources - - waste_liquid - - use_channels - - flow_rates - - offsets - - liquid_height - - blow_out_air_volume - - spread - - delays - - is_96_well - - top - - none_keys title: LiquidHandlerRemove_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: LiquidHandlerRemove_Result type: object required: @@ -9306,30 +9126,9 @@ liquid_handler.prcxi: volumes: volumes wells: wells goal_default: - liquid_names: - - '' - volumes: - - 0.0 - wells: - - category: '' - children: [] - config: '' - data: '' - id: '' - name: '' - parent: '' - pose: - orientation: - w: 1.0 - x: 0.0 - y: 0.0 - z: 0.0 - position: - x: 0.0 - y: 0.0 - z: 0.0 - sample_id: '' - type: '' + liquid_names: [] + volumes: [] + wells: [] handles: input: - data_key: wells @@ -9345,16 +9144,17 @@ liquid_handler.prcxi: label: 已设定液体孔 placeholder_keys: wells: unilabos_resources - result: {} + result: + return_info: return_info schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: LiquidHandlerSetLiquid_Feedback type: object goal: + additionalProperties: false properties: liquid_names: items: @@ -9436,21 +9236,15 @@ liquid_handler.prcxi: - pose - config - data - title: wells type: object type: array - required: - - wells - - liquid_names - - volumes title: LiquidHandlerSetLiquid_Goal type: object result: + additionalProperties: false properties: return_info: type: string - required: - - return_info title: LiquidHandlerSetLiquid_Result type: object required: @@ -9503,34 +9297,73 @@ liquid_handler.prcxi: type: string type: array plate: + additionalProperties: false properties: category: + description: Field of type type: string children: + description: Field of type items: + description: Field of type type: string type: array config: + description: Field of type type: string data: + description: Field of type type: string id: + description: Field of type type: string name: + description: Field of type type: string parent: + description: Field of type type: string pose: + additionalProperties: false + description: Field of type properties: orientation: + additionalProperties: false + description: Field of type properties: w: + description: Field of type + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + description: Field of type + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + description: Field of type + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + description: Field of type + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -9540,12 +9373,27 @@ liquid_handler.prcxi: title: orientation type: object position: + additionalProperties: false + description: Field of type properties: x: + description: Field of type + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + description: Field of type + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + description: Field of type + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -9559,20 +9407,13 @@ liquid_handler.prcxi: title: pose type: object sample_id: + description: Field of type type: string type: + description: Field of type type: string - required: - - id - - name - - sample_id - - children - - parent - - type - - category - - pose - - config - - data title: plate type: object volumes: @@ -9626,6 +9467,11 @@ liquid_handler.prcxi: description: Resource ID title: Id type: string + machine_name: + default: '' + description: Machine this resource belongs to + title: Machine Name + type: string model: additionalProperties: true description: Resource model @@ -9689,6 +9535,14 @@ liquid_handler.prcxi: - rounded_rectangle title: Cross Section Type type: string + extra: + anyOf: + - additionalProperties: true + type: object + - type: 'null' + default: null + description: Extra data + title: Extra layout: default: x-y description: Resource layout @@ -9809,39 +9663,22 @@ liquid_handler.prcxi: goal: tip_racks: tip_racks goal_default: - tip_racks: - - category: '' - children: [] - config: '' - data: '' - id: '' - name: '' - parent: '' - pose: - orientation: - w: 1.0 - x: 0.0 - y: 0.0 - z: 0.0 - position: - x: 0.0 - y: 0.0 - z: 0.0 - sample_id: '' - type: '' + tip_racks: [] handles: {} placeholder_keys: tip_racks: unilabos_resources - result: {} + result: + return_info: return_info + success: success schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: LiquidHandlerSetTipRack_Feedback type: object goal: + additionalProperties: false properties: tip_racks: items: @@ -9915,22 +9752,17 @@ liquid_handler.prcxi: - pose - config - data - title: tip_racks type: object type: array - required: - - tip_racks title: LiquidHandlerSetTipRack_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: LiquidHandlerSetTipRack_Result type: object required: @@ -9963,20 +9795,22 @@ liquid_handler.prcxi: description: '' properties: feedback: + additionalProperties: false properties: current_status: type: string progress: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number transferred_volume: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number - required: - - progress - - transferred_volume - - current_status title: Transfer_Feedback type: object goal: + additionalProperties: false properties: amount: type: string @@ -9989,31 +9823,27 @@ liquid_handler.prcxi: rinsing_solvent: type: string rinsing_volume: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number solid: type: boolean time: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number to_vessel: type: string viscous: type: boolean volume: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number - required: - - from_vessel - - to_vessel - - volume - - amount - - time - - viscous - - rinsing_solvent - - rinsing_volume - - rinsing_repeats - - solid title: Transfer_Goal type: object result: + additionalProperties: false properties: message: type: string @@ -10021,10 +9851,6 @@ liquid_handler.prcxi: type: string success: type: boolean - required: - - success - - message - - return_info title: Transfer_Result type: object required: @@ -10057,96 +9883,27 @@ liquid_handler.prcxi: touch_tip: touch_tip use_channels: use_channels goal_default: - asp_flow_rates: - - 0.0 - asp_vols: - - 0.0 - blow_out_air_volume: - - 0.0 - delays: - - 0 - dis_flow_rates: - - 0.0 - dis_vols: - - 0.0 + asp_flow_rates: [] + asp_vols: [] + blow_out_air_volume: [] + delays: [] + dis_flow_rates: [] + dis_vols: [] is_96_well: false - liquid_height: - - 0.0 + liquid_height: [] mix_liquid_height: 0.0 mix_rate: 0 mix_stage: '' mix_times: 0 mix_vol: 0 - none_keys: - - '' - offsets: - - x: 0.0 - y: 0.0 - z: 0.0 - sources: - - category: '' - children: [] - config: '' - data: '' - id: '' - name: '' - parent: '' - pose: - orientation: - w: 1.0 - x: 0.0 - y: 0.0 - z: 0.0 - position: - x: 0.0 - y: 0.0 - z: 0.0 - sample_id: '' - type: '' + none_keys: [] + offsets: [] + sources: [] spread: '' - targets: - - category: '' - children: [] - config: '' - data: '' - id: '' - name: '' - parent: '' - pose: - orientation: - w: 1.0 - x: 0.0 - y: 0.0 - z: 0.0 - position: - x: 0.0 - y: 0.0 - z: 0.0 - sample_id: '' - type: '' - tip_racks: - - category: '' - children: [] - config: '' - data: '' - id: '' - name: '' - parent: '' - pose: - orientation: - w: 1.0 - x: 0.0 - y: 0.0 - z: 0.0 - position: - x: 0.0 - y: 0.0 - z: 0.0 - sample_id: '' - type: '' + targets: [] + tip_racks: [] touch_tip: false - use_channels: - - 0 + use_channels: [] handles: input: - data_key: sources @@ -10179,16 +9936,18 @@ liquid_handler.prcxi: sources: unilabos_resources targets: unilabos_resources tip_racks: unilabos_resources - result: {} + result: + return_info: return_info + success: success schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: LiquidHandlerTransfer_Feedback type: object goal: + additionalProperties: false properties: asp_flow_rates: items: @@ -10204,8 +9963,6 @@ liquid_handler.prcxi: type: array delays: items: - maximum: 2147483647 - minimum: -2147483648 type: integer type: array dis_flow_rates: @@ -10223,6 +9980,8 @@ liquid_handler.prcxi: type: number type: array mix_liquid_height: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number mix_rate: maximum: 2147483647 @@ -10255,7 +10014,6 @@ liquid_handler.prcxi: - x - y - z - title: offsets type: object type: array sources: @@ -10330,7 +10088,6 @@ liquid_handler.prcxi: - pose - config - data - title: sources type: object type: array spread: @@ -10407,7 +10164,6 @@ liquid_handler.prcxi: - pose - config - data - title: targets type: object type: array tip_racks: @@ -10482,50 +10238,23 @@ liquid_handler.prcxi: - pose - config - data - title: tip_racks type: object type: array touch_tip: type: boolean use_channels: items: - maximum: 2147483647 - minimum: -2147483648 type: integer type: array - required: - - asp_vols - - dis_vols - - sources - - targets - - tip_racks - - use_channels - - asp_flow_rates - - dis_flow_rates - - offsets - - touch_tip - - liquid_height - - blow_out_air_volume - - spread - - is_96_well - - mix_stage - - mix_times - - mix_vol - - mix_rate - - mix_liquid_height - - delays - - none_keys title: LiquidHandlerTransfer_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: LiquidHandlerTransfer_Result type: object required: @@ -10597,11 +10326,13 @@ liquid_handler.revvity: action_value_mappings: run: feedback: + gantt: gantt status: status goal: + file_path: file_path params: params resource: resource - wf_name: file_path + wf_name: wf_name goal_default: params: '' resource: @@ -10626,27 +10357,29 @@ liquid_handler.revvity: type: '' wf_name: '' handles: {} + placeholder_keys: {} result: + return_info: return_info success: success schema: description: '' properties: feedback: + additionalProperties: false properties: gantt: type: string status: type: string - required: - - status - - gantt title: WorkStationRun_Feedback type: object goal: + additionalProperties: false properties: params: type: string resource: + additionalProperties: false properties: category: type: string @@ -10665,16 +10398,26 @@ liquid_handler.revvity: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -10684,12 +10427,19 @@ liquid_handler.revvity: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -10721,21 +10471,15 @@ liquid_handler.revvity: type: object wf_name: type: string - required: - - wf_name - - params - - resource title: WorkStationRun_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: WorkStationRun_Result type: object required: @@ -10764,7 +10508,7 @@ liquid_handler.revvity: success: type: boolean required: - - success - status + - success type: object version: 1.0.0 diff --git a/unilabos/registry/devices/neware_battery_test_system.yaml b/unilabos/registry/devices/neware_battery_test_system.yaml index ea6bedc4..4f3b972a 100644 --- a/unilabos/registry/devices/neware_battery_test_system.yaml +++ b/unilabos/registry/devices/neware_battery_test_system.yaml @@ -5,31 +5,6 @@ neware_battery_test_system: - battery_test class: action_value_mappings: - auto-post_init: - feedback: {} - goal: {} - goal_default: - ros_node: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - ros_node: - type: string - required: - - ros_node - type: object - result: {} - required: - - goal - title: post_init参数 - type: object - type: UniLabJsonCommand auto-print_status_summary: feedback: {} goal: {} @@ -66,7 +41,8 @@ neware_battery_test_system: properties: {} required: [] type: object - result: {} + result: + type: boolean required: - goal title: test_connection参数 @@ -77,9 +53,8 @@ neware_battery_test_system: goal: {} goal_default: {} handles: {} - result: - return_info: return_info - success: success + placeholder_keys: {} + result: {} schema: description: 调试方法:显示所有资源的实际名称 properties: @@ -89,19 +64,10 @@ neware_battery_test_system: required: [] type: object result: - properties: - return_info: - description: 资源调试信息 - type: string - success: - description: 是否成功 - type: boolean - required: - - return_info - - success type: object required: - goal + title: debug_resource_names参数 type: object type: UniLabJsonCommand export_status_json: @@ -111,9 +77,8 @@ neware_battery_test_system: goal_default: filepath: bts_status.json handles: {} - result: - return_info: return_info - success: success + placeholder_keys: {} + result: {} schema: description: 导出当前状态数据到JSON文件 properties: @@ -127,19 +92,10 @@ neware_battery_test_system: required: [] type: object result: - properties: - return_info: - description: 导出操作结果信息 - type: string - success: - description: 导出是否成功 - type: boolean - required: - - return_info - - success type: object required: - goal + title: export_status_json参数 type: object type: UniLabJsonCommand get_device_summary: @@ -181,10 +137,8 @@ neware_battery_test_system: goal_default: plate_num: null handles: {} - result: - plate_data: plate_data - return_info: return_info - success: success + placeholder_keys: {} + result: {} schema: description: 获取指定盘或所有盘的状态信息 properties: @@ -193,29 +147,14 @@ neware_battery_test_system: properties: plate_num: description: 盘号 (1 或 2),如果为null则返回所有盘的状态 - maximum: 2 - minimum: 1 type: integer required: [] type: object result: - properties: - plate_data: - description: 盘状态数据(单盘或所有盘) - type: object - return_info: - description: 操作结果信息 - type: string - success: - description: 查询是否成功 - type: boolean - required: - - return_info - - success - - plate_data type: object required: - goal + title: get_plate_status参数 type: object type: UniLabJsonCommand print_status_summary_action: @@ -223,9 +162,8 @@ neware_battery_test_system: goal: {} goal_default: {} handles: {} - result: - return_info: return_info - success: success + placeholder_keys: {} + result: {} schema: description: 打印通道状态摘要信息到控制台 properties: @@ -235,28 +173,21 @@ neware_battery_test_system: required: [] type: object result: - properties: - return_info: - description: 打印操作结果信息 - type: string - success: - description: 打印是否成功 - type: boolean - required: - - return_info - - success type: object required: - goal + title: print_status_summary_action参数 type: object type: UniLabJsonCommand query_plate_action: feedback: {} goal: - string: plate_id + plate_id: plate_id + string: string goal_default: string: '' handles: {} + placeholder_keys: {} result: return_info: return_info success: success @@ -264,27 +195,23 @@ neware_battery_test_system: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: StrSingleInput_Feedback type: object goal: + additionalProperties: false properties: string: type: string - required: - - string title: StrSingleInput_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: StrSingleInput_Result type: object required: @@ -298,13 +225,11 @@ neware_battery_test_system: csv_path: string output_dir: string goal_default: - csv_path: '' + csv_path: null output_dir: . handles: {} - result: - return_info: return_info - submitted_count: submitted_count - success: success + placeholder_keys: {} + result: {} schema: description: 从CSV文件批量提交Neware测试任务 properties: @@ -315,31 +240,17 @@ neware_battery_test_system: description: 输入CSV文件的绝对路径 type: string output_dir: + default: . description: 输出目录(用于存储XML和备份文件),默认当前目录 type: string required: - csv_path type: object result: - properties: - return_info: - description: 执行结果详细信息 - type: string - submitted_count: - description: 成功提交的任务数量 - type: integer - success: - description: 是否成功 - type: boolean - total_count: - description: CSV文件中的总行数 - type: integer - required: - - return_info - - success type: object required: - goal + title: submit_from_csv参数 type: object type: UniLabJsonCommand test_connection_action: @@ -347,9 +258,8 @@ neware_battery_test_system: goal: {} goal_default: {} handles: {} - result: - return_info: return_info - success: success + placeholder_keys: {} + result: {} schema: description: 测试与电池测试系统的TCP连接 properties: @@ -359,19 +269,10 @@ neware_battery_test_system: required: [] type: object result: - properties: - return_info: - description: 连接测试结果信息 - type: string - success: - description: 连接测试是否成功 - type: boolean - required: - - return_info - - success type: object required: - goal + title: test_connection_action参数 type: object type: UniLabJsonCommand upload_backup_to_oss: @@ -392,12 +293,8 @@ neware_battery_test_system: handler_key: uploaded_files io_type: sink label: Uploaded Files (with standard flow info) - result: - failed_files: failed_files - return_info: return_info - success: success - total_count: total_count - uploaded_count: uploaded_count + placeholder_keys: {} + result: {} schema: description: 上传备份文件到阿里云OSS properties: @@ -417,65 +314,17 @@ neware_battery_test_system: required: [] type: object result: - properties: - failed_files: - description: 上传失败的文件名列表 - items: - type: string - type: array - return_info: - description: 上传操作结果信息 - type: string - success: - description: 上传是否成功 - type: boolean - total_count: - description: 总文件数 - type: integer - uploaded_count: - description: 成功上传的文件数 - type: integer - uploaded_files: - description: 成功上传的文件详情列表 - items: - properties: - Battery_Code: - description: 电池编码 - type: string - Electrolyte_Code: - description: 电解液编码 - type: string - filename: - description: 文件名 - type: string - url: - description: OSS下载链接 - type: string - required: - - filename - - url - - Battery_Code - - Electrolyte_Code - type: object - type: array - required: - - return_info - - success - - uploaded_count - - total_count - - failed_files - - uploaded_files type: object required: - goal + title: upload_backup_to_oss参数 type: object type: UniLabJsonCommand module: unilabos.devices.neware_battery_test_system.neware_battery_test_system:NewareBatteryTestSystem status_types: - channel_status: dict - connection_info: dict + channel_status: Dict[int, Dict] + connection_info: Dict[str, str] device_summary: dict - plate_status: dict status: str total_channels: int type: python @@ -517,23 +366,24 @@ neware_battery_test_system: data: properties: channel_status: + additionalProperties: + type: object type: object connection_info: + additionalProperties: + type: string type: object device_summary: type: object - plate_status: - type: object status: type: string total_channels: type: integer required: - - status - channel_status - connection_info - - total_channels - - plate_status - device_summary + - status + - total_channels type: object version: 1.0.0 diff --git a/unilabos/registry/devices/opcua_example.yaml b/unilabos/registry/devices/opcua_example.yaml index a7e6b4e3..271fd682 100644 --- a/unilabos/registry/devices/opcua_example.yaml +++ b/unilabos/registry/devices/opcua_example.yaml @@ -142,8 +142,7 @@ opcua_example: type: object type: UniLabJsonCommand module: unilabos.device_comms.opcua_client.client:OpcUaClient - status_types: - node_value: String + status_types: {} type: python config_info: [] description: null @@ -167,10 +166,7 @@ opcua_example: - url type: object data: - properties: - node_value: - type: string - required: - - node_value + properties: {} + required: [] type: object version: 1.0.0 diff --git a/unilabos/registry/devices/opsky_ATR30007.yaml b/unilabos/registry/devices/opsky_ATR30007.yaml index ee8b8871..a3fa7df8 100644 --- a/unilabos/registry/devices/opsky_ATR30007.yaml +++ b/unilabos/registry/devices/opsky_ATR30007.yaml @@ -80,7 +80,8 @@ opsky_ATR30007: type: string required: [] type: object - result: {} + result: + type: object required: - goal title: run_once参数 diff --git a/unilabos/registry/devices/organic_miscellaneous.yaml b/unilabos/registry/devices/organic_miscellaneous.yaml index 3085c823..c1290bea 100644 --- a/unilabos/registry/devices/organic_miscellaneous.yaml +++ b/unilabos/registry/devices/organic_miscellaneous.yaml @@ -100,42 +100,41 @@ rotavap.one: type: object type: UniLabJsonCommand set_timer: - feedback: {} + feedback: + status: status goal: command: command goal_default: command: '' handles: {} + placeholder_keys: {} result: + return_info: return_info success: success schema: description: '' properties: feedback: + additionalProperties: false properties: status: type: string - required: - - status title: SendCmd_Feedback type: object goal: + additionalProperties: false properties: command: type: string - required: - - command title: SendCmd_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: SendCmd_Result type: object required: @@ -250,9 +249,13 @@ separator.homemade: feedback: status: status goal: + event: event settling_time: settling_time stir_speed: stir_speed - stir_time: stir_time, + stir_time: stir_time + time: time + time_spec: time_spec + vessel: vessel goal_default: event: '' settling_time: '' @@ -281,34 +284,42 @@ separator.homemade: sample_id: '' type: '' handles: {} + placeholder_keys: {} result: + message: message + return_info: return_info success: success schema: description: '' properties: feedback: + additionalProperties: false properties: status: type: string - required: - - status title: Stir_Feedback type: object goal: + additionalProperties: false properties: event: type: string settling_time: type: string stir_speed: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number stir_time: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number time: type: string time_spec: type: string vessel: + additionalProperties: false properties: category: type: string @@ -327,16 +338,26 @@ separator.homemade: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -346,12 +367,19 @@ separator.homemade: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -381,17 +409,10 @@ separator.homemade: - data title: vessel type: object - required: - - vessel - - time - - event - - time_spec - - stir_time - - stir_speed - - settling_time title: Stir_Goal type: object result: + additionalProperties: false properties: message: type: string @@ -399,10 +420,6 @@ separator.homemade: type: string success: type: boolean - required: - - success - - message - - return_info title: Stir_Result type: object required: @@ -418,36 +435,34 @@ separator.homemade: goal_default: command: '' handles: {} + placeholder_keys: {} result: + return_info: return_info success: success schema: description: '' properties: feedback: + additionalProperties: false properties: status: type: string - required: - - status title: SendCmd_Feedback type: object goal: + additionalProperties: false properties: command: type: string - required: - - command title: SendCmd_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: SendCmd_Result type: object required: diff --git a/unilabos/registry/devices/post_process_station.yaml b/unilabos/registry/devices/post_process_station.yaml index be42bad4..1614a2c3 100644 --- a/unilabos/registry/devices/post_process_station.yaml +++ b/unilabos/registry/devices/post_process_station.yaml @@ -28,31 +28,6 @@ post_process_station: title: load_config参数 type: object type: UniLabJsonCommand - auto-post_init: - feedback: {} - goal: {} - goal_default: - ros_node: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - ros_node: - type: string - required: - - ros_node - type: object - result: {} - required: - - goal - title: post_init参数 - type: object - type: UniLabJsonCommand auto-print_cache_stats: feedback: {} goal: {} @@ -104,42 +79,41 @@ post_process_station: type: object type: UniLabJsonCommand disconnect: - feedback: {} + feedback: + status: status goal: - command: {} + command: command goal_default: command: '' handles: {} + placeholder_keys: {} result: + return_info: return_info success: success schema: description: '' properties: feedback: + additionalProperties: false properties: status: type: string - required: - - status title: SendCmd_Feedback type: object goal: + additionalProperties: false properties: command: type: string - required: - - command title: SendCmd_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: SendCmd_Result type: object required: @@ -149,42 +123,41 @@ post_process_station: type: SendCmd read_node: feedback: - result: result + status: status goal: - command: node_name + command: command + node_name: node_name goal_default: command: '' handles: {} + placeholder_keys: {} result: + return_info: return_info success: success schema: description: '' properties: feedback: + additionalProperties: false properties: status: type: string - required: - - status title: SendCmd_Feedback type: object goal: + additionalProperties: false properties: command: type: string - required: - - command title: SendCmd_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: SendCmd_Result type: object required: @@ -283,17 +256,19 @@ post_process_station: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: PostProcessTriggerClean_Feedback type: object goal: + additionalProperties: false properties: acetone_inner_wall_cleaning_count: maximum: 2147483647 minimum: -2147483648 type: integer acetone_inner_wall_cleaning_injection: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number acetone_inner_wall_cleaning_waste_time: maximum: 2147483647 @@ -304,6 +279,8 @@ post_process_station: minimum: -2147483648 type: integer acetone_outer_wall_cleaning_injection: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number acetone_outer_wall_cleaning_wait_time: maximum: 2147483647 @@ -322,6 +299,8 @@ post_process_station: minimum: -2147483648 type: integer acetone_stirrer_cleaning_injection: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number acetone_stirrer_cleaning_wait_time: maximum: 2147483647 @@ -348,6 +327,8 @@ post_process_station: minimum: -2147483648 type: integer nmp_inner_wall_cleaning_injection: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number nmp_inner_wall_cleaning_waste_time: maximum: 2147483647 @@ -358,6 +339,8 @@ post_process_station: minimum: -2147483648 type: integer nmp_outer_wall_cleaning_injection: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number nmp_outer_wall_cleaning_wait_time: maximum: 2147483647 @@ -376,6 +359,8 @@ post_process_station: minimum: -2147483648 type: integer nmp_stirrer_cleaning_injection: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number nmp_stirrer_cleaning_wait_time: maximum: 2147483647 @@ -394,6 +379,8 @@ post_process_station: minimum: -2147483648 type: integer water_inner_wall_cleaning_injection: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number water_inner_wall_cleaning_waste_time: maximum: 2147483647 @@ -404,6 +391,8 @@ post_process_station: minimum: -2147483648 type: integer water_outer_wall_cleaning_injection: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number water_outer_wall_cleaning_wait_time: maximum: 2147483647 @@ -422,6 +411,8 @@ post_process_station: minimum: -2147483648 type: integer water_stirrer_cleaning_injection: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number water_stirrer_cleaning_wait_time: maximum: 2147483647 @@ -431,55 +422,13 @@ post_process_station: maximum: 2147483647 minimum: -2147483648 type: integer - required: - - nmp_outer_wall_cleaning_injection - - nmp_outer_wall_cleaning_count - - nmp_outer_wall_cleaning_wait_time - - nmp_outer_wall_cleaning_waste_time - - nmp_inner_wall_cleaning_injection - - nmp_inner_wall_cleaning_count - - nmp_pump_cleaning_suction_count - - nmp_inner_wall_cleaning_waste_time - - nmp_stirrer_cleaning_injection - - nmp_stirrer_cleaning_count - - nmp_stirrer_cleaning_wait_time - - nmp_stirrer_cleaning_waste_time - - water_outer_wall_cleaning_injection - - water_outer_wall_cleaning_count - - water_outer_wall_cleaning_wait_time - - water_outer_wall_cleaning_waste_time - - water_inner_wall_cleaning_injection - - water_inner_wall_cleaning_count - - water_pump_cleaning_suction_count - - water_inner_wall_cleaning_waste_time - - water_stirrer_cleaning_injection - - water_stirrer_cleaning_count - - water_stirrer_cleaning_wait_time - - water_stirrer_cleaning_waste_time - - acetone_outer_wall_cleaning_injection - - acetone_outer_wall_cleaning_count - - acetone_outer_wall_cleaning_wait_time - - acetone_outer_wall_cleaning_waste_time - - acetone_inner_wall_cleaning_injection - - acetone_inner_wall_cleaning_count - - acetone_pump_cleaning_suction_count - - acetone_inner_wall_cleaning_waste_time - - acetone_stirrer_cleaning_injection - - acetone_stirrer_cleaning_count - - acetone_stirrer_cleaning_wait_time - - acetone_stirrer_cleaning_waste_time - - pipe_blowing_time - - injection_pump_forward_empty_suction_count - - injection_pump_reverse_empty_suction_count - - filtration_liquid_selection title: PostProcessTriggerClean_Goal type: object result: + additionalProperties: false properties: return_info: type: string - required: - - return_info title: PostProcessTriggerClean_Result type: object required: @@ -502,11 +451,11 @@ post_process_station: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: PostProcessGrab_Feedback type: object goal: + additionalProperties: false properties: raw_tank_number: maximum: 2147483647 @@ -516,17 +465,13 @@ post_process_station: maximum: 2147483647 minimum: -2147483648 type: integer - required: - - reaction_tank_number - - raw_tank_number title: PostProcessGrab_Goal type: object result: + additionalProperties: false properties: return_info: type: string - required: - - return_info title: PostProcessGrab_Result type: object required: @@ -573,13 +518,15 @@ post_process_station: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: PostProcessTriggerPostPro_Feedback type: object goal: + additionalProperties: false properties: atomization_fast_speed: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number atomization_pressure_kpa: maximum: 2147483647 @@ -594,8 +541,12 @@ post_process_station: minimum: -2147483648 type: integer first_wash_water_amount: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number initial_water_amount: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number injection_pump_push_speed: maximum: 2147483647 @@ -622,32 +573,20 @@ post_process_station: minimum: -2147483648 type: integer second_wash_water_amount: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number wash_slow_speed: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number - required: - - atomization_fast_speed - - wash_slow_speed - - injection_pump_suction_speed - - injection_pump_push_speed - - raw_liquid_suction_count - - first_wash_water_amount - - second_wash_water_amount - - first_powder_mixing_tim - - second_powder_mixing_time - - first_powder_wash_count - - second_powder_wash_count - - initial_water_amount - - pre_filtration_mixing_time - - atomization_pressure_kpa title: PostProcessTriggerPostPro_Goal type: object result: + additionalProperties: false properties: return_info: type: string - required: - - return_info title: PostProcessTriggerPostPro_Result type: object required: @@ -669,30 +608,26 @@ post_process_station: description: '' properties: feedback: + additionalProperties: false properties: status: type: string - required: - - status title: SendCmd_Feedback type: object goal: + additionalProperties: false properties: command: type: string - required: - - command title: SendCmd_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: SendCmd_Result type: object required: @@ -702,8 +637,7 @@ post_process_station: type: SendCmd module: unilabos.devices.workstation.post_process.post_process:OpcUaClient status_types: - cache_stats: dict - node_value: String + cache_stats: Dict[str, Any] type: python config_info: [] description: 后处理站 @@ -718,7 +652,9 @@ post_process_station: config_path: type: string deck: - type: string + anyOf: + - type: object + - type: object password: type: string subscription_interval: @@ -738,10 +674,7 @@ post_process_station: properties: cache_stats: type: object - node_value: - type: string required: - - node_value - cache_stats type: object version: 1.0.0 diff --git a/unilabos/registry/devices/pump_and_valve.yaml b/unilabos/registry/devices/pump_and_valve.yaml index 40fd9d3e..95a082d5 100644 --- a/unilabos/registry/devices/pump_and_valve.yaml +++ b/unilabos/registry/devices/pump_and_valve.yaml @@ -136,36 +136,36 @@ solenoid_valve: set_valve_position: feedback: {} goal: - string: position + position: position + string: string goal_default: string: '' handles: {} - result: {} + placeholder_keys: {} + result: + return_info: return_info + success: success schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: StrSingleInput_Feedback type: object goal: + additionalProperties: false properties: string: type: string - required: - - string title: StrSingleInput_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: StrSingleInput_Result type: object required: @@ -278,26 +278,25 @@ solenoid_valve.mock: goal: {} goal_default: {} handles: {} - result: {} + placeholder_keys: {} + result: + return_info: return_info schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Feedback type: object goal: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Goal type: object result: + additionalProperties: false properties: return_info: type: string - required: - - return_info title: EmptyIn_Result type: object required: @@ -310,26 +309,25 @@ solenoid_valve.mock: goal: {} goal_default: {} handles: {} - result: {} + placeholder_keys: {} + result: + return_info: return_info schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Feedback type: object goal: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Goal type: object result: + additionalProperties: false properties: return_info: type: string - required: - - return_info title: EmptyIn_Result type: object required: @@ -422,6 +420,27 @@ syringe_pump_with_valve.runze.SY03B-T06: title: initialize参数 type: object type: UniLabJsonCommand + auto-list: + feedback: {} + goal: {} + goal_default: {} + handles: {} + placeholder_keys: {} + result: {} + schema: + description: list的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: list参数 + type: object + type: UniLabJsonCommand auto-pull_plunger: feedback: {} goal: {} @@ -695,7 +714,10 @@ syringe_pump_with_valve.runze.SY03B-T06: goal: properties: position: - type: string + anyOf: + - type: integer + - type: string + - type: number required: - position type: object @@ -720,7 +742,9 @@ syringe_pump_with_valve.runze.SY03B-T06: goal: properties: velocity: - type: string + anyOf: + - type: integer + - type: string required: - velocity type: object @@ -780,13 +804,13 @@ syringe_pump_with_valve.runze.SY03B-T06: status_types: max_velocity: float mode: int - plunger_position: String + plunger_position: '' position: float status: str valve_position: str - velocity_end: String - velocity_grade: String - velocity_init: String + velocity_end: '' + velocity_grade: '' + velocity_init: '' type: python config_info: [] description: 润泽精密注射泵设备,集成阀门控制的高精度流体输送系统。该设备通过串口通信控制,支持多种运行模式和精确的体积控制。具备可变速度控制、精密定位、阀门切换、实时状态监控等功能。适用于微量液体输送、精密进样、流速控制、化学反应进料等需要高精度流体操作的实验室自动化应用。 @@ -885,15 +909,15 @@ syringe_pump_with_valve.runze.SY03B-T06: velocity_init: type: string required: - - status - - mode - max_velocity + - mode + - plunger_position + - position + - status + - valve_position + - velocity_end - velocity_grade - velocity_init - - velocity_end - - valve_position - - position - - plunger_position type: object version: 1.0.0 syringe_pump_with_valve.runze.SY03B-T08: @@ -943,6 +967,27 @@ syringe_pump_with_valve.runze.SY03B-T08: title: initialize参数 type: object type: UniLabJsonCommand + auto-list: + feedback: {} + goal: {} + goal_default: {} + handles: {} + placeholder_keys: {} + result: {} + schema: + description: list的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: list参数 + type: object + type: UniLabJsonCommand auto-pull_plunger: feedback: {} goal: {} @@ -1216,7 +1261,10 @@ syringe_pump_with_valve.runze.SY03B-T08: goal: properties: position: - type: string + anyOf: + - type: integer + - type: string + - type: number required: - position type: object @@ -1241,7 +1289,9 @@ syringe_pump_with_valve.runze.SY03B-T08: goal: properties: velocity: - type: string + anyOf: + - type: integer + - type: string required: - velocity type: object @@ -1301,13 +1351,13 @@ syringe_pump_with_valve.runze.SY03B-T08: status_types: max_velocity: float mode: int - plunger_position: String + plunger_position: '' position: float status: str valve_position: str - velocity_end: String - velocity_grade: String - velocity_init: String + velocity_end: '' + velocity_grade: '' + velocity_init: '' type: python config_info: [] description: 润泽精密注射泵设备,集成阀门控制的高精度流体输送系统。该设备通过串口通信控制,支持多种运行模式和精确的体积控制。具备可变速度控制、精密定位、阀门切换、实时状态监控等功能。适用于微量液体输送、精密进样、流速控制、化学反应进料等需要高精度流体操作的实验室自动化应用。 @@ -1422,14 +1472,14 @@ syringe_pump_with_valve.runze.SY03B-T08: velocity_init: type: string required: - - status - - mode - max_velocity + - mode + - plunger_position + - position + - status + - valve_position + - velocity_end - velocity_grade - velocity_init - - velocity_end - - valve_position - - position - - plunger_position type: object version: 1.0.0 diff --git a/unilabos/registry/devices/reaction_station_bioyond.yaml b/unilabos/registry/devices/reaction_station_bioyond.yaml index 8b4622dc..1372140d 100644 --- a/unilabos/registry/devices/reaction_station_bioyond.yaml +++ b/unilabos/registry/devices/reaction_station_bioyond.yaml @@ -13,12 +13,13 @@ reaction_station.bioyond: start_point: start_point start_step_key: start_step_key goal_default: - duration: 0 + duration: null end_point: 0 end_step_key: '' start_point: 0 start_step_key: '' handles: {} + placeholder_keys: {} result: {} schema: description: 添加时间约束 - 在两个工作流之间添加时间约束 @@ -30,23 +31,19 @@ reaction_station.bioyond: description: 时间(秒) type: integer end_point: - default: Start + default: 0 description: 终点计时点 (Start=开始前, End=结束后) - enum: - - Start - - End - type: string + type: integer end_step_key: + default: '' description: 终点步骤Key (可选, 默认为空则自动选择) type: string start_point: - default: Start + default: 0 description: 起点计时点 (Start=开始前, End=结束后) - enum: - - Start - - End - type: string + type: integer start_step_key: + default: '' description: 起点步骤Key (例如 "feeding", "liquid", 可选, 默认为空则自动选择) type: string required: @@ -98,7 +95,8 @@ reaction_station.bioyond: required: - json_str type: object - result: {} + result: + type: object required: - goal title: create_order参数 @@ -125,7 +123,8 @@ reaction_station.bioyond: required: - workflow_ids type: object - result: {} + result: + type: object required: - goal title: hard_delete_merged_workflows参数 @@ -150,7 +149,8 @@ reaction_station.bioyond: required: - json_str type: object - result: {} + result: + type: object required: - goal title: merge_workflow_with_parameters参数 @@ -175,7 +175,8 @@ reaction_station.bioyond: required: - report_request type: object - result: {} + result: + type: object required: - goal title: process_temperature_cutoff_report参数 @@ -200,7 +201,12 @@ reaction_station.bioyond: required: - web_workflow_json type: object - result: {} + result: + items: + additionalProperties: + type: string + type: object + type: array required: - goal title: process_web_workflows参数 @@ -229,7 +235,8 @@ reaction_station.bioyond: - reactor_id - temperature type: object - result: {} + result: + type: string required: - goal title: set_reactor_temperature参数 @@ -254,7 +261,8 @@ reaction_station.bioyond: required: - preintake_id type: object - result: {} + result: + type: object required: - goal title: skip_titration_steps参数 @@ -275,7 +283,8 @@ reaction_station.bioyond: properties: {} required: [] type: object - result: {} + result: + type: object required: - goal title: sync_workflow_sequence_from_bioyond参数 @@ -307,7 +316,8 @@ reaction_station.bioyond: type: integer required: [] type: object - result: {} + result: + type: object required: - goal title: wait_for_multiple_orders_and_get_reports参数 @@ -359,7 +369,8 @@ reaction_station.bioyond: required: - workflow_id type: object - result: {} + result: + type: object required: - goal title: workflow_step_query参数 @@ -370,9 +381,8 @@ reaction_station.bioyond: goal: {} goal_default: {} handles: {} - result: - code: code - message: message + placeholder_keys: {} + result: {} schema: description: 清空服务端所有非核心工作流 (保留核心流程) properties: @@ -382,13 +392,6 @@ reaction_station.bioyond: required: [] type: object result: - properties: - code: - description: 操作结果代码(1表示成功) - type: integer - message: - description: 结果描述 - type: string type: object required: - goal @@ -405,13 +408,14 @@ reaction_station.bioyond: torque_variation: torque_variation volume: volume goal_default: - assign_material_name: '' - temperature: '' - time: '' - titration_type: '' - torque_variation: '' - volume: '' + assign_material_name: null + temperature: 25.0 + time: '90' + titration_type: '1' + torque_variation: 2 + volume: null handles: {} + placeholder_keys: {} result: {} schema: description: 滴回去 @@ -423,33 +427,27 @@ reaction_station.bioyond: description: 物料名称(不能为空) type: string temperature: + default: 25.0 description: 温度设定(°C) - type: string + type: number time: + default: '90' description: 观察时间(分钟) type: string titration_type: + default: '1' description: 是否滴定(NO=否, YES=是) - enum: - - 'NO' - - 'YES' type: string torque_variation: + default: 2 description: 是否观察 (NO=否, YES=是) - enum: - - 'NO' - - 'YES' - type: string + type: integer volume: description: 分液公式(mL) type: string required: - - volume - assign_material_name - - time - - torque_variation - - titration_type - - temperature + - volume type: object result: {} required: @@ -462,7 +460,7 @@ reaction_station.bioyond: goal: batch_reports_result: batch_reports_result goal_default: - batch_reports_result: '' + batch_reports_result: null handles: input: - data_key: batch_reports_result @@ -478,8 +476,8 @@ reaction_station.bioyond: handler_key: ACTUALS_EXTRACTED io_type: sink label: Extracted Actuals - result: - return_info: return_info + placeholder_keys: {} + result: {} schema: description: 从批量任务完成报告中提取每个订单的实际加料量,输出extracted列表。 properties: @@ -493,13 +491,6 @@ reaction_station.bioyond: - batch_reports_result type: object result: - properties: - return_info: - description: JSON字符串,包含actuals数组,每项含order_code, order_id, actualTargetWeigh, - actualVolume - type: string - required: - - return_info title: extract_actuals_from_batch_reports结果 type: object required: @@ -517,13 +508,14 @@ reaction_station.bioyond: torque_variation: torque_variation volume: volume goal_default: - assign_material_name: '' - temperature: '' - time: '' - titration_type: '' - torque_variation: '' - volume: '' + assign_material_name: BAPP + temperature: 25.0 + time: '0' + titration_type: '1' + torque_variation: 1 + volume: '350' handles: {} + placeholder_keys: {} result: {} schema: description: 液体进料烧杯 @@ -532,36 +524,30 @@ reaction_station.bioyond: goal: properties: assign_material_name: + default: BAPP description: 物料名称 type: string temperature: + default: 25.0 description: 温度设定(°C) - type: string + type: number time: + default: '0' description: 观察时间(分钟) type: string titration_type: + default: '1' description: 是否滴定(NO=否, YES=是) - enum: - - 'NO' - - 'YES' type: string torque_variation: + default: 1 description: 是否观察 (NO=否, YES=是) - enum: - - 'NO' - - 'YES' - type: string + type: integer volume: + default: '350' description: 分液公式(mL) type: string - required: - - volume - - assign_material_name - - time - - torque_variation - - titration_type - - temperature + required: [] type: object result: {} required: @@ -580,13 +566,13 @@ reaction_station.bioyond: torque_variation: torque_variation volume: volume goal_default: - assign_material_name: '' - solvents: '' - temperature: '25.00' + assign_material_name: null + solvents: null + temperature: 25.0 time: '360' titration_type: '1' - torque_variation: '2' - volume: '' + torque_variation: 2 + volume: null handles: input: - data_key: solvents @@ -595,6 +581,7 @@ reaction_station.bioyond: handler_key: solvents io_type: source label: Solvents Data From Calculation Node + placeholder_keys: {} result: {} schema: description: 液体投料-溶剂。可以直接提供volume(mL),或通过solvents对象自动从additional_solvent(mL)计算volume。 @@ -609,27 +596,21 @@ reaction_station.bioyond: description: '溶剂信息对象(可选),包含: additional_solvent(溶剂体积mL), total_liquid_volume(总液体体积mL)。如果提供,将自动计算volume' type: string temperature: - default: '25.00' + default: 25.0 description: 温度设定(°C),默认25.00 - type: string + type: number time: default: '360' description: 观察时间(分钟),默认360 type: string titration_type: - default: 'NO' + default: '1' description: 是否滴定(NO=否, YES=是),默认NO - enum: - - 'NO' - - 'YES' type: string torque_variation: - default: 'YES' + default: 2 description: 是否观察 (NO=否, YES=是),默认YES - enum: - - 'NO' - - 'YES' - type: string + type: integer volume: description: 分液量(mL)。可直接提供,或通过solvents参数自动计算 type: string @@ -655,15 +636,15 @@ reaction_station.bioyond: volume_formula: volume_formula x_value: x_value goal_default: - assign_material_name: '' - extracted_actuals: '' - feeding_order_data: '' - temperature: '25.00' + assign_material_name: null + extracted_actuals: null + feeding_order_data: null + temperature: 25.0 time: '90' titration_type: '2' - torque_variation: '2' - volume_formula: '' - x_value: '' + torque_variation: 2 + volume_formula: null + x_value: null handles: input: - data_key: extracted_actuals @@ -678,6 +659,7 @@ reaction_station.bioyond: handler_key: feeding_order io_type: source label: Feeding Order Data From Calculation Node + placeholder_keys: {} result: {} schema: description: 液体进料(滴定)。支持两种模式:1)直接提供volume_formula;2)自动计算-提供x_value+feeding_order_data+extracted_actuals,系统自动生成公式"1000*(m二酐-x)*V二酐滴定/m二酐滴定" @@ -696,27 +678,21 @@ reaction_station.bioyond: {"feeding_order": [{"type": "main_anhydride", "amount": 1.915}]}' type: string temperature: - default: '25.00' + default: 25.0 description: 温度设定(°C),默认25.00 - type: string + type: number time: default: '90' description: 观察时间(分钟),默认90 type: string titration_type: - default: 'YES' + default: '2' description: 是否滴定(NO=否, YES=是),默认YES - enum: - - 'NO' - - 'YES' type: string torque_variation: - default: 'YES' + default: 2 description: 是否观察 (NO=否, YES=是),默认YES - enum: - - 'NO' - - 'YES' - type: string + type: integer volume_formula: description: 分液公式(mL)。可直接提供固定公式,或留空由系统根据x_value、feeding_order_data、extracted_actuals自动生成 type: string @@ -742,13 +718,14 @@ reaction_station.bioyond: torque_variation: torque_variation volume_formula: volume_formula goal_default: - assign_material_name: '' - temperature: '' - time: '' - titration_type: '' - torque_variation: '' - volume_formula: '' + assign_material_name: null + temperature: 25.0 + time: '0' + titration_type: '1' + torque_variation: 1 + volume_formula: null handles: {} + placeholder_keys: {} result: {} schema: description: 液体进料小瓶(非滴定) @@ -760,33 +737,27 @@ reaction_station.bioyond: description: 物料名称 type: string temperature: + default: 25.0 description: 温度设定(°C) - type: string + type: number time: + default: '0' description: 观察时间(分钟) type: string titration_type: + default: '1' description: 是否滴定(NO=否, YES=是) - enum: - - 'NO' - - 'YES' type: string torque_variation: + default: 1 description: 是否观察 (NO=否, YES=是) - enum: - - 'NO' - - 'YES' - type: string + type: integer volume_formula: description: 分液公式(mL) type: string required: - volume_formula - assign_material_name - - time - - torque_variation - - titration_type - - temperature type: object result: {} required: @@ -800,9 +771,10 @@ reaction_station.bioyond: task_name: task_name workflow_name: workflow_name goal_default: - task_name: '' - workflow_name: '' + task_name: null + workflow_name: null handles: {} + placeholder_keys: {} result: {} schema: description: 处理并执行工作流 @@ -820,7 +792,8 @@ reaction_station.bioyond: - workflow_name - task_name type: object - result: {} + result: + type: object required: - goal title: process_and_execute_workflow参数 @@ -833,10 +806,11 @@ reaction_station.bioyond: cutoff: cutoff temperature: temperature goal_default: - assign_material_name: '' - cutoff: '' - temperature: '' + assign_material_name: null + cutoff: '900000' + temperature: -10.0 handles: {} + placeholder_keys: {} result: {} schema: description: 反应器放入 - 将反应器放入工作站,配置物料名称、粘度上限和温度参数 @@ -848,14 +822,14 @@ reaction_station.bioyond: description: 物料名称 type: string cutoff: + default: '900000' description: 粘度上限 type: string temperature: + default: -10.0 description: 温度设定(°C) - type: string + type: number required: - - cutoff - - temperature - assign_material_name type: object result: {} @@ -869,6 +843,7 @@ reaction_station.bioyond: goal: {} goal_default: {} handles: {} + placeholder_keys: {} result: {} schema: description: 反应器取出 - 从工作站中取出反应器,无需参数的简单操作 @@ -878,15 +853,7 @@ reaction_station.bioyond: properties: {} required: [] type: object - result: - properties: - code: - description: 操作结果代码(1表示成功,0表示失败) - type: integer - return_info: - description: 操作结果详细信息 - type: string - type: object + result: {} required: - goal title: reactor_taken_out参数 @@ -897,8 +864,8 @@ reaction_station.bioyond: goal: {} goal_default: {} handles: {} - result: - return_info: return_info + placeholder_keys: {} + result: {} schema: description: 启动调度器 - 启动Bioyond工作站的任务调度器,开始执行队列中的任务 properties: @@ -908,12 +875,6 @@ reaction_station.bioyond: required: [] type: object result: - properties: - return_info: - description: 调度器启动结果,成功返回1,失败返回0 - type: integer - required: - - return_info title: scheduler_start结果 type: object required: @@ -930,12 +891,13 @@ reaction_station.bioyond: time: time torque_variation: torque_variation goal_default: - assign_material_name: '' - material_id: '' - temperature: '' - time: '' - torque_variation: '' + assign_material_name: null + material_id: null + temperature: 25.0 + time: '0' + torque_variation: 1 handles: {} + placeholder_keys: {} result: {} schema: description: 固体进料小瓶 - 通过小瓶向反应器中添加固体物料,支持多种粉末类型(盐、面粉、BTDA) @@ -948,29 +910,21 @@ reaction_station.bioyond: type: string material_id: description: 粉末类型ID,Salt=盐(21分钟),Flour=面粉(27分钟),BTDA=BTDA(38分钟) - enum: - - Salt - - Flour - - BTDA type: string temperature: + default: 25.0 description: 温度设定(°C) - type: string + type: number time: + default: '0' description: 观察时间(分钟) type: string torque_variation: + default: 1 description: 是否观察 (NO=否, YES=是) - enum: - - 'NO' - - 'YES' - type: string + type: integer required: - - assign_material_name - material_id - - time - - torque_variation - - temperature type: object result: {} required: diff --git a/unilabos/registry/devices/robot_agv.yaml b/unilabos/registry/devices/robot_agv.yaml index 9f45bd5e..b37a0c46 100644 --- a/unilabos/registry/devices/robot_agv.yaml +++ b/unilabos/registry/devices/robot_agv.yaml @@ -37,42 +37,41 @@ agv.SEER: type: object type: UniLabJsonCommand send_nav_task: - feedback: {} + feedback: + status: status goal: command: command goal_default: command: '' handles: {} + placeholder_keys: {} result: + return_info: return_info success: success schema: description: '' properties: feedback: + additionalProperties: false properties: status: type: string - required: - - status title: SendCmd_Feedback type: object goal: + additionalProperties: false properties: command: type: string - required: - - command title: SendCmd_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: SendCmd_Result type: object required: diff --git a/unilabos/registry/devices/robot_arm.yaml b/unilabos/registry/devices/robot_arm.yaml index 147eab4d..ff357ad4 100644 --- a/unilabos/registry/devices/robot_arm.yaml +++ b/unilabos/registry/devices/robot_arm.yaml @@ -122,31 +122,6 @@ robotic_arm.SCARA_with_slider.moveit.virtual: title: moveit_task参数 type: object type: UniLabJsonCommand - auto-post_init: - feedback: {} - goal: {} - goal_default: - ros_node: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: post_init的参数schema - properties: - feedback: {} - goal: - properties: - ros_node: - type: object - required: - - ros_node - type: object - result: {} - required: - - goal - title: post_init参数 - type: object - type: UniLabJsonCommand auto-resource_manager: feedback: {} goal: {} @@ -198,41 +173,41 @@ robotic_arm.SCARA_with_slider.moveit.virtual: type: object type: UniLabJsonCommand pick_and_place: - feedback: {} + feedback: + status: status goal: command: command goal_default: command: '' handles: {} - result: {} + placeholder_keys: {} + result: + return_info: return_info + success: success schema: description: '' properties: feedback: + additionalProperties: false properties: status: type: string - required: - - status title: SendCmd_Feedback type: object goal: + additionalProperties: false properties: command: type: string - required: - - command title: SendCmd_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: SendCmd_Result type: object required: @@ -241,41 +216,41 @@ robotic_arm.SCARA_with_slider.moveit.virtual: type: object type: SendCmd set_position: - feedback: {} + feedback: + status: status goal: command: command goal_default: command: '' handles: {} - result: {} + placeholder_keys: {} + result: + return_info: return_info + success: success schema: description: '' properties: feedback: + additionalProperties: false properties: status: type: string - required: - - status title: SendCmd_Feedback type: object goal: + additionalProperties: false properties: command: type: string - required: - - command title: SendCmd_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: SendCmd_Result type: object required: @@ -284,41 +259,41 @@ robotic_arm.SCARA_with_slider.moveit.virtual: type: object type: SendCmd set_status: - feedback: {} + feedback: + status: status goal: command: command goal_default: command: '' handles: {} - result: {} + placeholder_keys: {} + result: + return_info: return_info + success: success schema: description: '' properties: feedback: + additionalProperties: false properties: status: type: string - required: - - status title: SendCmd_Feedback type: object goal: + additionalProperties: false properties: command: type: string - required: - - command title: SendCmd_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: SendCmd_Result type: object required: @@ -455,42 +430,41 @@ robotic_arm.UR: type: object type: UniLabJsonCommand move_pos_task: - feedback: {} + feedback: + status: status goal: command: command goal_default: command: '' handles: {} + placeholder_keys: {} result: + return_info: return_info success: success schema: description: '' properties: feedback: + additionalProperties: false properties: status: type: string - required: - - status title: SendCmd_Feedback type: object goal: + additionalProperties: false properties: command: type: string - required: - - command title: SendCmd_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: SendCmd_Result type: object required: @@ -532,8 +506,8 @@ robotic_arm.UR: type: string required: - arm_pose - - gripper_pose - arm_status + - gripper_pose - gripper_status type: object version: 1.0.0 @@ -726,41 +700,41 @@ robotic_arm.elite: type: object type: UniLabJsonCommand modbus_task_cmd: - feedback: {} + feedback: + status: status goal: command: command goal_default: command: '' handles: {} - result: {} + placeholder_keys: {} + result: + return_info: return_info + success: success schema: description: '' properties: feedback: + additionalProperties: false properties: status: type: string - required: - - status title: SendCmd_Feedback type: object goal: + additionalProperties: false properties: command: type: string - required: - - command title: SendCmd_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: SendCmd_Result type: object required: @@ -770,8 +744,8 @@ robotic_arm.elite: type: SendCmd module: unilabos.devices.arm.elite_robot:EliteRobot status_types: - actual_joint_positions: String - arm_pose: String + actual_joint_positions: '' + arm_pose: list[float] type: python config_info: [] description: Elite robot arm @@ -797,8 +771,8 @@ robotic_arm.elite: type: number type: array required: - - arm_pose - actual_joint_positions + - arm_pose type: object model: mesh: elite_robot diff --git a/unilabos/registry/devices/robot_gripper.yaml b/unilabos/registry/devices/robot_gripper.yaml index 295c48a0..4f579e24 100644 --- a/unilabos/registry/devices/robot_gripper.yaml +++ b/unilabos/registry/devices/robot_gripper.yaml @@ -114,11 +114,12 @@ gripper.misumi_rz: goal: properties: data: - type: string + type: object required: - data type: object - result: {} + result: + type: object required: - goal title: modbus_crc参数 @@ -398,30 +399,26 @@ gripper.misumi_rz: description: '' properties: feedback: + additionalProperties: false properties: status: type: string - required: - - status title: SendCmd_Feedback type: object goal: + additionalProperties: false properties: command: type: string - required: - - command title: SendCmd_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: SendCmd_Result type: object required: @@ -504,71 +501,82 @@ gripper.mock: type: UniLabJsonCommand push_to: feedback: - effort: torque + effort: effort position: position + reached_goal: reached_goal + stalled: stalled goal: - command.max_effort: torque - command.position: position + command: command + position: position + torque: torque + velocity: velocity goal_default: command: max_effort: 0.0 position: 0.0 handles: {} + placeholder_keys: {} result: - effort: torque + effort: effort position: position + reached_goal: reached_goal + stalled: stalled schema: description: '' properties: feedback: + additionalProperties: false properties: effort: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number position: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number reached_goal: type: boolean stalled: type: boolean - required: - - position - - effort - - stalled - - reached_goal title: GripperCommand_Feedback type: object goal: + additionalProperties: false properties: command: + additionalProperties: false properties: max_effort: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number position: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - position - max_effort title: command type: object - required: - - command title: GripperCommand_Goal type: object result: + additionalProperties: false properties: effort: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number position: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number reached_goal: type: boolean stalled: type: boolean - required: - - position - - effort - - stalled - - reached_goal title: GripperCommand_Result type: object required: @@ -604,8 +612,8 @@ gripper.mock: type: number required: - position - - velocity - - torque - status + - torque + - velocity type: object version: 1.0.0 diff --git a/unilabos/registry/devices/robot_linear_motion.yaml b/unilabos/registry/devices/robot_linear_motion.yaml index 0f8506e9..74b01e80 100644 --- a/unilabos/registry/devices/robot_linear_motion.yaml +++ b/unilabos/registry/devices/robot_linear_motion.yaml @@ -24,6 +24,27 @@ linear_motion.grbl: title: initialize参数 type: object type: UniLabJsonCommand + auto-list: + feedback: {} + goal: {} + goal_default: {} + handles: {} + placeholder_keys: {} + result: {} + schema: + description: list的参数schema + properties: + feedback: {} + goal: + properties: {} + required: [] + type: object + result: {} + required: + - goal + title: list参数 + type: object + type: UniLabJsonCommand auto-set_position: feedback: {} goal: {} @@ -93,44 +114,39 @@ linear_motion.grbl: type: UniLabJsonCommandAsync move_through_points: feedback: - current_pose.pose.position: position - estimated_time_remaining.sec: time_remaining - navigation_time.sec: time_spent - number_of_poses_remaining: pose_number_remaining + current_pose: current_pose + distance_remaining: distance_remaining + estimated_time_remaining: estimated_time_remaining + navigation_time: navigation_time + number_of_poses_remaining: number_of_poses_remaining + number_of_recoveries: number_of_recoveries goal: - poses[].pose.position: positions[] + behavior_tree: behavior_tree + poses: poses + positions: positions goal_default: behavior_tree: '' - poses: - - header: - frame_id: '' - stamp: - nanosec: 0 - sec: 0 - pose: - orientation: - w: 1.0 - x: 0.0 - y: 0.0 - z: 0.0 - position: - x: 0.0 - y: 0.0 - z: 0.0 + poses: [] handles: {} - result: {} + placeholder_keys: {} + result: + result: result schema: description: '' properties: feedback: + additionalProperties: false properties: current_pose: + additionalProperties: false properties: header: + additionalProperties: false properties: frame_id: type: string stamp: + additionalProperties: false properties: nanosec: maximum: 4294967295 @@ -151,16 +167,26 @@ linear_motion.grbl: title: header type: object pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -170,12 +196,19 @@ linear_motion.grbl: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -194,8 +227,11 @@ linear_motion.grbl: title: current_pose type: object distance_remaining: + maximum: 3.4028235e+38 + minimum: -3.4028235e+38 type: number estimated_time_remaining: + additionalProperties: false properties: nanosec: maximum: 4294967295 @@ -211,6 +247,7 @@ linear_motion.grbl: title: estimated_time_remaining type: object navigation_time: + additionalProperties: false properties: nanosec: maximum: 4294967295 @@ -233,16 +270,10 @@ linear_motion.grbl: maximum: 32767 minimum: -32768 type: integer - required: - - current_pose - - navigation_time - - estimated_time_remaining - - number_of_recoveries - - distance_remaining - - number_of_poses_remaining title: NavigateThroughPoses_Feedback type: object goal: + additionalProperties: false properties: behavior_tree: type: string @@ -256,12 +287,8 @@ linear_motion.grbl: stamp: properties: nanosec: - maximum: 4294967295 - minimum: 0 type: integer sec: - maximum: 2147483647 - minimum: -2147483648 type: integer required: - sec @@ -314,23 +341,17 @@ linear_motion.grbl: required: - header - pose - title: poses type: object type: array - required: - - poses - - behavior_tree title: NavigateThroughPoses_Goal type: object result: + additionalProperties: false properties: result: - properties: {} - required: [] + additionalProperties: true title: result type: object - required: - - result title: NavigateThroughPoses_Result type: object required: @@ -340,9 +361,15 @@ linear_motion.grbl: type: NavigateThroughPoses set_spindle_speed: feedback: - position: spindle_speed + error: error + header: header + position: position + velocity: velocity goal: - position: spindle_speed + max_velocity: max_velocity + min_duration: min_duration + position: position + spindle_speed: spindle_speed goal_default: max_velocity: 0.0 min_duration: @@ -350,19 +377,25 @@ linear_motion.grbl: sec: 0 position: 0.0 handles: {} + placeholder_keys: {} result: {} schema: description: '' properties: feedback: + additionalProperties: false properties: error: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number header: + additionalProperties: false properties: frame_id: type: string stamp: + additionalProperties: false properties: nanosec: maximum: 4294967295 @@ -383,21 +416,24 @@ linear_motion.grbl: title: header type: object position: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number velocity: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number - required: - - header - - position - - velocity - - error title: SingleJointPosition_Feedback type: object goal: + additionalProperties: false properties: max_velocity: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number min_duration: + additionalProperties: false properties: nanosec: maximum: 4294967295 @@ -413,16 +449,13 @@ linear_motion.grbl: title: min_duration type: object position: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number - required: - - position - - min_duration - - max_velocity title: SingleJointPosition_Goal type: object result: - properties: {} - required: [] + additionalProperties: true title: SingleJointPosition_Result type: object required: @@ -432,7 +465,7 @@ linear_motion.grbl: type: SingleJointPosition module: unilabos.devices.cnc.grbl_sync:GrblCNC status_types: - position: unilabos.messages:Point3D + position: Point3D spindle_speed: float status: str type: python @@ -471,9 +504,9 @@ linear_motion.grbl: status: type: string required: - - status - position - spindle_speed + - status type: object version: 1.0.0 linear_motion.toyo_xyz.sim: @@ -600,31 +633,6 @@ linear_motion.toyo_xyz.sim: title: moveit_task参数 type: object type: UniLabJsonCommand - auto-post_init: - feedback: {} - goal: {} - goal_default: - ros_node: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: post_init的参数schema - properties: - feedback: {} - goal: - properties: - ros_node: - type: object - required: - - ros_node - type: object - result: {} - required: - - goal - title: post_init参数 - type: object - type: UniLabJsonCommand auto-resource_manager: feedback: {} goal: {} @@ -676,41 +684,41 @@ linear_motion.toyo_xyz.sim: type: object type: UniLabJsonCommand pick_and_place: - feedback: {} + feedback: + status: status goal: command: command goal_default: command: '' handles: {} - result: {} + placeholder_keys: {} + result: + return_info: return_info + success: success schema: description: '' properties: feedback: + additionalProperties: false properties: status: type: string - required: - - status title: SendCmd_Feedback type: object goal: + additionalProperties: false properties: command: type: string - required: - - command title: SendCmd_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: SendCmd_Result type: object required: @@ -719,41 +727,41 @@ linear_motion.toyo_xyz.sim: type: object type: SendCmd set_position: - feedback: {} + feedback: + status: status goal: command: command goal_default: command: '' handles: {} - result: {} + placeholder_keys: {} + result: + return_info: return_info + success: success schema: description: '' properties: feedback: + additionalProperties: false properties: status: type: string - required: - - status title: SendCmd_Feedback type: object goal: + additionalProperties: false properties: command: type: string - required: - - command title: SendCmd_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: SendCmd_Result type: object required: @@ -762,41 +770,41 @@ linear_motion.toyo_xyz.sim: type: object type: SendCmd set_status: - feedback: {} + feedback: + status: status goal: command: command goal_default: command: '' handles: {} - result: {} + placeholder_keys: {} + result: + return_info: return_info + success: success schema: description: '' properties: feedback: + additionalProperties: false properties: status: type: string - required: - - status title: SendCmd_Feedback type: object goal: + additionalProperties: false properties: command: type: string - required: - - command title: SendCmd_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: SendCmd_Result type: object required: @@ -939,30 +947,26 @@ motor.iCL42: description: '' properties: feedback: + additionalProperties: false properties: status: type: string - required: - - status title: SendCmd_Feedback type: object goal: + additionalProperties: false properties: command: type: string - required: - - command title: SendCmd_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: SendCmd_Result type: object required: @@ -1000,8 +1004,8 @@ motor.iCL42: success: type: boolean required: - - motor_position - is_executing_run + - motor_position - success type: object version: 1.0.0 diff --git a/unilabos/registry/devices/solid_dispenser.yaml b/unilabos/registry/devices/solid_dispenser.yaml index 9bceb54b..46280631 100644 --- a/unilabos/registry/devices/solid_dispenser.yaml +++ b/unilabos/registry/devices/solid_dispenser.yaml @@ -14,19 +14,24 @@ solid_dispenser.laiyu: powder_tube_number: 0 target_tube_position: '' handles: {} + placeholder_keys: {} result: actual_mass_mg: actual_mass_mg + return_info: return_info + success: success schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: SolidDispenseAddPowderTube_Feedback type: object goal: + additionalProperties: false properties: compound_mass: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number powder_tube_number: maximum: 2147483647 @@ -34,24 +39,19 @@ solid_dispenser.laiyu: type: integer target_tube_position: type: string - required: - - powder_tube_number - - target_tube_position - - compound_mass title: SolidDispenseAddPowderTube_Goal type: object result: + additionalProperties: false properties: actual_mass_mg: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number return_info: type: string success: type: boolean - required: - - return_info - - actual_mass_mg - - success title: SolidDispenseAddPowderTube_Result type: object required: @@ -74,11 +74,12 @@ solid_dispenser.laiyu: goal: properties: data: - type: string + type: object required: - data type: object - result: {} + result: + type: object required: - goal title: calculate_crc参数 @@ -99,11 +100,12 @@ solid_dispenser.laiyu: goal: properties: command: - type: string + type: object required: - command type: object - result: {} + result: + type: object required: - goal title: send_command参数 @@ -112,36 +114,37 @@ solid_dispenser.laiyu: discharge: feedback: {} goal: - float_input: float_input + float_in: float_in goal_default: float_in: 0.0 handles: {} - result: {} + placeholder_keys: {} + result: + return_info: return_info + success: success schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: FloatSingleInput_Feedback type: object goal: + additionalProperties: false properties: float_in: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number - required: - - float_in title: FloatSingleInput_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: FloatSingleInput_Result type: object required: @@ -156,32 +159,31 @@ solid_dispenser.laiyu: goal_default: string: '' handles: {} - result: {} + placeholder_keys: {} + result: + return_info: return_info + success: success schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: StrSingleInput_Feedback type: object goal: + additionalProperties: false properties: string: type: string - required: - - string title: StrSingleInput_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: StrSingleInput_Result type: object required: @@ -200,38 +202,41 @@ solid_dispenser.laiyu: y: 0.0 z: 0.0 handles: {} - result: {} + placeholder_keys: {} + result: + return_info: return_info + success: success schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: Point3DSeparateInput_Feedback type: object goal: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number - required: - - x - - y - - z title: Point3DSeparateInput_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: Point3DSeparateInput_Result type: object required: @@ -246,34 +251,33 @@ solid_dispenser.laiyu: goal_default: int_input: 0 handles: {} - result: {} + placeholder_keys: {} + result: + return_info: return_info + success: success schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: IntSingleInput_Feedback type: object goal: + additionalProperties: false properties: int_input: maximum: 2147483647 minimum: -2147483648 type: integer - required: - - int_input title: IntSingleInput_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: IntSingleInput_Result type: object required: @@ -288,34 +292,33 @@ solid_dispenser.laiyu: goal_default: int_input: 0 handles: {} - result: {} + placeholder_keys: {} + result: + return_info: return_info + success: success schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: IntSingleInput_Feedback type: object goal: + additionalProperties: false properties: int_input: maximum: 2147483647 minimum: -2147483648 type: integer - required: - - int_input title: IntSingleInput_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: IntSingleInput_Result type: object required: @@ -328,26 +331,25 @@ solid_dispenser.laiyu: goal: {} goal_default: {} handles: {} - result: {} + placeholder_keys: {} + result: + return_info: return_info schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Feedback type: object goal: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Goal type: object result: + additionalProperties: false properties: return_info: type: string - required: - - return_info title: EmptyIn_Result type: object required: diff --git a/unilabos/registry/devices/temperature.yaml b/unilabos/registry/devices/temperature.yaml index 874fe517..9e60adb1 100644 --- a/unilabos/registry/devices/temperature.yaml +++ b/unilabos/registry/devices/temperature.yaml @@ -34,7 +34,8 @@ chiller: - register_address - value type: object - result: {} + result: + type: object required: - goal title: build_modbus_frame参数 @@ -63,7 +64,8 @@ chiller: required: - temperature type: object - result: {} + result: + type: integer required: - goal title: convert_temperature_to_modbus_value参数 @@ -84,11 +86,12 @@ chiller: goal: properties: data: - type: string + type: object required: - data type: object - result: {} + result: + type: object required: - goal title: modbus_crc参数 @@ -116,42 +119,41 @@ chiller: type: object type: UniLabJsonCommand set_temperature: - feedback: {} + feedback: + status: status goal: command: command goal_default: command: '' handles: {} + placeholder_keys: {} result: + return_info: return_info success: success schema: description: '' properties: feedback: + additionalProperties: false properties: status: type: string - required: - - status title: SendCmd_Feedback type: object goal: + additionalProperties: false properties: command: type: string - required: - - command title: SendCmd_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: SendCmd_Result type: object required: @@ -266,9 +268,15 @@ heaterstirrer.dalong: feedback: status: status goal: + pressure: pressure purpose: purpose + reflux_solvent: reflux_solvent + stir: stir + stir_speed: stir_speed temp: temp + temp_spec: temp_spec time: time + time_spec: time_spec vessel: vessel goal_default: pressure: '' @@ -301,20 +309,23 @@ heaterstirrer.dalong: sample_id: '' type: '' handles: {} + placeholder_keys: {} result: + message: message + return_info: return_info success: success schema: description: '' properties: feedback: + additionalProperties: false properties: status: type: string - required: - - status title: HeatChill_Feedback type: object goal: + additionalProperties: false properties: pressure: type: string @@ -325,8 +336,12 @@ heaterstirrer.dalong: stir: type: boolean stir_speed: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number temp: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number temp_spec: type: string @@ -335,6 +350,7 @@ heaterstirrer.dalong: time_spec: type: string vessel: + additionalProperties: false properties: category: type: string @@ -353,16 +369,26 @@ heaterstirrer.dalong: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -372,12 +398,19 @@ heaterstirrer.dalong: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -407,20 +440,10 @@ heaterstirrer.dalong: - data title: vessel type: object - required: - - vessel - - temp - - time - - temp_spec - - time_spec - - pressure - - reflux_solvent - - stir - - stir_speed - - purpose title: HeatChill_Goal type: object result: + additionalProperties: false properties: message: type: string @@ -428,10 +451,6 @@ heaterstirrer.dalong: type: string success: type: boolean - required: - - success - - message - - return_info title: HeatChill_Result type: object required: @@ -440,42 +459,42 @@ heaterstirrer.dalong: type: object type: HeatChill set_temp_target: - feedback: {} + feedback: + status: status goal: - command: temp + command: command + temp: temp goal_default: command: '' handles: {} + placeholder_keys: {} result: + return_info: return_info success: success schema: description: '' properties: feedback: + additionalProperties: false properties: status: type: string - required: - - status title: SendCmd_Feedback type: object goal: + additionalProperties: false properties: command: type: string - required: - - command title: SendCmd_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: SendCmd_Result type: object required: @@ -484,42 +503,42 @@ heaterstirrer.dalong: type: object type: SendCmd set_temp_warning: - feedback: {} + feedback: + status: status goal: - command: temp + command: command + temp: temp goal_default: command: '' handles: {} + placeholder_keys: {} result: + return_info: return_info success: success schema: description: '' properties: feedback: + additionalProperties: false properties: status: type: string - required: - - status title: SendCmd_Feedback type: object goal: + additionalProperties: false properties: command: type: string - required: - - command title: SendCmd_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: SendCmd_Result type: object required: @@ -569,8 +588,8 @@ heaterstirrer.dalong: - status - stir_speed - temp - - temp_warning - temp_target + - temp_warning type: object version: 1.0.0 tempsensor: @@ -691,42 +710,41 @@ tempsensor: type: object type: UniLabJsonCommand set_warning: - feedback: {} + feedback: + status: status goal: command: command goal_default: command: '' handles: {} + placeholder_keys: {} result: + return_info: return_info success: success schema: description: '' properties: feedback: + additionalProperties: false properties: status: type: string - required: - - status title: SendCmd_Feedback type: object goal: + additionalProperties: false properties: command: type: string - required: - - command title: SendCmd_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: SendCmd_Result type: object required: diff --git a/unilabos/registry/devices/virtual_device.yaml b/unilabos/registry/devices/virtual_device.yaml index f0635755..67560f2f 100644 --- a/unilabos/registry/devices/virtual_device.yaml +++ b/unilabos/registry/devices/virtual_device.yaml @@ -18,7 +18,8 @@ virtual_centrifuge: properties: {} required: [] type: object - result: {} + result: + type: boolean required: - goal title: cleanup参数 @@ -39,41 +40,17 @@ virtual_centrifuge: properties: {} required: [] type: object - result: {} + result: + type: boolean required: - goal title: initialize参数 type: object type: UniLabJsonCommandAsync - auto-post_init: - feedback: {} - goal: {} - goal_default: - ros_node: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - ros_node: - type: object - required: - - ros_node - type: object - result: {} - required: - - goal - title: post_init参数 - type: object - type: UniLabJsonCommand centrifuge: feedback: current_speed: current_speed - current_status: status + current_status: current_status current_temp: current_temp progress: progress goal: @@ -106,38 +83,50 @@ virtual_centrifuge: sample_id: '' type: '' handles: {} + placeholder_keys: {} result: message: message + return_info: return_info success: success schema: description: '' properties: feedback: + additionalProperties: false properties: current_speed: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number current_status: type: string current_temp: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number progress: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number - required: - - progress - - current_speed - - current_temp - - current_status title: Centrifuge_Feedback type: object goal: + additionalProperties: false properties: speed: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number temp: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number time: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number vessel: + additionalProperties: false properties: category: type: string @@ -156,16 +145,26 @@ virtual_centrifuge: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -175,12 +174,19 @@ virtual_centrifuge: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -210,14 +216,10 @@ virtual_centrifuge: - data title: vessel type: object - required: - - vessel - - speed - - time - - temp title: Centrifuge_Goal type: object result: + additionalProperties: false properties: message: type: string @@ -225,10 +227,6 @@ virtual_centrifuge: type: string success: type: boolean - required: - - success - - message - - return_info title: Centrifuge_Result type: object required: @@ -267,7 +265,7 @@ virtual_centrifuge: config: properties: config: - type: string + type: object device_id: type: string required: [] @@ -299,18 +297,18 @@ virtual_centrifuge: time_remaining: type: number required: - - status - centrifuge_state - current_speed - - target_speed - current_temp - - target_temp - max_speed - max_temp - - min_temp - - time_remaining - - progress - message + - min_temp + - progress + - status + - target_speed + - target_temp + - time_remaining type: object version: 1.0.0 virtual_column: @@ -333,7 +331,8 @@ virtual_column: properties: {} required: [] type: object - result: {} + result: + type: boolean required: - goal title: cleanup参数 @@ -354,45 +353,26 @@ virtual_column: properties: {} required: [] type: object - result: {} + result: + type: boolean required: - goal title: initialize参数 type: object type: UniLabJsonCommandAsync - auto-post_init: - feedback: {} - goal: {} - goal_default: - ros_node: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - ros_node: - type: object - required: - - ros_node - type: object - result: {} - required: - - goal - title: post_init参数 - type: object - type: UniLabJsonCommand run_column: feedback: - current_status: current_status - processed_volume: processed_volume progress: progress + status: status goal: column: column from_vessel: from_vessel + pct1: pct1 + pct2: pct2 + ratio: ratio + rf: rf + solvent1: solvent1 + solvent2: solvent2 to_vessel: to_vessel goal_default: column: '' @@ -443,29 +423,32 @@ virtual_column: sample_id: '' type: '' handles: {} + placeholder_keys: {} result: - message: current_status - return_info: current_status + message: message + return_info: return_info success: success schema: description: '' properties: feedback: + additionalProperties: false properties: progress: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number status: type: string - required: - - status - - progress title: RunColumn_Feedback type: object goal: + additionalProperties: false properties: column: type: string from_vessel: + additionalProperties: false properties: category: type: string @@ -484,16 +467,26 @@ virtual_column: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -503,12 +496,19 @@ virtual_column: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -551,6 +551,7 @@ virtual_column: solvent2: type: string to_vessel: + additionalProperties: false properties: category: type: string @@ -569,16 +570,26 @@ virtual_column: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -588,12 +599,19 @@ virtual_column: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -623,19 +641,10 @@ virtual_column: - data title: to_vessel type: object - required: - - from_vessel - - to_vessel - - column - - rf - - pct1 - - pct2 - - solvent1 - - solvent2 - - ratio title: RunColumn_Goal type: object result: + additionalProperties: false properties: message: type: string @@ -643,10 +652,6 @@ virtual_column: type: string success: type: boolean - required: - - success - - message - - return_info title: RunColumn_Result type: object required: @@ -722,17 +727,17 @@ virtual_column: status: type: string required: - - status + - column_diameter + - column_length - column_state - current_flow_rate + - current_phase + - current_status + - final_volume - max_flow_rate - - column_length - - column_diameter - processed_volume - progress - - current_status - - current_phase - - final_volume + - status type: object version: 1.0.0 virtual_filter: @@ -755,7 +760,8 @@ virtual_filter: properties: {} required: [] type: object - result: {} + result: + type: boolean required: - goal title: cleanup参数 @@ -776,37 +782,13 @@ virtual_filter: properties: {} required: [] type: object - result: {} + result: + type: boolean required: - goal title: initialize参数 type: object type: UniLabJsonCommandAsync - auto-post_init: - feedback: {} - goal: {} - goal_default: - ros_node: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - ros_node: - type: object - required: - - ros_node - type: object - result: {} - required: - - goal - title: post_init参数 - type: object - type: UniLabJsonCommand filter: feedback: current_status: current_status @@ -868,35 +850,40 @@ virtual_filter: type: '' volume: 0.0 handles: {} + placeholder_keys: {} result: message: message - return_info: message + return_info: return_info success: success schema: description: '' properties: feedback: + additionalProperties: false properties: current_status: type: string current_temp: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number filtered_volume: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number progress: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number - required: - - progress - - current_temp - - filtered_volume - - current_status title: Filter_Feedback type: object goal: + additionalProperties: false properties: continue_heatchill: type: boolean filtrate_vessel: + additionalProperties: false properties: category: type: string @@ -915,16 +902,26 @@ virtual_filter: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -934,12 +931,19 @@ virtual_filter: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -972,10 +976,15 @@ virtual_filter: stir: type: boolean stir_speed: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number temp: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number vessel: + additionalProperties: false properties: category: type: string @@ -994,16 +1003,26 @@ virtual_filter: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -1013,12 +1032,19 @@ virtual_filter: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -1049,18 +1075,13 @@ virtual_filter: title: vessel type: object volume: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number - required: - - vessel - - filtrate_vessel - - stir - - stir_speed - - temp - - continue_heatchill - - volume title: Filter_Goal type: object result: + additionalProperties: false properties: message: type: string @@ -1068,10 +1089,6 @@ virtual_filter: type: string success: type: boolean - required: - - success - - message - - return_info title: Filter_Result type: object required: @@ -1123,7 +1140,7 @@ virtual_filter: config: properties: config: - type: string + type: object device_id: type: string required: [] @@ -1149,15 +1166,15 @@ virtual_filter: status: type: string required: - - status - - progress - - current_temp - current_status + - current_temp - filtered_volume - - message - - max_temp - max_stir_speed + - max_temp - max_volume + - message + - progress + - status type: object version: 1.0.0 virtual_gas_source: @@ -1180,7 +1197,8 @@ virtual_gas_source: properties: {} required: [] type: object - result: {} + result: + type: boolean required: - goal title: cleanup参数 @@ -1201,7 +1219,8 @@ virtual_gas_source: properties: {} required: [] type: object - result: {} + result: + type: boolean required: - goal title: initialize参数 @@ -1254,26 +1273,25 @@ virtual_gas_source: goal: {} goal_default: {} handles: {} - result: {} + placeholder_keys: {} + result: + return_info: return_info schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Feedback type: object goal: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Goal type: object result: + additionalProperties: false properties: return_info: type: string - required: - - return_info title: EmptyIn_Result type: object required: @@ -1286,26 +1304,25 @@ virtual_gas_source: goal: {} goal_default: {} handles: {} - result: {} + placeholder_keys: {} + result: + return_info: return_info schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Feedback type: object goal: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Goal type: object result: + additionalProperties: false properties: return_info: type: string - required: - - return_info title: EmptyIn_Result type: object required: @@ -1320,32 +1337,31 @@ virtual_gas_source: goal_default: string: '' handles: {} - result: {} + placeholder_keys: {} + result: + return_info: return_info + success: success schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: StrSingleInput_Feedback type: object goal: + additionalProperties: false properties: string: type: string - required: - - string title: StrSingleInput_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: StrSingleInput_Result type: object required: @@ -1373,7 +1389,7 @@ virtual_gas_source: config: properties: config: - type: string + type: object device_id: type: string required: [] @@ -1406,7 +1422,8 @@ virtual_heatchill: properties: {} required: [] type: object - result: {} + result: + type: boolean required: - goal title: cleanup参数 @@ -1427,46 +1444,26 @@ virtual_heatchill: properties: {} required: [] type: object - result: {} + result: + type: boolean required: - goal title: initialize参数 type: object type: UniLabJsonCommandAsync - auto-post_init: - feedback: {} - goal: {} - goal_default: - ros_node: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - ros_node: - type: object - required: - - ros_node - type: object - result: {} - required: - - goal - title: post_init参数 - type: object - type: UniLabJsonCommand heat_chill: feedback: status: status goal: + pressure: pressure purpose: purpose + reflux_solvent: reflux_solvent stir: stir stir_speed: stir_speed temp: temp + temp_spec: temp_spec time: time + time_spec: time_spec vessel: vessel goal_default: pressure: '' @@ -1499,20 +1496,23 @@ virtual_heatchill: sample_id: '' type: '' handles: {} + placeholder_keys: {} result: + message: message + return_info: return_info success: success schema: description: '' properties: feedback: + additionalProperties: false properties: status: type: string - required: - - status title: HeatChill_Feedback type: object goal: + additionalProperties: false properties: pressure: type: string @@ -1523,8 +1523,12 @@ virtual_heatchill: stir: type: boolean stir_speed: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number temp: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number temp_spec: type: string @@ -1533,6 +1537,7 @@ virtual_heatchill: time_spec: type: string vessel: + additionalProperties: false properties: category: type: string @@ -1551,16 +1556,26 @@ virtual_heatchill: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -1570,12 +1585,19 @@ virtual_heatchill: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -1605,20 +1627,10 @@ virtual_heatchill: - data title: vessel type: object - required: - - vessel - - temp - - time - - temp_spec - - time_spec - - pressure - - reflux_solvent - - stir - - stir_speed - - purpose title: HeatChill_Goal type: object result: + additionalProperties: false properties: message: type: string @@ -1626,10 +1638,6 @@ virtual_heatchill: type: string success: type: boolean - required: - - success - - message - - return_info title: HeatChill_Result type: object required: @@ -1668,26 +1676,31 @@ virtual_heatchill: sample_id: '' type: '' handles: {} + placeholder_keys: {} result: + return_info: return_info success: success schema: description: '' properties: feedback: + additionalProperties: false properties: status: type: string - required: - - status title: HeatChillStart_Feedback type: object goal: + additionalProperties: false properties: purpose: type: string temp: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number vessel: + additionalProperties: false properties: category: type: string @@ -1706,16 +1719,26 @@ virtual_heatchill: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -1725,12 +1748,19 @@ virtual_heatchill: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -1760,21 +1790,15 @@ virtual_heatchill: - data title: vessel type: object - required: - - vessel - - temp - - purpose title: HeatChillStart_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: HeatChillStart_Result type: object required: @@ -1809,22 +1833,25 @@ virtual_heatchill: sample_id: '' type: '' handles: {} + placeholder_keys: {} result: + return_info: return_info success: success schema: description: '' properties: feedback: + additionalProperties: false properties: status: type: string - required: - - status title: HeatChillStop_Feedback type: object goal: + additionalProperties: false properties: vessel: + additionalProperties: false properties: category: type: string @@ -1843,16 +1870,26 @@ virtual_heatchill: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -1862,12 +1899,19 @@ virtual_heatchill: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -1897,19 +1941,15 @@ virtual_heatchill: - data title: vessel type: object - required: - - vessel title: HeatChillStop_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: HeatChillStop_Result type: object required: @@ -1971,15 +2011,15 @@ virtual_heatchill: stir_speed: type: number required: - - status - - operation_mode - is_stirring - - stir_speed - - remaining_time - - progress + - max_stir_speed - max_temp - min_temp - - max_stir_speed + - operation_mode + - progress + - remaining_time + - status + - stir_speed type: object version: 1.0.0 virtual_multiway_valve: @@ -2027,7 +2067,8 @@ virtual_multiway_valve: required: - port_number type: object - result: {} + result: + type: boolean required: - goal title: is_at_port参数 @@ -2052,7 +2093,8 @@ virtual_multiway_valve: required: - position type: object - result: {} + result: + type: boolean required: - goal title: is_at_position参数 @@ -2073,7 +2115,8 @@ virtual_multiway_valve: properties: {} required: [] type: object - result: {} + result: + type: boolean required: - goal title: is_at_pump_position参数 @@ -2193,42 +2236,41 @@ virtual_multiway_valve: type: object type: UniLabJsonCommand set_position: - feedback: {} + feedback: + status: status goal: command: command goal_default: command: '' handles: {} + placeholder_keys: {} result: + return_info: return_info success: success schema: description: '' properties: feedback: + additionalProperties: false properties: status: type: string - required: - - status title: SendCmd_Feedback type: object goal: + additionalProperties: false properties: command: type: string - required: - - command title: SendCmd_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: SendCmd_Result type: object required: @@ -2237,42 +2279,41 @@ virtual_multiway_valve: type: object type: SendCmd set_valve_position: - feedback: {} + feedback: + status: status goal: command: command goal_default: command: '' handles: {} + placeholder_keys: {} result: + return_info: return_info success: success schema: description: '' properties: feedback: + additionalProperties: false properties: status: type: string - required: - - status title: SendCmd_Feedback type: object goal: + additionalProperties: false properties: command: type: string - required: - - command title: SendCmd_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: SendCmd_Result type: object required: @@ -2402,13 +2443,13 @@ virtual_multiway_valve: valve_state: type: string required: - - status - - valve_state - - current_position - - target_position - current_port - - valve_position + - current_position - flow_path + - status + - target_position + - valve_position + - valve_state type: object version: 1.0.0 virtual_rotavap: @@ -2431,7 +2472,8 @@ virtual_rotavap: properties: {} required: [] type: object - result: {} + result: + type: boolean required: - goal title: cleanup参数 @@ -2452,43 +2494,22 @@ virtual_rotavap: properties: {} required: [] type: object - result: {} + result: + type: boolean required: - goal title: initialize参数 type: object type: UniLabJsonCommandAsync - auto-post_init: - feedback: {} - goal: {} - goal_default: - ros_node: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - ros_node: - type: object - required: - - ros_node - type: object - result: {} - required: - - goal - title: post_init参数 - type: object - type: UniLabJsonCommand evaporate: feedback: current_device: current_device status: status + time_remaining: time_remaining + time_spent: time_spent goal: pressure: pressure + solvent: solvent stir_speed: stir_speed temp: temp time: time @@ -2520,19 +2541,22 @@ virtual_rotavap: sample_id: '' type: '' handles: {} + placeholder_keys: {} result: - message: message + return_info: return_info success: success schema: description: '' properties: feedback: + additionalProperties: false properties: current_device: type: string status: type: string time_remaining: + additionalProperties: false properties: nanosec: maximum: 4294967295 @@ -2548,6 +2572,7 @@ virtual_rotavap: title: time_remaining type: object time_spent: + additionalProperties: false properties: nanosec: maximum: 4294967295 @@ -2562,26 +2587,29 @@ virtual_rotavap: - nanosec title: time_spent type: object - required: - - status - - current_device - - time_spent - - time_remaining title: Evaporate_Feedback type: object goal: + additionalProperties: false properties: pressure: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number solvent: type: string stir_speed: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number temp: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number time: type: string vessel: + additionalProperties: false properties: category: type: string @@ -2600,16 +2628,26 @@ virtual_rotavap: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -2619,12 +2657,19 @@ virtual_rotavap: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -2654,24 +2699,15 @@ virtual_rotavap: - data title: vessel type: object - required: - - vessel - - pressure - - temp - - time - - stir_speed - - solvent title: Evaporate_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: Evaporate_Result type: object required: @@ -2725,7 +2761,7 @@ virtual_rotavap: config: properties: config: - type: string + type: object device_id: type: string required: [] @@ -2755,17 +2791,17 @@ virtual_rotavap: vacuum_pressure: type: number required: - - status - - rotavap_state - current_temp - - rotation_speed - - vacuum_pressure - evaporated_volume - - progress - - message - - max_temp - max_rotation_speed + - max_temp + - message + - progress - remaining_time + - rotation_speed + - rotavap_state + - status + - vacuum_pressure type: object version: 1.0.0 virtual_separator: @@ -2788,7 +2824,8 @@ virtual_separator: properties: {} required: [] type: object - result: {} + result: + type: boolean required: - goal title: cleanup参数 @@ -2809,44 +2846,21 @@ virtual_separator: properties: {} required: [] type: object - result: {} + result: + type: boolean required: - goal title: initialize参数 type: object type: UniLabJsonCommandAsync - auto-post_init: - feedback: {} - goal: {} - goal_default: - ros_node: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - ros_node: - type: object - required: - - ros_node - type: object - result: {} - required: - - goal - title: post_init参数 - type: object - type: UniLabJsonCommand separate: feedback: - current_status: status progress: progress + status: status goal: from_vessel: from_vessel product_phase: product_phase + product_vessel: product_vessel purpose: purpose repeats: repeats separation_vessel: separation_vessel @@ -2857,7 +2871,10 @@ virtual_separator: stir_time: stir_time through: through to_vessel: to_vessel + vessel: vessel + volume: volume waste_phase_to_vessel: waste_phase_to_vessel + waste_vessel: waste_vessel goal_default: from_vessel: category: '' @@ -3010,26 +3027,30 @@ virtual_separator: sample_id: '' type: '' handles: {} + placeholder_keys: {} result: message: message + return_info: return_info success: success schema: description: '' properties: feedback: + additionalProperties: false properties: progress: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number status: type: string - required: - - status - - progress title: Separate_Feedback type: object goal: + additionalProperties: false properties: from_vessel: + additionalProperties: false properties: category: type: string @@ -3048,16 +3069,26 @@ virtual_separator: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -3067,12 +3098,19 @@ virtual_separator: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -3105,6 +3143,7 @@ virtual_separator: product_phase: type: string product_vessel: + additionalProperties: false properties: category: type: string @@ -3123,16 +3162,26 @@ virtual_separator: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -3142,12 +3191,19 @@ virtual_separator: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -3184,6 +3240,7 @@ virtual_separator: minimum: -2147483648 type: integer separation_vessel: + additionalProperties: false properties: category: type: string @@ -3202,16 +3259,26 @@ virtual_separator: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -3221,12 +3288,19 @@ virtual_separator: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -3257,18 +3331,25 @@ virtual_separator: title: separation_vessel type: object settling_time: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number solvent: type: string solvent_volume: type: string stir_speed: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number stir_time: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number through: type: string to_vessel: + additionalProperties: false properties: category: type: string @@ -3287,16 +3368,26 @@ virtual_separator: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -3306,12 +3397,19 @@ virtual_separator: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -3342,6 +3440,7 @@ virtual_separator: title: to_vessel type: object vessel: + additionalProperties: false properties: category: type: string @@ -3360,16 +3459,26 @@ virtual_separator: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -3379,12 +3488,19 @@ virtual_separator: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -3417,6 +3533,7 @@ virtual_separator: volume: type: string waste_phase_to_vessel: + additionalProperties: false properties: category: type: string @@ -3435,16 +3552,26 @@ virtual_separator: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -3454,12 +3581,19 @@ virtual_separator: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -3490,6 +3624,7 @@ virtual_separator: title: waste_phase_to_vessel type: object waste_vessel: + additionalProperties: false properties: category: type: string @@ -3508,16 +3643,26 @@ virtual_separator: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -3527,12 +3672,19 @@ virtual_separator: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -3562,27 +3714,10 @@ virtual_separator: - data title: waste_vessel type: object - required: - - vessel - - purpose - - product_phase - - from_vessel - - separation_vessel - - to_vessel - - waste_phase_to_vessel - - product_vessel - - waste_vessel - - solvent - - solvent_volume - - volume - - through - - repeats - - stir_time - - stir_speed - - settling_time title: Separate_Goal type: object result: + additionalProperties: false properties: message: type: string @@ -3590,10 +3725,6 @@ virtual_separator: type: string success: type: boolean - required: - - success - - message - - return_info title: Separate_Result type: object required: @@ -3645,7 +3776,7 @@ virtual_separator: config: properties: config: - type: string + type: object device_id: type: string required: [] @@ -3671,15 +3802,15 @@ virtual_separator: volume: type: number required: - - status - - separator_state - - volume - has_phases - - phase_separation - - stir_speed - - settling_time - - progress - message + - phase_separation + - progress + - separator_state + - settling_time + - status + - stir_speed + - volume type: object version: 1.0.0 virtual_solenoid_valve: @@ -3702,7 +3833,8 @@ virtual_solenoid_valve: properties: {} required: [] type: object - result: {} + result: + type: boolean required: - goal title: cleanup参数 @@ -3723,7 +3855,8 @@ virtual_solenoid_valve: properties: {} required: [] type: object - result: {} + result: + type: boolean required: - goal title: initialize参数 @@ -3744,37 +3877,13 @@ virtual_solenoid_valve: properties: {} required: [] type: object - result: {} + result: + type: boolean required: - goal title: is_closed参数 type: object type: UniLabJsonCommand - auto-post_init: - feedback: {} - goal: {} - goal_default: - ros_node: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - ros_node: - type: object - required: - - ros_node - type: object - result: {} - required: - - goal - title: post_init参数 - type: object - type: UniLabJsonCommand auto-reset: feedback: {} goal: {} @@ -3819,31 +3928,28 @@ virtual_solenoid_valve: type: UniLabJsonCommand close: feedback: {} - goal: - command: CLOSED + goal: {} goal_default: {} handles: {} + placeholder_keys: {} result: - success: success + return_info: return_info schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Feedback type: object goal: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Goal type: object result: + additionalProperties: false properties: return_info: type: string - required: - - return_info title: EmptyIn_Result type: object required: @@ -3856,26 +3962,25 @@ virtual_solenoid_valve: goal: {} goal_default: {} handles: {} - result: {} + placeholder_keys: {} + result: + return_info: return_info schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Feedback type: object goal: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Goal type: object result: + additionalProperties: false properties: return_info: type: string - required: - - return_info title: EmptyIn_Result type: object required: @@ -3890,32 +3995,31 @@ virtual_solenoid_valve: goal_default: string: '' handles: {} - result: {} + placeholder_keys: {} + result: + return_info: return_info + success: success schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: StrSingleInput_Feedback type: object goal: + additionalProperties: false properties: string: type: string - required: - - string title: StrSingleInput_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: StrSingleInput_Result type: object required: @@ -3924,44 +4028,41 @@ virtual_solenoid_valve: type: object type: StrSingleInput set_valve_position: - feedback: {} + feedback: + status: status goal: command: command goal_default: command: '' handles: {} + placeholder_keys: {} result: - message: message + return_info: return_info success: success - valve_position: valve_position schema: description: '' properties: feedback: + additionalProperties: false properties: status: type: string - required: - - status title: SendCmd_Feedback type: object goal: + additionalProperties: false properties: command: type: string - required: - - command title: SendCmd_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: SendCmd_Result type: object required: @@ -4016,10 +4117,10 @@ virtual_solenoid_valve: valve_state: type: string required: - - status - - valve_state - is_open + - status - valve_position + - valve_state type: object version: 1.0.0 virtual_solid_dispenser: @@ -4029,9 +4130,10 @@ virtual_solid_dispenser: action_value_mappings: add_solid: feedback: - current_status: status + current_status: current_status progress: progress goal: + amount: amount equiv: equiv event: event mass: mass @@ -4040,7 +4142,12 @@ virtual_solid_dispenser: rate_spec: rate_spec ratio: ratio reagent: reagent + stir: stir + stir_speed: stir_speed + time: time vessel: vessel + viscous: viscous + volume: volume goal_default: amount: '' equiv: '' @@ -4077,6 +4184,7 @@ virtual_solid_dispenser: viscous: false volume: '' handles: {} + placeholder_keys: {} result: message: message return_info: return_info @@ -4085,17 +4193,18 @@ virtual_solid_dispenser: description: '' properties: feedback: + additionalProperties: false properties: current_status: type: string progress: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number - required: - - progress - - current_status title: Add_Feedback type: object goal: + additionalProperties: false properties: amount: type: string @@ -4118,10 +4227,13 @@ virtual_solid_dispenser: stir: type: boolean stir_speed: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number time: type: string vessel: + additionalProperties: false properties: category: type: string @@ -4140,16 +4252,26 @@ virtual_solid_dispenser: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -4159,12 +4281,19 @@ virtual_solid_dispenser: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -4198,25 +4327,10 @@ virtual_solid_dispenser: type: boolean volume: type: string - required: - - vessel - - reagent - - volume - - mass - - amount - - time - - stir - - stir_speed - - viscous - - purpose - - event - - mol - - rate_spec - - equiv - - ratio title: Add_Goal type: object result: + additionalProperties: false properties: message: type: string @@ -4224,10 +4338,6 @@ virtual_solid_dispenser: type: string success: type: boolean - required: - - success - - message - - return_info title: Add_Result type: object required: @@ -4250,7 +4360,8 @@ virtual_solid_dispenser: properties: {} required: [] type: object - result: {} + result: + type: boolean required: - goal title: cleanup参数 @@ -4275,7 +4386,8 @@ virtual_solid_dispenser: required: - reagent_name type: object - result: {} + result: + type: string required: - goal title: find_solid_reagent_bottle参数 @@ -4296,7 +4408,8 @@ virtual_solid_dispenser: properties: {} required: [] type: object - result: {} + result: + type: boolean required: - goal title: initialize参数 @@ -4321,7 +4434,8 @@ virtual_solid_dispenser: required: - mass_str type: object - result: {} + result: + type: number required: - goal title: parse_mass_string参数 @@ -4346,37 +4460,13 @@ virtual_solid_dispenser: required: - mol_str type: object - result: {} + result: + type: number required: - goal title: parse_mol_string参数 type: object type: UniLabJsonCommand - auto-post_init: - feedback: {} - goal: {} - goal_default: - ros_node: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - ros_node: - type: object - required: - - ros_node - type: object - result: {} - required: - - goal - title: post_init参数 - type: object - type: UniLabJsonCommand module: unilabos.devices.virtual.virtual_solid_dispenser:VirtualSolidDispenser status_types: current_reagent: str @@ -4425,9 +4515,9 @@ virtual_solid_dispenser: total_operations: type: integer required: - - status - current_reagent - dispensed_amount + - status - total_operations type: object version: 1.0.0 @@ -4451,7 +4541,8 @@ virtual_stirrer: properties: {} required: [] type: object - result: {} + result: + type: boolean required: - goal title: cleanup参数 @@ -4472,40 +4563,18 @@ virtual_stirrer: properties: {} required: [] type: object - result: {} + result: + type: boolean required: - goal title: initialize参数 type: object type: UniLabJsonCommandAsync - auto-post_init: - feedback: {} - goal: {} - goal_default: - ros_node: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - ros_node: - type: object - required: - - ros_node - type: object - result: {} - required: - - goal - title: post_init参数 - type: object - type: UniLabJsonCommand start_stir: feedback: - status: status + current_speed: current_speed + current_status: current_status + progress: progress goal: purpose: purpose stir_speed: stir_speed @@ -4534,32 +4603,40 @@ virtual_stirrer: sample_id: '' type: '' handles: {} + placeholder_keys: {} result: + message: message + return_info: return_info success: success schema: description: '' properties: feedback: + additionalProperties: false properties: current_speed: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number current_status: type: string progress: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number - required: - - progress - - current_speed - - current_status title: StartStir_Feedback type: object goal: + additionalProperties: false properties: purpose: type: string stir_speed: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number vessel: + additionalProperties: false properties: category: type: string @@ -4578,16 +4655,26 @@ virtual_stirrer: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -4597,12 +4684,19 @@ virtual_stirrer: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -4632,13 +4726,10 @@ virtual_stirrer: - data title: vessel type: object - required: - - vessel - - stir_speed - - purpose title: StartStir_Goal type: object result: + additionalProperties: false properties: message: type: string @@ -4646,10 +4737,6 @@ virtual_stirrer: type: string success: type: boolean - required: - - success - - message - - return_info title: StartStir_Result type: object required: @@ -4661,9 +4748,13 @@ virtual_stirrer: feedback: status: status goal: + event: event settling_time: settling_time stir_speed: stir_speed stir_time: stir_time + time: time + time_spec: time_spec + vessel: vessel goal_default: event: '' settling_time: '' @@ -4692,34 +4783,42 @@ virtual_stirrer: sample_id: '' type: '' handles: {} + placeholder_keys: {} result: + message: message + return_info: return_info success: success schema: description: '' properties: feedback: + additionalProperties: false properties: status: type: string - required: - - status title: Stir_Feedback type: object goal: + additionalProperties: false properties: event: type: string settling_time: type: string stir_speed: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number stir_time: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number time: type: string time_spec: type: string vessel: + additionalProperties: false properties: category: type: string @@ -4738,16 +4837,26 @@ virtual_stirrer: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -4757,12 +4866,19 @@ virtual_stirrer: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -4792,17 +4908,10 @@ virtual_stirrer: - data title: vessel type: object - required: - - vessel - - time - - event - - time_spec - - stir_time - - stir_speed - - settling_time title: Stir_Goal type: object result: + additionalProperties: false properties: message: type: string @@ -4810,10 +4919,6 @@ virtual_stirrer: type: string success: type: boolean - required: - - success - - message - - return_info title: Stir_Result type: object required: @@ -4823,7 +4928,8 @@ virtual_stirrer: type: Stir stop_stir: feedback: - status: status + current_status: current_status + progress: progress goal: vessel: vessel goal_default: @@ -4848,25 +4954,30 @@ virtual_stirrer: sample_id: '' type: '' handles: {} + placeholder_keys: {} result: + message: message + return_info: return_info success: success schema: description: '' properties: feedback: + additionalProperties: false properties: current_status: type: string progress: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number - required: - - progress - - current_status title: StopStir_Feedback type: object goal: + additionalProperties: false properties: vessel: + additionalProperties: false properties: category: type: string @@ -4885,16 +4996,26 @@ virtual_stirrer: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -4904,12 +5025,19 @@ virtual_stirrer: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -4939,11 +5067,10 @@ virtual_stirrer: - data title: vessel type: object - required: - - vessel title: StopStir_Goal type: object result: + additionalProperties: false properties: message: type: string @@ -4951,10 +5078,6 @@ virtual_stirrer: type: string success: type: boolean - required: - - success - - message - - return_info title: StopStir_Result type: object required: @@ -4966,7 +5089,7 @@ virtual_stirrer: status_types: current_speed: float current_vessel: str - device_info: dict + device_info: Dict[str, Any] is_stirring: bool max_speed: float min_speed: float @@ -5016,15 +5139,15 @@ virtual_stirrer: status: type: string required: - - status - - operation_mode - - current_vessel - current_speed + - current_vessel + - device_info - is_stirring - - remaining_time - max_speed - min_speed - - device_info + - operation_mode + - remaining_time + - status type: object version: 1.0.0 virtual_transfer_pump: @@ -5075,7 +5198,8 @@ virtual_transfer_pump: properties: {} required: [] type: object - result: {} + result: + type: boolean required: - goal title: cleanup参数 @@ -5172,7 +5296,8 @@ virtual_transfer_pump: properties: {} required: [] type: object - result: {} + result: + type: boolean required: - goal title: initialize参数 @@ -5193,7 +5318,8 @@ virtual_transfer_pump: properties: {} required: [] type: object - result: {} + result: + type: boolean required: - goal title: is_empty参数 @@ -5214,37 +5340,13 @@ virtual_transfer_pump: properties: {} required: [] type: object - result: {} + result: + type: boolean required: - goal title: is_full参数 type: object type: UniLabJsonCommand - auto-post_init: - feedback: {} - goal: {} - goal_default: - ros_node: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - ros_node: - type: object - required: - - ros_node - type: object - result: {} - required: - - goal - title: post_init参数 - type: object - type: UniLabJsonCommand auto-pull_plunger: feedback: {} goal: {} @@ -5359,38 +5461,44 @@ virtual_transfer_pump: max_velocity: 0.0 position: 0.0 handles: {} + placeholder_keys: {} result: message: message + return_info: return_info success: success schema: description: '' properties: feedback: + additionalProperties: false properties: current_position: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number progress: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number status: type: string - required: - - status - - current_position - - progress title: SetPumpPosition_Feedback type: object goal: + additionalProperties: false properties: max_velocity: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number position: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number - required: - - position - - max_velocity title: SetPumpPosition_Goal type: object result: + additionalProperties: false properties: message: type: string @@ -5398,10 +5506,6 @@ virtual_transfer_pump: type: string success: type: boolean - required: - - return_info - - success - - message title: SetPumpPosition_Result type: object required: @@ -5416,6 +5520,8 @@ virtual_transfer_pump: transferred_volume: transferred_volume goal: amount: amount + aspirate_velocity: aspirate_velocity + dispense_velocity: dispense_velocity from_vessel: from_vessel rinsing_repeats: rinsing_repeats rinsing_solvent: rinsing_solvent @@ -5437,27 +5543,31 @@ virtual_transfer_pump: viscous: false volume: 0.0 handles: {} + placeholder_keys: {} result: message: message + return_info: return_info success: success schema: description: '' properties: feedback: + additionalProperties: false properties: current_status: type: string progress: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number transferred_volume: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number - required: - - progress - - transferred_volume - - current_status title: Transfer_Feedback type: object goal: + additionalProperties: false properties: amount: type: string @@ -5470,31 +5580,27 @@ virtual_transfer_pump: rinsing_solvent: type: string rinsing_volume: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number solid: type: boolean time: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number to_vessel: type: string viscous: type: boolean volume: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number - required: - - from_vessel - - to_vessel - - volume - - amount - - time - - viscous - - rinsing_solvent - - rinsing_volume - - rinsing_repeats - - solid title: Transfer_Goal type: object result: + additionalProperties: false properties: message: type: string @@ -5502,10 +5608,6 @@ virtual_transfer_pump: type: string success: type: boolean - required: - - success - - message - - return_info title: Transfer_Result type: object required: @@ -5558,12 +5660,12 @@ virtual_transfer_pump: transfer_rate: type: number required: - - status - - position - current_volume - max_velocity - - transfer_rate + - position - remaining_capacity + - status + - transfer_rate type: object version: 1.0.0 virtual_vacuum_pump: @@ -5586,7 +5688,8 @@ virtual_vacuum_pump: properties: {} required: [] type: object - result: {} + result: + type: boolean required: - goal title: cleanup参数 @@ -5607,7 +5710,8 @@ virtual_vacuum_pump: properties: {} required: [] type: object - result: {} + result: + type: boolean required: - goal title: initialize参数 @@ -5660,26 +5764,25 @@ virtual_vacuum_pump: goal: {} goal_default: {} handles: {} - result: {} + placeholder_keys: {} + result: + return_info: return_info schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Feedback type: object goal: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Goal type: object result: + additionalProperties: false properties: return_info: type: string - required: - - return_info title: EmptyIn_Result type: object required: @@ -5692,26 +5795,25 @@ virtual_vacuum_pump: goal: {} goal_default: {} handles: {} - result: {} + placeholder_keys: {} + result: + return_info: return_info schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Feedback type: object goal: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Goal type: object result: + additionalProperties: false properties: return_info: type: string - required: - - return_info title: EmptyIn_Result type: object required: @@ -5726,32 +5828,31 @@ virtual_vacuum_pump: goal_default: string: '' handles: {} - result: {} + placeholder_keys: {} + result: + return_info: return_info + success: success schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: StrSingleInput_Feedback type: object goal: + additionalProperties: false properties: string: type: string - required: - - string title: StrSingleInput_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: StrSingleInput_Result type: object required: @@ -5779,7 +5880,7 @@ virtual_vacuum_pump: config: properties: config: - type: string + type: object device_id: type: string required: [] @@ -5792,482 +5893,3 @@ virtual_vacuum_pump: - status type: object version: 1.0.0 -virtual_workbench: - category: - - virtual_device - class: - action_value_mappings: - auto-move_to_heating_station: - feedback: {} - goal: {} - goal_default: - material_number: null - handles: - input: - - data_key: material_number - data_source: handle - data_type: workbench_material - handler_key: material_input - label: 物料编号 - output: - - data_key: station_id - data_source: executor - data_type: workbench_station - handler_key: heating_station_output - label: 加热台ID - - data_key: material_number - data_source: executor - data_type: workbench_material - handler_key: material_number_output - label: 物料编号 - placeholder_keys: {} - result: {} - schema: - description: 将物料从An位置移动到空闲加热台,返回分配的加热台ID - properties: - feedback: {} - goal: - properties: - material_number: - description: 物料编号,1-5,物料ID自动生成为A{n} - type: integer - required: - - material_number - type: object - result: - $defs: - LabSample: - properties: - extra: - additionalProperties: true - title: Extra - type: object - oss_path: - title: Oss Path - type: string - sample_uuid: - title: Sample Uuid - type: string - required: - - sample_uuid - - oss_path - - extra - title: LabSample - type: object - description: move_to_heating_station 返回类型 - properties: - material_id: - title: Material Id - type: string - material_number: - title: Material Number - type: integer - message: - title: Message - type: string - station_id: - description: 分配的加热台ID - title: Station Id - type: integer - success: - title: Success - type: boolean - unilabos_samples: - items: - $ref: '#/$defs/LabSample' - title: Unilabos Samples - type: array - required: - - success - - station_id - - material_id - - material_number - - message - - unilabos_samples - title: MoveToHeatingStationResult - type: object - required: - - goal - title: move_to_heating_station参数 - type: object - type: UniLabJsonCommand - auto-move_to_output: - feedback: {} - goal: {} - goal_default: - material_number: null - station_id: null - handles: - input: - - data_key: station_id - data_source: handle - data_type: workbench_station - handler_key: output_station_input - label: 加热台ID - - data_key: material_number - data_source: handle - data_type: workbench_material - handler_key: output_material_input - label: 物料编号 - placeholder_keys: {} - result: {} - schema: - description: 将物料从加热台移动到输出位置Cn - properties: - feedback: {} - goal: - properties: - material_number: - description: 物料编号,用于确定输出位置Cn - type: integer - station_id: - description: 加热台ID,1-3,从上一节点传入 - type: integer - required: - - station_id - - material_number - type: object - result: - $defs: - LabSample: - properties: - extra: - additionalProperties: true - title: Extra - type: object - oss_path: - title: Oss Path - type: string - sample_uuid: - title: Sample Uuid - type: string - required: - - sample_uuid - - oss_path - - extra - title: LabSample - type: object - description: move_to_output 返回类型 - properties: - material_id: - title: Material Id - type: string - station_id: - title: Station Id - type: integer - success: - title: Success - type: boolean - unilabos_samples: - items: - $ref: '#/$defs/LabSample' - title: Unilabos Samples - type: array - required: - - success - - station_id - - material_id - - unilabos_samples - title: MoveToOutputResult - type: object - required: - - goal - title: move_to_output参数 - type: object - type: UniLabJsonCommand - auto-prepare_materials: - feedback: {} - goal: {} - goal_default: - count: 5 - handles: - output: - - data_key: material_1 - data_source: executor - data_type: workbench_material - handler_key: channel_1 - label: 实验1 - - data_key: material_2 - data_source: executor - data_type: workbench_material - handler_key: channel_2 - label: 实验2 - - data_key: material_3 - data_source: executor - data_type: workbench_material - handler_key: channel_3 - label: 实验3 - - data_key: material_4 - data_source: executor - data_type: workbench_material - handler_key: channel_4 - label: 实验4 - - data_key: material_5 - data_source: executor - data_type: workbench_material - handler_key: channel_5 - label: 实验5 - placeholder_keys: {} - result: {} - schema: - description: 批量准备物料 - 虚拟起始节点,生成A1-A5物料,输出5个handle供后续节点使用 - properties: - feedback: {} - goal: - properties: - count: - default: 5 - description: 待生成的物料数量,默认5 (生成 A1-A5) - type: integer - required: [] - type: object - result: - $defs: - LabSample: - properties: - extra: - additionalProperties: true - title: Extra - type: object - oss_path: - title: Oss Path - type: string - sample_uuid: - title: Sample Uuid - type: string - required: - - sample_uuid - - oss_path - - extra - title: LabSample - type: object - description: prepare_materials 返回类型 - 批量准备物料 - properties: - count: - title: Count - type: integer - material_1: - title: Material 1 - type: integer - material_2: - title: Material 2 - type: integer - material_3: - title: Material 3 - type: integer - material_4: - title: Material 4 - type: integer - material_5: - title: Material 5 - type: integer - message: - title: Message - type: string - success: - title: Success - type: boolean - unilabos_samples: - items: - $ref: '#/$defs/LabSample' - title: Unilabos Samples - type: array - required: - - success - - count - - material_1 - - material_2 - - material_3 - - material_4 - - material_5 - - message - - unilabos_samples - title: PrepareMaterialsResult - type: object - required: - - goal - title: prepare_materials参数 - type: object - type: UniLabJsonCommand - auto-start_heating: - always_free: true - feedback: {} - goal: {} - goal_default: - material_number: null - station_id: null - handles: - input: - - data_key: station_id - data_source: handle - data_type: workbench_station - handler_key: station_id_input - label: 加热台ID - - data_key: material_number - data_source: handle - data_type: workbench_material - handler_key: material_number_input - label: 物料编号 - output: - - data_key: station_id - data_source: executor - data_type: workbench_station - handler_key: heating_done_station - label: 加热完成-加热台ID - - data_key: material_number - data_source: executor - data_type: workbench_material - handler_key: heating_done_material - label: 加热完成-物料编号 - placeholder_keys: {} - result: {} - schema: - description: 启动指定加热台的加热程序 - properties: - feedback: {} - goal: - properties: - material_number: - description: 物料编号,从上一节点传入 - type: integer - station_id: - description: 加热台ID,1-3,从上一节点传入 - type: integer - required: - - station_id - - material_number - type: object - result: - $defs: - LabSample: - properties: - extra: - additionalProperties: true - title: Extra - type: object - oss_path: - title: Oss Path - type: string - sample_uuid: - title: Sample Uuid - type: string - required: - - sample_uuid - - oss_path - - extra - title: LabSample - type: object - description: start_heating 返回类型 - properties: - material_id: - title: Material Id - type: string - material_number: - title: Material Number - type: integer - message: - title: Message - type: string - station_id: - title: Station Id - type: integer - success: - title: Success - type: boolean - unilabos_samples: - items: - $ref: '#/$defs/LabSample' - title: Unilabos Samples - type: array - required: - - success - - station_id - - material_id - - material_number - - message - - unilabos_samples - title: StartHeatingResult - type: object - required: - - goal - title: start_heating参数 - type: object - type: UniLabJsonCommand - module: unilabos.devices.virtual.workbench:VirtualWorkbench - status_types: - active_tasks_count: int - arm_current_task: str - arm_state: str - heating_station_1_material: str - heating_station_1_progress: float - heating_station_1_state: str - heating_station_2_material: str - heating_station_2_progress: float - heating_station_2_state: str - heating_station_3_material: str - heating_station_3_progress: float - heating_station_3_state: str - message: str - status: str - type: python - config_info: [] - description: Virtual Workbench with 1 robotic arm and 3 heating stations for concurrent - material processing - handles: [] - icon: '' - init_param_schema: - config: - properties: - config: - type: string - device_id: - type: string - required: [] - type: object - data: - properties: - active_tasks_count: - type: integer - arm_current_task: - type: string - arm_state: - type: string - heating_station_1_material: - type: string - heating_station_1_progress: - type: number - heating_station_1_state: - type: string - heating_station_2_material: - type: string - heating_station_2_progress: - type: number - heating_station_2_state: - type: string - heating_station_3_material: - type: string - heating_station_3_progress: - type: number - heating_station_3_state: - type: string - message: - type: string - status: - type: string - required: - - status - - arm_state - - arm_current_task - - heating_station_1_state - - heating_station_1_material - - heating_station_1_progress - - heating_station_2_state - - heating_station_2_material - - heating_station_2_progress - - heating_station_3_state - - heating_station_3_material - - heating_station_3_progress - - active_tasks_count - - message - type: object - version: 1.0.0 diff --git a/unilabos/registry/devices/work_station.yaml b/unilabos/registry/devices/work_station.yaml index e1be7f3d..87a2fabe 100644 --- a/unilabos/registry/devices/work_station.yaml +++ b/unilabos/registry/devices/work_station.yaml @@ -59,16 +59,17 @@ workstation: description: '' properties: feedback: + additionalProperties: false properties: status: type: string - required: - - status title: AGVTransfer_Feedback type: object goal: + additionalProperties: false properties: from_repo: + additionalProperties: false properties: category: type: string @@ -87,16 +88,26 @@ workstation: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -106,12 +117,19 @@ workstation: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -144,6 +162,7 @@ workstation: from_repo_position: type: string to_repo: + additionalProperties: false properties: category: type: string @@ -162,16 +181,26 @@ workstation: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -181,12 +210,19 @@ workstation: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -218,22 +254,15 @@ workstation: type: object to_repo_position: type: string - required: - - from_repo - - from_repo_position - - to_repo - - to_repo_position title: AGVTransfer_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: AGVTransfer_Result type: object required: @@ -319,17 +348,18 @@ workstation: description: '' properties: feedback: + additionalProperties: false properties: current_status: type: string progress: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number - required: - - progress - - current_status title: Add_Feedback type: object goal: + additionalProperties: false properties: amount: type: string @@ -352,10 +382,13 @@ workstation: stir: type: boolean stir_speed: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number time: type: string vessel: + additionalProperties: false properties: category: type: string @@ -374,16 +407,26 @@ workstation: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -393,12 +436,19 @@ workstation: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -432,25 +482,10 @@ workstation: type: boolean volume: type: string - required: - - vessel - - reagent - - volume - - mass - - amount - - time - - stir - - stir_speed - - viscous - - purpose - - event - - mol - - rate_spec - - equiv - - ratio title: Add_Goal type: object result: + additionalProperties: false properties: message: type: string @@ -458,10 +493,6 @@ workstation: type: string success: type: boolean - required: - - success - - message - - return_info title: Add_Result type: object required: @@ -528,23 +559,27 @@ workstation: description: '' properties: feedback: + additionalProperties: false properties: progress: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number status: type: string - required: - - status - - progress title: AdjustPH_Feedback type: object goal: + additionalProperties: false properties: ph_value: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number reagent: type: string vessel: + additionalProperties: false properties: category: type: string @@ -563,16 +598,26 @@ workstation: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -582,12 +627,19 @@ workstation: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -617,13 +669,10 @@ workstation: - data title: vessel type: object - required: - - vessel - - ph_value - - reagent title: AdjustPH_Goal type: object result: + additionalProperties: false properties: message: type: string @@ -631,10 +680,6 @@ workstation: type: string success: type: boolean - required: - - success - - message - - return_info title: AdjustPH_Result type: object required: @@ -693,31 +738,41 @@ workstation: description: '' properties: feedback: + additionalProperties: false properties: current_speed: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number current_status: type: string current_temp: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number progress: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number - required: - - progress - - current_speed - - current_temp - - current_status title: Centrifuge_Feedback type: object goal: + additionalProperties: false properties: speed: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number temp: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number time: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number vessel: + additionalProperties: false properties: category: type: string @@ -736,16 +791,26 @@ workstation: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -755,12 +820,19 @@ workstation: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -790,14 +862,10 @@ workstation: - data title: vessel type: object - required: - - vessel - - speed - - time - - temp title: Centrifuge_Goal type: object result: + additionalProperties: false properties: message: type: string @@ -805,10 +873,6 @@ workstation: type: string success: type: boolean - required: - - success - - message - - return_info title: Centrifuge_Result type: object required: @@ -874,12 +938,14 @@ workstation: description: '' properties: feedback: + additionalProperties: false properties: current_device: type: string status: type: string time_remaining: + additionalProperties: false properties: nanosec: maximum: 4294967295 @@ -895,6 +961,7 @@ workstation: title: time_remaining type: object time_spent: + additionalProperties: false properties: nanosec: maximum: 4294967295 @@ -909,14 +976,10 @@ workstation: - nanosec title: time_spent type: object - required: - - status - - current_device - - time_spent - - time_remaining title: Clean_Feedback type: object goal: + additionalProperties: false properties: repeats: maximum: 2147483647 @@ -925,8 +988,11 @@ workstation: solvent: type: string temp: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number vessel: + additionalProperties: false properties: category: type: string @@ -945,16 +1011,26 @@ workstation: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -964,12 +1040,19 @@ workstation: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -1000,24 +1083,18 @@ workstation: title: vessel type: object volume: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number - required: - - vessel - - solvent - - volume - - temp - - repeats title: Clean_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: Clean_Result type: object required: @@ -1083,17 +1160,18 @@ workstation: description: '' properties: feedback: + additionalProperties: false properties: progress: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number status: type: string - required: - - status - - progress title: CleanVessel_Feedback type: object goal: + additionalProperties: false properties: repeats: maximum: 2147483647 @@ -1102,8 +1180,11 @@ workstation: solvent: type: string temp: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number vessel: + additionalProperties: false properties: category: type: string @@ -1122,16 +1203,26 @@ workstation: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -1141,12 +1232,19 @@ workstation: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -1177,16 +1275,13 @@ workstation: title: vessel type: object volume: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number - required: - - vessel - - solvent - - volume - - temp - - repeats title: CleanVessel_Goal type: object result: + additionalProperties: false properties: message: type: string @@ -1194,10 +1289,6 @@ workstation: type: string success: type: boolean - required: - - success - - message - - return_info title: CleanVessel_Result type: object required: @@ -1280,17 +1371,18 @@ workstation: description: '' properties: feedback: + additionalProperties: false properties: progress: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number status: type: string - required: - - status - - progress title: Dissolve_Feedback type: object goal: + additionalProperties: false properties: amount: type: string @@ -1305,12 +1397,15 @@ workstation: solvent: type: string stir_speed: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number temp: type: string time: type: string vessel: + additionalProperties: false properties: category: type: string @@ -1329,16 +1424,26 @@ workstation: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -1348,12 +1453,19 @@ workstation: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -1385,21 +1497,10 @@ workstation: type: object volume: type: string - required: - - vessel - - solvent - - volume - - amount - - temp - - time - - stir_speed - - mass - - mol - - reagent - - event title: Dissolve_Goal type: object result: + additionalProperties: false properties: message: type: string @@ -1407,10 +1508,6 @@ workstation: type: string success: type: boolean - required: - - success - - message - - return_info title: Dissolve_Result type: object required: @@ -1465,21 +1562,23 @@ workstation: description: '' properties: feedback: + additionalProperties: false properties: progress: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number status: type: string - required: - - status - - progress title: Dry_Feedback type: object goal: + additionalProperties: false properties: compound: type: string vessel: + additionalProperties: false properties: category: type: string @@ -1498,16 +1597,26 @@ workstation: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -1517,12 +1626,19 @@ workstation: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -1552,12 +1668,10 @@ workstation: - data title: vessel type: object - required: - - compound - - vessel title: Dry_Goal type: object result: + additionalProperties: false properties: message: type: string @@ -1565,10 +1679,6 @@ workstation: type: string success: type: boolean - required: - - success - - message - - return_info title: Dry_Result type: object required: @@ -1623,12 +1733,14 @@ workstation: description: '' properties: feedback: + additionalProperties: false properties: current_device: type: string status: type: string time_remaining: + additionalProperties: false properties: nanosec: maximum: 4294967295 @@ -1644,6 +1756,7 @@ workstation: title: time_remaining type: object time_spent: + additionalProperties: false properties: nanosec: maximum: 4294967295 @@ -1658,18 +1771,15 @@ workstation: - nanosec title: time_spent type: object - required: - - status - - current_device - - time_spent - - time_remaining title: EvacuateAndRefill_Feedback type: object goal: + additionalProperties: false properties: gas: type: string vessel: + additionalProperties: false properties: category: type: string @@ -1688,16 +1798,26 @@ workstation: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -1707,12 +1827,19 @@ workstation: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -1742,20 +1869,15 @@ workstation: - data title: vessel type: object - required: - - vessel - - gas title: EvacuateAndRefill_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: EvacuateAndRefill_Result type: object required: @@ -1823,12 +1945,14 @@ workstation: description: '' properties: feedback: + additionalProperties: false properties: current_device: type: string status: type: string time_remaining: + additionalProperties: false properties: nanosec: maximum: 4294967295 @@ -1844,6 +1968,7 @@ workstation: title: time_remaining type: object time_spent: + additionalProperties: false properties: nanosec: maximum: 4294967295 @@ -1858,26 +1983,29 @@ workstation: - nanosec title: time_spent type: object - required: - - status - - current_device - - time_spent - - time_remaining title: Evaporate_Feedback type: object goal: + additionalProperties: false properties: pressure: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number solvent: type: string stir_speed: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number temp: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number time: type: string vessel: + additionalProperties: false properties: category: type: string @@ -1896,16 +2024,26 @@ workstation: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -1915,12 +2053,19 @@ workstation: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -1950,24 +2095,15 @@ workstation: - data title: vessel type: object - required: - - vessel - - pressure - - temp - - time - - stir_speed - - solvent title: Evaporate_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: Evaporate_Result type: object required: @@ -2062,27 +2198,31 @@ workstation: description: '' properties: feedback: + additionalProperties: false properties: current_status: type: string current_temp: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number filtered_volume: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number progress: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number - required: - - progress - - current_temp - - filtered_volume - - current_status title: Filter_Feedback type: object goal: + additionalProperties: false properties: continue_heatchill: type: boolean filtrate_vessel: + additionalProperties: false properties: category: type: string @@ -2101,16 +2241,26 @@ workstation: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -2120,12 +2270,19 @@ workstation: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -2158,10 +2315,15 @@ workstation: stir: type: boolean stir_speed: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number temp: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number vessel: + additionalProperties: false properties: category: type: string @@ -2180,16 +2342,26 @@ workstation: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -2199,12 +2371,19 @@ workstation: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -2235,18 +2414,13 @@ workstation: title: vessel type: object volume: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number - required: - - vessel - - filtrate_vessel - - stir - - stir_speed - - temp - - continue_heatchill - - volume title: Filter_Goal type: object result: + additionalProperties: false properties: message: type: string @@ -2254,10 +2428,6 @@ workstation: type: string success: type: boolean - required: - - success - - message - - return_info title: Filter_Result type: object required: @@ -2376,17 +2546,18 @@ workstation: description: '' properties: feedback: + additionalProperties: false properties: progress: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number status: type: string - required: - - status - - progress title: FilterThrough_Feedback type: object goal: + additionalProperties: false properties: eluting_repeats: maximum: 2147483647 @@ -2395,8 +2566,11 @@ workstation: eluting_solvent: type: string eluting_volume: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number filter_through: + additionalProperties: false properties: category: type: string @@ -2415,16 +2589,26 @@ workstation: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -2434,12 +2618,19 @@ workstation: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -2470,6 +2661,7 @@ workstation: title: filter_through type: object from_vessel: + additionalProperties: false properties: category: type: string @@ -2488,16 +2680,26 @@ workstation: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -2507,12 +2709,19 @@ workstation: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -2543,8 +2752,11 @@ workstation: title: from_vessel type: object residence_time: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number to_vessel: + additionalProperties: false properties: category: type: string @@ -2563,16 +2775,26 @@ workstation: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -2582,12 +2804,19 @@ workstation: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -2617,17 +2846,10 @@ workstation: - data title: to_vessel type: object - required: - - from_vessel - - to_vessel - - filter_through - - eluting_solvent - - eluting_volume - - eluting_repeats - - residence_time title: FilterThrough_Goal type: object result: + additionalProperties: false properties: message: type: string @@ -2635,10 +2857,6 @@ workstation: type: string success: type: boolean - required: - - success - - message - - return_info title: FilterThrough_Result type: object required: @@ -2709,14 +2927,14 @@ workstation: description: '' properties: feedback: + additionalProperties: false properties: status: type: string - required: - - status title: HeatChill_Feedback type: object goal: + additionalProperties: false properties: pressure: type: string @@ -2727,8 +2945,12 @@ workstation: stir: type: boolean stir_speed: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number temp: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number temp_spec: type: string @@ -2737,6 +2959,7 @@ workstation: time_spec: type: string vessel: + additionalProperties: false properties: category: type: string @@ -2755,16 +2978,26 @@ workstation: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -2774,12 +3007,19 @@ workstation: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -2809,20 +3049,10 @@ workstation: - data title: vessel type: object - required: - - vessel - - temp - - time - - temp_spec - - time_spec - - pressure - - reflux_solvent - - stir - - stir_speed - - purpose title: HeatChill_Goal type: object result: + additionalProperties: false properties: message: type: string @@ -2830,10 +3060,6 @@ workstation: type: string success: type: boolean - required: - - success - - message - - return_info title: HeatChill_Result type: object required: @@ -2890,20 +3116,23 @@ workstation: description: '' properties: feedback: + additionalProperties: false properties: status: type: string - required: - - status title: HeatChillStart_Feedback type: object goal: + additionalProperties: false properties: purpose: type: string temp: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number vessel: + additionalProperties: false properties: category: type: string @@ -2922,16 +3151,26 @@ workstation: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -2941,12 +3180,19 @@ workstation: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -2976,21 +3222,15 @@ workstation: - data title: vessel type: object - required: - - vessel - - temp - - purpose title: HeatChillStart_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: HeatChillStart_Result type: object required: @@ -3043,16 +3283,17 @@ workstation: description: '' properties: feedback: + additionalProperties: false properties: status: type: string - required: - - status title: HeatChillStop_Feedback type: object goal: + additionalProperties: false properties: vessel: + additionalProperties: false properties: category: type: string @@ -3071,16 +3312,26 @@ workstation: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -3090,12 +3341,19 @@ workstation: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -3125,19 +3383,15 @@ workstation: - data title: vessel type: object - required: - - vessel title: HeatChillStop_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: HeatChillStop_Result type: object required: @@ -3194,23 +3448,25 @@ workstation: description: '' properties: feedback: + additionalProperties: false properties: progress: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number status: type: string - required: - - status - - progress title: Hydrogenate_Feedback type: object goal: + additionalProperties: false properties: temp: type: string time: type: string vessel: + additionalProperties: false properties: category: type: string @@ -3229,16 +3485,26 @@ workstation: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -3248,12 +3514,19 @@ workstation: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -3283,13 +3556,10 @@ workstation: - data title: vessel type: object - required: - - temp - - time - - vessel title: Hydrogenate_Goal type: object result: + additionalProperties: false properties: message: type: string @@ -3297,10 +3567,6 @@ workstation: type: string success: type: boolean - required: - - success - - message - - return_info title: Hydrogenate_Result type: object required: @@ -3416,12 +3682,14 @@ workstation: description: '' properties: feedback: + additionalProperties: false properties: current_device: type: string status: type: string time_remaining: + additionalProperties: false properties: nanosec: maximum: 4294967295 @@ -3437,6 +3705,7 @@ workstation: title: time_remaining type: object time_spent: + additionalProperties: false properties: nanosec: maximum: 4294967295 @@ -3451,22 +3720,21 @@ workstation: - nanosec title: time_spent type: object - required: - - status - - current_device - - time_spent - - time_remaining title: PumpTransfer_Feedback type: object goal: + additionalProperties: false properties: amount: type: string event: type: string flowrate: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number from_vessel: + additionalProperties: false properties: category: type: string @@ -3485,16 +3753,26 @@ workstation: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -3504,12 +3782,19 @@ workstation: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -3548,14 +3833,19 @@ workstation: rinsing_solvent: type: string rinsing_volume: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number solid: type: boolean through: type: string time: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number to_vessel: + additionalProperties: false properties: category: type: string @@ -3574,16 +3864,26 @@ workstation: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -3593,12 +3893,19 @@ workstation: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -3629,38 +3936,24 @@ workstation: title: to_vessel type: object transfer_flowrate: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number viscous: type: boolean volume: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 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: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: PumpTransfer_Result type: object required: @@ -3731,17 +4024,18 @@ workstation: description: '' properties: feedback: + additionalProperties: false properties: progress: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number status: type: string - required: - - status - - progress title: Recrystallize_Feedback type: object goal: + additionalProperties: false properties: ratio: type: string @@ -3750,6 +4044,7 @@ workstation: solvent2: type: string vessel: + additionalProperties: false properties: category: type: string @@ -3768,16 +4063,26 @@ workstation: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -3787,12 +4092,19 @@ workstation: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -3824,15 +4136,10 @@ workstation: type: object volume: type: string - required: - - ratio - - solvent1 - - solvent2 - - vessel - - volume title: Recrystallize_Goal type: object result: + additionalProperties: false properties: message: type: string @@ -3840,10 +4147,6 @@ workstation: type: string success: type: boolean - required: - - success - - message - - return_info title: Recrystallize_Result type: object required: @@ -3890,21 +4193,23 @@ workstation: description: '' properties: feedback: + additionalProperties: false properties: progress: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number status: type: string - required: - - status - - progress title: ResetHandling_Feedback type: object goal: + additionalProperties: false properties: solvent: type: string vessel: + additionalProperties: false properties: category: type: string @@ -3923,16 +4228,26 @@ workstation: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -3942,12 +4257,19 @@ workstation: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -3977,12 +4299,10 @@ workstation: - data title: vessel type: object - required: - - solvent - - vessel title: ResetHandling_Goal type: object result: + additionalProperties: false properties: message: type: string @@ -3990,10 +4310,6 @@ workstation: type: string success: type: boolean - required: - - success - - message - - return_info title: ResetHandling_Result type: object required: @@ -4087,21 +4403,23 @@ workstation: description: '' properties: feedback: + additionalProperties: false properties: progress: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number status: type: string - required: - - status - - progress title: RunColumn_Feedback type: object goal: + additionalProperties: false properties: column: type: string from_vessel: + additionalProperties: false properties: category: type: string @@ -4120,16 +4438,26 @@ workstation: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -4139,12 +4467,19 @@ workstation: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -4187,6 +4522,7 @@ workstation: solvent2: type: string to_vessel: + additionalProperties: false properties: category: type: string @@ -4205,16 +4541,26 @@ workstation: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -4224,12 +4570,19 @@ workstation: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -4259,19 +4612,10 @@ workstation: - data title: to_vessel type: object - required: - - from_vessel - - to_vessel - - column - - rf - - pct1 - - pct2 - - solvent1 - - solvent2 - - ratio title: RunColumn_Goal type: object result: + additionalProperties: false properties: message: type: string @@ -4279,10 +4623,6 @@ workstation: type: string success: type: boolean - required: - - success - - message - - return_info title: RunColumn_Result type: object required: @@ -4495,19 +4835,21 @@ workstation: description: '' properties: feedback: + additionalProperties: false properties: progress: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number status: type: string - required: - - status - - progress title: Separate_Feedback type: object goal: + additionalProperties: false properties: from_vessel: + additionalProperties: false properties: category: type: string @@ -4526,16 +4868,26 @@ workstation: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -4545,12 +4897,19 @@ workstation: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -4583,6 +4942,7 @@ workstation: product_phase: type: string product_vessel: + additionalProperties: false properties: category: type: string @@ -4601,16 +4961,26 @@ workstation: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -4620,12 +4990,19 @@ workstation: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -4662,6 +5039,7 @@ workstation: minimum: -2147483648 type: integer separation_vessel: + additionalProperties: false properties: category: type: string @@ -4680,16 +5058,26 @@ workstation: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -4699,12 +5087,19 @@ workstation: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -4735,18 +5130,25 @@ workstation: title: separation_vessel type: object settling_time: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number solvent: type: string solvent_volume: type: string stir_speed: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number stir_time: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number through: type: string to_vessel: + additionalProperties: false properties: category: type: string @@ -4765,16 +5167,26 @@ workstation: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -4784,12 +5196,19 @@ workstation: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -4820,6 +5239,7 @@ workstation: title: to_vessel type: object vessel: + additionalProperties: false properties: category: type: string @@ -4838,16 +5258,26 @@ workstation: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -4857,12 +5287,19 @@ workstation: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -4895,6 +5332,7 @@ workstation: volume: type: string waste_phase_to_vessel: + additionalProperties: false properties: category: type: string @@ -4913,16 +5351,26 @@ workstation: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -4932,12 +5380,19 @@ workstation: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -4968,6 +5423,7 @@ workstation: title: waste_phase_to_vessel type: object waste_vessel: + additionalProperties: false properties: category: type: string @@ -4986,16 +5442,26 @@ workstation: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -5005,12 +5471,19 @@ workstation: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -5040,27 +5513,10 @@ workstation: - data title: waste_vessel type: object - required: - - vessel - - purpose - - product_phase - - from_vessel - - separation_vessel - - to_vessel - - waste_phase_to_vessel - - product_vessel - - waste_vessel - - solvent - - solvent_volume - - volume - - through - - repeats - - stir_time - - stir_speed - - settling_time title: Separate_Goal type: object result: + additionalProperties: false properties: message: type: string @@ -5068,10 +5524,6 @@ workstation: type: string success: type: boolean - required: - - success - - message - - return_info title: Separate_Result type: object required: @@ -5128,26 +5580,31 @@ workstation: description: '' properties: feedback: + additionalProperties: false properties: current_speed: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number current_status: type: string progress: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number - required: - - progress - - current_speed - - current_status title: StartStir_Feedback type: object goal: + additionalProperties: false properties: purpose: type: string stir_speed: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number vessel: + additionalProperties: false properties: category: type: string @@ -5166,16 +5623,26 @@ workstation: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -5185,12 +5652,19 @@ workstation: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -5220,13 +5694,10 @@ workstation: - data title: vessel type: object - required: - - vessel - - stir_speed - - purpose title: StartStir_Goal type: object result: + additionalProperties: false properties: message: type: string @@ -5234,10 +5705,6 @@ workstation: type: string success: type: boolean - required: - - success - - message - - return_info title: StartStir_Result type: object required: @@ -5302,28 +5769,33 @@ workstation: description: '' properties: feedback: + additionalProperties: false properties: status: type: string - required: - - status title: Stir_Feedback type: object goal: + additionalProperties: false properties: event: type: string settling_time: type: string stir_speed: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number stir_time: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number time: type: string time_spec: type: string vessel: + additionalProperties: false properties: category: type: string @@ -5342,16 +5814,26 @@ workstation: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -5361,12 +5843,19 @@ workstation: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -5396,17 +5885,10 @@ workstation: - data title: vessel type: object - required: - - vessel - - time - - event - - time_spec - - stir_time - - stir_speed - - settling_time title: Stir_Goal type: object result: + additionalProperties: false properties: message: type: string @@ -5414,10 +5896,6 @@ workstation: type: string success: type: boolean - required: - - success - - message - - return_info title: Stir_Result type: object required: @@ -5470,19 +5948,21 @@ workstation: description: '' properties: feedback: + additionalProperties: false properties: current_status: type: string progress: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number - required: - - progress - - current_status title: StopStir_Feedback type: object goal: + additionalProperties: false properties: vessel: + additionalProperties: false properties: category: type: string @@ -5501,16 +5981,26 @@ workstation: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -5520,12 +6010,19 @@ workstation: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -5555,11 +6052,10 @@ workstation: - data title: vessel type: object - required: - - vessel title: StopStir_Goal type: object result: + additionalProperties: false properties: message: type: string @@ -5567,10 +6063,6 @@ workstation: type: string success: type: boolean - required: - - success - - message - - return_info title: StopStir_Result type: object required: @@ -5638,20 +6130,22 @@ workstation: description: '' properties: feedback: + additionalProperties: false properties: current_status: type: string progress: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number transferred_volume: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number - required: - - progress - - transferred_volume - - current_status title: Transfer_Feedback type: object goal: + additionalProperties: false properties: amount: type: string @@ -5664,31 +6158,27 @@ workstation: rinsing_solvent: type: string rinsing_volume: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number solid: type: boolean time: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number to_vessel: type: string viscous: type: boolean volume: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number - required: - - from_vessel - - to_vessel - - volume - - amount - - time - - viscous - - rinsing_solvent - - rinsing_volume - - rinsing_repeats - - solid title: Transfer_Goal type: object result: + additionalProperties: false properties: message: type: string @@ -5696,10 +6186,6 @@ workstation: type: string success: type: boolean - required: - - success - - message - - return_info title: Transfer_Result type: object required: @@ -5807,21 +6293,23 @@ workstation: description: '' properties: feedback: + additionalProperties: false properties: progress: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number status: type: string - required: - - status - - progress title: WashSolid_Feedback type: object goal: + additionalProperties: false properties: event: type: string filtrate_vessel: + additionalProperties: false properties: category: type: string @@ -5840,16 +6328,26 @@ workstation: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -5859,12 +6357,19 @@ workstation: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -5907,12 +6412,17 @@ workstation: stir: type: boolean stir_speed: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number temp: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number time: type: string vessel: + additionalProperties: false properties: category: type: string @@ -5931,16 +6441,26 @@ workstation: parent: type: string pose: + additionalProperties: false properties: orientation: + additionalProperties: false properties: w: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -5950,12 +6470,19 @@ workstation: title: orientation type: object position: + additionalProperties: false properties: x: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number y: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number z: + maximum: 1.7976931348623157e+308 + minimum: -1.7976931348623157e+308 type: number required: - x @@ -5989,23 +6516,10 @@ workstation: type: string volume_spec: type: string - required: - - vessel - - solvent - - volume - - filtrate_vessel - - temp - - stir - - stir_speed - - time - - repeats - - volume_spec - - repeats_spec - - mass - - event title: WashSolid_Goal type: object result: + additionalProperties: false properties: message: type: string @@ -6013,10 +6527,6 @@ workstation: type: string success: type: boolean - required: - - success - - message - - return_info title: WashSolid_Result type: object required: @@ -6035,7 +6545,7 @@ workstation: config: properties: deck: - type: string + type: object protocol_type: items: type: string diff --git a/unilabos/registry/devices/xrd_d7mate.yaml b/unilabos/registry/devices/xrd_d7mate.yaml index cbdf8aa8..2b49ae55 100644 --- a/unilabos/registry/devices/xrd_d7mate.yaml +++ b/unilabos/registry/devices/xrd_d7mate.yaml @@ -45,31 +45,6 @@ xrd_d7mate: title: connect参数 type: object type: UniLabJsonCommand - auto-post_init: - feedback: {} - goal: {} - goal_default: - ros_node: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - ros_node: - type: string - required: - - ros_node - type: object - result: {} - required: - - goal - title: post_init参数 - type: object - type: UniLabJsonCommand auto-start_from_string: feedback: {} goal: {} @@ -85,11 +60,14 @@ xrd_d7mate: goal: properties: params: - type: string + anyOf: + - type: string + - type: object required: - params type: object - result: {} + result: + type: object required: - goal title: start_from_string参数 @@ -105,21 +83,18 @@ xrd_d7mate: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Feedback type: object goal: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Goal type: object result: + additionalProperties: false properties: return_info: type: string - required: - - return_info title: EmptyIn_Result type: object required: @@ -130,38 +105,38 @@ xrd_d7mate: get_sample_down: feedback: {} goal: - sample_station: 1 + int_input: int_input + sample_station: sample_station goal_default: int_input: 0 handles: {} - result: {} + placeholder_keys: {} + result: + return_info: return_info + success: success schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: IntSingleInput_Feedback type: object goal: + additionalProperties: false properties: int_input: maximum: 2147483647 minimum: -2147483648 type: integer - required: - - int_input title: IntSingleInput_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: IntSingleInput_Result type: object required: @@ -179,21 +154,18 @@ xrd_d7mate: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Feedback type: object goal: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Goal type: object result: + additionalProperties: false properties: return_info: type: string - required: - - return_info title: EmptyIn_Result type: object required: @@ -211,21 +183,18 @@ xrd_d7mate: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Feedback type: object goal: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Goal type: object result: + additionalProperties: false properties: return_info: type: string - required: - - return_info title: EmptyIn_Result type: object required: @@ -238,26 +207,25 @@ xrd_d7mate: goal: {} goal_default: {} handles: {} - result: {} + placeholder_keys: {} + result: + return_info: return_info schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Feedback type: object goal: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Goal type: object result: + additionalProperties: false properties: return_info: type: string - required: - - return_info title: EmptyIn_Result type: object required: @@ -274,42 +242,35 @@ xrd_d7mate: sample_id: '' start_theta: 10.0 goal_default: - end_theta: 80.0 - exp_time: 0.5 - increment: 0.02 - sample_id: Sample001 - start_theta: 10.0 + end_theta: null + exp_time: null + increment: null + sample_id: null + start_theta: null handles: {} + placeholder_keys: {} result: {} schema: description: 送样完成后,发送样品信息和采集参数 properties: feedback: - properties: {} - required: [] title: SampleReadyInput_Feedback - type: object goal: properties: end_theta: description: 结束角度(≥5.5°,且必须大于start_theta) - minimum: 5.5 type: number exp_time: description: 曝光时间(0.1-5.0秒) - maximum: 5.0 - minimum: 0.1 type: number increment: description: 角度增量(≥0.005) - minimum: 0.005 type: number sample_id: description: 样品标识符 type: string start_theta: description: 起始角度(≥5°) - minimum: 5.0 type: number required: - sample_id @@ -320,19 +281,11 @@ xrd_d7mate: title: SampleReadyInput_Goal type: object result: - properties: - return_info: - type: string - success: - type: boolean - required: - - return_info - - success title: SampleReadyInput_Result type: object required: - goal - title: SampleReadyInput + title: send_sample_ready参数 type: object type: UniLabJsonCommand set_power_off: @@ -340,26 +293,25 @@ xrd_d7mate: goal: {} goal_default: {} handles: {} - result: {} + placeholder_keys: {} + result: + return_info: return_info schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Feedback type: object goal: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Goal type: object result: + additionalProperties: false properties: return_info: type: string - required: - - return_info title: EmptyIn_Result type: object required: @@ -372,26 +324,25 @@ xrd_d7mate: goal: {} goal_default: {} handles: {} - result: {} + placeholder_keys: {} + result: + return_info: return_info schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Feedback type: object goal: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Goal type: object result: + additionalProperties: false properties: return_info: type: string - required: - - return_info title: EmptyIn_Result type: object required: @@ -405,18 +356,16 @@ xrd_d7mate: current: 30.0 voltage: 40.0 goal_default: - current: 30.0 - voltage: 40.0 + current: null + voltage: null handles: {} + placeholder_keys: {} result: {} schema: description: 设置高压电源电压和电流 properties: feedback: - properties: {} - required: [] title: VoltageCurrentInput_Feedback - type: object goal: properties: current: @@ -431,19 +380,11 @@ xrd_d7mate: title: VoltageCurrentInput_Goal type: object result: - properties: - return_info: - type: string - success: - type: boolean - required: - - return_info - - success title: VoltageCurrentInput_Result type: object required: - goal - title: VoltageCurrentInput + title: set_voltage_current参数 type: object type: UniLabJsonCommand start: @@ -453,11 +394,12 @@ xrd_d7mate: end_theta: 80.0 exp_time: 0.1 increment: 0.05 - sample_id: 样品名称 + sample_id: '' start_theta: 10.0 string: '' wait_minutes: 3.0 handles: {} + placeholder_keys: {} result: {} schema: description: 启动自动模式→上样→等待→样品准备→监控→检测下样位→执行下样流程。 @@ -466,54 +408,42 @@ xrd_d7mate: goal: properties: end_theta: + default: 80.0 description: 结束角度(≥5.5°,且必须大于start_theta) - minimum: 5.5 - type: string + type: number exp_time: + default: 0.1 description: 曝光时间(0.1-5.0秒) - maximum: 5.0 - minimum: 0.1 - type: string + type: number increment: + default: 0.05 description: 角度增量(≥0.005) - minimum: 0.005 - type: string + type: number sample_id: + default: '' description: 样品标识符 type: string start_theta: + default: 10.0 description: 起始角度(≥5°) - minimum: 5.0 - type: string + type: number string: + default: '' description: 字符串格式的参数输入,如果提供则优先解析使用 type: string wait_minutes: + default: 3.0 description: 允许上样后等待分钟数 - minimum: 0.0 type: number - required: - - sample_id - - start_theta - - end_theta - - increment - - exp_time + required: [] title: StartWorkflow_Goal type: object result: - properties: - return_info: - type: string - success: - type: boolean - required: - - return_info - - success title: StartWorkflow_Result type: object required: - goal - title: StartWorkflow + title: start参数 type: object type: UniLabJsonCommand start_auto_mode: @@ -521,17 +451,15 @@ xrd_d7mate: goal: status: true goal_default: - status: true + status: null handles: {} + placeholder_keys: {} result: {} schema: description: 启动或停止自动模式 properties: feedback: - properties: {} - required: [] title: BoolSingleInput_Feedback - type: object goal: properties: status: @@ -542,25 +470,16 @@ xrd_d7mate: title: BoolSingleInput_Goal type: object result: - properties: - return_info: - type: string - success: - type: boolean - required: - - return_info - - success title: BoolSingleInput_Result type: object required: - goal - title: BoolSingleInput + title: start_auto_mode参数 type: object type: UniLabJsonCommand module: unilabos.devices.xrd_d7mate.xrd_d7mate:XRDClient status_types: current_acquire_data: dict - sample_down: dict sample_request: dict sample_status: dict type: python @@ -586,16 +505,13 @@ xrd_d7mate: properties: current_acquire_data: type: object - sample_down: - type: object sample_request: type: object sample_status: type: object required: - - sample_request - current_acquire_data + - sample_request - sample_status - - sample_down type: object version: 1.0.0 diff --git a/unilabos/registry/devices/zhida_gcms.yaml b/unilabos/registry/devices/zhida_gcms.yaml index 607af9b9..37adbd79 100644 --- a/unilabos/registry/devices/zhida_gcms.yaml +++ b/unilabos/registry/devices/zhida_gcms.yaml @@ -8,26 +8,25 @@ zhida_gcms: goal: {} goal_default: {} handles: {} - result: {} + placeholder_keys: {} + result: + return_info: return_info schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Feedback type: object goal: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Goal type: object result: + additionalProperties: false properties: return_info: type: string - required: - - return_info title: EmptyIn_Result type: object required: @@ -77,31 +76,6 @@ zhida_gcms: title: connect参数 type: object type: UniLabJsonCommand - auto-post_init: - feedback: {} - goal: {} - goal_default: - ros_node: null - handles: {} - placeholder_keys: {} - result: {} - schema: - description: '' - properties: - feedback: {} - goal: - properties: - ros_node: - type: string - required: - - ros_node - type: object - result: {} - required: - - goal - title: post_init参数 - type: object - type: UniLabJsonCommand get_methods: feedback: {} goal: {} @@ -112,21 +86,18 @@ zhida_gcms: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Feedback type: object goal: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Goal type: object result: + additionalProperties: false properties: return_info: type: string - required: - - return_info title: EmptyIn_Result type: object required: @@ -144,21 +115,18 @@ zhida_gcms: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Feedback type: object goal: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Goal type: object result: + additionalProperties: false properties: return_info: type: string - required: - - return_info title: EmptyIn_Result type: object required: @@ -176,21 +144,18 @@ zhida_gcms: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Feedback type: object goal: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Goal type: object result: + additionalProperties: false properties: return_info: type: string - required: - - return_info title: EmptyIn_Result type: object required: @@ -203,26 +168,25 @@ zhida_gcms: goal: {} goal_default: {} handles: {} - result: {} + placeholder_keys: {} + result: + return_info: return_info schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Feedback type: object goal: - properties: {} - required: [] + additionalProperties: true title: EmptyIn_Goal type: object result: + additionalProperties: false properties: return_info: type: string - required: - - return_info title: EmptyIn_Result type: object required: @@ -234,35 +198,35 @@ zhida_gcms: feedback: {} goal: string: string + text: text goal_default: string: '' handles: {} - result: {} + placeholder_keys: {} + result: + return_info: return_info + success: success schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: StrSingleInput_Feedback type: object goal: + additionalProperties: false properties: string: type: string - required: - - string title: StrSingleInput_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: StrSingleInput_Result type: object required: @@ -273,36 +237,36 @@ zhida_gcms: start_with_csv_file: feedback: {} goal: + csv_file_path: csv_file_path string: string goal_default: string: '' handles: {} - result: {} + placeholder_keys: {} + result: + return_info: return_info + success: success schema: description: '' properties: feedback: - properties: {} - required: [] + additionalProperties: true title: StrSingleInput_Feedback type: object goal: + additionalProperties: false properties: string: type: string - required: - - string title: StrSingleInput_Goal type: object result: + additionalProperties: false properties: return_info: type: string success: type: boolean - required: - - return_info - - success title: StrSingleInput_Result type: object required: @@ -343,8 +307,8 @@ zhida_gcms: version: type: object required: - - status - methods + - status - version type: object version: 1.0.0 diff --git a/unilabos/registry/registry.py b/unilabos/registry/registry.py index 355cd6d6..520cbaa0 100644 --- a/unilabos/registry/registry.py +++ b/unilabos/registry/registry.py @@ -47,6 +47,7 @@ from unilabos.registry.utils import ( normalize_ast_action_handles, wrap_action_schema, preserve_field_descriptions, + strip_ros_descriptions, resolve_method_params_via_import, SIMPLE_TYPE_MAP, ) @@ -110,7 +111,7 @@ class Registry: # 统一入口 # ------------------------------------------------------------------ - def setup(self, devices_dirs=None, upload_registry=False): + def setup(self, devices_dirs=None, upload_registry=False, complete_registry=False): """统一构建注册表入口。""" if self._setup_called: logger.critical("[UniLab Registry] setup方法已被调用过,不允许多次调用") @@ -132,9 +133,9 @@ class Registry: sys_path = path.parent logger.trace(f"[UniLab Registry] Path {i+1}/{len(self.registry_paths)}: {sys_path}") sys.path.append(str(sys_path)) - self.load_device_types(path) + self.load_device_types(path, complete_registry=complete_registry) if BasicConfig.enable_resource_load: - self.load_resource_types(path, upload_registry) + self.load_resource_types(path, upload_registry, complete_registry=complete_registry) else: logger.warning( "[UniLab Registry] 资源加载已禁用 (enable_resource_load=False),跳过资源注册表加载" @@ -271,17 +272,11 @@ class Registry: 执行 AST 静态扫描,从 Python 代码中提取 @device / @resource 装饰器元数据。 无需 import 任何驱动模块,速度极快。 - 启用文件级缓存:对每个 .py 文件记录 MD5/size/mtime,未变化的文件直接 - 复用上次的扫描结果,大幅减少重复启动时的耗时。 - - 扫描策略: - - 默认扫描 unilabos 包所在目录(即 unilabos 的父目录) - - 如果传入 devices_dirs,额外扫描这些目录(并将其父目录加入 sys.path) + 所有缓存(AST 扫描 / build 结果 / config_info)统一存放在 + registry_cache.pkl 一个文件中,删除即可完全重置。 """ import time as _time - from unilabos.registry.ast_registry_scanner import ( - scan_directory, load_scan_cache, save_scan_cache, - ) + from unilabos.registry.ast_registry_scanner import scan_directory scan_t0 = _time.perf_counter() @@ -293,11 +288,9 @@ class Registry: ) own_executor = True - # 加载缓存 - cache_path = None - if BasicConfig.working_dir: - cache_path = Path(BasicConfig.working_dir) / "ast_scan_cache.json" - cache = load_scan_cache(cache_path) + # ---- 统一缓存:一个 pkl 包含所有数据 ---- + unified_cache = self._load_config_cache() + ast_cache = unified_cache.setdefault("_ast_scan", {"files": {}}) # 默认:扫描 unilabos 包所在的父目录 pkg_root = Path(__file__).resolve().parent.parent # .../unilabos @@ -322,7 +315,7 @@ class Registry: exclude_files = {"lab_resources.py"} if not BasicConfig.extra_resource else None scan_result = scan_directory( scan_root, python_path=python_path, executor=self._startup_executor, - exclude_files=exclude_files, cache=cache, + exclude_files=exclude_files, cache=ast_cache, ) if exclude_files: logger.info( @@ -337,7 +330,7 @@ class Registry: for d_path in extra_dirs: extra_result = scan_directory( d_path, python_path=str(d_path.parent), executor=self._startup_executor, - cache=cache, + cache=ast_cache, ) extra_stats = extra_result.pop("_cache_stats", {"hits": 0, "misses": 0, "total": 0}) total_stats["hits"] += extra_stats["hits"] @@ -361,10 +354,6 @@ class Registry: ) scan_result.setdefault("resources", {})[rid] = rmeta - # 持久化缓存 - cache["saved_at"] = _time.strftime("%Y-%m-%d %H:%M:%S") - save_scan_cache(cache_path, cache) - # 缓存命中统计 if total_stats["total"] > 0: logger.info( @@ -378,10 +367,9 @@ class Registry: # build 结果缓存:当所有 AST 文件命中时跳过 _build_*_entry_from_ast all_ast_hit = total_stats["misses"] == 0 and total_stats["total"] > 0 - build_cache = self._load_config_cache() if all_ast_hit else {} - cached_build = build_cache.get("_build_results") + cached_build = unified_cache.get("_build_results") if all_ast_hit else None - if all_ast_hit and cached_build: + if cached_build: cached_devices = cached_build.get("devices", {}) cached_resources = cached_build.get("resources", {}) if set(cached_devices) == set(ast_devices) and set(cached_resources) == set(ast_resources): @@ -410,22 +398,17 @@ class Registry: build_elapsed = _time.perf_counter() - build_t0 logger.info(f"[UniLab Registry] entry 构建耗时: {build_elapsed:.2f}s") - if not build_cache: - build_cache = self._load_config_cache() - build_cache["_build_results"] = { + unified_cache["_build_results"] = { "devices": {k: v for k, v in self.device_type_registry.items() if k in ast_devices}, "resources": {k: v for k, v in self.resource_type_registry.items() if k in ast_resources}, } # upload 模式下,利用线程池并行 import pylabrobot 资源并生成 config_info if upload_registry: - if build_cache: - self._populate_resource_config_info(config_cache=build_cache) - self._save_config_cache(build_cache) - else: - self._populate_resource_config_info() - elif build_cache and not cached_build: - self._save_config_cache(build_cache) + self._populate_resource_config_info(config_cache=unified_cache) + + # 统一保存一次 + self._save_config_cache(unified_cache) ast_device_count = len(ast_devices) ast_resource_count = len(ast_resources) @@ -528,7 +511,6 @@ class Registry: else: json_type = get_json_schema_type(param_type) if json_type == "string" and param_type and param_type.lower() not in SIMPLE_TYPE_MAP: - # 不在已知简单类型中的未知类型名,当 object 处理 prop_schema["type"] = "object" else: prop_schema["type"] = json_type @@ -557,7 +539,8 @@ class Registry: return prop_schema def _generate_unilab_json_command_schema( - self, method_args: list, docstring: Optional[str] = None + self, method_args: list, docstring: Optional[str] = None, + import_map: Optional[Dict[str, str]] = None, ) -> Dict[str, Any]: """根据方法参数和 docstring 生成 UniLabJsonCommand schema""" doc_info = parse_docstring(docstring) @@ -589,7 +572,7 @@ class Registry: schema["properties"][param_name] = {"type": "string", "description": "device reference"} else: schema["properties"][param_name] = self._generate_schema_from_info( - param_name, param_type, param_default + param_name, param_type, param_default, import_map=import_map ) if param_name in param_descs: @@ -638,7 +621,7 @@ class Registry: # 动态类信息提取 (import-based) # ------------------------------------------------------------------ - def _extract_class_info(self, cls) -> Dict[str, Any]: + def _extract_class_info(self, cls: type) -> Dict[str, Any]: """ 从类中提取 init 参数、状态方法和动作方法信息。 """ @@ -721,261 +704,6 @@ class Registry: return result - # ------------------------------------------------------------------ - # 设备注册表条目构建 (import-based) - # ------------------------------------------------------------------ - - def _build_device_entry(self, cls, device_meta: Dict[str, Any]) -> Tuple[Dict[str, Any], Dict[str, Any]]: - """ - 根据类和装饰器元数据构建一个设备的完整注册表条目。 - """ - class_info = self._extract_class_info(cls) - module_str = f"{cls.__module__}:{cls.__name__}" - - # --- status_types --- - status_types_str = {} - status_types_ros = {} - status_str_type_mapping = {} - - for name, info in class_info["status_methods"].items(): - ret_type = info.get("return_type", "str") - if isinstance(ret_type, tuple) or ret_type in ["Any", "None", "Unknown"]: - ret_type = "String" - status_types_str[name] = ret_type - - target_type = self._replace_type_with_class(ret_type, device_meta.get("device_id", ""), f"状态 {name}") - if target_type in [dict, list]: - target_type = String - if target_type: - status_types_ros[name] = target_type - status_str_type_mapping[ret_type] = target_type - - status_types_str = dict(sorted(status_types_str.items())) - - # --- action_value_mappings --- - action_value_mappings_yaml = {} - action_value_mappings_runtime = {} - action_str_type_mapping = { - "UniLabJsonCommand": "UniLabJsonCommand", - "UniLabJsonCommandAsync": "UniLabJsonCommandAsync", - } - - # 1) auto- 动作 - for method_name, method_info in class_info["action_methods"].items(): - is_async = method_info.get("is_async", False) - type_str = "UniLabJsonCommandAsync" if is_async else "UniLabJsonCommand" - schema = self._generate_unilab_json_command_schema( - method_info["args"], - docstring=getattr(getattr(cls, method_name, None), "__doc__", None), - ) - goal_default = {a["name"]: a.get("default") for a in method_info["args"]} - - action_entry = { - "type": type_str, - "goal": {}, - "feedback": {}, - "result": {}, - "schema": schema, - "goal_default": goal_default, - "handles": {}, - } - action_value_mappings_yaml[f"auto-{method_name}"] = action_entry - action_value_mappings_runtime[f"auto-{method_name}"] = copy.deepcopy(action_entry) - - # 2) @action() 无 action_type - for method_name, info in class_info["decorated_no_type_actions"].items(): - method_info = info["method_info"] - action_meta = info["action_meta"] - is_async = method_info.get("is_async", False) - type_str = "UniLabJsonCommandAsync" if is_async else "UniLabJsonCommand" - schema = self._generate_unilab_json_command_schema( - method_info["args"], - docstring=getattr(getattr(cls, method_name, None), "__doc__", None), - ) - goal_default = {a["name"]: a.get("default") for a in method_info["args"]} - - action_name = action_meta.get("action_name", method_name) - action_entry = { - "type": type_str, - "goal": {}, - "feedback": {}, - "result": {}, - "schema": schema, - "goal_default": goal_default, - "handles": {}, - } - if is_always_free(getattr(cls, method_name, None)): - action_entry["always_free"] = True - action_value_mappings_yaml[action_name] = action_entry - action_value_mappings_runtime[action_name] = copy.deepcopy(action_entry) - - # 3) @action(action_type=X) - for method_name, info in class_info["explicit_actions"].items(): - method_info = info["method_info"] - action_meta = info["action_meta"] - action_type_raw = action_meta.get("action_type", "") - action_name = action_meta.get("action_name", method_name) - - action_type_obj = None - if isinstance(action_type_raw, type): - action_type_obj = action_type_raw - action_type_str = f"{action_type_raw.__module__}:{action_type_raw.__name__}" - elif isinstance(action_type_raw, str) and "." in action_type_raw and ":" not in action_type_raw: - parts = action_type_raw.rsplit(".", 1) - action_type_str = f"{parts[0]}:{parts[1]}" if len(parts) == 2 else action_type_raw - action_type_obj = resolve_type_object(action_type_str) - else: - action_type_str = str(action_type_raw) - if ":" in action_type_str: - action_type_obj = resolve_type_object(action_type_str) - - action_str_type_mapping[action_type_str] = action_type_str - - # goal: 优先方法参数 identity, 其次 MRO 父类参数 (需 parent=True), 最后 ROS2 Goal identity - method_args = method_info.get("args", []) - goal = {a["name"]: a["name"] for a in method_args} - if not goal and action_meta.get("parent"): - for base_cls in cls.__mro__: - if method_name not in base_cls.__dict__: - continue - base_method = base_cls.__dict__[method_name] - actual = getattr(base_method, "__wrapped__", base_method) - if isinstance(actual, (staticmethod, classmethod)): - actual = actual.__func__ - if not callable(actual): - continue - try: - sig = inspect.signature(actual, follow_wrapped=True) - params = [ - p.name for p in sig.parameters.values() - if p.name not in ("self", "cls") - and p.kind not in (inspect.Parameter.VAR_POSITIONAL, inspect.Parameter.VAR_KEYWORD) - ] - if params: - goal = {p: p for p in params} - break - except (ValueError, TypeError): - continue - if not goal and action_type_obj is not None and hasattr(action_type_obj, "Goal"): - try: - goal = {k: k for k in action_type_obj.Goal.get_fields_and_field_types()} - except Exception: - pass - goal_mapping_override = action_meta.get("goal_mapping", {}) - if goal_mapping_override: - override_values = set(goal_mapping_override.values()) - goal = {k: v for k, v in goal.items() if not (k == v and v in override_values)} - goal.update(goal_mapping_override) - - # feedback / result: ROS2 identity + override - feedback = {} - if action_type_obj is not None and hasattr(action_type_obj, "Feedback"): - try: - feedback = {k: k for k in action_type_obj.Feedback.get_fields_and_field_types()} - except Exception: - pass - feedback.update(action_meta.get("feedback_mapping", {})) - - result_mapping = {} - if action_type_obj is not None and hasattr(action_type_obj, "Result"): - try: - result_mapping = {k: k for k in action_type_obj.Result.get_fields_and_field_types()} - except Exception: - pass - result_mapping.update(action_meta.get("result_mapping", {})) - - goal_default = {} - if action_type_obj is not None and hasattr(action_type_obj, "Goal"): - try: - goal_default = ROS2MessageInstance(action_type_obj.Goal()).get_python_dict() - except Exception: - pass - - action_entry = { - "type": action_type_str, - "goal": goal, - "feedback": feedback, - "result": result_mapping, - "schema": ros_action_to_json_schema(action_type_str), - "goal_default": goal_default, - "handles": {}, - } - if is_always_free(getattr(cls, method_name, None)): - action_entry["always_free"] = True - action_value_mappings_yaml[action_name] = action_entry - action_value_mappings_runtime[action_name] = copy.deepcopy(action_entry) - - action_value_mappings_yaml = dict(sorted(action_value_mappings_yaml.items())) - action_value_mappings_runtime = dict(sorted(action_value_mappings_runtime.items())) - - # --- init_param_schema --- - init_schema = self._generate_unilab_json_command_schema(class_info["init_params"]) - - # --- handles --- - handles_raw = device_meta.get("handles", []) - handles = [] - for h in handles_raw: - if isinstance(h, dict): - handles.append(h) - elif hasattr(h, "to_dict"): - handles.append(h.to_dict()) - - # --- 构建 YAML 版本 --- - yaml_entry: Dict[str, Any] = { - "category": device_meta.get("category", []), - "class": { - "module": module_str, - "status_types": status_types_str, - "action_value_mappings": action_value_mappings_yaml, - "init_params": {a["name"]: a.get("type", "") for a in class_info["init_params"]}, - }, - "description": device_meta.get("description", ""), - "handles": handles, - "icon": device_meta.get("icon", ""), - "init_param_schema": init_schema, - "version": device_meta.get("version", "1.0.0"), - } - - # --- 构建运行时版本 --- - runtime_entry: Dict[str, Any] = { - "category": device_meta.get("category", []), - "class": { - "module": module_str, - "status_types": status_types_ros, - "action_value_mappings": action_value_mappings_runtime, - "init_params": {a["name"]: a.get("type", "") for a in class_info["init_params"]}, - }, - "description": device_meta.get("description", ""), - "handles": handles, - "icon": device_meta.get("icon", ""), - "init_param_schema": init_schema, - "version": device_meta.get("version", "1.0.0"), - } - - return yaml_entry, runtime_entry - - def _build_resource_entry(self, obj, resource_meta: Dict[str, Any]) -> Dict[str, Any]: - """根据 @resource 元数据构建资源注册表条目""" - module_str = f"{obj.__module__}:{obj.__name__}" if hasattr(obj, "__name__") else "" - - entry = { - "category": resource_meta.get("category") or [], - "class": { - "module": module_str, - "type": resource_meta.get("class_type", "python"), - }, - "description": resource_meta.get("description", ""), - "handles": [], - "icon": resource_meta.get("icon", ""), - "init_param_schema": {}, - "version": resource_meta.get("version", "1.0.0"), - } - - if resource_meta.get("model"): - entry["model"] = resource_meta["model"] - - return entry - # ------------------------------------------------------------------ # 内置动作 # ------------------------------------------------------------------ @@ -1186,6 +914,7 @@ class Registry: logger.debug(f"[AST] device action '{action_name}': Result enrichment failed: {e}") try: schema = ros_action_to_json_schema(action_type_obj) + strip_ros_descriptions(schema) except Exception: pass # 直接从 ROS2 Goal 实例获取默认值 (msgcenterpy) @@ -1365,6 +1094,39 @@ class Registry: return entry + # ------------------------------------------------------------------ + # 定向 AST 扫描(供 complete_registry Case 1 使用) + # ------------------------------------------------------------------ + + def _ast_scan_module(self, module_str: str) -> Optional[Dict[str, Any]]: + """对单个 module_str 做定向 AST 扫描,返回 ast_meta 或 None。 + + 用于 complete_registry 模式下 YAML 中存在但 AST 全量扫描未覆盖的设备/资源。 + 仅做文件定位 + AST 解析,不实例化类。 + """ + from unilabos.registry.ast_registry_scanner import _parse_file + + mod_part = module_str.split(":")[0] + try: + mod = importlib.import_module(mod_part) + src_file = Path(inspect.getfile(mod)) + except Exception: + return None + + python_path = Path(__file__).resolve().parent.parent.parent + try: + devs, ress = _parse_file(src_file, python_path) + except Exception: + return None + + for d in devs: + if d.get("module") == module_str: + return d + for r in ress: + if r.get("module") == module_str: + return r + return None + # ------------------------------------------------------------------ # config_info 缓存 (pickle 格式,比 JSON 快 ~10x,debug 模式下差异更大) # ------------------------------------------------------------------ @@ -1372,9 +1134,11 @@ class Registry: @staticmethod def _get_config_cache_path() -> Optional[Path]: if BasicConfig.working_dir: - return Path(BasicConfig.working_dir) / "resource_config_cache.pkl" + return Path(BasicConfig.working_dir) / "registry_cache.pkl" return None + _CACHE_VERSION = 3 + def _load_config_cache(self) -> dict: import pickle cache_path = self._get_config_cache_path() @@ -1382,7 +1146,7 @@ class Registry: return {} try: data = pickle.loads(cache_path.read_bytes()) - if not isinstance(data, dict) or data.get("_version") != 2: + if not isinstance(data, dict) or data.get("_version") != self._CACHE_VERSION: return {} return data except Exception: @@ -1394,7 +1158,7 @@ class Registry: if cache_path is None: return try: - cache["_version"] = 2 + cache["_version"] = self._CACHE_VERSION cache_path.parent.mkdir(parents=True, exist_ok=True) tmp = cache_path.with_suffix(".tmp") tmp.write_bytes(pickle.dumps(cache, protocol=pickle.HIGHEST_PROTOCOL)) @@ -1708,60 +1472,6 @@ class Registry: except Exception as e: logger.debug(f"[Registry] 设备 {device_id} 类型解析失败: {e}") - # ------------------------------------------------------------------ - # 模块加载 (import-based) - # ------------------------------------------------------------------ - - def load_modules(self, module_paths: List[str]): - """导入指定的 Python 模块,触发其中的装饰器执行。""" - for module_path in module_paths: - try: - importlib.import_module(module_path) - logger.debug(f"[Registry] 已导入模块: {module_path}") - except Exception as e: - logger.warning(f"[Registry] 导入模块 {module_path} 失败: {e}") - - def setup_from_imports(self, module_paths: Optional[List[str]] = None): - """ - 通过实际 import 构建注册表 (较慢路径)。 - """ - if module_paths: - self.load_modules(module_paths) - - for device_id, cls in get_all_registered_devices().items(): - device_meta = get_device_meta(cls, device_id) - if device_meta is None: - continue - - try: - yaml_entry, runtime_entry = self._build_device_entry(cls, device_meta) - runtime_entry["registry_type"] = "device" - runtime_entry["file_path"] = str(Path(inspect.getfile(cls)).absolute()).replace("\\", "/") - self._add_builtin_actions(runtime_entry, device_id) - self.device_type_registry[device_id] = runtime_entry - logger.debug(f"[Registry] 注册设备: {device_id}") - except Exception as e: - logger.warning(f"[Registry] 生成设备 {device_id} 注册表失败: {e}") - traceback.print_exc() - - for resource_id, obj in get_all_registered_resources().items(): - resource_meta = get_resource_meta(obj) - if resource_meta is None: - continue - - try: - entry = self._build_resource_entry(obj, resource_meta) - entry["registry_type"] = "resource" - if hasattr(obj, "__module__"): - try: - entry["file_path"] = str(Path(inspect.getfile(obj)).absolute()).replace("\\", "/") - except (TypeError, OSError): - entry["file_path"] = "" - self.resource_type_registry[resource_id] = entry - logger.debug(f"[Registry] 注册资源: {resource_id}") - except Exception as e: - logger.warning(f"[Registry] 生成资源 {resource_id} 注册表失败: {e}") - # ------------------------------------------------------------------ # YAML 注册表加载 (兼容旧格式) # ------------------------------------------------------------------ @@ -1786,9 +1496,20 @@ class Registry: return {}, {}, False complete_data = {} + skip_ids = set() for resource_id, resource_info in data.items(): if not isinstance(resource_info, dict): continue + + # AST 已有该资源 → 跳过,提示冗余 + if self.resource_type_registry.get(resource_id): + logger.warning( + f"[UniLab Registry] 资源 '{resource_id}' 已由 AST 扫描注册," + f"YAML 定义冗余,跳过 YAML 处理" + ) + skip_ids.add(resource_id) + continue + if "version" not in resource_info: resource_info["version"] = "1.0.0" if "category" not in resource_info: @@ -1813,8 +1534,22 @@ class Registry: resource_info["registry_type"] = "resource" resource_info["file_path"] = str(file.absolute()).replace("\\", "/") + for rid in skip_ids: + data.pop(rid, None) + complete_data = dict(sorted(complete_data.items())) + if complete_registry: + write_data = copy.deepcopy(complete_data) + for res_id, res_cfg in write_data.items(): + res_cfg.pop("file_path", None) + res_cfg.pop("registry_type", None) + try: + with open(file, "w", encoding="utf-8") as f: + yaml.dump(write_data, f, allow_unicode=True, default_flow_style=False, Dumper=NoAliasDumper) + except Exception as e: + logger.warning(f"[UniLab Registry] 写入资源文件失败: {file}, 错误: {e}") + return data, complete_data, True def load_resource_types(self, path: os.PathLike, upload_registry: bool, complete_registry: bool = False): @@ -1838,29 +1573,33 @@ class Registry: uncached_files: list[Path] = [] yaml_file_rids: dict[str, list[str]] = {} - for file in files: - file_key = str(file.absolute()).replace("\\", "/") - if upload_registry and yaml_cache: - try: - yaml_md5 = _hl.md5(file.read_bytes()).hexdigest() - except OSError: - uncached_files.append(file) - yaml_cache_misses += 1 - continue - cached = yaml_cache.get(file_key) - if cached and cached.get("yaml_md5") == yaml_md5: - module_hashes: dict = cached.get("module_hashes", {}) - all_ok = all( - self._module_source_hash(m) == h - for m, h in module_hashes.items() - ) if module_hashes else True - if all_ok and cached.get("entries"): - for rid, entry in cached["entries"].items(): - self.resource_type_registry[rid] = entry - yaml_cache_hits += 1 + if complete_registry: + uncached_files = files + yaml_cache_misses = len(files) + else: + for file in files: + file_key = str(file.absolute()).replace("\\", "/") + if upload_registry and yaml_cache: + try: + yaml_md5 = _hl.md5(file.read_bytes()).hexdigest() + except OSError: + uncached_files.append(file) + yaml_cache_misses += 1 continue - uncached_files.append(file) - yaml_cache_misses += 1 + cached = yaml_cache.get(file_key) + if cached and cached.get("yaml_md5") == yaml_md5: + module_hashes: dict = cached.get("module_hashes", {}) + all_ok = all( + self._module_source_hash(m) == h + for m, h in module_hashes.items() + ) if module_hashes else True + if all_ok and cached.get("entries"): + for rid, entry in cached["entries"].items(): + self.resource_type_registry[rid] = entry + yaml_cache_hits += 1 + continue + uncached_files.append(file) + yaml_cache_misses += 1 # Process uncached YAML files with thread pool executor = self._startup_executor @@ -1945,6 +1684,7 @@ class Registry: status_str_type_mapping = {} device_ids = [] + skip_ids = set() for device_id, device_config in data.items(): if not isinstance(device_config, dict): continue @@ -1968,6 +1708,16 @@ class Registry: device_config["init_param_schema"] = {} if "class" in device_config: + # --- AST 已有该设备 → 跳过,提示冗余 --- + if self.device_type_registry.get(device_id): + logger.warning( + f"[UniLab Registry] 设备 '{device_id}' 已由 AST 扫描注册," + f"YAML 定义冗余,跳过 YAML 处理" + ) + skip_ids.add(device_id) + continue + + # --- 正常 YAML 处理 --- if "status_types" not in device_config["class"] or device_config["class"]["status_types"] is None: device_config["class"]["status_types"] = {} if ( @@ -1977,14 +1727,17 @@ class Registry: device_config["class"]["action_value_mappings"] = {} enhanced_info = {} + enhanced_import_map: Dict[str, str] = {} if complete_registry: + original_status_keys = set(device_config["class"]["status_types"].keys()) device_config["class"]["status_types"].clear() - enhanced_info = get_enhanced_class_info(device_config["class"]["module"], use_dynamic=True) - if not enhanced_info.get("dynamic_import_success", False): + enhanced_info = get_enhanced_class_info(device_config["class"]["module"]) + if not enhanced_info.get("ast_analysis_success", False): continue - device_config["class"]["status_types"].update( - {k: v["return_type"] for k, v in enhanced_info["status_methods"].items()} - ) + enhanced_import_map = enhanced_info.get("import_map", {}) + for st_k, st_v in enhanced_info["status_methods"].items(): + if st_k in original_status_keys: + device_config["class"]["status_types"][st_k] = st_v["return_type"] # --- status_types: 字符串 → class 映射 --- for status_name, status_type in device_config["class"]["status_types"].items(): @@ -2001,64 +1754,134 @@ class Registry: device_config["class"]["status_types"] = dict(sorted(device_config["class"]["status_types"].items())) if complete_registry: - old_action_configs = {} - for action_name, action_config in device_config["class"]["action_value_mappings"].items(): - old_action_configs[action_name] = action_config + old_action_configs = dict(device_config["class"]["action_value_mappings"]) device_config["class"]["action_value_mappings"] = { k: v for k, v in device_config["class"]["action_value_mappings"].items() if not k.startswith("auto-") } - device_config["class"]["action_value_mappings"].update( - { - f"auto-{k}": { - "type": "UniLabJsonCommandAsync" if v["is_async"] else "UniLabJsonCommand", - "goal": {i["name"]: i["default"] for i in v["args"] if i["default"] is not None}, - "feedback": {}, - "result": {}, - "schema": self._generate_unilab_json_command_schema(v["args"]), - "goal_default": {i["name"]: i["default"] for i in v["args"]}, - "handles": old_action_configs.get(f"auto-{k}", {}).get("handles", []), - "placeholder_keys": { - i["name"]: ( - "unilabos_resources" - if i["type"] == "unilabos.registry.placeholder_type:ResourceSlot" - or i["type"] == ("list", "unilabos.registry.placeholder_type:ResourceSlot") - else "unilabos_devices" - ) - for i in v["args"] - if i.get("type", "") - in [ - "unilabos.registry.placeholder_type:ResourceSlot", - "unilabos.registry.placeholder_type:DeviceSlot", - ("list", "unilabos.registry.placeholder_type:ResourceSlot"), - ("list", "unilabos.registry.placeholder_type:DeviceSlot"), - ] - }, - **({"always_free": True} if v.get("always_free") else {}), - } - for k, v in enhanced_info["action_methods"].items() - if k not in device_config["class"]["action_value_mappings"] + for k, v in enhanced_info["action_methods"].items(): + if k in device_config["class"]["action_value_mappings"]: + action_key = k + elif k.startswith("get_"): + continue + else: + action_key = f"auto-{k}" + goal_schema = self._generate_unilab_json_command_schema( + v["args"], import_map=enhanced_import_map + ) + ret_type = v.get("return_type", "") + result_schema = None + if ret_type and ret_type not in ("None", "Any", ""): + result_schema = self._generate_schema_from_info( + "result", ret_type, None, import_map=enhanced_import_map + ) + old_cfg = old_action_configs.get(action_key) or old_action_configs.get(f"auto-{k}", {}) + new_schema = wrap_action_schema(goal_schema, action_key, result_schema=result_schema) + old_schema = old_cfg.get("schema", {}) + if old_schema: + preserve_field_descriptions(new_schema, old_schema) + if "description" in old_schema: + new_schema["description"] = old_schema["description"] + new_schema.setdefault("description", "") + + old_type = old_cfg.get("type", "") + entry_goal = old_cfg.get("goal", {}) + entry_feedback = {} + entry_result = {} + entry_schema = new_schema + entry_goal_default = {i["name"]: i.get("default") for i in v["args"]} + + if old_type and not old_type.startswith("UniLabJsonCommand"): + entry_type = old_type + try: + action_type_obj = self._replace_type_with_class( + old_type, device_id, f"动作 {action_key}" + ) + except ROSMsgNotFound: + action_type_obj = None + if action_type_obj is not None and not isinstance(action_type_obj, str): + real_params = [p for p in v["args"]] + ros_goal = {p["name"]: p["name"] for p in real_params} + try: + if hasattr(action_type_obj, "Goal"): + goal_fields = action_type_obj.Goal.get_fields_and_field_types() + ros2_goal = {f: f for f in goal_fields} + ros2_goal.update(ros_goal) + entry_goal = ros2_goal + except Exception: + pass + try: + if hasattr(action_type_obj, "Feedback"): + fb_fields = action_type_obj.Feedback.get_fields_and_field_types() + entry_feedback = {f: f for f in fb_fields} + except Exception: + pass + try: + if hasattr(action_type_obj, "Result"): + res_fields = action_type_obj.Result.get_fields_and_field_types() + entry_result = {f: f for f in res_fields} + except Exception: + pass + try: + entry_schema = ros_action_to_json_schema(action_type_obj) + strip_ros_descriptions(entry_schema) + if old_schema: + preserve_field_descriptions(entry_schema, old_schema) + if "description" in old_schema: + entry_schema["description"] = old_schema["description"] + entry_schema.setdefault("description", "") + except Exception: + pass + try: + entry_goal_default = ROS2MessageInstance( + action_type_obj.Goal() + ).get_python_dict() + except Exception: + entry_goal_default = old_cfg.get("goal_default", {}) + else: + entry_type = "UniLabJsonCommandAsync" if v["is_async"] else "UniLabJsonCommand" + + merged_pk = dict(old_cfg.get("placeholder_keys", {})) + merged_pk.update(detect_placeholder_keys(v["args"])) + + entry = { + "type": entry_type, + "goal": entry_goal, + "feedback": entry_feedback, + "result": entry_result, + "schema": entry_schema, + "goal_default": entry_goal_default, + "handles": old_cfg.get("handles", []), + "placeholder_keys": merged_pk, } - ) - # 保留旧 schema 中的 description - for action_name, old_config in old_action_configs.items(): - if action_name in device_config["class"]["action_value_mappings"]: - old_schema = old_config.get("schema", {}) - new_schema = device_config["class"]["action_value_mappings"][action_name].get("schema", {}) - if old_schema: - preserve_field_descriptions(new_schema, old_schema) - if "description" in old_schema and old_schema["description"]: - new_schema["description"] = old_schema["description"] + if v.get("always_free"): + entry["always_free"] = True + device_config["class"]["action_value_mappings"][action_key] = entry device_config["init_param_schema"] = {} - device_config["init_param_schema"]["config"] = self._generate_unilab_json_command_schema( - enhanced_info["init_params"], "__init__" - )["properties"]["goal"] - device_config["init_param_schema"]["data"] = self._generate_status_types_schema( - enhanced_info["status_methods"] + init_schema = self._generate_unilab_json_command_schema( + enhanced_info["init_params"], "__init__", + import_map=enhanced_import_map, ) + device_config["init_param_schema"]["config"] = init_schema + + data_schema: Dict[str, Any] = { + "type": "object", + "properties": {}, + "required": [], + } + for st_name in device_config["class"]["status_types"]: + st_type_str = device_config["class"]["status_types"][st_name] + if isinstance(st_type_str, str): + data_schema["properties"][st_name] = self._generate_schema_from_info( + st_name, st_type_str, None, import_map=enhanced_import_map + ) + else: + data_schema["properties"][st_name] = {"type": "string"} + data_schema["required"].append(st_name) + device_config["init_param_schema"]["data"] = data_schema # --- action_value_mappings: 处理非 UniLabJsonCommand 类型 --- device_config.pop("schema", None) @@ -2089,7 +1912,14 @@ class Registry: action_config["goal_default"] = ROS2MessageInstance(target_type.Goal()).get_python_dict() except Exception: action_config["goal_default"] = {} + prev_schema = action_config.get("schema", {}) action_config["schema"] = ros_action_to_json_schema(target_type) + strip_ros_descriptions(action_config["schema"]) + if prev_schema: + preserve_field_descriptions(action_config["schema"], prev_schema) + if "description" in prev_schema: + action_config["schema"]["description"] = prev_schema["description"] + action_config["schema"].setdefault("description", "") else: logger.warning( f"[UniLab Registry] 设备 {device_id} 的动作 {action_name} 类型为空,跳过替换" @@ -2112,10 +1942,12 @@ class Registry: device_ids.append(device_id) + for did in skip_ids: + data.pop(did, None) + complete_data = dict(sorted(complete_data.items())) complete_data = copy.deepcopy(complete_data) if complete_registry: - # 仅在 complete_registry 模式下回写 YAML,排除运行时字段 write_data = copy.deepcopy(complete_data) for dev_id, dev_cfg in write_data.items(): dev_cfg.pop("file_path", None) @@ -2264,7 +2096,7 @@ class Registry: lab_registry = Registry() -def build_registry(registry_paths=None, devices_dirs=None, upload_registry=False, check_mode=False): +def build_registry(registry_paths=None, devices_dirs=None, upload_registry=False, check_mode=False, complete_registry=False): """ 构建或获取Registry单例实例 """ @@ -2278,7 +2110,7 @@ def build_registry(registry_paths=None, devices_dirs=None, upload_registry=False if path not in current_paths: lab_registry.registry_paths.append(path) - lab_registry.setup(devices_dirs=devices_dirs, upload_registry=upload_registry) + lab_registry.setup(devices_dirs=devices_dirs, upload_registry=upload_registry, complete_registry=complete_registry) # 将 AST 扫描的字符串类型替换为实际 ROS2 消息类(仅查找 ROS2 类型,不 import 设备模块) lab_registry.resolve_all_types() diff --git a/unilabos/registry/resources/bioyond/YB_bottle.yaml b/unilabos/registry/resources/bioyond/YB_bottle.yaml index f8e17261..19917372 100644 --- a/unilabos/registry/resources/bioyond/YB_bottle.yaml +++ b/unilabos/registry/resources/bioyond/YB_bottle.yaml @@ -9,7 +9,6 @@ YB_20ml_fenyeping: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 YB_5ml_fenyeping: category: @@ -22,7 +21,6 @@ YB_5ml_fenyeping: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 YB_jia_yang_tou_da: category: @@ -35,7 +33,6 @@ YB_jia_yang_tou_da: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 YB_pei_ye_da_Bottle: category: @@ -48,7 +45,6 @@ YB_pei_ye_da_Bottle: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 YB_pei_ye_xiao_Bottle: category: @@ -61,7 +57,6 @@ YB_pei_ye_xiao_Bottle: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 YB_qiang_tou: category: @@ -74,7 +69,6 @@ YB_qiang_tou: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 YB_ye_Bottle: category: @@ -88,5 +82,4 @@ YB_ye_Bottle: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 diff --git a/unilabos/registry/resources/bioyond/YB_bottle_carriers.yaml b/unilabos/registry/resources/bioyond/YB_bottle_carriers.yaml index 4698a266..76b6b938 100644 --- a/unilabos/registry/resources/bioyond/YB_bottle_carriers.yaml +++ b/unilabos/registry/resources/bioyond/YB_bottle_carriers.yaml @@ -9,7 +9,6 @@ YB_100ml_yeti: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 YB_20ml_fenyepingban: category: @@ -22,7 +21,6 @@ YB_20ml_fenyepingban: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 YB_5ml_fenyepingban: category: @@ -35,7 +33,6 @@ YB_5ml_fenyepingban: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 YB_6StockCarrier: category: @@ -48,7 +45,6 @@ YB_6StockCarrier: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 YB_6VialCarrier: category: @@ -61,7 +57,6 @@ YB_6VialCarrier: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 YB_gao_nian_ye_Bottle: category: @@ -74,7 +69,6 @@ YB_gao_nian_ye_Bottle: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 YB_gaonianye: category: @@ -87,7 +81,6 @@ YB_gaonianye: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 YB_jia_yang_tou_da_Carrier: category: @@ -100,7 +93,6 @@ YB_jia_yang_tou_da_Carrier: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 YB_peiyepingdaban: category: @@ -113,7 +105,6 @@ YB_peiyepingdaban: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 YB_peiyepingxiaoban: category: @@ -126,7 +117,6 @@ YB_peiyepingxiaoban: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 YB_qiang_tou_he: category: @@ -139,7 +129,6 @@ YB_qiang_tou_he: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 YB_shi_pei_qi_kuai: category: @@ -152,7 +141,6 @@ YB_shi_pei_qi_kuai: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 YB_ye: category: @@ -165,7 +153,6 @@ YB_ye: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 YB_ye_100ml_Bottle: category: @@ -178,5 +165,4 @@ YB_ye_100ml_Bottle: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 diff --git a/unilabos/registry/resources/bioyond/bottle_carriers.yaml b/unilabos/registry/resources/bioyond/bottle_carriers.yaml index 764a8aa5..f72cc10d 100644 --- a/unilabos/registry/resources/bioyond/bottle_carriers.yaml +++ b/unilabos/registry/resources/bioyond/bottle_carriers.yaml @@ -8,7 +8,6 @@ BIOYOND_PolymerStation_1BottleCarrier: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 BIOYOND_PolymerStation_1FlaskCarrier: category: @@ -20,7 +19,6 @@ BIOYOND_PolymerStation_1FlaskCarrier: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 BIOYOND_PolymerStation_6StockCarrier: category: @@ -32,7 +30,6 @@ BIOYOND_PolymerStation_6StockCarrier: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 BIOYOND_PolymerStation_8StockCarrier: category: @@ -44,5 +41,4 @@ BIOYOND_PolymerStation_8StockCarrier: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 diff --git a/unilabos/registry/resources/bioyond/deck.yaml b/unilabos/registry/resources/bioyond/deck.yaml index 8d6993b1..5770a2d1 100644 --- a/unilabos/registry/resources/bioyond/deck.yaml +++ b/unilabos/registry/resources/bioyond/deck.yaml @@ -8,7 +8,6 @@ BIOYOND_PolymerPreparationStation_Deck: handles: [] icon: 配液站.webp init_param_schema: {} - registry_type: resource version: 1.0.0 BIOYOND_PolymerReactionStation_Deck: category: @@ -20,7 +19,6 @@ BIOYOND_PolymerReactionStation_Deck: handles: [] icon: 反应站.webp init_param_schema: {} - registry_type: resource version: 1.0.0 BIOYOND_YB_Deck: category: @@ -32,7 +30,6 @@ BIOYOND_YB_Deck: handles: [] icon: 配液站.webp init_param_schema: {} - registry_type: resource version: 1.0.0 CoincellDeck: category: @@ -44,5 +41,4 @@ CoincellDeck: handles: [] icon: koudian.webp init_param_schema: {} - registry_type: resource version: 1.0.0 diff --git a/unilabos/registry/resources/common/resource_container.yaml b/unilabos/registry/resources/common/resource_container.yaml index 6eb429d7..3f0aa9d2 100644 --- a/unilabos/registry/resources/common/resource_container.yaml +++ b/unilabos/registry/resources/common/resource_container.yaml @@ -19,7 +19,6 @@ hplc_plate: - 3.1416 path: https://uni-lab.oss-cn-zhangjiakou.aliyuncs.com/uni-lab/resources/hplc_plate/modal.xacro type: resource - registry_type: resource version: 1.0.0 plate_96: category: @@ -42,7 +41,6 @@ plate_96: - 0 path: https://uni-lab.oss-cn-zhangjiakou.aliyuncs.com/uni-lab/resources/plate_96/modal.xacro type: resource - registry_type: resource version: 1.0.0 plate_96_high: category: @@ -65,7 +63,6 @@ plate_96_high: - 1.5708 path: https://uni-lab.oss-cn-zhangjiakou.aliyuncs.com/uni-lab/resources/plate_96_high/modal.xacro type: resource - registry_type: resource version: 1.0.0 tiprack_96_high: category: @@ -97,7 +94,6 @@ tiprack_96_high: - 1.5708 path: https://uni-lab.oss-cn-zhangjiakou.aliyuncs.com/uni-lab/resources/tiprack_96_high/modal.xacro type: resource - registry_type: resource version: 1.0.0 tiprack_box: category: @@ -129,5 +125,4 @@ tiprack_box: - 0 path: https://uni-lab.oss-cn-zhangjiakou.aliyuncs.com/uni-lab/resources/tiprack_box/modal.xacro type: resource - registry_type: resource version: 1.0.0 diff --git a/unilabos/registry/resources/laiyu/container.yaml b/unilabos/registry/resources/laiyu/container.yaml index 1652956e..586e3cfe 100644 --- a/unilabos/registry/resources/laiyu/container.yaml +++ b/unilabos/registry/resources/laiyu/container.yaml @@ -29,7 +29,6 @@ bottle_container: - 0 path: https://uni-lab.oss-cn-zhangjiakou.aliyuncs.com/uni-lab/resources/bottle_container/modal.xacro type: resource - registry_type: resource version: 1.0.0 tube_container: category: @@ -62,5 +61,4 @@ tube_container: - 0 path: https://uni-lab.oss-cn-zhangjiakou.aliyuncs.com/uni-lab/resources/tube_container/modal.xacro type: resource - registry_type: resource version: 1.0.0 diff --git a/unilabos/registry/resources/laiyu/deck.yaml b/unilabos/registry/resources/laiyu/deck.yaml index e6d930a5..85da0ca7 100644 --- a/unilabos/registry/resources/laiyu/deck.yaml +++ b/unilabos/registry/resources/laiyu/deck.yaml @@ -12,5 +12,4 @@ TransformXYZDeck: mesh: liquid_transform_xyz path: https://uni-lab.oss-cn-zhangjiakou.aliyuncs.com/uni-lab/devices/liquid_transform_xyz/macro_device.xacro type: device - registry_type: resource version: 1.0.0 diff --git a/unilabos/registry/resources/opentrons/deck.yaml b/unilabos/registry/resources/opentrons/deck.yaml index 8fa35ee5..10e91cef 100644 --- a/unilabos/registry/resources/opentrons/deck.yaml +++ b/unilabos/registry/resources/opentrons/deck.yaml @@ -12,7 +12,6 @@ OTDeck: mesh: opentrons_liquid_handler path: https://uni-lab.oss-cn-zhangjiakou.aliyuncs.com/uni-lab/devices/opentrons_liquid_handler/macro_device.xacro type: device - registry_type: resource version: 1.0.0 hplc_station: category: @@ -28,5 +27,4 @@ hplc_station: mesh: hplc_station path: https://uni-lab.oss-cn-zhangjiakou.aliyuncs.com/uni-lab/devices/hplc_station/macro_device.xacro type: device - registry_type: resource version: 1.0.0 diff --git a/unilabos/registry/resources/opentrons/plate_adapters.yaml b/unilabos/registry/resources/opentrons/plate_adapters.yaml index d2942d46..d09bf784 100644 --- a/unilabos/registry/resources/opentrons/plate_adapters.yaml +++ b/unilabos/registry/resources/opentrons/plate_adapters.yaml @@ -8,5 +8,4 @@ Opentrons_96_adapter_Vb: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 diff --git a/unilabos/registry/resources/opentrons/plates.yaml b/unilabos/registry/resources/opentrons/plates.yaml index 02267ae0..20a71995 100644 --- a/unilabos/registry/resources/opentrons/plates.yaml +++ b/unilabos/registry/resources/opentrons/plates.yaml @@ -8,7 +8,6 @@ appliedbiosystemsmicroamp_384_wellplate_40ul: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 biorad_384_wellplate_50ul: category: @@ -20,7 +19,6 @@ biorad_384_wellplate_50ul: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 biorad_96_wellplate_200ul_pcr: category: @@ -32,7 +30,6 @@ biorad_96_wellplate_200ul_pcr: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 corning_12_wellplate_6point9ml_flat: category: @@ -44,7 +41,6 @@ corning_12_wellplate_6point9ml_flat: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 corning_24_wellplate_3point4ml_flat: category: @@ -56,7 +52,6 @@ corning_24_wellplate_3point4ml_flat: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 corning_384_wellplate_112ul_flat: category: @@ -68,7 +63,6 @@ corning_384_wellplate_112ul_flat: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 corning_48_wellplate_1point6ml_flat: category: @@ -80,7 +74,6 @@ corning_48_wellplate_1point6ml_flat: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 corning_6_wellplate_16point8ml_flat: category: @@ -92,7 +85,6 @@ corning_6_wellplate_16point8ml_flat: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 corning_96_wellplate_360ul_flat: category: @@ -104,7 +96,6 @@ corning_96_wellplate_360ul_flat: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 nest_96_wellplate_100ul_pcr_full_skirt: category: @@ -136,7 +127,6 @@ nest_96_wellplate_100ul_pcr_full_skirt: - 1.5708 path: https://uni-lab.oss-cn-zhangjiakou.aliyuncs.com/uni-lab/resources/tecan_nested_tip_rack/modal.xacro type: resource - registry_type: resource version: 1.0.0 nest_96_wellplate_200ul_flat: category: @@ -148,7 +138,6 @@ nest_96_wellplate_200ul_flat: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 nest_96_wellplate_2ml_deep: category: @@ -171,7 +160,6 @@ nest_96_wellplate_2ml_deep: - 1.5708 path: https://uni-lab.oss-cn-zhangjiakou.aliyuncs.com/uni-lab/resources/tecan_nested_tip_rack/modal.xacro type: resource - registry_type: resource version: 1.0.0 thermoscientificnunc_96_wellplate_1300ul: category: @@ -183,7 +171,6 @@ thermoscientificnunc_96_wellplate_1300ul: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 thermoscientificnunc_96_wellplate_2000ul: category: @@ -195,7 +182,6 @@ thermoscientificnunc_96_wellplate_2000ul: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 usascientific_96_wellplate_2point4ml_deep: category: @@ -207,5 +193,4 @@ usascientific_96_wellplate_2point4ml_deep: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 diff --git a/unilabos/registry/resources/opentrons/reservoirs.yaml b/unilabos/registry/resources/opentrons/reservoirs.yaml index b2f7857b..6b2033d9 100644 --- a/unilabos/registry/resources/opentrons/reservoirs.yaml +++ b/unilabos/registry/resources/opentrons/reservoirs.yaml @@ -8,7 +8,6 @@ agilent_1_reservoir_290ml: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 axygen_1_reservoir_90ml: category: @@ -20,7 +19,6 @@ axygen_1_reservoir_90ml: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 nest_12_reservoir_15ml: category: @@ -32,7 +30,6 @@ nest_12_reservoir_15ml: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 nest_1_reservoir_195ml: category: @@ -44,7 +41,6 @@ nest_1_reservoir_195ml: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 nest_1_reservoir_290ml: category: @@ -56,7 +52,6 @@ nest_1_reservoir_290ml: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 usascientific_12_reservoir_22ml: category: @@ -68,5 +63,4 @@ usascientific_12_reservoir_22ml: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 diff --git a/unilabos/registry/resources/opentrons/tip_racks.yaml b/unilabos/registry/resources/opentrons/tip_racks.yaml index cbc7d6f1..d1682b2a 100644 --- a/unilabos/registry/resources/opentrons/tip_racks.yaml +++ b/unilabos/registry/resources/opentrons/tip_racks.yaml @@ -8,7 +8,6 @@ eppendorf_96_tiprack_1000ul_eptips: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 eppendorf_96_tiprack_10ul_eptips: category: @@ -20,7 +19,6 @@ eppendorf_96_tiprack_10ul_eptips: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 geb_96_tiprack_1000ul: category: @@ -32,7 +30,6 @@ geb_96_tiprack_1000ul: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 geb_96_tiprack_10ul: category: @@ -44,7 +41,6 @@ geb_96_tiprack_10ul: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 opentrons_96_filtertiprack_1000ul: category: @@ -75,7 +71,6 @@ opentrons_96_filtertiprack_1000ul: - 1.5708 path: https://uni-lab.oss-cn-zhangjiakou.aliyuncs.com/uni-lab/resources/tecan_nested_tip_rack/modal.xacro type: resource - registry_type: resource version: 1.0.0 opentrons_96_filtertiprack_10ul: category: @@ -87,7 +82,6 @@ opentrons_96_filtertiprack_10ul: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 opentrons_96_filtertiprack_200ul: category: @@ -99,7 +93,6 @@ opentrons_96_filtertiprack_200ul: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 opentrons_96_filtertiprack_20ul: category: @@ -111,7 +104,6 @@ opentrons_96_filtertiprack_20ul: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 opentrons_96_tiprack_1000ul: category: @@ -123,7 +115,6 @@ opentrons_96_tiprack_1000ul: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 opentrons_96_tiprack_10ul: category: @@ -135,7 +126,6 @@ opentrons_96_tiprack_10ul: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 opentrons_96_tiprack_20ul: category: @@ -147,7 +137,6 @@ opentrons_96_tiprack_20ul: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 opentrons_96_tiprack_300ul: category: diff --git a/unilabos/registry/resources/opentrons/tube_racks.yaml b/unilabos/registry/resources/opentrons/tube_racks.yaml index 32bf3e36..33ec5dc9 100644 --- a/unilabos/registry/resources/opentrons/tube_racks.yaml +++ b/unilabos/registry/resources/opentrons/tube_racks.yaml @@ -8,7 +8,6 @@ opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic: category: @@ -20,7 +19,6 @@ opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 opentrons_10_tuberack_nest_4x50ml_6x15ml_conical: category: @@ -32,7 +30,6 @@ opentrons_10_tuberack_nest_4x50ml_6x15ml_conical: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 opentrons_15_tuberack_falcon_15ml_conical: category: @@ -44,7 +41,6 @@ opentrons_15_tuberack_falcon_15ml_conical: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 opentrons_15_tuberack_nest_15ml_conical: category: @@ -56,7 +52,6 @@ opentrons_15_tuberack_nest_15ml_conical: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 opentrons_24_aluminumblock_generic_2ml_screwcap: category: @@ -68,7 +63,6 @@ opentrons_24_aluminumblock_generic_2ml_screwcap: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 opentrons_24_aluminumblock_nest_1point5ml_snapcap: category: @@ -80,7 +74,6 @@ opentrons_24_aluminumblock_nest_1point5ml_snapcap: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap: category: @@ -92,7 +85,6 @@ opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap: category: @@ -104,7 +96,6 @@ opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic: category: @@ -116,7 +107,6 @@ opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic: category: @@ -128,7 +118,6 @@ opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 opentrons_24_tuberack_generic_2ml_screwcap: category: @@ -140,7 +129,6 @@ opentrons_24_tuberack_generic_2ml_screwcap: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 opentrons_24_tuberack_nest_0point5ml_screwcap: category: @@ -152,7 +140,6 @@ opentrons_24_tuberack_nest_0point5ml_screwcap: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 opentrons_24_tuberack_nest_1point5ml_screwcap: category: @@ -164,7 +151,6 @@ opentrons_24_tuberack_nest_1point5ml_screwcap: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 opentrons_24_tuberack_nest_1point5ml_snapcap: category: @@ -176,7 +162,6 @@ opentrons_24_tuberack_nest_1point5ml_snapcap: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 opentrons_24_tuberack_nest_2ml_screwcap: category: @@ -188,7 +173,6 @@ opentrons_24_tuberack_nest_2ml_screwcap: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 opentrons_24_tuberack_nest_2ml_snapcap: category: @@ -200,7 +184,6 @@ opentrons_24_tuberack_nest_2ml_snapcap: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 opentrons_6_tuberack_falcon_50ml_conical: category: @@ -212,7 +195,6 @@ opentrons_6_tuberack_falcon_50ml_conical: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 opentrons_6_tuberack_nest_50ml_conical: category: @@ -224,7 +206,6 @@ opentrons_6_tuberack_nest_50ml_conical: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 opentrons_96_well_aluminum_block: category: @@ -236,5 +217,4 @@ opentrons_96_well_aluminum_block: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 diff --git a/unilabos/registry/resources/organic/container.yaml b/unilabos/registry/resources/organic/container.yaml index a8fb9b6c..240cdf79 100644 --- a/unilabos/registry/resources/organic/container.yaml +++ b/unilabos/registry/resources/organic/container.yaml @@ -29,5 +29,4 @@ container: side: WEST icon: Flask.webp init_param_schema: {} - registry_type: resource version: 1.0.0 diff --git a/unilabos/registry/resources/post_process/bottle_carriers.yaml b/unilabos/registry/resources/post_process/bottle_carriers.yaml index ea30cb7d..45054311 100644 --- a/unilabos/registry/resources/post_process/bottle_carriers.yaml +++ b/unilabos/registry/resources/post_process/bottle_carriers.yaml @@ -8,7 +8,6 @@ POST_PROCESS_Raw_1BottleCarrier: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 POST_PROCESS_Reaction_1BottleCarrier: category: @@ -20,5 +19,4 @@ POST_PROCESS_Reaction_1BottleCarrier: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 diff --git a/unilabos/registry/resources/post_process/deck.yaml b/unilabos/registry/resources/post_process/deck.yaml index 621cafc6..e5d4cc8d 100644 --- a/unilabos/registry/resources/post_process/deck.yaml +++ b/unilabos/registry/resources/post_process/deck.yaml @@ -9,5 +9,4 @@ post_process_deck: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 diff --git a/unilabos/registry/resources/prcxi/plate_adapters.yaml b/unilabos/registry/resources/prcxi/plate_adapters.yaml index a769fee3..3e960f2e 100644 --- a/unilabos/registry/resources/prcxi/plate_adapters.yaml +++ b/unilabos/registry/resources/prcxi/plate_adapters.yaml @@ -9,7 +9,6 @@ PRCXI_30mm_Adapter: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 PRCXI_Adapter: category: @@ -22,7 +21,6 @@ PRCXI_Adapter: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 PRCXI_Deep10_Adapter: category: @@ -35,7 +33,6 @@ PRCXI_Deep10_Adapter: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 PRCXI_Deep300_Adapter: category: @@ -48,7 +45,6 @@ PRCXI_Deep300_Adapter: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 PRCXI_PCR_Adapter: category: @@ -61,7 +57,6 @@ PRCXI_PCR_Adapter: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 PRCXI_Reservoir_Adapter: category: @@ -74,7 +69,6 @@ PRCXI_Reservoir_Adapter: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 PRCXI_Tip10_Adapter: category: @@ -87,7 +81,6 @@ PRCXI_Tip10_Adapter: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 PRCXI_Tip1250_Adapter: category: @@ -100,7 +93,6 @@ PRCXI_Tip1250_Adapter: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 PRCXI_Tip300_Adapter: category: @@ -113,5 +105,4 @@ PRCXI_Tip300_Adapter: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 diff --git a/unilabos/registry/resources/prcxi/plates.yaml b/unilabos/registry/resources/prcxi/plates.yaml index 81e2ae96..b8527dbf 100644 --- a/unilabos/registry/resources/prcxi/plates.yaml +++ b/unilabos/registry/resources/prcxi/plates.yaml @@ -9,7 +9,6 @@ PRCXI_48_DeepWell: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 PRCXI_96_DeepWell: category: @@ -22,7 +21,6 @@ PRCXI_96_DeepWell: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 PRCXI_AGenBio_4_troughplate: category: @@ -35,7 +33,6 @@ PRCXI_AGenBio_4_troughplate: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 PRCXI_BioER_96_wellplate: category: @@ -48,7 +45,6 @@ PRCXI_BioER_96_wellplate: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 PRCXI_BioRad_384_wellplate: category: @@ -61,7 +57,6 @@ PRCXI_BioRad_384_wellplate: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 PRCXI_CellTreat_96_wellplate: category: @@ -74,7 +69,6 @@ PRCXI_CellTreat_96_wellplate: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 PRCXI_PCR_Plate_200uL_nonskirted: category: @@ -87,7 +81,6 @@ PRCXI_PCR_Plate_200uL_nonskirted: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 PRCXI_PCR_Plate_200uL_semiskirted: category: @@ -100,7 +93,6 @@ PRCXI_PCR_Plate_200uL_semiskirted: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 PRCXI_PCR_Plate_200uL_skirted: category: @@ -113,7 +105,6 @@ PRCXI_PCR_Plate_200uL_skirted: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 PRCXI_nest_12_troughplate: category: @@ -126,7 +117,6 @@ PRCXI_nest_12_troughplate: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 PRCXI_nest_1_troughplate: category: @@ -139,5 +129,4 @@ PRCXI_nest_1_troughplate: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 diff --git a/unilabos/registry/resources/prcxi/tip_racks.yaml b/unilabos/registry/resources/prcxi/tip_racks.yaml index 56a16db8..f6d2e7f0 100644 --- a/unilabos/registry/resources/prcxi/tip_racks.yaml +++ b/unilabos/registry/resources/prcxi/tip_racks.yaml @@ -9,7 +9,6 @@ PRCXI_1000uL_Tips: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 PRCXI_10uL_Tips: category: @@ -22,7 +21,6 @@ PRCXI_10uL_Tips: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 PRCXI_10ul_eTips: category: @@ -35,7 +33,6 @@ PRCXI_10ul_eTips: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 PRCXI_1250uL_Tips: category: @@ -48,7 +45,6 @@ PRCXI_1250uL_Tips: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 PRCXI_200uL_Tips: category: @@ -61,7 +57,6 @@ PRCXI_200uL_Tips: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 PRCXI_300ul_Tips: category: @@ -74,5 +69,4 @@ PRCXI_300ul_Tips: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 diff --git a/unilabos/registry/resources/prcxi/trash.yaml b/unilabos/registry/resources/prcxi/trash.yaml index f87a7624..952a832b 100644 --- a/unilabos/registry/resources/prcxi/trash.yaml +++ b/unilabos/registry/resources/prcxi/trash.yaml @@ -9,5 +9,4 @@ PRCXI_trash: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 diff --git a/unilabos/registry/resources/prcxi/tube_racks.yaml b/unilabos/registry/resources/prcxi/tube_racks.yaml index 0b1e07c6..6510c16c 100644 --- a/unilabos/registry/resources/prcxi/tube_racks.yaml +++ b/unilabos/registry/resources/prcxi/tube_racks.yaml @@ -9,5 +9,4 @@ PRCXI_EP_Adapter: handles: [] icon: '' init_param_schema: {} - registry_type: resource version: 1.0.0 diff --git a/unilabos/registry/utils.py b/unilabos/registry/utils.py index bc65450e..1ab7dd2c 100644 --- a/unilabos/registry/utils.py +++ b/unilabos/registry/utils.py @@ -599,14 +599,39 @@ def wrap_action_schema( def preserve_field_descriptions(new_schema: Dict[str, Any], prev_schema: Dict[str, Any]): - """保留之前 schema 中的 field descriptions""" + """递归保留之前 schema 中各字段的 description / title。 + + 覆盖顶层以及嵌套 properties(如 goal.properties.xxx.description)。 + """ if not prev_schema or not new_schema: return prev_props = prev_schema.get("properties", {}) new_props = new_schema.get("properties", {}) for field_name, prev_field in prev_props.items(): - if field_name in new_props and "title" in prev_field: - new_props[field_name].setdefault("title", prev_field["title"]) + if field_name not in new_props: + continue + new_field = new_props[field_name] + if not isinstance(prev_field, dict) or not isinstance(new_field, dict): + continue + if "title" in prev_field: + new_field.setdefault("title", prev_field["title"]) + if "description" in prev_field: + new_field.setdefault("description", prev_field["description"]) + if "properties" in prev_field and "properties" in new_field: + preserve_field_descriptions(new_field, prev_field) + + +def strip_ros_descriptions(schema: Any): + """递归清除 ROS schema 中自动生成的无意义 description(含 rosidl_parser 内存地址)。""" + if isinstance(schema, dict): + desc = schema.get("description", "") + if isinstance(desc, str) and "rosidl_parser" in desc: + del schema["description"] + for v in schema.values(): + strip_ros_descriptions(v) + elif isinstance(schema, list): + for item in schema: + strip_ros_descriptions(item) # --------------------------------------------------------------------------- diff --git a/unilabos/utils/environment_check.py b/unilabos/utils/environment_check.py index fa43d977..a2bbd262 100644 --- a/unilabos/utils/environment_check.py +++ b/unilabos/utils/environment_check.py @@ -33,7 +33,7 @@ class EnvironmentChecker: # 包版本要求(包名: 最低版本) self.version_requirements = { - "msgcenterpy": "0.1.7", # msgcenterpy 最低版本要求 + "msgcenterpy": "0.1.8", # msgcenterpy 最低版本要求 } self.missing_packages = [] diff --git a/unilabos/utils/import_manager.py b/unilabos/utils/import_manager.py index a14702f0..ae81a287 100644 --- a/unilabos/utils/import_manager.py +++ b/unilabos/utils/import_manager.py @@ -21,15 +21,11 @@ __all__ = [ "get_class", "get_module", "init_from_list", - "get_class_info_static", - "get_registry_class_info", + "get_enhanced_class_info", ] -from ast import Constant - from unilabos.resources.resource_tracker import PARAM_SAMPLE_UUIDS from unilabos.utils import logger -from unilabos.registry.decorators import is_not_action, is_always_free class ImportManager: @@ -184,168 +180,87 @@ class ImportManager: return None - def get_enhanced_class_info(self, module_path: str, use_dynamic: bool = True) -> Dict[str, Any]: - """ - 获取增强的类信息,支持动态导入和静态分析 + def get_enhanced_class_info(self, module_path: str, **_kwargs) -> Dict[str, Any]: + """通过 AST 分析获取类的增强信息。 + + 复用 ``ast_registry_scanner`` 的 ``_collect_imports`` / ``_extract_class_body``, + 与 AST 扫描注册表完全一致。 Args: - module_path: 模块路径,格式为 "module.path" 或 "module.path:ClassName" - use_dynamic: 是否优先使用动态导入 + module_path: 格式 ``"module.path:ClassName"`` Returns: - 包含详细类信息的字典 + ``{"module_path", "ast_analysis_success", "import_map", + "init_params", "status_methods", "action_methods"}`` """ - result = { + from unilabos.registry.ast_registry_scanner import ( + _collect_imports, + _extract_class_body, + _filepath_to_module, + ) + + result: Dict[str, Any] = { "module_path": module_path, - "dynamic_import_success": False, - "static_analysis_success": False, - "init_params": {}, - "status_methods": {}, # get_ 开头和 @property 方法 - "action_methods": {}, # set_ 开头和其他非_开头方法 - } - - # 尝试动态导入 - dynamic_info = None - static_info = None - if use_dynamic: - try: - dynamic_info = self._get_dynamic_class_info(module_path) - result["dynamic_import_success"] = True - logger.debug(f"[ImportManager] 动态导入类 {module_path} 成功") - except Exception as e: - logger.warning( - f"[UniLab Registry] 在补充注册表时,动态导入类 " - f"{module_path} 失败(将使用静态分析," - f"建议修复导入错误,以实现更好的注册表识别效果!): {e}" - ) - use_dynamic = False - if not use_dynamic: - # 尝试静态分析 - try: - static_info = self._get_static_class_info(module_path) - result["static_analysis_success"] = True - logger.debug(f"[ImportManager] 静态分析类 {module_path} 成功") - except Exception as e: - logger.warning(f"[ImportManager] 静态分析类 {module_path} 失败: {e}") - - # 合并信息(优先使用动态导入的信息) - if dynamic_info: - result.update(dynamic_info) - elif static_info: - result.update(static_info) - - return result - - def _get_dynamic_class_info(self, class_path: str) -> Dict[str, Any]: - """使用inspect模块动态获取类信息""" - cls = get_class(class_path) - class_name = cls.__name__ - - result = { - "class_name": class_name, - "init_params": self._analyze_method_signature(cls.__init__)["args"], + "ast_analysis_success": False, + "import_map": {}, + "init_params": [], "status_methods": {}, "action_methods": {}, } - # 分析类的所有成员 - for name, method in cls.__dict__.items(): - if name.startswith("_"): - continue - # 检查是否是property - if isinstance(method, property): - # @property 装饰的方法 - # noinspection PyTypeChecker - return_type = self._get_return_type_from_method(method.fget) if method.fget else "Any" - prop_info = { - "name": name, - "return_type": return_type, - } - result["status_methods"][name] = prop_info - - # 检查是否有对应的setter - if method.fset: - setter_info = self._analyze_method_signature(method.fset) - result["action_methods"][name] = setter_info - - elif inspect.ismethod(method) or inspect.isfunction(method): - if name.startswith("get_"): - actual_name = name[4:] # 去掉get_前缀 - if actual_name in result["status_methods"]: - continue - # get_ 开头的方法归类为status - method_info = self._analyze_method_signature(method) - result["status_methods"][actual_name] = method_info - elif not name.startswith("_"): - # 检查是否被 @not_action 装饰器标记 - if is_not_action(method): - continue - # 其他非_开头的方法归类为action - method_info = self._analyze_method_signature(method) - # 检查是否被 @always_free 装饰器标记 - if is_always_free(method): - method_info["always_free"] = True - result["action_methods"][name] = method_info - - return result - - def _get_static_class_info(self, module_path: str) -> Dict[str, Any]: - """使用AST静态分析获取类信息""" module_name, class_name = module_path.rsplit(":", 1) - # 将模块路径转换为文件路径 file_path = self._module_path_to_file_path(module_name) if not file_path or not os.path.exists(file_path): - raise FileNotFoundError(f"找不到模块文件: {module_name} -> {file_path}") + logger.warning(f"[ImportManager] 找不到模块文件: {module_name} -> {file_path}") + return result - with open(file_path, "r", encoding="utf-8") as f: - source_code = f.read() + try: + with open(file_path, "r", encoding="utf-8") as f: + tree = ast.parse(f.read(), filename=file_path) + except Exception as e: + logger.warning(f"[ImportManager] 解析文件 {file_path} 失败: {e}") + return result - tree = ast.parse(source_code) + # 推导 module dotted path → 构建 import_map + python_path = Path(file_path) + for sp in sorted(sys.path, key=len, reverse=True): + try: + Path(file_path).relative_to(sp) + python_path = Path(sp) + break + except ValueError: + continue + module_dotted = _filepath_to_module(Path(file_path), python_path) + import_map = _collect_imports(tree, module_dotted) + result["import_map"] = import_map - # 查找目标类 + # 定位目标类 AST 节点 target_class = None for node in ast.walk(tree): - if isinstance(node, ast.ClassDef): - if node.name == class_name: - target_class = node - break + if isinstance(node, ast.ClassDef) and node.name == class_name: + target_class = node + break if target_class is None: - raise AttributeError(f"在文件 {file_path} 中找不到类 {class_name}") + logger.warning(f"[ImportManager] 在文件 {file_path} 中找不到类 {class_name}") + return result - result = { - "class_name": class_name, - "init_params": {}, - "status_methods": {}, - "action_methods": {}, + body = _extract_class_body(target_class, import_map) + + # 映射到统一字段名(与 registry.py complete_registry 消费端一致) + result["init_params"] = body.get("init_params", []) + result["status_methods"] = body.get("status_properties", {}) + result["action_methods"] = { + k: { + "args": v.get("params", []), + "return_type": v.get("return_type", ""), + "is_async": v.get("is_async", False), + "always_free": v.get("always_free", False), + "docstring": v.get("docstring"), + } + for k, v in body.get("auto_methods", {}).items() } - - # 分析类的方法 - for node in target_class.body: - if isinstance(node, ast.FunctionDef): - method_info = self._analyze_method_node(node) - method_name = node.name - if method_name == "__init__": - result["init_params"] = method_info["args"] - elif method_name.startswith("_"): - continue - elif self._is_property_method(node): - # @property 装饰的方法 - result["status_methods"][method_name] = method_info - elif method_name.startswith("get_"): - # get_ 开头的方法归类为status - actual_name = method_name[4:] # 去掉get_前缀 - if actual_name not in result["status_methods"]: - result["status_methods"][actual_name] = method_info - else: - # 检查是否被 @not_action 装饰器标记 - if self._is_not_action_method(node): - continue - # 其他非_开头的方法归类为action - # 检查是否被 @always_free 装饰器标记 - if self._is_always_free_method(node): - method_info["always_free"] = True - result["action_methods"][method_name] = method_info + result["ast_analysis_success"] = True return result def _analyze_method_signature(self, method, skip_unilabos_params: bool = True) -> Dict[str, Any]: @@ -401,23 +316,25 @@ class ImportManager: "name": method.__name__, "args": args, "return_type": self._get_type_string(signature.return_annotation), - "return_annotation": signature.return_annotation, # 保留原始类型注解,用于TypedDict等特殊处理 "is_async": inspect.iscoroutinefunction(method), } - def _get_return_type_from_method(self, method) -> str: + def _get_return_type_from_method(self, method) -> Union[str, Tuple[str, Any]]: """从方法中获取返回类型""" signature = inspect.signature(method) return self._get_type_string(signature.return_annotation) def _get_type_string(self, annotation) -> Union[str, Tuple[str, Any]]: - """将类型注解转换为Class Library中可搜索的类名""" + """将类型注解转换为短类名(与 AST _get_annotation_str 对齐)。 + + 自定义类只返回短名(如 ``"SetLiquidReturn"``),完整路径由 + ``import_map`` 负责解析,保持与 AST 分析一致。 + """ if annotation == inspect.Parameter.empty: - return "Any" # 如果没有注解,返回Any + return "Any" if annotation is None: - return "None" # 明确的None类型 + return "None" if hasattr(annotation, "__origin__"): - # 处理typing模块的类型 origin = annotation.__origin__ if origin in (list, set, tuple): if hasattr(annotation, "__args__") and annotation.__args__: @@ -432,132 +349,23 @@ class ImportManager: return "dict" elif origin is Optional: return "Unknown" - return f"Unknown" + return "Unknown" annotation_str = str(annotation) - # 处理typing模块的复杂类型 if "typing." in annotation_str: - # 简化typing类型显示 return ( annotation_str.replace("typing.", "") if getattr(annotation, "_name", None) is None else annotation._name.lower() ) - # 如果是类型对象 if hasattr(annotation, "__name__"): - # 如果是内置类型 - if annotation.__module__ == "builtins": - return annotation.__name__ - else: - # 如果是自定义类,返回完整路径 - return f"{annotation.__module__}:{annotation.__name__}" - # 如果是typing模块的类型 + return annotation.__name__ elif hasattr(annotation, "_name"): return annotation._name - # 如果是字符串形式的类型注解 elif isinstance(annotation, str): return annotation else: return annotation_str - def _is_property_method(self, node: ast.FunctionDef) -> bool: - """检查是否是@property装饰的方法""" - for decorator in node.decorator_list: - if isinstance(decorator, ast.Name) and decorator.id == "property": - return True - return False - - def _is_setter_method(self, node: ast.FunctionDef) -> bool: - """检查是否是@xxx.setter装饰的方法""" - for decorator in node.decorator_list: - if isinstance(decorator, ast.Attribute) and decorator.attr == "setter": - return True - return False - - def _is_not_action_method(self, node: ast.FunctionDef) -> bool: - """检查是否是@not_action装饰的方法""" - for decorator in node.decorator_list: - if isinstance(decorator, ast.Name) and decorator.id == "not_action": - return True - return False - - def _is_always_free_method(self, node: ast.FunctionDef) -> bool: - """检查是否是@always_free装饰的方法,或 @action(always_free=True) 装饰的方法""" - for decorator in node.decorator_list: - # 检查 @action(always_free=True) - if isinstance(decorator, ast.Call): - func = decorator.func - if isinstance(func, ast.Name) and func.id == "action": - for keyword in decorator.keywords: - if keyword.arg == "always_free": - if isinstance(keyword.value, Constant) and keyword.value.value is True: - return True - return False - - def _get_property_name_from_setter(self, node: ast.FunctionDef) -> str: - """从setter装饰器中获取属性名""" - for decorator in node.decorator_list: - if isinstance(decorator, ast.Attribute) and decorator.attr == "setter": - if isinstance(decorator.value, ast.Name): - return decorator.value.id - return node.name - - def get_class_info_static(self, module_class_path: str) -> Dict[str, Any]: - """ - 静态分析获取类的方法信息,不需要实际导入模块 - - Args: - module_class_path: 格式为 "module.path:ClassName" 的字符串 - - Returns: - 包含类方法信息的字典 - """ - try: - if ":" not in module_class_path: - raise ValueError("module_class_path必须是 'module.path:ClassName' 格式") - - module_path, class_name = module_class_path.rsplit(":", 1) - - # 将模块路径转换为文件路径 - file_path = self._module_path_to_file_path(module_path) - if not file_path or not os.path.exists(file_path): - logger.warning(f"找不到模块文件: {module_path} -> {file_path}") - return {} - - # 解析源码 - with open(file_path, "r", encoding="utf-8") as f: - source_code = f.read() - - tree = ast.parse(source_code) - - # 查找目标类 - class_node = None - for node in ast.walk(tree): - if isinstance(node, ast.ClassDef) and node.name == class_name: - class_node = node - break - - if not class_node: - logger.warning(f"在模块 {module_path} 中找不到类 {class_name}") - return {} - - # 分析类的方法 - methods_info = {} - for node in class_node.body: - if isinstance(node, ast.FunctionDef): - method_info = self._analyze_method_node(node) - methods_info[node.name] = method_info - - return { - "class_name": class_name, - "module_path": module_path, - "file_path": file_path, - "methods": methods_info, - } - - except Exception as e: - logger.error(f"静态分析类 {module_class_path} 时出错: {str(e)}") - return {} - def _module_path_to_file_path(self, module_path: str) -> Optional[str]: for path in sys.path: potential_path = Path(path) / module_path.replace(".", "/") @@ -572,222 +380,6 @@ class ImportManager: return None - def _analyze_method_node(self, node: ast.FunctionDef) -> Dict[str, Any]: - """分析方法节点,提取参数和返回类型信息""" - method_info = { - "name": node.name, - "args": [], - "return_type": None, - "is_async": isinstance(node, ast.AsyncFunctionDef), - } - # 获取默认值列表 - defaults = node.args.defaults - num_defaults = len(defaults) - - # 计算必需参数数量 - total_args = len(node.args.args) - num_required = total_args - num_defaults - - # 提取参数信息 - for i, arg in enumerate(node.args.args): - if arg.arg == "self": - continue - # 跳过 sample_uuids 参数(由系统自动注入) - if arg.arg == PARAM_SAMPLE_UUIDS: - continue - arg_info = { - "name": arg.arg, - "type": None, - "default": None, - "required": i < num_required, - } - - # 提取类型注解 - if arg.annotation: - arg_info["type"] = ast.unparse(arg.annotation) if hasattr(ast, "unparse") else str(arg.annotation) - - # 提取默认值并推断类型 - if i >= num_required: - default_index = i - num_required - if default_index < len(defaults): - default_value: Constant = defaults[default_index] # type: ignore - assert isinstance(default_value, Constant), "暂不支持对非常量类型进行推断,可反馈开源仓库" - arg_info["default"] = default_value.value - # 如果没有类型注解,尝试从默认值推断类型 - if not arg_info["type"]: - arg_info["type"] = self._get_type_string(type(arg_info["default"])) - method_info["args"].append(arg_info) - - # 提取返回类型 - if node.returns: - method_info["return_type"] = ast.unparse(node.returns) if hasattr(ast, "unparse") else str(node.returns) - - return method_info - - def _infer_type_from_default(self, node: ast.AST) -> Optional[str]: - """从默认值推断参数类型""" - if isinstance(node, ast.Constant): - value = node.value - if isinstance(value, bool): - return "bool" - elif isinstance(value, int): - return "int" - elif isinstance(value, float): - return "float" - elif isinstance(value, str): - return "str" - elif value is None: - return "Optional[Any]" - elif isinstance(node, ast.List): - return "List" - elif isinstance(node, ast.Dict): - return "Dict" - elif isinstance(node, ast.Tuple): - return "Tuple" - elif isinstance(node, ast.Set): - return "Set" - elif isinstance(node, ast.Name): - # 常见的默认值模式 - if node.id in ["None"]: - return "Optional[Any]" - elif node.id in ["True", "False"]: - return "bool" - - return None - - def _infer_types_from_docstring(self, method_info: Dict[str, Any]) -> None: - """从docstring中推断参数类型""" - docstring = method_info.get("docstring", "") - if not docstring: - return - - lines = docstring.split("\n") - in_args_section = False - - for line in lines: - line = line.strip() - - # 检测Args或Arguments段落 - if line.lower().startswith(("args:", "arguments:")): - in_args_section = True - continue - elif line.startswith(("returns:", "return:", "yields:", "raises:")): - in_args_section = False - continue - elif not line or not in_args_section: - continue - - # 解析参数行,格式通常是: param_name (type): description 或 param_name: description - if ":" in line: - parts = line.split(":", 1) - param_part = parts[0].strip() - - # 提取参数名和类型 - param_name = None - param_type = None - - if "(" in param_part and ")" in param_part: - # 格式: param_name (type) - param_name = param_part.split("(")[0].strip() - type_part = param_part.split("(")[1].split(")")[0].strip() - param_type = type_part - else: - # 格式: param_name - param_name = param_part - - # 更新对应参数的类型信息 - if param_name: - for arg_info in method_info["args"]: - if arg_info["name"] == param_name and not arg_info["type"]: - if param_type: - arg_info["inferred_type"] = param_type - elif not arg_info["inferred_type"]: - # 从描述中推断类型 - description = parts[1].strip().lower() - if any(word in description for word in ["path", "file", "directory", "filename"]): - arg_info["inferred_type"] = "str" - elif any( - word in description for word in ["port", "number", "count", "size", "length"] - ): - arg_info["inferred_type"] = "int" - elif any( - word in description for word in ["rate", "ratio", "percentage", "temperature"] - ): - arg_info["inferred_type"] = "float" - elif any(word in description for word in ["flag", "enable", "disable", "option"]): - arg_info["inferred_type"] = "bool" - - def get_registry_class_info(self, module_class_path: str) -> Dict[str, Any]: - """ - 获取适用于注册表的类信息,包含完整的类型推断 - - Args: - module_class_path: 格式为 "module.path:ClassName" 的字符串 - - Returns: - 适用于注册表的类信息字典 - """ - class_info = self.get_class_info_static(module_class_path) - if not class_info: - return {} - - registry_info = { - "class_name": class_info["class_name"], - "module_path": class_info["module_path"], - "file_path": class_info["file_path"], - "methods": {}, - "properties": [], - "init_params": {}, - "action_methods": {}, - } - - for method_name, method_info in class_info["methods"].items(): - # 分类处理不同类型的方法 - if method_info["is_property"]: - registry_info["properties"].append( - { - "name": method_name, - "return_type": method_info.get("return_type"), - "docstring": method_info.get("docstring"), - } - ) - elif method_name == "__init__": - # 处理初始化参数 - init_params = {} - for arg in method_info["args"]: - if arg["name"] != "self": - param_info = { - "name": arg["name"], - "type": arg.get("type") or arg.get("inferred_type"), - "required": arg.get("is_required", True), - "default": arg.get("default"), - } - init_params[arg["name"]] = param_info - registry_info["init_params"] = init_params - elif not method_name.startswith("_"): - # 处理公共方法(可能的action方法) - action_info = { - "name": method_name, - "params": {}, - "return_type": method_info.get("return_type"), - "docstring": method_info.get("docstring"), - "num_required": method_info.get("num_required", 0) - 1, # 减去self - "num_defaults": method_info.get("num_defaults", 0), - } - - for arg in method_info["args"]: - if arg["name"] != "self": - param_info = { - "name": arg["name"], - "type": arg.get("type") or arg.get("inferred_type"), - "required": arg.get("is_required", True), - "default": arg.get("default"), - } - action_info["params"][arg["name"]] = param_info - - registry_info["action_methods"][method_name] = action_info - - return registry_info # 全局实例,便于直接使用 @@ -815,16 +407,6 @@ def init_from_list(module_list: List[str]) -> None: default_manager = ImportManager(module_list) -def get_class_info_static(module_class_path: str) -> Dict[str, Any]: - """静态分析获取类信息的便捷函数""" - return default_manager.get_class_info_static(module_class_path) - - -def get_registry_class_info(module_class_path: str) -> Dict[str, Any]: - """获取适用于注册表的类信息的便捷函数""" - return default_manager.get_registry_class_info(module_class_path) - - -def get_enhanced_class_info(module_path: str, use_dynamic: bool = True) -> Dict[str, Any]: +def get_enhanced_class_info(module_path: str, **kwargs) -> Dict[str, Any]: """获取增强的类信息的便捷函数""" - return default_manager.get_enhanced_class_info(module_path, use_dynamic) + return default_manager.get_enhanced_class_info(module_path, **kwargs) diff --git a/unilabos/utils/requirements.txt b/unilabos/utils/requirements.txt index 2d849b86..105d387d 100644 --- a/unilabos/utils/requirements.txt +++ b/unilabos/utils/requirements.txt @@ -1,7 +1,7 @@ networkx typing_extensions websockets -msgcenterpy>=0.1.7 +msgcenterpy>=0.1.8 orjson>=3.11 opentrons_shared_data pint diff --git a/unilabos/utils/tools.py b/unilabos/utils/tools.py index 89195cbd..3c7b742e 100644 --- a/unilabos/utils/tools.py +++ b/unilabos/utils/tools.py @@ -1,4 +1,39 @@ +import json + +from unilabos.utils.type_check import TypeEncoder, json_default + +try: + import orjson + + def fast_dumps(obj, **kwargs) -> bytes: + """JSON 序列化为 bytes,优先使用 orjson。""" + return orjson.dumps(obj, option=orjson.OPT_NON_STR_KEYS, default=json_default) + + def fast_dumps_pretty(obj, **kwargs) -> bytes: + """JSON 序列化为 bytes(带缩进),优先使用 orjson。""" + return orjson.dumps( + obj, + option=orjson.OPT_NON_STR_KEYS | orjson.OPT_INDENT_2, + default=json_default, + ) + + def normalize_json(info: dict) -> dict: + """经 JSON 序列化/反序列化一轮来清理非标准类型。""" + return orjson.loads(orjson.dumps(info, default=json_default)) + +except ImportError: + + def fast_dumps(obj, **kwargs) -> bytes: # type: ignore[misc] + return json.dumps(obj, ensure_ascii=False, cls=TypeEncoder).encode("utf-8") + + def fast_dumps_pretty(obj, **kwargs) -> bytes: # type: ignore[misc] + return json.dumps(obj, indent=2, ensure_ascii=False, cls=TypeEncoder).encode("utf-8") + + def normalize_json(info: dict) -> dict: # type: ignore[misc] + return json.loads(json.dumps(info, ensure_ascii=False, cls=TypeEncoder)) + + # 辅助函数:将UUID数组转换为字符串 def uuid_to_str(uuid_array) -> str: """将UUID字节数组转换为十六进制字符串""" - return "".join(format(byte, "02x") for byte in uuid_array) \ No newline at end of file + return "".join(format(byte, "02x") for byte in uuid_array) diff --git a/unilabos/utils/type_check.py b/unilabos/utils/type_check.py index 64001e56..e3df2dc2 100644 --- a/unilabos/utils/type_check.py +++ b/unilabos/utils/type_check.py @@ -15,14 +15,21 @@ def get_type_class(type_hint): return final_type +def json_default(obj): + """将 type 对象序列化为类名,其余 fallback 到 str()。""" + if isinstance(obj, type): + return str(obj)[8:-2] + return str(obj) + + class TypeEncoder(json.JSONEncoder): """自定义JSON编码器处理特殊类型""" def default(self, obj): - # 优先处理类型对象 - if isinstance(obj, type): - return str(obj)[8:-2] - return super().default(obj) + try: + return json_default(obj) + except Exception: + return super().default(obj) class NoAliasDumper(yaml.SafeDumper): @@ -43,13 +50,10 @@ class ResultInfoEncoder(json.JSONEncoder): """专门用于处理任务执行结果信息的JSON编码器""" def default(self, obj): - # 优先处理类型对象 if isinstance(obj, type): - return str(obj)[8:-2] + return json_default(obj) - # 对于无法序列化的对象,统一转换为字符串 try: - # 尝试调用 __dict__ 或者其他序列化方法 if hasattr(obj, "__dict__"): return obj.__dict__ elif hasattr(obj, "_asdict"): # namedtuple @@ -59,10 +63,8 @@ class ResultInfoEncoder(json.JSONEncoder): elif hasattr(obj, "dict"): return obj.dict() else: - # 如果都不行,转换为字符串 return str(obj) except Exception: - # 如果转换失败,直接返回字符串表示 return str(obj)