组态图概述
组态图是Uni-Lab-OS的核心配置机制,它将实验室的物理结构转换为系统可理解的数据结构,定义了设备、物料及其相互关系的完整图形化表示。通过组态图,开发者可以声明式地定义复杂的实验室拓扑,系统会自动处理设备初始化、资源管理和通信配置。组态图的设计体现了 Uni-Lab-OS 的模块化和可扩展性理念。
核心功能模块
组态图管理
- 设备/物料配置管理:管理图中节点的参数配置
- 层级关系管理:处理工作站包含子设备、物料耗材的父子关系
- 物理连接关系:管理流体管路连接、AGV/机械臂/直线模组转运连接
- 通信转接关系:处理IO设备通过IO板卡或PLC转为Modbus等通信协议
图形数据处理
- 多格式支持:支持JSON和GraphML格式的组态图文件
- 图形转换:提供节点链接数据的标准化处理
- 资源初始化:将配置转换为可执行的资源实例
协议编译系统
- 泵传输协议:基于图结构进行路径规划的流体传输
- 分离协议:液液萃取和相分离控制
- 清洗协议:容器清洗程序生成
- 蒸发协议:旋转蒸发仪操作控制
设备抽象层
- 设备注册表:统一管理不同厂家和类型的实验仪器
- 通信中间件:基于ROS2的设备间通信
- 动作映射:将设备驱动映射到标准动作指令
技术架构
系统启动流程
系统通过unilab命令启动,支持组态图文件或分离的设备/资源配置:
# 使用组态图启动
unilab -g path/to/graph.json
配置文件结构
组态图采用节点-链接结构,包含设备层级关系和物理连接
用户场景
实验室配置场景
- 流动化学实验室:单台电脑通过串口控制所有设备
- 大型分布式实验室:多台工控机组成分布式系统
协议执行场景
系统将高级实验操作编译为具体设备指令序列,实现从"移液2000mL"到具体泵阀控制指令的转换。
接收“移液”动作,编译为一系列泵指令和阀指令
Goal received: {
'from_vessel': 'flask_acetone',
'to_vessel': 'reactor',
'volume': 2000.0,
'flowrate': 100.0
}, running steps:
[
{
"device_id": "pump_reagents",
"action_name": "set_valve_position",
"action_kwargs": {"command": "3"}
},
{
"device_id": "pump_reagents",
"action_name": "set_position",
"action_kwargs": {
"position": 2000.0,
"max_velocity": 100.0
}
},
{
"device_id": "pump_reagents",
"action_name": "set_valve_position",
"action_kwargs": {"command": '5'}
},
{
"device_id": "pump_reagents",
"action_name": "set_position",
"action_kwargs": {
"position": 0.0,
"max_velocity": 100.0
}
}
]
技术要求
支持的文件格式
- JSON (node-link格式)
- GraphML (yEd兼容)
通信协议
- ROS2作为主要通信中间件
- MQTT用于云端连接
- HTTP用于Web界面
设备兼容性
- Python类设备驱动
- C#类设备驱动
- 串口通信设备
- Modbus协议设备