from unilabos.resources.bottle_carrier import Bottle, BottleCarrier from pylabrobot.resources import create_homogeneous_resources, Coordinate, ResourceHolder # 命名约定:试剂瓶-Bottle,烧杯-Beaker,烧瓶-Flask,小瓶-Vial def BIOYOND_Electrolyte_6VialCarrier(name: str) -> BottleCarrier: """6瓶载架 - 2x3布局""" # 载架尺寸 (mm) carrier_size_x = 127.8 carrier_size_y = 85.5 carrier_size_z = 50.0 # 瓶位尺寸 bottle_diameter = 30.0 bottle_spacing_x = 42.0 # X方向间距 bottle_spacing_y = 35.0 # Y方向间距 # 计算起始位置 (居中排列) start_x = (carrier_size_x - (3 - 1) * bottle_spacing_x - bottle_diameter) / 2 start_y = (carrier_size_y - (2 - 1) * bottle_spacing_y - bottle_diameter) / 2 # 创建6个位置坐标 (2行 x 3列) locations = [] for row in range(2): for col in range(3): x = start_x + col * bottle_spacing_x y = start_y + row * bottle_spacing_y z = 5.0 # 架位底部 locations.append(Coordinate(x, y, z)) return BottleCarrier( name=name, size_x=carrier_size_x, size_y=carrier_size_y, size_z=carrier_size_z, sites=create_homogeneous_resources( klass=ResourceHolder, locations=locations, resource_size_x=bottle_diameter, resource_size_y=bottle_diameter, name_prefix=name, ), model="BIOYOND_Electrolyte_6VialCarrier", ) def BIOYOND_Electrolyte_1BottleCarrier(name: str) -> BottleCarrier: """1瓶载架 - 单个中央位置""" # 载架尺寸 (mm) carrier_size_x = 127.8 carrier_size_y = 85.5 carrier_size_z = 100.0 # 烧杯尺寸 beaker_diameter = 80.0 # 计算中央位置 center_x = (carrier_size_x - beaker_diameter) / 2 center_y = (carrier_size_y - beaker_diameter) / 2 center_z = 5.0 return BottleCarrier( name=name, size_x=carrier_size_x, size_y=carrier_size_y, size_z=carrier_size_z, sites=create_homogeneous_resources( klass=ResourceHolder, locations=[Coordinate(center_x, center_y, center_z)], resource_size_x=beaker_diameter, resource_size_y=beaker_diameter, name_prefix=name, ), model="BIOYOND_Electrolyte_1BottleCarrier", )