From 200105f647d9f7288fea7abda9160a34859e2bc8 Mon Sep 17 00:00:00 2001 From: dijkstra402 Date: Sat, 8 Nov 2025 13:35:47 +0800 Subject: [PATCH] Add debug prints to create_orders and add resource_tree_transfer method --- .../bioyond_cell/2025092701.xlsx | Bin 18159 -> 18162 bytes .../bioyond_cell/bioyond_cell_workstation.py | 71 +++++++++++++++++- .../workstation/bioyond_studio/config.py | 6 +- .../workstation/bioyond_studio/station.py | 13 +++- .../workstation/coin_cell_assembly.zip | Bin 19794 -> 0 bytes .../coin_cell_assembly/coin_cell_assembly.py | 6 +- .../coin_cell_assembly_1105.csv | 64 ++++++++++++++++ .../resources/bioyond/YB_bottle_carriers.py | 4 +- unilabos/resources/bioyond/YB_bottles.py | 2 +- 9 files changed, 152 insertions(+), 14 deletions(-) delete mode 100644 unilabos/devices/workstation/coin_cell_assembly.zip create mode 100644 unilabos/devices/workstation/coin_cell_assembly/coin_cell_assembly_1105.csv diff --git a/unilabos/devices/workstation/bioyond_studio/bioyond_cell/2025092701.xlsx b/unilabos/devices/workstation/bioyond_studio/bioyond_cell/2025092701.xlsx index 4147095ed2784e56ccc6f637aec02c2a575c2cc8..9d0696191d2c76ff1788e485ed89d498ebf0f503 100644 GIT binary patch delta 162 zcmaFg%lN66aYMfR)60|-knO!jk?+Pq!Wg^kg8@*izEW&=IL$k|HHLn=(6)7AJijMz78J`iDh1 z;pR`ab`58gojlpqhVjzm3qZ1dGOwEj9Znlh*CbziRF-lK9?54(+=)wR502!e# A2LJ#7 delta 163 zcmey=%lN*RaYMflRTwRyX$3mc=^A)Q1f1v3L1{W3cn{bW0vWQ8JIB{yRwg%Vq(;*ugIJDV~)qsgxNI*fjs zi}VkRa>6Z`Z08!zC^dPSs}1A%$(Mm-&13;L3&xL=J>6^>`zN=%*)d8?KIW#z7U#kM F1OQjPG1CA5 diff --git a/unilabos/devices/workstation/bioyond_studio/bioyond_cell/bioyond_cell_workstation.py b/unilabos/devices/workstation/bioyond_studio/bioyond_cell/bioyond_cell_workstation.py index ee825791..4b27572c 100644 --- a/unilabos/devices/workstation/bioyond_studio/bioyond_cell/bioyond_cell_workstation.py +++ b/unilabos/devices/workstation/bioyond_studio/bioyond_cell/bioyond_cell_workstation.py @@ -3,6 +3,7 @@ from cgi import print_arguments from doctest import debug from typing import Dict, Any, List, Optional import requests +from pylabrobot.resources.resource import Resource as ResourcePLR from pathlib import Path import pandas as pd import time @@ -254,7 +255,7 @@ class BioyondCellWorkstation(BioyondWorkstation): def auto_feeding4to3( self, # ★ 修改点:默认模板路径 - xlsx_path: Optional[str] = "C:/ML/GitHub/Uni-Lab-OS/unilabos/devices/workstation/bioyond_studio/bioyond_cell/material_template.xlsx", + xlsx_path: Optional[str] = "/Users/sml/work/Unilab/Uni-Lab-OS/unilabos/devices/workstation/bioyond_studio/bioyond_cell/material_template.xlsx", # ---------------- WH4 - 加样头面 (Z=1, 12个点位) ---------------- WH4_x1_y1_z1_1_materialName: str = "", WH4_x1_y1_z1_1_quantity: float = 0.0, WH4_x2_y1_z1_2_materialName: str = "", WH4_x2_y1_z1_2_quantity: float = 0.0, @@ -306,7 +307,7 @@ class BioyondCellWorkstation(BioyondWorkstation): # ---------- 模式 1: Excel 导入 ---------- if xlsx_path: - path = Path(xlsx_path) + path = Path(__file__).parent / Path(xlsx_path) if path.exists(): # ★ 修改点:路径存在才加载 try: df = pd.read_excel(path, sheet_name=0, header=None, engine="openpyxl") @@ -471,14 +472,23 @@ class BioyondCellWorkstation(BioyondWorkstation): - totalMass 自动计算为所有物料质量之和 - createTime 缺失或为空时自动填充为当前日期(YYYY/M/D) """ - path = Path(xlsx_path) + default_path = Path("/Users/sml/work/Unilab/Uni-Lab-OS/unilabos/devices/workstation/bioyond_studio/bioyond_cell/2025092701.xlsx") + path = Path(xlsx_path) if xlsx_path else default_path + print(f"[create_orders] 使用 Excel 路径: {path}") + if path != default_path: + print("[create_orders] 来源: 调用方传入自定义路径") + else: + print("[create_orders] 来源: 使用默认模板路径") + if not path.exists(): + print(f"[create_orders] ⚠️ Excel 文件不存在: {path}") raise FileNotFoundError(f"未找到 Excel 文件:{path}") try: df = pd.read_excel(path, sheet_name=0, engine="openpyxl") except Exception as e: raise RuntimeError(f"读取 Excel 失败:{e}") + print(f"[create_orders] Excel 读取成功,行数: {len(df)}, 列: {list(df.columns)}") # 列名容错:返回可选列名,找不到则返回 None def _pick(col_names: List[str]) -> Optional[str]: @@ -495,9 +505,20 @@ class BioyondCellWorkstation(BioyondWorkstation): col_pouch = _pick(["软包组装分液体积", "pouchCellInfo"]) col_cond = _pick(["电导测试分液体积", "conductivityInfo"]) col_cond_cnt = _pick(["电导测试分液瓶数", "conductivityBottleCount"]) + print("[create_orders] 列匹配结果:", { + "order_name": col_order_name, + "create_time": col_create_time, + "bottle_type": col_bottle_type, + "mix_time": col_mix_time, + "load": col_load, + "pouch": col_pouch, + "conductivity": col_cond, + "conductivity_bottle_count": col_cond_cnt, + }) # 物料列:所有以 (g) 结尾 material_cols = [c for c in df.columns if isinstance(c, str) and c.endswith("(g)")] + print(f"[create_orders] 识别到的物料列: {material_cols}") if not material_cols: raise KeyError("未发现任何以“(g)”结尾的物料列,请检查表头。") @@ -545,6 +566,9 @@ class BioyondCellWorkstation(BioyondWorkstation): if mass > 0: mats.append({"name": mcol.replace("(g)", ""), "mass": mass}) total_mass += mass + else: + if mass < 0: + print(f"[create_orders] 第 {idx+1} 行物料 {mcol} 数值为负数: {mass}") order_data = { "batchId": batch_id, @@ -559,11 +583,22 @@ class BioyondCellWorkstation(BioyondWorkstation): "materialInfos": mats, "totalMass": round(total_mass, 4) # 自动汇总 } + print(f"[create_orders] 第 {idx+1} 行解析结果: orderName={order_data['orderName']}, " + f"loadShedding={order_data['loadSheddingInfo']}, pouchCell={order_data['pouchCellInfo']}, " + f"conductivity={order_data['conductivityInfo']}, totalMass={order_data['totalMass']}, " + f"material_count={len(mats)}") + + if order_data["totalMass"] <= 0: + print(f"[create_orders] ⚠️ 第 {idx+1} 行总质量 <= 0,可能导致 LIMS 校验失败") + if not mats: + print(f"[create_orders] ⚠️ 第 {idx+1} 行未找到有效物料") + orders.append(order_data) + print(f"[create_orders] 即将提交订单数量: {len(orders)}") response = self._post_lims("/api/lims/order/orders", orders) - print(response) + print(f"[create_orders] 接口返回: {response}") # 等待任务报送成功 data_list = response.get("data", []) if data_list: @@ -1014,7 +1049,35 @@ class BioyondCellWorkstation(BioyondWorkstation): "create_result": create_result, "inbound_result": inbound_result, } + def resource_tree_transfer(self, old_parent: ResourcePLR, plr_resource: ResourcePLR, parent_resource: ResourcePLR): + # ROS2DeviceNode.run_async_func(self._ros_node.resource_tree_transfer, True, **{ + # "old_parent": old_parent, + # "plr_resource": plr_resource, + # "parent_resource": parent_resource, + # }) + print("resource_tree_transfer", plr_resource, parent_resource) + if hasattr(plr_resource, "unilabos_extra") and plr_resource.unilabos_extra: + if "update_resource_site" in plr_resource.unilabos_extra: + site = plr_resource.unilabos_extra["update_resource_site"] + plr_model = plr_resource.model + board_type = None + for key, (moudle_name,moudle_uuid) in MATERIAL_TYPE_MAPPINGS.items(): + if plr_model == moudle_name: + board_type = key + break + if board_type is None: + pass + bottle1 = plr_resource.children[0] + bottle_moudle = bottle1.model + bottle_type = None + for key, (moudle_name, moudle_uuid) in MATERIAL_TYPE_MAPPINGS.items(): + if bottle_moudle == moudle_name: + bottle_type = key + break + self.create_sample(plr_resource.name, board_type,bottle_type,site) + return + self.lab_logger().warning(f"无库位的上料,不处理,{plr_resource} 挂载到 {parent_resource}") def create_sample( self, diff --git a/unilabos/devices/workstation/bioyond_studio/config.py b/unilabos/devices/workstation/bioyond_studio/config.py index b594125b..adb2d720 100644 --- a/unilabos/devices/workstation/bioyond_studio/config.py +++ b/unilabos/devices/workstation/bioyond_studio/config.py @@ -8,8 +8,8 @@ import os # BioyondCellWorkstation 默认配置(包含所有必需参数) API_CONFIG = { # API 连接配置 - # "api_host": os.getenv("BIOYOND_API_HOST", "http://172.21.32.65:44389"),#实机 - "api_host": os.getenv("BIOYOND_API_HOST", "http://172.16.10.169:44388"),# 仿真机 + # "api_host": os.getenv("BIOYOND_API_HOST", "http://172.16.1.143:44389"),#实机 + "api_host": os.getenv("BIOYOND_API_HOST", "http://172.16.7.149:44388"),# 仿真机 "api_key": os.getenv("BIOYOND_API_KEY", "8A819E5C"), "timeout": int(os.getenv("BIOYOND_TIMEOUT", "30")), @@ -17,7 +17,7 @@ API_CONFIG = { "report_token": os.getenv("BIOYOND_REPORT_TOKEN", "CHANGE_ME_TOKEN"), # HTTP 服务配置 - "HTTP_host": os.getenv("BIOYOND_HTTP_HOST", "172.21.32.115"), # HTTP服务监听地址,监听计算机飞连ip地址 + "HTTP_host": os.getenv("BIOYOND_HTTP_HOST", "172.16.2.140"), # HTTP服务监听地址,监听计算机飞连ip地址 "HTTP_port": int(os.getenv("BIOYOND_HTTP_PORT", "8080")), "debug_mode": False,# 调试模式 } diff --git a/unilabos/devices/workstation/bioyond_studio/station.py b/unilabos/devices/workstation/bioyond_studio/station.py index d6fe4870..44f9cf19 100644 --- a/unilabos/devices/workstation/bioyond_studio/station.py +++ b/unilabos/devices/workstation/bioyond_studio/station.py @@ -177,7 +177,18 @@ class BioyondWorkstation(WorkstationBase): ROS2DeviceNode.run_async_func(self._ros_node.update_resource, True, **{ "resources": [self.deck] }) - + def resource_tree_transfer(self, old_parent: ResourcePLR, plr_resource: ResourcePLR, parent_resource: ResourcePLR): + # ROS2DeviceNode.run_async_func(self._ros_node.resource_tree_transfer, True, **{ + # "old_parent": old_parent, + # "plr_resource": plr_resource, + # "parent_resource": parent_resource, + # }) + print("resource_tree_transfer", plr_resource, parent_resource) + if hasattr(plr_resource, "unilabos_data") and plr_resource.unilabos_data: + if "update_resource_site" in plr_resource.unilabos_data: + site = plr_resource.unilabos_data["update_resource_site"] + return + self.lab_logger().warning(f"无库位的上料,不处理,{plr_resource} 挂载到 {parent_resource}") def transfer_resource_to_another(self, resource: List[ResourceSlot], mount_resource: List[ResourceSlot], sites: List[str], mount_device_id: DeviceSlot): ROS2DeviceNode.run_async_func(self._ros_node.transfer_resource_to_another, True, **{ "plr_resources": resource, diff --git a/unilabos/devices/workstation/coin_cell_assembly.zip b/unilabos/devices/workstation/coin_cell_assembly.zip deleted file mode 100644 index b95b7f4a3f731c9d33a00a977343af3c5962ded5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19794 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 bool: + def func_allpack_cmd(self, elec_num, elec_use_num, elec_vol:int=50, assembly_type:int=7, assembly_pressure:int=4200, file_path: str="/Users/sml/work") -> bool: elec_num, elec_use_num, elec_vol, assembly_type, assembly_pressure = int(elec_num), int(elec_use_num), int(elec_vol), int(assembly_type), int(assembly_pressure) summary_csv_file = os.path.join(file_path, "duandian.csv") # 如果断点文件存在,先读取之前的进度 diff --git a/unilabos/devices/workstation/coin_cell_assembly/coin_cell_assembly_1105.csv b/unilabos/devices/workstation/coin_cell_assembly/coin_cell_assembly_1105.csv new file mode 100644 index 00000000..3f7b357f --- /dev/null +++ b/unilabos/devices/workstation/coin_cell_assembly/coin_cell_assembly_1105.csv @@ -0,0 +1,64 @@ +Name,DataType,InitValue,Comment,Attribute,DeviceType,Address, +COIL_SYS_START_CMD,BOOL,,,,coil,9010, +COIL_SYS_STOP_CMD,BOOL,,,,coil,9020, +COIL_SYS_RESET_CMD,BOOL,,,,coil,9030, +COIL_SYS_HAND_CMD,BOOL,,,,coil,9040, +COIL_SYS_AUTO_CMD,BOOL,,,,coil,9050, +COIL_SYS_INIT_CMD,BOOL,,,,coil,9060, +COIL_UNILAB_SEND_MSG_SUCC_CMD,BOOL,,,,coil,9700, +COIL_UNILAB_REC_MSG_SUCC_CMD,BOOL,,,,coil,9710,unilab_rec_msg_succ_cmd +COIL_SYS_START_STATUS,BOOL,,,,coil,9210, +COIL_SYS_STOP_STATUS,BOOL,,,,coil,9220, +COIL_SYS_RESET_STATUS,BOOL,,,,coil,9230, +COIL_SYS_HAND_STATUS,BOOL,,,,coil,9240, +COIL_SYS_AUTO_STATUS,BOOL,,,,coil,9250, +COIL_SYS_INIT_STATUS,BOOL,,,,coil,9260, +COIL_REQUEST_REC_MSG_STATUS,BOOL,,,,coil,9500, +COIL_REQUEST_SEND_MSG_STATUS,BOOL,,,,coil,9510,request_send_msg_status +REG_MSG_ELECTROLYTE_USE_NUM,INT16,,,,hold_register,17000, +REG_MSG_ELECTROLYTE_NUM,INT16,,,,hold_register,17002,unilab_send_msg_electrolyte_num +REG_MSG_ELECTROLYTE_VOLUME,INT16,,,,hold_register,17004,unilab_send_msg_electrolyte_vol +REG_MSG_ASSEMBLY_TYPE,INT16,,,,hold_register,17006,unilab_send_msg_assembly_type +REG_MSG_ASSEMBLY_PRESSURE,INT16,,,,hold_register,17008,unilab_send_msg_assembly_pressure +REG_DATA_ASSEMBLY_COIN_CELL_NUM,INT16,,,,hold_register,16000,data_assembly_coin_cell_num +REG_DATA_OPEN_CIRCUIT_VOLTAGE,FLOAT32,,,,hold_register,16002,data_open_circuit_voltage +REG_DATA_AXIS_X_POS,FLOAT32,,,,hold_register,16004, +REG_DATA_AXIS_Y_POS,FLOAT32,,,,hold_register,16006, +REG_DATA_AXIS_Z_POS,FLOAT32,,,,hold_register,16008, +REG_DATA_POLE_WEIGHT,FLOAT32,,,,hold_register,16010,data_pole_weight +REG_DATA_ASSEMBLY_PER_TIME,FLOAT32,,,,hold_register,16012,data_assembly_time +REG_DATA_ASSEMBLY_PRESSURE,INT16,,,,hold_register,16014,data_assembly_pressure +REG_DATA_ELECTROLYTE_VOLUME,INT16,,,,hold_register,16016,data_electrolyte_volume +REG_DATA_COIN_NUM,INT16,,,,hold_register,16018,data_coin_num +REG_DATA_ELECTROLYTE_CODE,STRING,,,,hold_register,16020,data_electrolyte_code() +REG_DATA_COIN_CELL_CODE,STRING,,,,hold_register,16030,data_coin_cell_code() +REG_DATA_STACK_VISON_CODE,STRING,,,,hold_register,18004,data_stack_vision_code() +REG_DATA_GLOVE_BOX_PRESSURE,FLOAT32,,,,hold_register,16050,data_glove_box_pressure +REG_DATA_GLOVE_BOX_WATER_CONTENT,FLOAT32,,,,hold_register,16052,data_glove_box_water_content +REG_DATA_GLOVE_BOX_O2_CONTENT,FLOAT32,,,,hold_register,16054,data_glove_box_o2_content +UNILAB_SEND_ELECTROLYTE_BOTTLE_NUM,BOOL,,,,coil,9720, +UNILAB_RECE_ELECTROLYTE_BOTTLE_NUM,BOOL,,,,coil,9520, +REG_MSG_ELECTROLYTE_NUM_USED,INT16,,,,hold_register,17496, +REG_DATA_ELECTROLYTE_USE_NUM,INT16,,,,hold_register,16000, +UNILAB_SEND_FINISHED_CMD,BOOL,,,,coil,9730, +UNILAB_RECE_FINISHED_CMD,BOOL,,,,coil,9530, +REG_DATA_ASSEMBLY_TYPE,INT16,,,,hold_register,16018,ASSEMBLY_TYPE7or8 +COIL_ALUMINUM_FOIL,BOOL,,使用铝箔垫,,coil,9340, +REG_MSG_NE_PLATE_MATRIX,INT16,,负极片矩阵点位,,hold_register,17440, +REG_MSG_SEPARATOR_PLATE_MATRIX,INT16,,隔膜矩阵点位,,hold_register,17450, +REG_MSG_TIP_BOX_MATRIX,INT16,,移液枪头矩阵点位,,hold_register,17480, +REG_MSG_NE_PLATE_NUM,INT16,,负极片盘数,,hold_register,17443, +REG_MSG_SEPARATOR_PLATE_NUM,INT16,,隔膜盘数,,hold_register,17453, +REG_MSG_PRESS_MODE,BOOL,,压制模式(false:压力检测模式,True:距离模式),,coil,9360,电池压制模式 +,,,,,,, +,BOOL,,视觉对位(false:使用,true:忽略),,coil,9300,视觉对位 +,BOOL,,复检(false:使用,true:忽略),,coil,9310,视觉复检 +,BOOL,,手套箱_左仓(false:使用,true:忽略),,coil,9320,手套箱左仓 +,BOOL,,手套箱_右仓(false:使用,true:忽略),,coil,9420,手套箱右仓 +,BOOL,,真空检知(false:使用,true:忽略),,coil,9350,真空检知 +,BOOL,,电解液添加模式(false:单次滴液,true:二次滴液),,coil,9370,滴液模式 +,BOOL,,正极片称重(false:使用,true:忽略),,coil,9380,正极片称重 +,BOOL,,正负极片组装方式(false:正装,true:倒装),,coil,9390,正负极反装 +,BOOL,,压制清洁(false:使用,true:忽略),,coil,9400,压制清洁 +,BOOL,,物料盘摆盘方式(false:水平摆盘,true:堆叠摆盘),,coil,9410,负极片摆盘方式 +REG_MSG_BATTERY_CLEAN_IGNORE,BOOL,,忽略电池清洁(false:使用,true:忽略),,coil,9460, diff --git a/unilabos/resources/bioyond/YB_bottle_carriers.py b/unilabos/resources/bioyond/YB_bottle_carriers.py index 01d64c52..5284f0af 100644 --- a/unilabos/resources/bioyond/YB_bottle_carriers.py +++ b/unilabos/resources/bioyond/YB_bottle_carriers.py @@ -355,7 +355,7 @@ def YB_6x5ml_DispensingVialCarrier(name: str) -> BottleCarrier: size_y=carrier_size_y, size_z=carrier_size_z, sites=sites, - model="6x5ml_DispensingVialCarrier", + model="YB_6x5ml_DispensingVialCarrier", ) carrier.num_items_x = 4 carrier.num_items_y = 2 @@ -554,7 +554,7 @@ def YB_jia_yang_tou_da_1X1_carrier(name: str) -> BottleCarrier: size_y=carrier_size_y, size_z=carrier_size_z, sites=sites, - model="6x_LargeDispenseHeadCarrier", + model="YB_6x_LargeDispenseHeadCarrier", ) carrier.num_items_x = 1 carrier.num_items_y = 1 diff --git a/unilabos/resources/bioyond/YB_bottles.py b/unilabos/resources/bioyond/YB_bottles.py index 8ebdb415..432383ec 100644 --- a/unilabos/resources/bioyond/YB_bottles.py +++ b/unilabos/resources/bioyond/YB_bottles.py @@ -87,7 +87,7 @@ def YB_fen_ye_5ml_Bottle( height=height, max_volume=max_volume, barcode=barcode, - model="Separation_Bottle_5ml", + model="YB_fen_ye_5ml_Bottle", ) """20ml分液瓶"""