mirror of
https://github.com/dptech-corp/Uni-Lab-OS.git
synced 2026-02-04 05:15:10 +00:00
支持local_config启动 添加注册表description字段 (#13)
Closes #11 * Update README and MQTTClient for installation instructions and code improvements * feat: 支持local_config启动 add: 增加对crt path的说明,为传入config.py的相对路径 move: web component * add: registry description --------- Co-authored-by: Harvey Que <Q-Query@outlook.com>
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -229,6 +229,6 @@ CATKIN_IGNORE
|
|||||||
|
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
|
||||||
local_config.py
|
/**/local_config.py
|
||||||
|
|
||||||
*.graphml
|
*.graphml
|
||||||
@@ -1 +1,3 @@
|
|||||||
recursive-include unilabos/registry *.yaml
|
recursive-include unilabos/registry *.yaml
|
||||||
|
recursive-include unilabos/app/web *.html
|
||||||
|
recursive-include unilabos/app/web *.css
|
||||||
|
|||||||
@@ -46,9 +46,9 @@ class MQConfig:
|
|||||||
port: int = 8883
|
port: int = 8883
|
||||||
|
|
||||||
# 可以直接提供证书文件路径
|
# 可以直接提供证书文件路径
|
||||||
ca_file: str = "/path/to/ca.pem"
|
ca_file: str = "/path/to/ca.pem" # 相对config.py所在目录的路径
|
||||||
cert_file: str = "/path/to/cert.pem"
|
cert_file: str = "/path/to/cert.pem" # 相对config.py所在目录的路径
|
||||||
key_file: str = "/path/to/key.pem"
|
key_file: str = "/path/to/key.pem" # 相对config.py所在目录的路径
|
||||||
|
|
||||||
# 或者直接提供证书内容
|
# 或者直接提供证书内容
|
||||||
ca_content: str = ""
|
ca_content: str = ""
|
||||||
@@ -102,6 +102,8 @@ class ROSConfig:
|
|||||||
unilab --config path/to/your/config.py
|
unilab --config path/to/your/config.py
|
||||||
```
|
```
|
||||||
|
|
||||||
|
如果您不涉及多环境开发,可以在unilabos的安装路径中手动添加local_config.py的文件
|
||||||
|
|
||||||
# 启动Uni-Lab
|
# 启动Uni-Lab
|
||||||
python -m unilabos.app.main --config path/to/your/config.py
|
python -m unilabos.app.main --config path/to/your/config.py
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -69,14 +69,17 @@ def main():
|
|||||||
args_dict = vars(args)
|
args_dict = vars(args)
|
||||||
|
|
||||||
# 加载配置文件 - 这里保持最先加载配置的逻辑
|
# 加载配置文件 - 这里保持最先加载配置的逻辑
|
||||||
if args_dict.get("config"):
|
config_path = args_dict.get("config")
|
||||||
config_path = args_dict["config"]
|
if config_path:
|
||||||
if not os.path.exists(config_path):
|
if not os.path.exists(config_path):
|
||||||
print_status(f"配置文件 {config_path} 不存在", "error")
|
print_status(f"配置文件 {config_path} 不存在", "error")
|
||||||
elif not config_path.endswith(".py"):
|
elif not config_path.endswith(".py"):
|
||||||
print_status(f"配置文件 {config_path} 不是Python文件,必须以.py结尾", "error")
|
print_status(f"配置文件 {config_path} 不是Python文件,必须以.py结尾", "error")
|
||||||
else:
|
else:
|
||||||
load_config(config_path)
|
load_config(config_path)
|
||||||
|
else:
|
||||||
|
print_status(f"启动 UniLab-OS时,配置文件参数未正确传入 --config '{config_path}' 尝试本地配置...", "warning")
|
||||||
|
load_config(config_path)
|
||||||
|
|
||||||
# 设置BasicConfig参数
|
# 设置BasicConfig参数
|
||||||
BasicConfig.is_host_mode = not args_dict.get("without_host", False)
|
BasicConfig.is_host_mode = not args_dict.get("without_host", False)
|
||||||
@@ -92,8 +95,8 @@ def main():
|
|||||||
from unilabos.app.mq import mqtt_client
|
from unilabos.app.mq import mqtt_client
|
||||||
from unilabos.registry.registry import build_registry
|
from unilabos.registry.registry import build_registry
|
||||||
from unilabos.app.backend import start_backend
|
from unilabos.app.backend import start_backend
|
||||||
from unilabos.web import http_client
|
from unilabos.app.web import http_client
|
||||||
from unilabos.web import start_server
|
from unilabos.app.web import start_server
|
||||||
|
|
||||||
# 显示启动横幅
|
# 显示启动横幅
|
||||||
print_unilab_banner(args_dict)
|
print_unilab_banner(args_dict)
|
||||||
|
|||||||
@@ -4,10 +4,10 @@ Web UI 模块
|
|||||||
提供了UniLab系统的Web界面功能
|
提供了UniLab系统的Web界面功能
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from unilabos.web.pages import setup_web_pages
|
from unilabos.app.web.pages import setup_web_pages
|
||||||
from unilabos.web.server import setup_server, start_server
|
from unilabos.app.web.server import setup_server, start_server
|
||||||
from unilabos.web.client import http_client
|
from unilabos.app.web.client import http_client
|
||||||
from unilabos.web.api import setup_api_routes
|
from unilabos.app.web.api import setup_api_routes
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
"setup_web_pages", # 设置Web页面
|
"setup_web_pages", # 设置Web页面
|
||||||
@@ -18,7 +18,7 @@ from unilabos.app.model import (
|
|||||||
JobPreintakeFinishReq,
|
JobPreintakeFinishReq,
|
||||||
JobFinishReq,
|
JobFinishReq,
|
||||||
)
|
)
|
||||||
from unilabos.web.utils.host_utils import get_host_node_info
|
from unilabos.app.web.utils.host_utils import get_host_node_info
|
||||||
|
|
||||||
# 创建API路由器
|
# 创建API路由器
|
||||||
api = APIRouter()
|
api = APIRouter()
|
||||||
@@ -20,9 +20,9 @@ from unilabos.app.mq import mqtt_client
|
|||||||
from unilabos.ros.msgs.message_converter import msg_converter_manager
|
from unilabos.ros.msgs.message_converter import msg_converter_manager
|
||||||
from unilabos.utils.log import error
|
from unilabos.utils.log import error
|
||||||
from unilabos.utils.type_check import TypeEncoder
|
from unilabos.utils.type_check import TypeEncoder
|
||||||
from unilabos.web.utils.device_utils import get_registry_info
|
from unilabos.app.web.utils.device_utils import get_registry_info
|
||||||
from unilabos.web.utils.host_utils import get_host_node_info
|
from unilabos.app.web.utils.host_utils import get_host_node_info
|
||||||
from unilabos.web.utils.ros_utils import get_ros_node_info, update_ros_node_info
|
from unilabos.app.web.utils.ros_utils import get_ros_node_info, update_ros_node_info
|
||||||
|
|
||||||
# 设置Jinja2模板环境
|
# 设置Jinja2模板环境
|
||||||
template_dir = Path(__file__).parent / "templates"
|
template_dir = Path(__file__).parent / "templates"
|
||||||
@@ -13,8 +13,8 @@ from starlette.responses import Response
|
|||||||
|
|
||||||
from unilabos.utils.fastapi.log_adapter import setup_fastapi_logging
|
from unilabos.utils.fastapi.log_adapter import setup_fastapi_logging
|
||||||
from unilabos.utils.log import info, error
|
from unilabos.utils.log import info, error
|
||||||
from unilabos.web.api import setup_api_routes
|
from unilabos.app.web.api import setup_api_routes
|
||||||
from unilabos.web.pages import setup_web_pages
|
from unilabos.app.web.pages import setup_web_pages
|
||||||
|
|
||||||
# 创建FastAPI应用
|
# 创建FastAPI应用
|
||||||
app = FastAPI(
|
app = FastAPI(
|
||||||
@@ -9,7 +9,7 @@ from typing import Dict, Any
|
|||||||
|
|
||||||
from unilabos.config.config import BasicConfig
|
from unilabos.config.config import BasicConfig
|
||||||
from unilabos.ros.nodes.presets.host_node import HostNode
|
from unilabos.ros.nodes.presets.host_node import HostNode
|
||||||
from unilabos.web.utils.action_utils import get_action_info
|
from unilabos.app.web.utils.action_utils import get_action_info
|
||||||
|
|
||||||
|
|
||||||
def get_host_node_info() -> Dict[str, Any]:
|
def get_host_node_info() -> Dict[str, Any]:
|
||||||
@@ -7,7 +7,7 @@ ROS 工具函数模块
|
|||||||
import traceback
|
import traceback
|
||||||
from typing import Dict, Any
|
from typing import Dict, Any
|
||||||
|
|
||||||
from unilabos.web.utils.action_utils import get_action_info
|
from unilabos.app.web.utils.action_utils import get_action_info
|
||||||
|
|
||||||
# 存储 ROS 节点信息的全局变量
|
# 存储 ROS 节点信息的全局变量
|
||||||
ros_node_info = {"online_devices": {}, "device_topics": {}, "device_actions": {}}
|
ros_node_info = {"online_devices": {}, "device_topics": {}, "device_actions": {}}
|
||||||
@@ -28,9 +28,9 @@ class MQConfig:
|
|||||||
key_content = ""
|
key_content = ""
|
||||||
|
|
||||||
# 指定
|
# 指定
|
||||||
ca_file = ""
|
ca_file = "" # 相对config.py所在目录的路径
|
||||||
cert_file = ""
|
cert_file = "" # 相对config.py所在目录的路径
|
||||||
key_file = ""
|
key_file = "" # 相对config.py所在目录的路径
|
||||||
|
|
||||||
|
|
||||||
# OSS上传配置
|
# OSS上传配置
|
||||||
@@ -97,7 +97,7 @@ def load_config(config_path=None):
|
|||||||
BasicConfig.config_path = os.path.abspath(os.path.dirname(config_path))
|
BasicConfig.config_path = os.path.abspath(os.path.dirname(config_path))
|
||||||
if not os.path.exists(config_path):
|
if not os.path.exists(config_path):
|
||||||
logger.error(f"配置文件 {config_path} 不存在")
|
logger.error(f"配置文件 {config_path} 不存在")
|
||||||
return
|
exit(1)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
module_name = "lab_" + os.path.basename(config_path).replace(".py", "")
|
module_name = "lab_" + os.path.basename(config_path).replace(".py", "")
|
||||||
@@ -114,10 +114,5 @@ def load_config(config_path=None):
|
|||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
exit(1)
|
exit(1)
|
||||||
else:
|
else:
|
||||||
try:
|
config_path = os.path.join(os.path.dirname(__file__), "local_config.py")
|
||||||
import unilabos.config.local_config as local_config # type: ignore
|
load_config(config_path)
|
||||||
|
|
||||||
_update_config_from_module(local_config)
|
|
||||||
logger.info("已加载默认配置 unilabos.config.local_config")
|
|
||||||
except ImportError:
|
|
||||||
pass
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
io_snrd:
|
io_snrd:
|
||||||
|
description: IO Board with 16 IOs
|
||||||
class:
|
class:
|
||||||
module: unilabos.device_comms.SRND_16_IO:SRND_16_IO
|
module: unilabos.device_comms.SRND_16_IO:SRND_16_IO
|
||||||
type: python
|
type: python
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
serial:
|
serial:
|
||||||
|
description: Serial communication interface, used when sharing same serial port for multiple devices
|
||||||
class:
|
class:
|
||||||
module: unilabos.ros.nodes.presets:ROS2SerialNode
|
module: unilabos.ros.nodes.presets:ROS2SerialNode
|
||||||
type: ros2
|
type: ros2
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
# 光学表征设备:红外、紫外可见、拉曼等
|
# 光学表征设备:红外、紫外可见、拉曼等
|
||||||
raman_home_made:
|
raman_home_made:
|
||||||
|
description: Raman spectroscopy device
|
||||||
class:
|
class:
|
||||||
module: unilabos.devices.raman_uv.home_made_raman:RamanObj
|
module: unilabos.devices.raman_uv.home_made_raman:RamanObj
|
||||||
type: python
|
type: python
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
liquid_handler:
|
liquid_handler:
|
||||||
|
description: Liquid handler device controlled by pylabrobot
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.liquid_handling:LiquidHandler
|
module: pylabrobot.liquid_handling:LiquidHandler
|
||||||
type: python
|
type: python
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
separator.homemade:
|
separator.homemade:
|
||||||
|
description: Separator device with homemade grbl controller
|
||||||
class:
|
class:
|
||||||
module: unilabos.devices.separator.homemade_grbl_conductivity:Separator_Controller
|
module: unilabos.devices.separator.homemade_grbl_conductivity:Separator_Controller
|
||||||
type: python
|
type: python
|
||||||
@@ -39,6 +40,7 @@ separator.homemade:
|
|||||||
additionalProperties: false
|
additionalProperties: false
|
||||||
|
|
||||||
rotavap.one:
|
rotavap.one:
|
||||||
|
description: Rotavap device
|
||||||
class:
|
class:
|
||||||
module: unilabos.devices.rotavap.rotavap_one:RotavapOne
|
module: unilabos.devices.rotavap.rotavap_one:RotavapOne
|
||||||
type: python
|
type: python
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
syringe_pump_with_valve.runze:
|
syringe_pump_with_valve.runze:
|
||||||
|
description: Runze Syringe pump with valve
|
||||||
class:
|
class:
|
||||||
module: unilabos.devices.pump_and_valve.runze_backbone:RunzeSyringePump
|
module: unilabos.devices.pump_and_valve.runze_backbone:RunzeSyringePump
|
||||||
type: python
|
type: python
|
||||||
@@ -25,11 +26,13 @@ syringe_pump_with_valve.runze:
|
|||||||
|
|
||||||
|
|
||||||
solenoid_valve.mock:
|
solenoid_valve.mock:
|
||||||
|
description: Mock solenoid valve
|
||||||
class:
|
class:
|
||||||
module: unilabos.devices.pump_and_valve.solenoid_valve_mock:SolenoidValveMock
|
module: unilabos.devices.pump_and_valve.solenoid_valve_mock:SolenoidValveMock
|
||||||
type: python
|
type: python
|
||||||
|
|
||||||
solenoid_valve:
|
solenoid_valve:
|
||||||
|
description: Solenoid valve
|
||||||
class:
|
class:
|
||||||
module: unilabos.devices.pump_and_valve.solenoid_valve:SolenoidValve
|
module: unilabos.devices.pump_and_valve.solenoid_valve:SolenoidValve
|
||||||
type: python
|
type: python
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
# 仙工智能底盘(知行使用)
|
# 仙工智能底盘(知行使用)
|
||||||
agv.SEER:
|
agv.SEER:
|
||||||
|
description: SEER AGV
|
||||||
class:
|
class:
|
||||||
module: unilabos.devices.agv.agv_navigator:AgvNavigator
|
module: unilabos.devices.agv.agv_navigator:AgvNavigator
|
||||||
type: python
|
type: python
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
robotic_arm.UR:
|
robotic_arm.UR:
|
||||||
|
description: UR robotic arm
|
||||||
class:
|
class:
|
||||||
module: unilabos.devices.agv.ur_arm_task:UrArmTask
|
module: unilabos.devices.agv.ur_arm_task:UrArmTask
|
||||||
type: python
|
type: python
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
gripper.mock:
|
gripper.mock:
|
||||||
|
description: Mock gripper
|
||||||
class:
|
class:
|
||||||
module: unilabos.devices.gripper.mock:MockGripper
|
module: unilabos.devices.gripper.mock:MockGripper
|
||||||
type: python
|
type: python
|
||||||
@@ -21,6 +22,7 @@ gripper.mock:
|
|||||||
|
|
||||||
|
|
||||||
gripper.misumi_rz:
|
gripper.misumi_rz:
|
||||||
|
description: Misumi RZ gripper
|
||||||
class:
|
class:
|
||||||
module: unilabos.devices.motor:Grasp.EleGripper
|
module: unilabos.devices.motor:Grasp.EleGripper
|
||||||
type: python
|
type: python
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
linear_motion.grbl:
|
linear_motion.grbl:
|
||||||
|
description: Grbl CNC
|
||||||
class:
|
class:
|
||||||
module: unilabos.devices.cnc.grbl_sync:GrblCNC
|
module: unilabos.devices.cnc.grbl_sync:GrblCNC
|
||||||
type: python
|
type: python
|
||||||
@@ -38,6 +39,7 @@ linear_motion.grbl:
|
|||||||
|
|
||||||
|
|
||||||
motor.iCL42:
|
motor.iCL42:
|
||||||
|
description: iCL42 motor
|
||||||
class:
|
class:
|
||||||
module: unilabos.devices.motor.iCL42:iCL42Driver
|
module: unilabos.devices.motor.iCL42:iCL42Driver
|
||||||
type: python
|
type: python
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
heaterstirrer.dalong:
|
heaterstirrer.dalong:
|
||||||
|
description: DaLong heater stirrer
|
||||||
class:
|
class:
|
||||||
module: unilabos.devices.heaterstirrer.dalong:HeaterStirrer_DaLong
|
module: unilabos.devices.heaterstirrer.dalong:HeaterStirrer_DaLong
|
||||||
type: python
|
type: python
|
||||||
@@ -34,6 +35,7 @@ heaterstirrer.dalong:
|
|||||||
success: success
|
success: success
|
||||||
|
|
||||||
chiller:
|
chiller:
|
||||||
|
description: Chiller
|
||||||
class:
|
class:
|
||||||
module: unilabos.devices.temperature.chiller:Chiller
|
module: unilabos.devices.temperature.chiller:Chiller
|
||||||
type: python
|
type: python
|
||||||
@@ -46,6 +48,7 @@ chiller:
|
|||||||
result:
|
result:
|
||||||
success: success
|
success: success
|
||||||
tempsensor:
|
tempsensor:
|
||||||
|
description: Temperature sensor
|
||||||
class:
|
class:
|
||||||
module: unilabos.devices.temperature.sensor_node:TempSensorNode
|
module: unilabos.devices.temperature.sensor_node:TempSensorNode
|
||||||
type: python
|
type: python
|
||||||
|
|||||||
@@ -1,9 +1,11 @@
|
|||||||
vacuum_pump.mock:
|
vacuum_pump.mock:
|
||||||
|
description: Mock vacuum pump
|
||||||
class:
|
class:
|
||||||
module: unilabos.devices.pump_and_valve.vacuum_pump_mock:VacuumPumpMock
|
module: unilabos.devices.pump_and_valve.vacuum_pump_mock:VacuumPumpMock
|
||||||
type: python
|
type: python
|
||||||
|
|
||||||
gas_source.mock:
|
gas_source.mock:
|
||||||
|
description: Mock gas source
|
||||||
class:
|
class:
|
||||||
module: unilabos.devices.pump_and_valve.vacuum_pump_mock:VacuumPumpMock
|
module: unilabos.devices.pump_and_valve.vacuum_pump_mock:VacuumPumpMock
|
||||||
type: python
|
type: python
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
workstation:
|
workstation:
|
||||||
|
description: Workstation
|
||||||
class:
|
class:
|
||||||
module: unilabos.ros.nodes.presets.protocol_node:ROS2ProtocolNode
|
module: unilabos.ros.nodes.presets.protocol_node:ROS2ProtocolNode
|
||||||
type: ros2
|
type: ros2
|
||||||
|
|||||||
@@ -54,9 +54,9 @@ class Registry:
|
|||||||
if data:
|
if data:
|
||||||
# 为每个资源添加文件路径信息
|
# 为每个资源添加文件路径信息
|
||||||
for resource_id, resource_info in data.items():
|
for resource_id, resource_info in data.items():
|
||||||
# 添加文件路径 - 使用规范化的完整文件路径
|
|
||||||
resource_info["file_path"] = str(file.absolute()).replace("\\", "/")
|
resource_info["file_path"] = str(file.absolute()).replace("\\", "/")
|
||||||
|
if "description" not in resource_info:
|
||||||
|
resource_info["description"] = ""
|
||||||
self.resource_type_registry.update(data)
|
self.resource_type_registry.update(data)
|
||||||
logger.debug(
|
logger.debug(
|
||||||
f"[UniLab Registry] Resource-{current_resource_number} File-{i+1}/{len(files)} "
|
f"[UniLab Registry] Resource-{current_resource_number} File-{i+1}/{len(files)} "
|
||||||
@@ -112,7 +112,8 @@ class Registry:
|
|||||||
for device_id, device_config in data.items():
|
for device_id, device_config in data.items():
|
||||||
# 添加文件路径信息 - 使用规范化的完整文件路径
|
# 添加文件路径信息 - 使用规范化的完整文件路径
|
||||||
device_config["file_path"] = str(file.absolute()).replace("\\", "/")
|
device_config["file_path"] = str(file.absolute()).replace("\\", "/")
|
||||||
|
if "description" not in device_config:
|
||||||
|
device_config["description"] = ""
|
||||||
if "class" in device_config:
|
if "class" in device_config:
|
||||||
# 处理状态类型
|
# 处理状态类型
|
||||||
if "status_types" in device_config["class"]:
|
if "status_types" in device_config["class"]:
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
OTDeck:
|
OTDeck:
|
||||||
|
description: Opentrons deck
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.deck:OTDeck
|
module: pylabrobot.resources.opentrons.deck:OTDeck
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
Opentrons_96_adapter_Vb:
|
Opentrons_96_adapter_Vb:
|
||||||
|
description: Opentrons 96 adapter Vb
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.plate_adapters:Opentrons_96_adapter_Vb
|
module: pylabrobot.resources.opentrons.plate_adapters:Opentrons_96_adapter_Vb
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
@@ -1,74 +1,89 @@
|
|||||||
corning_6_wellplate_16point8ml_flat:
|
corning_6_wellplate_16point8ml_flat:
|
||||||
|
description: Corning 6 wellplate 16.8ml flat
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.plates:corning_6_wellplate_16point8ml_flat
|
module: pylabrobot.resources.opentrons.plates:corning_6_wellplate_16point8ml_flat
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
corning_12_wellplate_6point9ml_flat:
|
corning_12_wellplate_6point9ml_flat:
|
||||||
|
description: Corning 12 wellplate 6.9ml flat
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.plates:corning_12_wellplate_6point9ml_flat
|
module: pylabrobot.resources.opentrons.plates:corning_12_wellplate_6point9ml_flat
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
corning_24_wellplate_3point4ml_flat:
|
corning_24_wellplate_3point4ml_flat:
|
||||||
|
description: Corning 24 wellplate 3.4ml flat
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.plates:corning_24_wellplate_3point4ml_flat
|
module: pylabrobot.resources.opentrons.plates:corning_24_wellplate_3point4ml_flat
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
corning_48_wellplate_1point6ml_flat:
|
corning_48_wellplate_1point6ml_flat:
|
||||||
|
description: Corning 48 wellplate 1.6ml flat
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.plates:corning_48_wellplate_1point6ml_flat
|
module: pylabrobot.resources.opentrons.plates:corning_48_wellplate_1point6ml_flat
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
corning_96_wellplate_360ul_flat:
|
corning_96_wellplate_360ul_flat:
|
||||||
|
description: Corning 96 wellplate 360ul flat
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.plates:corning_96_wellplate_360ul_flat
|
module: pylabrobot.resources.opentrons.plates:corning_96_wellplate_360ul_flat
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
corning_384_wellplate_112ul_flat:
|
corning_384_wellplate_112ul_flat:
|
||||||
|
description: Corning 384 wellplate 112ul flat
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.plates:corning_384_wellplate_112ul_flat
|
module: pylabrobot.resources.opentrons.plates:corning_384_wellplate_112ul_flat
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
nest_96_wellplate_2ml_deep:
|
nest_96_wellplate_2ml_deep:
|
||||||
|
description: Nest 96 wellplate 2ml deep
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.plates:nest_96_wellplate_2ml_deep
|
module: pylabrobot.resources.opentrons.plates:nest_96_wellplate_2ml_deep
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
nest_96_wellplate_200ul_flat:
|
nest_96_wellplate_200ul_flat:
|
||||||
|
description: Nest 96 wellplate 200ul flat
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.plates:nest_96_wellplate_200ul_flat
|
module: pylabrobot.resources.opentrons.plates:nest_96_wellplate_200ul_flat
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
nest_96_wellplate_100ul_pcr_full_skirt:
|
nest_96_wellplate_100ul_pcr_full_skirt:
|
||||||
|
description: Nest 96 wellplate 100ul pcr full skirt
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.plates:nest_96_wellplate_100ul_pcr_full_skirt
|
module: pylabrobot.resources.opentrons.plates:nest_96_wellplate_100ul_pcr_full_skirt
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
appliedbiosystemsmicroamp_384_wellplate_40ul:
|
appliedbiosystemsmicroamp_384_wellplate_40ul:
|
||||||
|
description: Applied Biosystems microamp 384 wellplate 40ul
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.plates:appliedbiosystemsmicroamp_384_wellplate_40ul
|
module: pylabrobot.resources.opentrons.plates:appliedbiosystemsmicroamp_384_wellplate_40ul
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
thermoscientificnunc_96_wellplate_1300ul:
|
thermoscientificnunc_96_wellplate_1300ul:
|
||||||
|
description: Thermoscientific Nunc 96 wellplate 1300ul
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.plates:thermoscientificnunc_96_wellplate_1300ul
|
module: pylabrobot.resources.opentrons.plates:thermoscientificnunc_96_wellplate_1300ul
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
thermoscientificnunc_96_wellplate_2000ul:
|
thermoscientificnunc_96_wellplate_2000ul:
|
||||||
|
description: Thermoscientific Nunc 96 wellplate 2000ul
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.plates:thermoscientificnunc_96_wellplate_2000ul
|
module: pylabrobot.resources.opentrons.plates:thermoscientificnunc_96_wellplate_2000ul
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
usascientific_96_wellplate_2point4ml_deep:
|
usascientific_96_wellplate_2point4ml_deep:
|
||||||
|
description: USAScientific 96 wellplate 2.4ml deep
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.plates:usascientific_96_wellplate_2point4ml_deep
|
module: pylabrobot.resources.opentrons.plates:usascientific_96_wellplate_2point4ml_deep
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
biorad_96_wellplate_200ul_pcr:
|
biorad_96_wellplate_200ul_pcr:
|
||||||
|
description: BioRad 96 wellplate 200ul pcr
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.plates:biorad_96_wellplate_200ul_pcr
|
module: pylabrobot.resources.opentrons.plates:biorad_96_wellplate_200ul_pcr
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
biorad_384_wellplate_50ul:
|
biorad_384_wellplate_50ul:
|
||||||
|
description: BioRad 384 wellplate 50ul
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.plates:biorad_384_wellplate_50ul
|
module: pylabrobot.resources.opentrons.plates:biorad_384_wellplate_50ul
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|||||||
@@ -1,29 +1,35 @@
|
|||||||
agilent_1_reservoir_290ml:
|
agilent_1_reservoir_290ml:
|
||||||
|
description: Agilent 1 reservoir 290ml
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.reserviors:agilent_1_reservoir_290ml
|
module: pylabrobot.resources.opentrons.reserviors:agilent_1_reservoir_290ml
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
axygen_1_reservoir_90ml:
|
axygen_1_reservoir_90ml:
|
||||||
|
description: Axygen 1 reservoir 90ml
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.reserviors:axygen_1_reservoir_90ml
|
module: pylabrobot.resources.opentrons.reserviors:axygen_1_reservoir_90ml
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
nest_12_reservoir_15ml:
|
nest_12_reservoir_15ml:
|
||||||
|
description: Nest 12 reservoir 15ml
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.reserviors:nest_12_reservoir_15ml
|
module: pylabrobot.resources.opentrons.reserviors:nest_12_reservoir_15ml
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
nest_1_reservoir_195ml:
|
nest_1_reservoir_195ml:
|
||||||
|
description: Nest 1 reservoir 195ml
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.reserviors:nest_1_reservoir_195ml
|
module: pylabrobot.resources.opentrons.reserviors:nest_1_reservoir_195ml
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
nest_1_reservoir_290ml:
|
nest_1_reservoir_290ml:
|
||||||
|
description: Nest 1 reservoir 290ml
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.reserviors:nest_1_reservoir_290ml
|
module: pylabrobot.resources.opentrons.reserviors:nest_1_reservoir_290ml
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
usascientific_12_reservoir_22ml:
|
usascientific_12_reservoir_22ml:
|
||||||
|
description: USAScientific 12 reservoir 22ml
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.reserviors:usascientific_12_reservoir_22ml
|
module: pylabrobot.resources.opentrons.reserviors:usascientific_12_reservoir_22ml
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|||||||
@@ -1,64 +1,77 @@
|
|||||||
eppendorf_96_tiprack_1000ul_eptips:
|
eppendorf_96_tiprack_1000ul_eptips:
|
||||||
|
description: Eppendorf 96 tiprack 1000ul eptips
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.tip_racks:eppendorf_96_tiprack_1000ul_eptips
|
module: pylabrobot.resources.opentrons.tip_racks:eppendorf_96_tiprack_1000ul_eptips
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
tipone_96_tiprack_200ul:
|
tipone_96_tiprack_200ul:
|
||||||
|
description: TipOne 96 tiprack 200ul
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.tip_racks:tipone_96_tiprack_200ul
|
module: pylabrobot.resources.opentrons.tip_racks:tipone_96_tiprack_200ul
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
opentrons_96_tiprack_300ul:
|
opentrons_96_tiprack_300ul:
|
||||||
|
description: Opentrons 96 tiprack 300ul
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.tip_racks:opentrons_96_tiprack_300ul
|
module: pylabrobot.resources.opentrons.tip_racks:opentrons_96_tiprack_300ul
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
opentrons_96_tiprack_10ul:
|
opentrons_96_tiprack_10ul:
|
||||||
|
description: Opentrons 96 tiprack 10ul
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.tip_racks:opentrons_96_tiprack_10ul
|
module: pylabrobot.resources.opentrons.tip_racks:opentrons_96_tiprack_10ul
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
opentrons_96_filtertiprack_10ul:
|
opentrons_96_filtertiprack_10ul:
|
||||||
|
description: Opentrons 96 filtertiprack 10ul
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.tip_racks:opentrons_96_filtertiprack_10ul
|
module: pylabrobot.resources.opentrons.tip_racks:opentrons_96_filtertiprack_10ul
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
geb_96_tiprack_10ul:
|
geb_96_tiprack_10ul:
|
||||||
|
description: Geb 96 tiprack 10ul
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.tip_racks:geb_96_tiprack_10ul
|
module: pylabrobot.resources.opentrons.tip_racks:geb_96_tiprack_10ul
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
opentrons_96_filtertiprack_200ul:
|
opentrons_96_filtertiprack_200ul:
|
||||||
|
description: Opentrons 96 filtertiprack 200ul
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.tip_racks:opentrons_96_filtertiprack_200ul
|
module: pylabrobot.resources.opentrons.tip_racks:opentrons_96_filtertiprack_200ul
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
eppendorf_96_tiprack_10ul_eptips:
|
eppendorf_96_tiprack_10ul_eptips:
|
||||||
|
description: Eppendorf 96 tiprack 10ul eptips
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.tip_racks:eppendorf_96_tiprack_10ul_eptips
|
module: pylabrobot.resources.opentrons.tip_racks:eppendorf_96_tiprack_10ul_eptips
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
opentrons_96_tiprack_1000ul:
|
opentrons_96_tiprack_1000ul:
|
||||||
|
description: Opentrons 96 tiprack 1000ul
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.tip_racks:opentrons_96_tiprack_1000ul
|
module: pylabrobot.resources.opentrons.tip_racks:opentrons_96_tiprack_1000ul
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
opentrons_96_tiprack_20ul:
|
opentrons_96_tiprack_20ul:
|
||||||
|
description: Opentrons 96 tiprack 20ul
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.tip_racks:opentrons_96_tiprack_20ul
|
module: pylabrobot.resources.opentrons.tip_racks:opentrons_96_tiprack_20ul
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
opentrons_96_filtertiprack_1000ul:
|
opentrons_96_filtertiprack_1000ul:
|
||||||
|
description: Opentrons 96 filtertiprack 1000ul
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.tip_racks:opentrons_96_filtertiprack_1000ul
|
module: pylabrobot.resources.opentrons.tip_racks:opentrons_96_filtertiprack_1000ul
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
opentrons_96_filtertiprack_20ul:
|
opentrons_96_filtertiprack_20ul:
|
||||||
|
description: Opentrons 96 filtertiprack 20ul
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.tip_racks:opentrons_96_filtertiprack_20ul
|
module: pylabrobot.resources.opentrons.tip_racks:opentrons_96_filtertiprack_20ul
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
geb_96_tiprack_1000ul:
|
geb_96_tiprack_1000ul:
|
||||||
|
description: Geb 96 tiprack 1000ul
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.tip_racks:geb_96_tiprack_1000ul
|
module: pylabrobot.resources.opentrons.tip_racks:geb_96_tiprack_1000ul
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|||||||
@@ -1,99 +1,119 @@
|
|||||||
opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap:
|
opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap:
|
||||||
|
description: Opentrons 24 tuberack eppendorf 2ml safelock snapcap
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.tube_racks:opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap
|
module: pylabrobot.resources.opentrons.tube_racks:opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic:
|
opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic:
|
||||||
|
description: Opentrons 24 tuberack eppendorf 2ml safelock snapcap acrylic
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.tube_racks:opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic
|
module: pylabrobot.resources.opentrons.tube_racks:opentrons_24_tuberack_eppendorf_2ml_safelock_snapcap_acrylic
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
opentrons_6_tuberack_falcon_50ml_conical:
|
opentrons_6_tuberack_falcon_50ml_conical:
|
||||||
|
description: Opentrons 6 tuberack falcon 50ml conical
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.tube_racks:opentrons_6_tuberack_falcon_50ml_conical
|
module: pylabrobot.resources.opentrons.tube_racks:opentrons_6_tuberack_falcon_50ml_conical
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
opentrons_15_tuberack_nest_15ml_conical:
|
opentrons_15_tuberack_nest_15ml_conical:
|
||||||
|
description: Opentrons 15 tuberack nest 15ml conical
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.tube_racks:opentrons_15_tuberack_nest_15ml_conical
|
module: pylabrobot.resources.opentrons.tube_racks:opentrons_15_tuberack_nest_15ml_conical
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
opentrons_24_tuberack_nest_2ml_screwcap:
|
opentrons_24_tuberack_nest_2ml_screwcap:
|
||||||
|
description: Opentrons 24 tuberack nest 2ml screwcap
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.tube_racks:opentrons_24_tuberack_nest_2ml_screwcap
|
module: pylabrobot.resources.opentrons.tube_racks:opentrons_24_tuberack_nest_2ml_screwcap
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic:
|
opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic:
|
||||||
|
description: Opentrons 24 tuberack generic 0.75ml snapcap acrylic
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.tube_racks:opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic
|
module: pylabrobot.resources.opentrons.tube_racks:opentrons_24_tuberack_generic_0point75ml_snapcap_acrylic
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
opentrons_10_tuberack_nest_4x50ml_6x15ml_conical:
|
opentrons_10_tuberack_nest_4x50ml_6x15ml_conical:
|
||||||
|
description: Opentrons 10 tuberack nest 4x50ml 6x15ml conical
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.tube_racks:opentrons_10_tuberack_nest_4x50ml_6x15ml_conical
|
module: pylabrobot.resources.opentrons.tube_racks:opentrons_10_tuberack_nest_4x50ml_6x15ml_conical
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic:
|
opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic:
|
||||||
|
description: Opentrons 10 tuberack falcon 4x50ml 6x15ml conical acrylic
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.tube_racks:opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic
|
module: pylabrobot.resources.opentrons.tube_racks:opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical_acrylic
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
opentrons_24_tuberack_nest_1point5ml_screwcap:
|
opentrons_24_tuberack_nest_1point5ml_screwcap:
|
||||||
|
description: Opentrons 24 tuberack nest 1.5ml screwcap
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.tube_racks:opentrons_24_tuberack_nest_1point5ml_screwcap
|
module: pylabrobot.resources.opentrons.tube_racks:opentrons_24_tuberack_nest_1point5ml_screwcap
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
opentrons_24_tuberack_nest_1point5ml_snapcap:
|
opentrons_24_tuberack_nest_1point5ml_snapcap:
|
||||||
|
description: Opentrons 24 tuberack nest 1.5ml snapcap
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.tube_racks:opentrons_24_tuberack_nest_1point5ml_snapcap
|
module: pylabrobot.resources.opentrons.tube_racks:opentrons_24_tuberack_nest_1point5ml_snapcap
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical:
|
opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical:
|
||||||
|
description: Opentrons 10 tuberack falcon 4x50ml 6x15ml conical
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.tube_racks:opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical
|
module: pylabrobot.resources.opentrons.tube_racks:opentrons_10_tuberack_falcon_4x50ml_6x15ml_conical
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
opentrons_24_tuberack_nest_2ml_snapcap:
|
opentrons_24_tuberack_nest_2ml_snapcap:
|
||||||
|
description: Opentrons 24 tuberack nest 2ml snapcap
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.tube_racks:opentrons_24_tuberack_nest_2ml_snapcap
|
module: pylabrobot.resources.opentrons.tube_racks:opentrons_24_tuberack_nest_2ml_snapcap
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
opentrons_24_tuberack_nest_0point5ml_screwcap:
|
opentrons_24_tuberack_nest_0point5ml_screwcap:
|
||||||
|
description: Opentrons 24 tuberack nest 0.5ml screwcap
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.tube_racks:opentrons_24_tuberack_nest_0point5ml_screwcap
|
module: pylabrobot.resources.opentrons.tube_racks:opentrons_24_tuberack_nest_0point5ml_screwcap
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap:
|
opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap:
|
||||||
|
description: Opentrons 24 tuberack eppendorf 1.5ml safelock snapcap
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.tube_racks:opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap
|
module: pylabrobot.resources.opentrons.tube_racks:opentrons_24_tuberack_eppendorf_1point5ml_safelock_snapcap
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
opentrons_6_tuberack_nest_50ml_conical:
|
opentrons_6_tuberack_nest_50ml_conical:
|
||||||
|
description: Opentrons 6 tuberack nest 50ml conical
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.tube_racks:opentrons_6_tuberack_nest_50ml_conical
|
module: pylabrobot.resources.opentrons.tube_racks:opentrons_6_tuberack_nest_50ml_conical
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
opentrons_15_tuberack_falcon_15ml_conical:
|
opentrons_15_tuberack_falcon_15ml_conical:
|
||||||
|
description: Opentrons 15 tuberack falcon 15ml conical
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.tube_racks:opentrons_15_tuberack_falcon_15ml_conical
|
module: pylabrobot.resources.opentrons.tube_racks:opentrons_15_tuberack_falcon_15ml_conical
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
opentrons_24_tuberack_generic_2ml_screwcap:
|
opentrons_24_tuberack_generic_2ml_screwcap:
|
||||||
|
description: Opentrons 24 tuberack generic 2ml screwcap
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.tube_racks:opentrons_24_tuberack_generic_2ml_screwcap
|
module: pylabrobot.resources.opentrons.tube_racks:opentrons_24_tuberack_generic_2ml_screwcap
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
opentrons_96_well_aluminum_block:
|
opentrons_96_well_aluminum_block:
|
||||||
|
description: Opentrons 96 well aluminum block
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.tube_racks:opentrons_96_well_aluminum_block
|
module: pylabrobot.resources.opentrons.tube_racks:opentrons_96_well_aluminum_block
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
opentrons_24_aluminumblock_generic_2ml_screwcap:
|
opentrons_24_aluminumblock_generic_2ml_screwcap:
|
||||||
|
description: Opentrons 24 aluminumblock generic 2ml screwcap
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.tube_racks:opentrons_24_aluminumblock_generic_2ml_screwcap
|
module: pylabrobot.resources.opentrons.tube_racks:opentrons_24_aluminumblock_generic_2ml_screwcap
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|
||||||
opentrons_24_aluminumblock_nest_1point5ml_snapcap:
|
opentrons_24_aluminumblock_nest_1point5ml_snapcap:
|
||||||
|
description: Opentrons 24 aluminumblock nest 1.5ml snapcap
|
||||||
class:
|
class:
|
||||||
module: pylabrobot.resources.opentrons.tube_racks:opentrons_24_aluminumblock_nest_1point5ml_snapcap
|
module: pylabrobot.resources.opentrons.tube_racks:opentrons_24_aluminumblock_nest_1point5ml_snapcap
|
||||||
type: pylabrobot
|
type: pylabrobot
|
||||||
|
|||||||
Reference in New Issue
Block a user