mirror of
https://github.com/dptech-corp/Uni-Lab-OS.git
synced 2026-02-05 14:05:12 +00:00
79 lines
2.4 KiB
Python
79 lines
2.4 KiB
Python
from typing import List, Dict, Any
|
||
import networkx as nx
|
||
|
||
def generate_transfer_protocol(
|
||
G: nx.DiGraph,
|
||
from_vessel: str,
|
||
to_vessel: str,
|
||
volume: float,
|
||
amount: str = "",
|
||
time: float = 0,
|
||
viscous: bool = False,
|
||
rinsing_solvent: str = "",
|
||
rinsing_volume: float = 0.0,
|
||
rinsing_repeats: int = 0,
|
||
solid: bool = False
|
||
) -> List[Dict[str, Any]]:
|
||
"""
|
||
生成液体转移操作的协议序列
|
||
|
||
Args:
|
||
G: 有向图,节点为设备和容器
|
||
from_vessel: 源容器
|
||
to_vessel: 目标容器
|
||
volume: 转移体积 (mL)
|
||
amount: 数量描述 (可选)
|
||
time: 转移时间 (秒,可选)
|
||
viscous: 是否为粘性液体
|
||
rinsing_solvent: 冲洗溶剂 (可选)
|
||
rinsing_volume: 冲洗体积 (mL,可选)
|
||
rinsing_repeats: 冲洗重复次数
|
||
solid: 是否涉及固体
|
||
|
||
Returns:
|
||
List[Dict[str, Any]]: 转移操作的动作序列
|
||
|
||
Raises:
|
||
ValueError: 当找不到合适的转移设备时抛出异常
|
||
|
||
Examples:
|
||
transfer_protocol = generate_transfer_protocol(G, "flask_1", "reactor", 10.0)
|
||
"""
|
||
action_sequence = []
|
||
|
||
# 查找虚拟转移泵设备用于液体转移 - 修复:应该查找 virtual_transfer_pump
|
||
pump_nodes = [node for node in G.nodes()
|
||
if G.nodes[node].get('class') == 'virtual_transfer_pump']
|
||
|
||
if not pump_nodes:
|
||
raise ValueError("没有找到可用的转移泵设备进行液体转移")
|
||
|
||
# 使用第一个可用的泵
|
||
pump_id = pump_nodes[0]
|
||
|
||
# 验证容器是否存在
|
||
if from_vessel not in G.nodes():
|
||
raise ValueError(f"源容器 {from_vessel} 不存在于图中")
|
||
|
||
if to_vessel not in G.nodes():
|
||
raise ValueError(f"目标容器 {to_vessel} 不存在于图中")
|
||
|
||
# 执行液体转移操作 - 参数完全匹配Transfer.action
|
||
action_sequence.append({
|
||
"device_id": pump_id,
|
||
"action_name": "transfer",
|
||
"action_kwargs": {
|
||
"from_vessel": from_vessel,
|
||
"to_vessel": to_vessel,
|
||
"volume": volume,
|
||
"amount": amount,
|
||
"time": time,
|
||
"viscous": viscous,
|
||
"rinsing_solvent": rinsing_solvent,
|
||
"rinsing_volume": rinsing_volume,
|
||
"rinsing_repeats": rinsing_repeats,
|
||
"solid": solid
|
||
}
|
||
})
|
||
|
||
return action_sequence |