Files
Uni-Lab-OS/unilabos/devices/workstation/coin_cell_assembly/test.ipynb
calvincao 2901d72b4b 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.
2025-10-25 13:50:41 +08:00

751 lines
33 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"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进行读写当前类用来表示这个物料的长宽高大小的属性而datastate用来表示物料的内容细节等\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进行读写当前类用来表示这个物料的长宽高大小的属性而datastate用来表示物料的内容细节等\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
}