mirror of
https://github.com/dptech-corp/Uni-Lab-OS.git
synced 2026-02-04 13:25:13 +00:00
Workbench example, adjust log level, and ci check (#220) * TestLatency Return Value Example & gitignore update * Adjust log level & Add workbench virtual example & Add not action decorator & Add check_mode & * Add CI Check Fix/workstation yb revision (#217) * Revert log change & update registry * Revert opcua client & move electrolyte node Workstation yb merge dev ready 260113 (#216) * feat(bioyond): 添加计算实验设计功能,支持化合物配比和滴定比例参数 * feat(bioyond): 添加测量小瓶功能,支持基本参数配置 * feat(bioyond): 添加测量小瓶配置,支持新设备参数 * feat(bioyond): 更新仓库布局和尺寸,支持竖向排列的测量小瓶和试剂存放堆栈 * feat(bioyond): 优化任务创建流程,确保无论成功与否都清理任务队列以避免重复累积 * feat(bioyond): 添加设置反应器温度功能,支持温度范围和异常处理 * feat(bioyond): 调整反应器位置配置,统一坐标格式 * feat(bioyond): 添加调度器启动功能,支持任务队列执行并处理异常 * feat(bioyond): 优化调度器启动功能,添加异常处理并更新相关配置 * feat(opcua): 增强节点ID解析兼容性和数据类型处理 改进节点ID解析逻辑以支持多种格式,包括字符串和数字标识符 添加数据类型转换处理,确保写入值时类型匹配 优化错误提示信息,便于调试节点连接问题 * feat(registry): 新增后处理站的设备配置文件 添加后处理站的YAML配置文件,包含动作映射、状态类型和设备描述 * 添加调度器启动功能,合并物料参数配置,优化物料参数处理逻辑 * 添加从 Bioyond 系统自动同步工作流序列的功能,并更新相关配置 * fix:兼容 BioyondReactionStation 中 workflow_sequence 被重写为 property * fix:同步工作流序列 * feat: remove commented workflow synchronization from `reaction_station.py`. * 添加时间约束功能及相关配置 * fix:自动更新物料缓存功能,添加物料时更新缓存并在删除时移除缓存项 * fix:在添加物料时处理字符串和字典返回值,确保正确更新缓存 * fix:更新奔曜错误处理报送为物料变更报送,调整日志记录和响应消息 * feat:添加实验报告简化功能,去除冗余信息并保留关键信息 * feat: 添加任务状态事件发布功能,监控并报告任务运行、超时、完成和错误状态 * fix: 修复添加物料时数据格式错误 * Refactor bioyond_dispensing_station and reaction_station_bioyond YAML configurations - Removed redundant action value mappings from bioyond_dispensing_station. - Updated goal properties in bioyond_dispensing_station to use enums for target_stack and other parameters. - Changed data types for end_point and start_point in reaction_station_bioyond to use string enums (Start, End). - Simplified descriptions and updated measurement units from μL to mL where applicable. - Removed unused commands from reaction_station_bioyond to streamline the configuration. * fix:Change the material unit from μL to mL * fix:refresh_material_cache * feat: 动态获取工作流步骤ID,优化工作流配置 * feat: 添加清空服务端所有非核心工作流功能 * fix:修复Bottle类的序列化和反序列化方法 * feat:增强材料缓存更新逻辑,支持处理返回数据中的详细信息 * Add debug log * feat(workstation): update bioyond config migration and coin cell material search logic - Migrate bioyond_cell config to JSON structure and remove global variable dependencies - Implement material search confirmation dialog auto-handling - Add documentation: 20260113_物料搜寻确认弹窗自动处理功能.md and 20260113_配置迁移修改总结.md * Refactor module paths for Bioyond devices in YAML configuration files - Updated the module path for BioyondDispensingStation in bioyond_dispensing_station.yaml to reflect the new directory structure. - Updated the module path for BioyondReactionStation and BioyondReactor in reaction_station_bioyond.yaml to align with the revised organization of the codebase. * fix: WareHouse 的不可哈希类型错误,优化父节点去重逻辑 * refactor: Move config from module to instance initialization * fix: 修正 reaction_station 目录名拼写错误 * feat: Integrate material search logic and cleanup deprecated files - Update coin_cell_assembly.py with material search dialog handling - Update YB_warehouses.py with latest warehouse configurations - Remove outdated documentation and test data files * Refactor: Use instance attributes for action names and workflow step IDs * refactor: Split tipbox storage into left and right warehouses * refactor: Merge tipbox storage left and right into single warehouse --------- Co-authored-by: ZiWei <131428629+ZiWei09@users.noreply.github.com> Co-authored-by: Andy6M <xieqiming1132@qq.com> fix: WareHouse 的不可哈希类型错误,优化父节点去重逻辑 fix parent_uuid fetch when bind_parent_id == node_name 物料更新也是用父节点进行报送 Add None conversion for tube rack etc. Add set_liquid example. Add create_resource and test_resource example. Add restart. Temp allow action message. Add no_update_feedback option. Create session_id by edge. bump version to 0.10.15 temp cancel update req
181 lines
5.6 KiB
Markdown
181 lines
5.6 KiB
Markdown
# 工作站抽象基类物料系统架构说明
|
||
|
||
### 核心原则
|
||
|
||
1. **PyLabRobot为物料管理核心**:使用PyLabRobot的Deck系统作为物料管理的基础,利用其成熟的Resource体系
|
||
2. **Graphio转换函数集成**:使用graphio中的`resource_ulab_to_plr`等转换函数实现UniLab与PLR格式的无缝转换
|
||
3. **关注点分离**:基类专注核心物料系统,HTTP服务等功能在子类中实现
|
||
4. **外部系统集成模式**:通过ResourceSynchronizer抽象类提供外部物料系统对接模式
|
||
|
||
## 架构组成
|
||
|
||
### 1. WorkstationBase(基类)
|
||
**文件**: `workstation_base.py`
|
||
|
||
**核心功能**:
|
||
- 使用deck_config和children通过`resource_ulab_to_plr`转换为PLR物料self.deck
|
||
- 基础的资源查找和管理功能
|
||
- 抽象的工作流执行接口
|
||
- ResourceSynchronizer集成点
|
||
|
||
**关键代码**:
|
||
```python
|
||
def _initialize_material_system(self, deck_config: Dict[str, Any], children_config: Dict[str, Any] = None):
|
||
"""初始化基于PLR的物料系统"""
|
||
# 合并deck_config和children
|
||
complete_config = self._merge_deck_and_children_config(deck_config, children_config)
|
||
|
||
# 使用graphio转换函数转换为PLR资源
|
||
self.deck = resource_ulab_to_plr(complete_config)
|
||
```
|
||
|
||
### 2. ResourceSynchronizer(外部系统集成抽象类)
|
||
**定义在**: `workstation_base.py`
|
||
|
||
**设计目的**:
|
||
- 提供外部物料系统(如Bioyond、LIMS等)集成的标准接口
|
||
- 双向同步:从外部系统同步到本地deck,以及将本地变更同步到外部系统
|
||
- 处理外部系统的变更通知
|
||
|
||
**核心方法**:
|
||
```python
|
||
async def sync_from_external(self) -> bool:
|
||
"""从外部系统同步物料到本地deck"""
|
||
|
||
async def sync_to_external(self, plr_resource) -> bool:
|
||
"""将本地物料同步到外部系统"""
|
||
|
||
async def handle_external_change(self, change_info: Dict[str, Any]) -> bool:
|
||
"""处理外部系统的变更通知"""
|
||
```
|
||
|
||
### 3. WorkstationWithHTTP(子类示例)
|
||
**文件**: `workstation_with_http_example.py`
|
||
|
||
**扩展功能**:
|
||
- HTTP报送接收服务集成
|
||
- 具体工作流实现(液体转移、板洗等)
|
||
- Bioyond物料系统同步器示例
|
||
- 外部报送处理方法
|
||
|
||
## 技术栈
|
||
|
||
### 核心依赖
|
||
- **PyLabRobot**: 物料资源管理核心(Deck, Resource, Coordinate)
|
||
- **GraphIO转换函数**: UniLab ↔ PLR格式转换
|
||
- `resource_ulab_to_plr`: UniLab格式转PLR格式
|
||
- `resource_plr_to_ulab`: PLR格式转UniLab格式
|
||
- `convert_resources_to_type`: 通用资源类型转换
|
||
- **ROS2**: 基础设备节点通信(BaseROS2DeviceNode)
|
||
|
||
### 可选依赖
|
||
- **HTTP服务**: 仅在需要外部报送接收的子类中使用
|
||
- **外部系统API**: 根据具体集成需求添加
|
||
|
||
## 使用示例
|
||
|
||
### 1. 简单工作站(仅PLR物料系统)
|
||
|
||
```python
|
||
from unilabos.devices.workstation.workstation_base import WorkstationBase
|
||
|
||
# Deck配置
|
||
deck_config = {
|
||
"size_x": 1200.0,
|
||
"size_y": 800.0,
|
||
"size_z": 100.0
|
||
}
|
||
|
||
# 子资源配置
|
||
children_config = {
|
||
"source_plate": {
|
||
"name": "source_plate",
|
||
"type": "plate",
|
||
"position": {"x": 100, "y": 100, "z": 10},
|
||
"config": {"size_x": 127.8, "size_y": 85.5, "size_z": 14.4}
|
||
}
|
||
}
|
||
|
||
# 创建工作站
|
||
workstation = WorkstationBase(
|
||
device_id="simple_workstation",
|
||
deck_config=deck_config,
|
||
children_config=children_config
|
||
)
|
||
|
||
# 查找资源
|
||
plate = workstation.find_resource_by_name("source_plate")
|
||
```
|
||
|
||
### 2. 带HTTP服务的工作站
|
||
|
||
```python
|
||
from unilabos.devices.workstation.workstation_with_http_example import WorkstationWithHTTP
|
||
|
||
# HTTP服务配置
|
||
http_service_config = {
|
||
"enabled": True,
|
||
"host": "127.0.0.1",
|
||
"port": 8081
|
||
}
|
||
|
||
# 创建带HTTP服务的工作站
|
||
workstation = WorkstationWithHTTP(
|
||
device_id="http_workstation",
|
||
deck_config=deck_config,
|
||
children_config=children_config,
|
||
http_service_config=http_service_config
|
||
)
|
||
|
||
# 执行工作流
|
||
success = workstation.execute_workflow("liquid_transfer", {
|
||
"volume": 100.0,
|
||
"source_wells": ["A1", "A2"],
|
||
"dest_wells": ["B1", "B2"]
|
||
})
|
||
```
|
||
|
||
### 3. 外部系统集成
|
||
|
||
```python
|
||
class BioyondResourceSynchronizer(ResourceSynchronizer):
|
||
"""Bioyond系统同步器"""
|
||
|
||
async def sync_from_external(self) -> bool:
|
||
# 从Bioyond API获取物料
|
||
external_materials = await self._fetch_bioyong_materials()
|
||
|
||
# 转换并添加到本地deck
|
||
for material in external_materials:
|
||
await self._add_material_to_deck(material)
|
||
|
||
return True
|
||
```
|
||
|
||
## 设计优势
|
||
|
||
### 1. **简洁性**
|
||
- 基类只专注核心物料管理,没有冗余功能
|
||
- 使用成熟的PyLabRobot作为物料管理基础
|
||
|
||
### 2. **可扩展性**
|
||
- 通过子类添加HTTP服务、特定工作流等功能
|
||
- ResourceSynchronizer模式支持任意外部系统集成
|
||
|
||
### 3. **标准化**
|
||
- PLR Deck提供标准的资源管理接口
|
||
- Graphio转换函数确保格式一致性
|
||
|
||
### 4. **灵活性**
|
||
- 可选择性使用HTTP服务和外部系统集成
|
||
- 支持不同类型的工作站需求
|
||
|
||
## 发展历程
|
||
|
||
1. **初始设计**: 复杂的统一物料系统,包含HTTP服务和多种功能
|
||
2. **PyLabRobot集成**: 引入PLR Deck管理,但保留了ResourceTracker复杂性
|
||
3. **Graphio转换**: 使用graphio转换函数简化初始化
|
||
4. **最终简化**: 专注核心PLR物料系统,HTTP服务移至子类
|
||
|
||
这个架构体现了"用PyLabRobot Deck来管理物料会更好;但是要做好和外部物料系统的对接"的设计理念,以及"现在我只需要在工作站创建的时候,整体使用deck_config和children,一起通过resource_ulab_to_plr转换为plr物料self.deck即可"的简化要求。
|