mirror of
https://github.com/dptech-corp/Uni-Lab-OS.git
synced 2025-12-17 21:11:12 +00:00
feat: add button battery assembly station resources and configuration files
- Introduced new Python modules for button battery assembly, including resource classes and configurations. - Added JSON and CSV files for resource definitions and device configurations. - Created initial setup for the coin cell assembly workstation, including material handling and resource management.
This commit is contained in:
750
unilabos/devices/workstation/coin_cell_assembly/test.ipynb
Normal file
750
unilabos/devices/workstation/coin_cell_assembly/test.ipynb
Normal file
@@ -0,0 +1,750 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 22,
|
||||
"id": "80bc9500",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from __future__ import annotations\n",
|
||||
"\n",
|
||||
"from collections import OrderedDict\n",
|
||||
"from typing import Any, Dict, List, Optional, TypedDict, Union, cast\n",
|
||||
"\n",
|
||||
"from pylabrobot.resources.coordinate import Coordinate\n",
|
||||
"from pylabrobot.resources.container import Container\n",
|
||||
"from pylabrobot.resources.deck import Deck\n",
|
||||
"from pylabrobot.resources.itemized_resource import ItemizedResource\n",
|
||||
"from pylabrobot.resources.resource import Resource\n",
|
||||
"from pylabrobot.resources.resource_stack import ResourceStack\n",
|
||||
"from pylabrobot.resources.tip_rack import TipRack, TipSpot\n",
|
||||
"from pylabrobot.resources.trash import Trash\n",
|
||||
"from pylabrobot.resources.utils import create_ordered_items_2d"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"id": "498a9159",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"物料类型构建"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 23,
|
||||
"id": "f4a27241",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"\n",
|
||||
"class ElectrodeSheetState(TypedDict):\n",
|
||||
" diameter: float # 直径 (mm)\n",
|
||||
" thickness: float # 厚度 (mm)\n",
|
||||
" mass: float # 质量 (g)\n",
|
||||
" material_type: str # 材料类型(正极、负极、隔膜、弹片、垫片、铝箔等)\n",
|
||||
" info: Optional[str] # 附加信息\n",
|
||||
"\n",
|
||||
"class ElectrodeSheet(Resource):\n",
|
||||
" \"\"\"极片类 - 包含正负极片、隔膜、弹片、垫片、铝箔等所有片状材料\"\"\"\n",
|
||||
"\n",
|
||||
" def __init__(\n",
|
||||
" self,\n",
|
||||
" name: str = \"极片\",\n",
|
||||
" size_x=10,\n",
|
||||
" size_y=10,\n",
|
||||
" size_z=10,\n",
|
||||
" category: str = \"electrode_sheet\",\n",
|
||||
" model: Optional[str] = None,\n",
|
||||
" ):\n",
|
||||
" \"\"\"初始化极片\n",
|
||||
"\n",
|
||||
" Args:\n",
|
||||
" name: 极片名称\n",
|
||||
" category: 类别\n",
|
||||
" model: 型号\n",
|
||||
" \"\"\"\n",
|
||||
" super().__init__(\n",
|
||||
" name=name,\n",
|
||||
" size_x=size_x,\n",
|
||||
" size_y=size_y,\n",
|
||||
" size_z=size_z,\n",
|
||||
" category=category,\n",
|
||||
" model=model,\n",
|
||||
" )\n",
|
||||
" self._unilabos_state: ElectrodeSheetState = ElectrodeSheetState(\n",
|
||||
" diameter=14,\n",
|
||||
" thickness=0.1,\n",
|
||||
" mass=0.5,\n",
|
||||
" material_type=\"copper\",\n",
|
||||
" info=None\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
" # TODO: 这个还要不要?给self._unilabos_state赋值的?\n",
|
||||
" def load_state(self, state: Dict[str, Any]) -> None:\n",
|
||||
" \"\"\"格式不变\"\"\"\n",
|
||||
" super().load_state(state)\n",
|
||||
" self._unilabos_state = state\n",
|
||||
" #序列化\n",
|
||||
" def serialize_state(self) -> Dict[str, Dict[str, Any]]:\n",
|
||||
" \"\"\"格式不变\"\"\"\n",
|
||||
" data = super().serialize_state()\n",
|
||||
" data.update(self._unilabos_state) # Container自身的信息,云端物料将保存这一data,本地也通过这里的data进行读写,当前类用来表示这个物料的长宽高大小的属性,而data(state用来表示物料的内容,细节等)\n",
|
||||
" return data\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 24,
|
||||
"id": "830f052e",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# TODO: 这个应该只能放一个极片\n",
|
||||
"class MaterialHoleState(TypedDict):\n",
|
||||
" diameter: int\n",
|
||||
" depth: int\n",
|
||||
" max_sheets: int\n",
|
||||
" info: Optional[str] # 附加信息\n",
|
||||
"\n",
|
||||
"class MaterialHole(Resource):\n",
|
||||
" \"\"\"料板洞位类\"\"\"\n",
|
||||
" children: List[ElectrodeSheet] = []\n",
|
||||
"\n",
|
||||
" def __init__(\n",
|
||||
" self,\n",
|
||||
" name: str,\n",
|
||||
" size_x: float,\n",
|
||||
" size_y: float,\n",
|
||||
" size_z: float,\n",
|
||||
" category: str = \"material_hole\",\n",
|
||||
" **kwargs\n",
|
||||
" ):\n",
|
||||
" super().__init__(\n",
|
||||
" name=name,\n",
|
||||
" size_x=size_x,\n",
|
||||
" size_y=size_y,\n",
|
||||
" size_z=size_z,\n",
|
||||
" category=category,\n",
|
||||
" )\n",
|
||||
" self._unilabos_state: MaterialHoleState = MaterialHoleState(\n",
|
||||
" diameter=20,\n",
|
||||
" depth=10,\n",
|
||||
" max_sheets=1,\n",
|
||||
" info=None\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
" def get_all_sheet_info(self):\n",
|
||||
" info_list = []\n",
|
||||
" for sheet in self.children:\n",
|
||||
" info_list.append(sheet._unilabos_state[\"info\"])\n",
|
||||
" return info_list\n",
|
||||
" \n",
|
||||
" #这个函数函数好像没用,一般不会集中赋值质量\n",
|
||||
" def set_all_sheet_mass(self):\n",
|
||||
" for sheet in self.children:\n",
|
||||
" sheet._unilabos_state[\"mass\"] = 0.5 # 示例:设置质量为0.5g\n",
|
||||
"\n",
|
||||
" def load_state(self, state: Dict[str, Any]) -> None:\n",
|
||||
" \"\"\"格式不变\"\"\"\n",
|
||||
" super().load_state(state)\n",
|
||||
" self._unilabos_state = state\n",
|
||||
"\n",
|
||||
" def serialize_state(self) -> Dict[str, Dict[str, Any]]:\n",
|
||||
" \"\"\"格式不变\"\"\"\n",
|
||||
" data = super().serialize_state()\n",
|
||||
" data.update(self._unilabos_state) # Container自身的信息,云端物料将保存这一data,本地也通过这里的data进行读写,当前类用来表示这个物料的长宽高大小的属性,而data(state用来表示物料的内容,细节等)\n",
|
||||
" return data\n",
|
||||
" #移动极片前先取出对象\n",
|
||||
" def get_sheet_with_name(self, name: str) -> Optional[ElectrodeSheet]:\n",
|
||||
" for sheet in self.children:\n",
|
||||
" if sheet.name == name:\n",
|
||||
" return sheet\n",
|
||||
" return None\n",
|
||||
"\n",
|
||||
" def has_electrode_sheet(self) -> bool:\n",
|
||||
" \"\"\"检查洞位是否有极片\"\"\"\n",
|
||||
" return len(self.children) > 0\n",
|
||||
"\n",
|
||||
" def assign_child_resource(\n",
|
||||
" self,\n",
|
||||
" resource: ElectrodeSheet,\n",
|
||||
" location: Optional[Coordinate],\n",
|
||||
" reassign: bool = True,\n",
|
||||
" ):\n",
|
||||
" \"\"\"放置极片\"\"\"\n",
|
||||
" # TODO: 这里要改,diameter找不到,加入._unilabos_state后应该没问题\n",
|
||||
" if resource._unilabos_state[\"diameter\"] > self._unilabos_state[\"diameter\"]:\n",
|
||||
" raise ValueError(f\"极片直径 {resource._unilabos_state['diameter']} 超过洞位直径 {self._unilabos_state['diameter']}\")\n",
|
||||
" if len(self.children) >= self._unilabos_state[\"max_sheets\"]:\n",
|
||||
" raise ValueError(f\"洞位已满,无法放置更多极片\")\n",
|
||||
" super().assign_child_resource(resource, location, reassign)\n",
|
||||
"\n",
|
||||
" # 根据children的编号取物料对象。\n",
|
||||
" def get_electrode_sheet_info(self, index: int) -> ElectrodeSheet:\n",
|
||||
" return self.children[index]\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"#料板\n",
|
||||
"class MaterialPlateState(TypedDict):\n",
|
||||
" hole_spacing_x: float\n",
|
||||
" hole_spacing_y: float\n",
|
||||
" hole_diameter: float\n",
|
||||
" info: Optional[str] # 附加信息\n",
|
||||
"\n",
|
||||
"class MaterialPlate(ItemizedResource[MaterialHole]):\n",
|
||||
" \"\"\"料板类 - 4x4个洞位,每个洞位放1个极片\"\"\"\n",
|
||||
" \n",
|
||||
" children: List[MaterialHole]\n",
|
||||
"\n",
|
||||
" def __init__(\n",
|
||||
" self,\n",
|
||||
" name: str,\n",
|
||||
" size_x: float,\n",
|
||||
" size_y: float,\n",
|
||||
" size_z: float,\n",
|
||||
" ordered_items: Optional[Dict[str, MaterialHole]] = None,\n",
|
||||
" ordering: Optional[OrderedDict[str, str]] = None,\n",
|
||||
" category: str = \"material_plate\",\n",
|
||||
" model: Optional[str] = None,\n",
|
||||
" fill: bool = False\n",
|
||||
" ):\n",
|
||||
" \"\"\"初始化料板\n",
|
||||
"\n",
|
||||
" Args:\n",
|
||||
" name: 料板名称\n",
|
||||
" size_x: 长度 (mm)\n",
|
||||
" size_y: 宽度 (mm)\n",
|
||||
" size_z: 高度 (mm)\n",
|
||||
" hole_diameter: 洞直径 (mm)\n",
|
||||
" hole_depth: 洞深度 (mm)\n",
|
||||
" hole_spacing_x: X方向洞位间距 (mm)\n",
|
||||
" hole_spacing_y: Y方向洞位间距 (mm)\n",
|
||||
" number: 编号\n",
|
||||
" category: 类别\n",
|
||||
" model: 型号\n",
|
||||
" \"\"\"\n",
|
||||
" self._unilabos_state: MaterialPlateState = MaterialPlateState(\n",
|
||||
" hole_spacing_x=24.0,\n",
|
||||
" hole_spacing_y=24.0,\n",
|
||||
" hole_diameter=20.0,\n",
|
||||
" info=\"\",\n",
|
||||
" )\n",
|
||||
" # 创建4x4的洞位\n",
|
||||
" # TODO: 这里要改,对应不同形状\n",
|
||||
" holes = create_ordered_items_2d(\n",
|
||||
" klass=MaterialHole,\n",
|
||||
" num_items_x=4,\n",
|
||||
" num_items_y=4,\n",
|
||||
" dx=(size_x - 4 * self._unilabos_state[\"hole_spacing_x\"]) / 2, # 居中\n",
|
||||
" dy=(size_y - 4 * self._unilabos_state[\"hole_spacing_y\"]) / 2, # 居中\n",
|
||||
" dz=size_z,\n",
|
||||
" item_dx=self._unilabos_state[\"hole_spacing_x\"],\n",
|
||||
" item_dy=self._unilabos_state[\"hole_spacing_y\"],\n",
|
||||
" size_x = 16,\n",
|
||||
" size_y = 16,\n",
|
||||
" size_z = 16,\n",
|
||||
" )\n",
|
||||
" if fill:\n",
|
||||
" super().__init__(\n",
|
||||
" name=name,\n",
|
||||
" size_x=size_x,\n",
|
||||
" size_y=size_y,\n",
|
||||
" size_z=size_z,\n",
|
||||
" ordered_items=holes,\n",
|
||||
" category=category,\n",
|
||||
" model=model,\n",
|
||||
" )\n",
|
||||
" else:\n",
|
||||
" super().__init__(\n",
|
||||
" name=name,\n",
|
||||
" size_x=size_x,\n",
|
||||
" size_y=size_y,\n",
|
||||
" size_z=size_z,\n",
|
||||
" ordered_items=ordered_items,\n",
|
||||
" ordering=ordering,\n",
|
||||
" category=category,\n",
|
||||
" model=model,\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
" def update_locations(self):\n",
|
||||
" # TODO:调多次相加\n",
|
||||
" holes = create_ordered_items_2d(\n",
|
||||
" klass=MaterialHole,\n",
|
||||
" num_items_x=4,\n",
|
||||
" num_items_y=4,\n",
|
||||
" dx=(self._size_x - 3 * self._unilabos_state[\"hole_spacing_x\"]) / 2, # 居中\n",
|
||||
" dy=(self._size_y - 3 * self._unilabos_state[\"hole_spacing_y\"]) / 2, # 居中\n",
|
||||
" dz=self._size_z,\n",
|
||||
" item_dx=self._unilabos_state[\"hole_spacing_x\"],\n",
|
||||
" item_dy=self._unilabos_state[\"hole_spacing_y\"],\n",
|
||||
" size_x = 1,\n",
|
||||
" size_y = 1,\n",
|
||||
" size_z = 1,\n",
|
||||
" )\n",
|
||||
" for item, original_item in zip(holes.items(), self.children):\n",
|
||||
" original_item.location = item[1].location"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 25,
|
||||
"id": "8318ccca",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"class CoincellDeck(Deck):\n",
|
||||
" \"\"\"纽扣电池组装工作站台面类\"\"\"\n",
|
||||
"\n",
|
||||
" def __init__(\n",
|
||||
" self,\n",
|
||||
" name: str = \"coin_cell_deck\",\n",
|
||||
" size_x: float = 1620.0, # 3.66m\n",
|
||||
" size_y: float = 1270.0, # 1.23m\n",
|
||||
" size_z: float = 500.0,\n",
|
||||
" origin: Coordinate = Coordinate(0, 0, 0),\n",
|
||||
" category: str = \"coin_cell_deck\",\n",
|
||||
" ):\n",
|
||||
" \"\"\"初始化纽扣电池组装工作站台面\n",
|
||||
"\n",
|
||||
" Args:\n",
|
||||
" name: 台面名称\n",
|
||||
" size_x: 长度 (mm) - 3.66m\n",
|
||||
" size_y: 宽度 (mm) - 1.23m\n",
|
||||
" size_z: 高度 (mm)\n",
|
||||
" origin: 原点坐标\n",
|
||||
" category: 类别\n",
|
||||
" \"\"\"\n",
|
||||
" super().__init__(\n",
|
||||
" name=name,\n",
|
||||
" size_x=size_x,\n",
|
||||
" size_y=size_y,\n",
|
||||
" size_z=size_z,\n",
|
||||
" origin=origin,\n",
|
||||
" category=category,\n",
|
||||
" )"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"id": "c73bae21",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import json"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 17,
|
||||
"id": "3369a1dd",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"def upload_resources_to_unilab(wuliao: List[Resource]):\n",
|
||||
" from unilabos.resources.graphio import convert_resources_from_type\n",
|
||||
" from unilabos.config.config import BasicConfig \n",
|
||||
" BasicConfig.ak = \"beb0c15f-2279-46a1-aba5-00eaf89aef55\"\n",
|
||||
" BasicConfig.sk = \"15d4f25e-3512-4f9c-9bfb-43ab85e7b561\"\n",
|
||||
" from unilabos.app.web.client import http_client\n",
|
||||
" resources = convert_resources_from_type(wuliao, [Resource])\n",
|
||||
" json.dump({\"nodes\": resources, \"links\": []}, open(\"button_battery_station_resources_unilab.json\", \"w\"), indent=2)\n",
|
||||
" \n",
|
||||
" #print(resources)\n",
|
||||
" http_client.remote_addr = \"https://uni-lab.test.bohrium.com/api/v1\"\n",
|
||||
" \n",
|
||||
" http_client.resource_add(resources)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 29,
|
||||
"id": "1543ddab",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"liaopan1 = MaterialPlate(name=\"liaopan1\", size_x=120.8, size_y=120.5, size_z=10.0, fill=True)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 30,
|
||||
"id": "b732754a",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"MaterialPlate(name=liaopan1, size_x=120.8, size_y=120.5, size_z=10.0, location=None)\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"print(liaopan1)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 31,
|
||||
"id": "7e6e7252",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"[MaterialHole(name=liaopan1_materialhole_0_0, location=Coordinate(012.400, 084.250, 010.000), size_x=16, size_y=16, size_z=16, category=material_hole), MaterialHole(name=liaopan1_materialhole_0_1, location=Coordinate(012.400, 060.250, 010.000), size_x=16, size_y=16, size_z=16, category=material_hole), MaterialHole(name=liaopan1_materialhole_0_2, location=Coordinate(012.400, 036.250, 010.000), size_x=16, size_y=16, size_z=16, category=material_hole), MaterialHole(name=liaopan1_materialhole_0_3, location=Coordinate(012.400, 012.250, 010.000), size_x=16, size_y=16, size_z=16, category=material_hole), MaterialHole(name=liaopan1_materialhole_1_0, location=Coordinate(036.400, 084.250, 010.000), size_x=16, size_y=16, size_z=16, category=material_hole), MaterialHole(name=liaopan1_materialhole_1_1, location=Coordinate(036.400, 060.250, 010.000), size_x=16, size_y=16, size_z=16, category=material_hole), MaterialHole(name=liaopan1_materialhole_1_2, location=Coordinate(036.400, 036.250, 010.000), size_x=16, size_y=16, size_z=16, category=material_hole), MaterialHole(name=liaopan1_materialhole_1_3, location=Coordinate(036.400, 012.250, 010.000), size_x=16, size_y=16, size_z=16, category=material_hole), MaterialHole(name=liaopan1_materialhole_2_0, location=Coordinate(060.400, 084.250, 010.000), size_x=16, size_y=16, size_z=16, category=material_hole), MaterialHole(name=liaopan1_materialhole_2_1, location=Coordinate(060.400, 060.250, 010.000), size_x=16, size_y=16, size_z=16, category=material_hole), MaterialHole(name=liaopan1_materialhole_2_2, location=Coordinate(060.400, 036.250, 010.000), size_x=16, size_y=16, size_z=16, category=material_hole), MaterialHole(name=liaopan1_materialhole_2_3, location=Coordinate(060.400, 012.250, 010.000), size_x=16, size_y=16, size_z=16, category=material_hole), MaterialHole(name=liaopan1_materialhole_3_0, location=Coordinate(084.400, 084.250, 010.000), size_x=16, size_y=16, size_z=16, category=material_hole), MaterialHole(name=liaopan1_materialhole_3_1, location=Coordinate(084.400, 060.250, 010.000), size_x=16, size_y=16, size_z=16, category=material_hole), MaterialHole(name=liaopan1_materialhole_3_2, location=Coordinate(084.400, 036.250, 010.000), size_x=16, size_y=16, size_z=16, category=material_hole), MaterialHole(name=liaopan1_materialhole_3_3, location=Coordinate(084.400, 012.250, 010.000), size_x=16, size_y=16, size_z=16, category=material_hole)]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"print(liaopan1.children)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 26,
|
||||
"id": "836ff68d",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stderr",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"\u001b[37m25-09-22 [15:15:08,950]\u001b[0m \u001b[1;36m[DEBUG]\u001b[0m \u001b[37mStarting new HTTPS connection (1): uni-lab.test.bohrium.com:443\u001b[37m [_new_conn:1049] [urllib3.connectionpool.connectionpool]\u001b[0m\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"CoincellDeck(name=coin_cell_deck, location=Coordinate(000.000, 000.000, 000.000), size_x=1620.0, size_y=1270.0, size_z=500.0, category=coin_cell_deck)\n",
|
||||
"转换pylabrobot的时候,出现未知类型 electrode_sheet\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 electrode_sheet\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 electrode_sheet\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 electrode_sheet\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 electrode_sheet\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 electrode_sheet\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 electrode_sheet\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 electrode_sheet\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 electrode_sheet\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 electrode_sheet\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 electrode_sheet\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 electrode_sheet\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 electrode_sheet\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 electrode_sheet\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 electrode_sheet\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 electrode_sheet\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_plate\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_plate\n",
|
||||
"转换pylabrobot的时候,出现未知类型 coin_cell_deck\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "stderr",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"\u001b[37m25-09-22 [15:15:09,218]\u001b[0m \u001b[1;36m[DEBUG]\u001b[0m \u001b[37mhttps://uni-lab.test.bohrium.com:443 \"POST /api/v1/lab/material HTTP/1.1\" 200 10\u001b[37m [_make_request:544] [urllib3.connectionpool.connectionpool]\u001b[0m\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"deck = CoincellDeck()\n",
|
||||
"#创建一个4*4的物料板\n",
|
||||
"liaopan1 = MaterialPlate(name=\"liaopan1\", size_x=120.8, size_y=120.5, size_z=10.0, fill=True)\n",
|
||||
"#把物料板放到桌子上\n",
|
||||
"deck.assign_child_resource(liaopan1, Coordinate(x=0, y=0, z=0))\n",
|
||||
"#创建一个极片\n",
|
||||
"for i in range(16):\n",
|
||||
" jipian = ElectrodeSheet(name=f\"jipian_{i}\", size_x= 12, size_y=12, size_z=0.1)\n",
|
||||
" liaopan1.children[i].assign_child_resource(jipian, location=None)\n",
|
||||
"#创建一个4*4的物料板\n",
|
||||
"liaopan2 = MaterialPlate(name=\"liaopan2\", size_x=120.8, size_y=120.5, size_z=10.0, fill=True)\n",
|
||||
"#把物料板放到桌子上\n",
|
||||
"deck.assign_child_resource(liaopan2, Coordinate(x=500, y=0, z=0))\n",
|
||||
"#liaopan.children[3].assign_child_resource(jipian, location=None)\n",
|
||||
"print(deck)\n",
|
||||
"\n",
|
||||
"upload_resources_to_unilab([deck])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 20,
|
||||
"id": "00aab9cf",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"MaterialPlate(name=liaopan1, size_x=120.8, size_y=120.5, size_z=10.0, location=Coordinate(000.000, 000.000, 000.000))\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"liaopan1 = deck.get_resource(\"liaopan1\")\n",
|
||||
"print(liaopan1)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "7409969c",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"liaopan1 = deck.get_resource(\"liaopan1\")\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "096dde04",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"print()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 27,
|
||||
"id": "5528df96",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stderr",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"\u001b[37m25-09-22 [15:17:44,322]\u001b[0m \u001b[1;36m[DEBUG]\u001b[0m \u001b[37mStarting new HTTPS connection (1): uni-lab.test.bohrium.com:443\u001b[37m [_new_conn:1049] [urllib3.connectionpool.connectionpool]\u001b[0m\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"ElectrodeSheet(name=jipian_1, location=None, size_x=12, size_y=12, size_z=0.1, category=electrode_sheet)\n",
|
||||
"转换pylabrobot的时候,出现未知类型 electrode_sheet\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 electrode_sheet\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 electrode_sheet\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 electrode_sheet\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 electrode_sheet\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 electrode_sheet\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 electrode_sheet\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 electrode_sheet\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 electrode_sheet\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 electrode_sheet\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 electrode_sheet\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 electrode_sheet\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 electrode_sheet\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 electrode_sheet\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 electrode_sheet\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_plate\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 electrode_sheet\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_plate\n",
|
||||
"转换pylabrobot的时候,出现未知类型 coin_cell_deck\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "stderr",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"\u001b[37m25-09-22 [15:17:44,599]\u001b[0m \u001b[1;36m[DEBUG]\u001b[0m \u001b[37mhttps://uni-lab.test.bohrium.com:443 \"POST /api/v1/lab/material HTTP/1.1\" 200 10\u001b[37m [_make_request:544] [urllib3.connectionpool.connectionpool]\u001b[0m\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"#在台面上找到料盘和极片\n",
|
||||
"liaopan1 = deck.get_resource(\"liaopan1\")\n",
|
||||
"liaopan2 = deck.get_resource(\"liaopan2\")\n",
|
||||
"jipian1 = liaopan1.children[1].children[0]\n",
|
||||
"#\n",
|
||||
"print(jipian1)\n",
|
||||
"#把物料解绑后放到另一盘上\n",
|
||||
"jipian1.parent.unassign_child_resource(jipian1)\n",
|
||||
"liaopan2.children[1].assign_child_resource(jipian1, location=None)\n",
|
||||
"#print(jipian2.parent)\n",
|
||||
"upload_resources_to_unilab([deck])"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "43736700",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stderr",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"\u001b[37m25-09-22 [14:31:50,027]\u001b[0m \u001b[1;36m[DEBUG]\u001b[0m \u001b[37mStarting new HTTPS connection (1): uni-lab.test.bohrium.com:443\u001b[37m [_new_conn:1049] [urllib3.connectionpool.connectionpool]\u001b[0m\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"转换pylabrobot的时候,出现未知类型 electrode_sheet\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 electrode_sheet\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 electrode_sheet\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 electrode_sheet\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 electrode_sheet\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 electrode_sheet\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 electrode_sheet\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 electrode_sheet\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 electrode_sheet\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 electrode_sheet\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 electrode_sheet\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 electrode_sheet\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 electrode_sheet\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 electrode_sheet\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 electrode_sheet\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_plate\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 electrode_sheet\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_hole\n",
|
||||
"转换pylabrobot的时候,出现未知类型 material_plate\n",
|
||||
"转换pylabrobot的时候,出现未知类型 coin_cell_deck\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "stderr",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"\u001b[37m25-09-22 [14:31:50,358]\u001b[0m \u001b[1;36m[DEBUG]\u001b[0m \u001b[37mhttps://uni-lab.test.bohrium.com:443 \"POST /api/v1/lab/material HTTP/1.1\" 200 10\u001b[37m [_make_request:544] [urllib3.connectionpool.connectionpool]\u001b[0m\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"<Response [200]>"
|
||||
]
|
||||
},
|
||||
"execution_count": 16,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "unilab",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.11.11"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 5
|
||||
}
|
||||
Reference in New Issue
Block a user