mirror of
https://github.com/dptech-corp/Uni-Lab-OS.git
synced 2025-12-19 14:01:20 +00:00
Add battery resources, bioyond_cell device registry, and fix file path resolution
This commit is contained in:
4
unilabos/resources/battery/__init__.py
Normal file
4
unilabos/resources/battery/__init__.py
Normal file
@@ -0,0 +1,4 @@
|
||||
"""Battery-related resource classes for coin cell assembly"""
|
||||
|
||||
|
||||
|
||||
45
unilabos/resources/battery/bottle_carriers.py
Normal file
45
unilabos/resources/battery/bottle_carriers.py
Normal file
@@ -0,0 +1,45 @@
|
||||
"""
|
||||
瓶架类定义 - 用于纽扣电池组装工作站
|
||||
Bottle Carrier Resource Classes
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
from pylabrobot.resources import ResourceHolder
|
||||
from pylabrobot.resources.utils import create_ordered_items_2d
|
||||
from unilabos.resources.itemized_carrier import ItemizedCarrier
|
||||
|
||||
|
||||
def YIHUA_Electrolyte_12VialCarrier(name: str) -> ItemizedCarrier:
|
||||
"""依华电解液12瓶架 - 3x4布局
|
||||
|
||||
Args:
|
||||
name: 瓶架名称
|
||||
|
||||
Returns:
|
||||
ItemizedCarrier: 包含12个瓶位的瓶架
|
||||
"""
|
||||
sites = create_ordered_items_2d(
|
||||
klass=ResourceHolder,
|
||||
num_items_x=4,
|
||||
num_items_y=3,
|
||||
dx=10.0,
|
||||
dy=10.0,
|
||||
dz=5.0,
|
||||
item_dx=70.0,
|
||||
item_dy=26.67,
|
||||
size_x=60.0,
|
||||
size_y=20.0,
|
||||
size_z=70.0,
|
||||
)
|
||||
|
||||
return ItemizedCarrier(
|
||||
name=name,
|
||||
size_x=300.0,
|
||||
size_y=100.0,
|
||||
size_z=80.0,
|
||||
num_items_x=4,
|
||||
num_items_y=3,
|
||||
sites=sites,
|
||||
category="bottle_carrier",
|
||||
)
|
||||
|
||||
67
unilabos/resources/battery/electrode_sheet.py
Normal file
67
unilabos/resources/battery/electrode_sheet.py
Normal file
@@ -0,0 +1,67 @@
|
||||
"""
|
||||
电极片类定义
|
||||
Electrode Sheet Resource Classes
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
from typing import Any, Dict, Optional
|
||||
from pylabrobot.resources.resource import Resource
|
||||
|
||||
|
||||
class ElectrodeSheet(Resource):
|
||||
"""电极片类 - 用于纽扣电池组装"""
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
name: str,
|
||||
size_x: float = 12.0,
|
||||
size_y: float = 12.0,
|
||||
size_z: float = 0.1,
|
||||
category: str = "electrode_sheet",
|
||||
electrode_type: str = "anode", # "anode" 负极, "cathode" 正极, "separator" 隔膜
|
||||
**kwargs
|
||||
):
|
||||
"""初始化电极片
|
||||
|
||||
Args:
|
||||
name: 电极片名称
|
||||
size_x: X方向尺寸 (mm)
|
||||
size_y: Y方向尺寸 (mm)
|
||||
size_z: Z方向尺寸/厚度 (mm)
|
||||
category: 类别
|
||||
electrode_type: 电极类型
|
||||
"""
|
||||
super().__init__(
|
||||
name=name,
|
||||
size_x=size_x,
|
||||
size_y=size_y,
|
||||
size_z=size_z,
|
||||
category=category,
|
||||
**kwargs
|
||||
)
|
||||
self._electrode_type = electrode_type
|
||||
self._unilabos_state: Dict[str, Any] = {
|
||||
"electrode_type": electrode_type,
|
||||
"material": "",
|
||||
"thickness": size_z,
|
||||
}
|
||||
|
||||
@property
|
||||
def electrode_type(self) -> str:
|
||||
"""获取电极类型"""
|
||||
return self._electrode_type
|
||||
|
||||
def load_state(self, state: Dict[str, Any]) -> None:
|
||||
"""加载状态"""
|
||||
super().load_state(state)
|
||||
if isinstance(state, dict):
|
||||
self._unilabos_state.update(state)
|
||||
|
||||
def serialize_state(self) -> Dict[str, Any]:
|
||||
"""序列化状态"""
|
||||
data = super().serialize_state()
|
||||
data.update(self._unilabos_state)
|
||||
return data
|
||||
|
||||
|
||||
|
||||
152
unilabos/resources/battery/magazine.py
Normal file
152
unilabos/resources/battery/magazine.py
Normal file
@@ -0,0 +1,152 @@
|
||||
"""
|
||||
弹夹架类定义 - 用于纽扣电池组装工作站
|
||||
Magazine Holder Resource Classes
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
from typing import List, Optional
|
||||
from pylabrobot.resources.coordinate import Coordinate
|
||||
from pylabrobot.resources import ResourceHolder
|
||||
from pylabrobot.resources.utils import create_ordered_items_2d
|
||||
from unilabos.resources.itemized_carrier import ItemizedCarrier
|
||||
|
||||
|
||||
def MagazineHolder_4_Cathode(name: str) -> ItemizedCarrier:
|
||||
"""正极&铝箔弹夹 - 4个洞位 (2x2布局)
|
||||
|
||||
Args:
|
||||
name: 弹夹名称
|
||||
|
||||
Returns:
|
||||
ItemizedCarrier: 包含4个槽位的弹夹架
|
||||
"""
|
||||
sites = create_ordered_items_2d(
|
||||
klass=ResourceHolder,
|
||||
num_items_x=2,
|
||||
num_items_y=2,
|
||||
dx=10.0,
|
||||
dy=10.0,
|
||||
dz=0.0,
|
||||
item_dx=50.0,
|
||||
item_dy=30.0,
|
||||
size_x=40.0,
|
||||
size_y=25.0,
|
||||
size_z=40.0,
|
||||
)
|
||||
|
||||
return ItemizedCarrier(
|
||||
name=name,
|
||||
size_x=120.0,
|
||||
size_y=80.0,
|
||||
size_z=50.0,
|
||||
num_items_x=2,
|
||||
num_items_y=2,
|
||||
sites=sites,
|
||||
category="magazine_holder",
|
||||
)
|
||||
|
||||
|
||||
def MagazineHolder_6_Cathode(name: str) -> ItemizedCarrier:
|
||||
"""正极壳&平垫片弹夹 - 6个洞位 (2x3布局)
|
||||
|
||||
Args:
|
||||
name: 弹夹名称
|
||||
|
||||
Returns:
|
||||
ItemizedCarrier: 包含6个槽位的弹夹架
|
||||
"""
|
||||
sites = create_ordered_items_2d(
|
||||
klass=ResourceHolder,
|
||||
num_items_x=3,
|
||||
num_items_y=2,
|
||||
dx=10.0,
|
||||
dy=10.0,
|
||||
dz=0.0,
|
||||
item_dx=40.0,
|
||||
item_dy=30.0,
|
||||
size_x=35.0,
|
||||
size_y=25.0,
|
||||
size_z=40.0,
|
||||
)
|
||||
|
||||
return ItemizedCarrier(
|
||||
name=name,
|
||||
size_x=150.0,
|
||||
size_y=80.0,
|
||||
size_z=50.0,
|
||||
num_items_x=3,
|
||||
num_items_y=2,
|
||||
sites=sites,
|
||||
category="magazine_holder",
|
||||
)
|
||||
|
||||
|
||||
def MagazineHolder_6_Anode(name: str) -> ItemizedCarrier:
|
||||
"""负极壳&弹垫片弹夹 - 6个洞位 (2x3布局)
|
||||
|
||||
Args:
|
||||
name: 弹夹名称
|
||||
|
||||
Returns:
|
||||
ItemizedCarrier: 包含6个槽位的弹夹架
|
||||
"""
|
||||
sites = create_ordered_items_2d(
|
||||
klass=ResourceHolder,
|
||||
num_items_x=3,
|
||||
num_items_y=2,
|
||||
dx=10.0,
|
||||
dy=10.0,
|
||||
dz=0.0,
|
||||
item_dx=40.0,
|
||||
item_dy=30.0,
|
||||
size_x=35.0,
|
||||
size_y=25.0,
|
||||
size_z=40.0,
|
||||
)
|
||||
|
||||
return ItemizedCarrier(
|
||||
name=name,
|
||||
size_x=150.0,
|
||||
size_y=80.0,
|
||||
size_z=50.0,
|
||||
num_items_x=3,
|
||||
num_items_y=2,
|
||||
sites=sites,
|
||||
category="magazine_holder",
|
||||
)
|
||||
|
||||
|
||||
def MagazineHolder_6_Battery(name: str) -> ItemizedCarrier:
|
||||
"""成品弹夹 - 6个洞位 (3x2布局)
|
||||
|
||||
Args:
|
||||
name: 弹夹名称
|
||||
|
||||
Returns:
|
||||
ItemizedCarrier: 包含6个槽位的弹夹架
|
||||
"""
|
||||
sites = create_ordered_items_2d(
|
||||
klass=ResourceHolder,
|
||||
num_items_x=3,
|
||||
num_items_y=2,
|
||||
dx=10.0,
|
||||
dy=10.0,
|
||||
dz=0.0,
|
||||
item_dx=33.0,
|
||||
item_dy=40.0,
|
||||
size_x=30.0,
|
||||
size_y=35.0,
|
||||
size_z=40.0,
|
||||
)
|
||||
|
||||
return ItemizedCarrier(
|
||||
name=name,
|
||||
size_x=120.0,
|
||||
size_y=100.0,
|
||||
size_z=50.0,
|
||||
num_items_x=3,
|
||||
num_items_y=2,
|
||||
sites=sites,
|
||||
category="magazine_holder",
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user