fix bugs from new actions

This commit is contained in:
Junhan Chang
2025-07-08 17:25:42 +08:00
parent acc9e5ce0d
commit d82ccd5cf1
10 changed files with 1298 additions and 729 deletions

View File

@@ -247,6 +247,142 @@ def generate_heat_chill_protocol(
return action_sequence
def generate_heat_chill_to_temp_protocol(
G: nx.DiGraph,
vessel: str,
temp: float = 25.0,
time: float = 300.0,
temp_spec: str = "",
time_spec: str = "",
pressure: str = "",
reflux_solvent: str = "",
stir: bool = False,
stir_speed: float = 300.0,
purpose: str = "",
**kwargs # 🔧 接受额外参数,增强兼容性
) -> List[Dict[str, Any]]:
"""
生成加热/冷却操作的协议序列
Args:
G: 设备图
vessel: 加热容器名称(必需)
temp: 目标温度 (°C)
time: 加热时间 (秒)
temp_spec: 温度规格(如 'room temperature', 'reflux'
time_spec: 时间规格(如 'overnight', '2 h'
pressure: 压力规格(如 '1 mbar'),不做特殊处理
reflux_solvent: 回流溶剂名称,不做特殊处理
stir: 是否搅拌
stir_speed: 搅拌速度 (RPM)
purpose: 操作目的
**kwargs: 其他参数(兼容性)
Returns:
List[Dict[str, Any]]: 加热操作的动作序列
"""
debug_print("=" * 50)
debug_print("开始生成加热冷却协议")
debug_print(f"输入参数:")
debug_print(f" - vessel: {vessel}")
debug_print(f" - temp: {temp}°C")
debug_print(f" - time: {time}s ({time / 60:.1f}分钟)")
debug_print(f" - temp_spec: {temp_spec}")
debug_print(f" - time_spec: {time_spec}")
debug_print(f" - pressure: {pressure}")
debug_print(f" - reflux_solvent: {reflux_solvent}")
debug_print(f" - stir: {stir}")
debug_print(f" - stir_speed: {stir_speed} RPM")
debug_print(f" - purpose: {purpose}")
debug_print(f" - 其他参数: {kwargs}")
debug_print("=" * 50)
action_sequence = []
# === 参数验证 ===
debug_print("步骤1: 参数验证...")
# 验证必需参数
if not vessel:
raise ValueError("vessel 参数不能为空")
if vessel not in G.nodes():
raise ValueError(f"容器 '{vessel}' 不存在于系统中")
# 温度解析:优先使用 temp_spec然后是 temp
final_temp = temp
if temp_spec:
final_temp = parse_temp_spec(temp_spec)
debug_print(f"温度解析: '{temp_spec}'{final_temp}°C")
# 时间解析:优先使用 time_spec然后是 time
final_time = time
if time_spec:
final_time = parse_time_spec(time_spec)
debug_print(f"时间解析: '{time_spec}'{final_time}s ({final_time / 60:.1f}分钟)")
# 参数范围验证
if final_temp < -50.0 or final_temp > 300.0:
debug_print(f"温度 {final_temp}°C 超出范围,修正为 25°C")
final_temp = 25.0
if final_time < 0:
debug_print(f"时间 {final_time}s 无效,修正为 300s")
final_time = 300.0
if stir_speed < 0 or stir_speed > 1500.0:
debug_print(f"搅拌速度 {stir_speed} RPM 超出范围,修正为 300 RPM")
stir_speed = 300.0
debug_print(f"✅ 参数验证通过")
# === 查找加热设备 ===
debug_print("步骤2: 查找加热设备...")
try:
heatchill_id = find_connected_heatchill(G, vessel)
debug_print(f"设备配置: 加热设备 = {heatchill_id}")
except Exception as e:
debug_print(f"❌ 设备查找失败: {str(e)}")
raise ValueError(f"无法找到加热设备: {str(e)}")
# === 执行加热操作 ===
debug_print("步骤3: 执行加热操作...")
heatchill_action = {
"device_id": heatchill_id,
"action_name": "heat_chill",
"action_kwargs": {
"vessel": vessel,
"temp": final_temp,
"time": final_time,
"stir": stir,
"stir_speed": stir_speed,
"purpose": purpose or f"加热到 {final_temp}°C"
}
}
action_sequence.append(heatchill_action)
# === 总结 ===
debug_print("=" * 50)
debug_print(f"加热冷却协议生成完成")
debug_print(f"总动作数: {len(action_sequence)}")
debug_print(f"加热容器: {vessel}")
debug_print(f"目标温度: {final_temp}°C")
debug_print(f"加热时间: {final_time}s ({final_time / 60:.1f}分钟)")
if pressure:
debug_print(f"压力参数: {pressure} (已接收,不做特殊处理)")
if reflux_solvent:
debug_print(f"回流溶剂: {reflux_solvent} (已接收,不做特殊处理)")
debug_print("=" * 50)
return action_sequence
def generate_heat_chill_start_protocol(
G: nx.DiGraph,
vessel: str,

View File

@@ -778,17 +778,17 @@ def generate_pump_protocol_with_rinsing(
)
# 为每个动作添加唯一标识
for i, action in enumerate(pump_action_sequence):
if isinstance(action, dict):
action['_protocol_id'] = protocol_id
action['_action_sequence'] = i
elif isinstance(action, list):
for j, sub_action in enumerate(action):
if isinstance(sub_action, dict):
sub_action['_protocol_id'] = protocol_id
sub_action['_action_sequence'] = f"{i}_{j}"
debug_print(f"📊 协议 {protocol_id} 生成完成,共 {len(pump_action_sequence)} 个动作")
# for i, action in enumerate(pump_action_sequence):
# if isinstance(action, dict):
# action['_protocol_id'] = protocol_id
# action['_action_sequence'] = i
# elif isinstance(action, list):
# for j, sub_action in enumerate(action):
# if isinstance(sub_action, dict):
# sub_action['_protocol_id'] = protocol_id
# sub_action['_action_sequence'] = f"{i}_{j}"
#
# debug_print(f"📊 协议 {protocol_id} 生成完成,共 {len(pump_action_sequence)} 个动作")
debug_print(f"🔓 释放执行锁")
return pump_action_sequence

View File

@@ -372,6 +372,30 @@ class HeatChillProtocol(BaseModel):
return 300.0 # 默认5分钟
class HeatChillStartProtocol(BaseModel):
# === 必需参数 ===
vessel: str = Field(..., description="加热容器名称")
# === 可选参数 - 温度相关 ===
temp: float = Field(25.0, description="目标温度 (°C)")
temp_spec: str = Field("", description="温度规格(如 'room temperature', 'reflux'")
# === 可选参数 - 其他XDL参数 ===
pressure: str = Field("", description="压力规格(如 '1 mbar'),不做特殊处理")
reflux_solvent: str = Field("", description="回流溶剂名称,不做特殊处理")
# === 可选参数 - 搅拌相关 ===
stir: bool = Field(False, description="是否搅拌")
stir_speed: float = Field(300.0, description="搅拌速度 (RPM)")
purpose: str = Field("", description="操作目的")
class HeatChillStopProtocol(BaseModel):
# === 必需参数 ===
vessel: str = Field(..., description="加热容器名称")
class StirProtocol(BaseModel):
# === 必需参数 ===
vessel: str = Field(..., description="搅拌容器名称")
@@ -608,7 +632,8 @@ __all__ = [
"Point3D", "PumpTransferProtocol", "CleanProtocol", "SeparateProtocol",
"EvaporateProtocol", "EvacuateAndRefillProtocol", "AGVTransferProtocol",
"CentrifugeProtocol", "AddProtocol", "FilterProtocol",
"HeatChillProtocol", "HeatChillStartProtocol", "HeatChillStopProtocol",
"HeatChillProtocol",
"HeatChillStartProtocol", "HeatChillStopProtocol",
"StirProtocol", "StartStirProtocol", "StopStirProtocol",
"TransferProtocol", "CleanVesselProtocol", "DissolveProtocol",
"FilterThroughProtocol", "RunColumnProtocol", "WashSolidProtocol",

View File

@@ -842,11 +842,15 @@ mock_heater:
time: time
vessel: vessel
goal_default:
pressure: ''
purpose: ''
reflux_solvent: ''
stir: false
stir_speed: 0.0
temp: 0.0
temp_spec: ''
time: 0.0
time_spec: ''
vessel: ''
handles: []
result:
@@ -866,22 +870,34 @@ mock_heater:
goal:
description: Action 目标 - 从客户端发送到服务器
properties:
pressure:
type: string
purpose:
type: string
reflux_solvent:
type: string
stir:
type: boolean
stir_speed:
type: number
temp:
type: number
temp_spec:
type: string
time:
type: number
time_spec:
type: string
vessel:
type: string
required:
- vessel
- temp
- time
- temp_spec
- time_spec
- pressure
- reflux_solvent
- stir
- stir_speed
- purpose
@@ -890,13 +906,16 @@ mock_heater:
result:
description: Action 结果 - 完成后从服务器发送到客户端
properties:
message:
type: string
return_info:
type: string
success:
type: boolean
required:
- return_info
- success
- message
- return_info
title: HeatChill_Result
type: object
required:
@@ -1270,13 +1289,18 @@ mock_pump:
volume: volume
goal_default:
amount: ''
event: ''
flowrate: 0.0
from_vessel: ''
rate_spec: ''
rinsing_repeats: 0
rinsing_solvent: ''
rinsing_volume: 0.0
solid: false
through: ''
time: 0.0
to_vessel: ''
transfer_flowrate: 0.0
viscous: false
volume: 0.0
handles: []
@@ -1334,8 +1358,14 @@ mock_pump:
properties:
amount:
type: string
event:
type: string
flowrate:
type: number
from_vessel:
type: string
rate_spec:
type: string
rinsing_repeats:
maximum: 2147483647
minimum: -2147483648
@@ -1346,10 +1376,14 @@ mock_pump:
type: number
solid:
type: boolean
through:
type: string
time:
type: number
to_vessel:
type: string
transfer_flowrate:
type: number
viscous:
type: boolean
volume:
@@ -1365,6 +1399,11 @@ mock_pump:
- rinsing_volume
- rinsing_repeats
- solid
- flowrate
- transfer_flowrate
- rate_spec
- event
- through
title: PumpTransfer_Goal
type: object
result:
@@ -2281,6 +2320,7 @@ mock_separator:
goal_default:
from_vessel: ''
product_phase: ''
product_vessel: ''
purpose: ''
repeats: 0
separation_vessel: ''
@@ -2291,7 +2331,10 @@ mock_separator:
stir_time: 0.0
through: ''
to_vessel: ''
vessel: ''
volume: ''
waste_phase_to_vessel: ''
waste_vessel: ''
handles: []
result:
success: success
@@ -2349,6 +2392,8 @@ mock_separator:
type: string
product_phase:
type: string
product_vessel:
type: string
purpose:
type: string
repeats:
@@ -2371,8 +2416,14 @@ mock_separator:
type: string
to_vessel:
type: string
vessel:
type: string
volume:
type: string
waste_phase_to_vessel:
type: string
waste_vessel:
type: string
required:
- purpose
- product_phase
@@ -2387,18 +2438,25 @@ mock_separator:
- stir_time
- stir_speed
- settling_time
- vessel
- volume
- product_vessel
- waste_vessel
title: Separate_Goal
type: object
result:
description: Action 结果 - 完成后从服务器发送到客户端
properties:
message:
type: string
return_info:
type: string
success:
type: boolean
required:
- return_info
- success
- message
- return_info
title: Separate_Result
type: object
required:
@@ -3472,9 +3530,13 @@ mock_stirrer_new:
stir_speed: stir_speed
stir_time: stir_time
goal_default:
event: ''
settling_time: 0.0
stir_speed: 0.0
stir_time: 0.0
time: ''
time_spec: ''
vessel: ''
handles: []
result:
success: success
@@ -3493,13 +3555,25 @@ mock_stirrer_new:
goal:
description: Action 目标 - 从客户端发送到服务器
properties:
event:
type: string
settling_time:
type: number
stir_speed:
type: number
stir_time:
type: number
time:
type: string
time_spec:
type: string
vessel:
type: string
required:
- vessel
- time
- event
- time_spec
- stir_time
- stir_speed
- settling_time
@@ -3508,13 +3582,16 @@ mock_stirrer_new:
result:
description: Action 结果 - 完成后从服务器发送到客户端
properties:
message:
type: string
return_info:
type: string
success:
type: boolean
required:
- return_info
- success
- message
- return_info
title: Stir_Result
type: object
required:

View File

@@ -324,9 +324,13 @@ separator.homemade:
stir_speed: stir_speed
stir_time: stir_time,
goal_default:
event: ''
settling_time: 0.0
stir_speed: 0.0
stir_time: 0.0
time: ''
time_spec: ''
vessel: ''
handles: []
result:
success: success
@@ -345,13 +349,25 @@ separator.homemade:
goal:
description: Action 目标 - 从客户端发送到服务器
properties:
event:
type: string
settling_time:
type: number
stir_speed:
type: number
stir_time:
type: number
time:
type: string
time_spec:
type: string
vessel:
type: string
required:
- vessel
- time
- event
- time_spec
- stir_time
- stir_speed
- settling_time
@@ -360,13 +376,16 @@ separator.homemade:
result:
description: Action 结果 - 完成后从服务器发送到客户端
properties:
message:
type: string
return_info:
type: string
success:
type: boolean
required:
- return_info
- success
- message
- return_info
title: Stir_Result
type: object
required:

View File

@@ -377,11 +377,15 @@ heaterstirrer.dalong:
time: time
vessel: vessel
goal_default:
pressure: ''
purpose: ''
reflux_solvent: ''
stir: false
stir_speed: 0.0
temp: 0.0
temp_spec: ''
time: 0.0
time_spec: ''
vessel: ''
handles: []
result:
@@ -401,22 +405,34 @@ heaterstirrer.dalong:
goal:
description: Action 目标 - 从客户端发送到服务器
properties:
pressure:
type: string
purpose:
type: string
reflux_solvent:
type: string
stir:
type: boolean
stir_speed:
type: number
temp:
type: number
temp_spec:
type: string
time:
type: number
time_spec:
type: string
vessel:
type: string
required:
- vessel
- temp
- time
- temp_spec
- time_spec
- pressure
- reflux_solvent
- stir
- stir_speed
- purpose
@@ -425,13 +441,16 @@ heaterstirrer.dalong:
result:
description: Action 结果 - 完成后从服务器发送到客户端
properties:
message:
type: string
return_info:
type: string
success:
type: boolean
required:
- return_info
- success
- message
- return_info
title: HeatChill_Result
type: object
required:

View File

@@ -318,6 +318,12 @@ virtual_column:
goal_default:
column: ''
from_vessel: ''
pct1: ''
pct2: ''
ratio: ''
rf: ''
solvent1: ''
solvent2: ''
to_vessel: ''
handles: []
result:
@@ -346,12 +352,30 @@ virtual_column:
type: string
from_vessel:
type: string
pct1:
type: string
pct2:
type: string
ratio:
type: string
rf:
type: string
solvent1:
type: string
solvent2:
type: string
to_vessel:
type: string
required:
- from_vessel
- to_vessel
- column
- rf
- pct1
- pct2
- solvent1
- solvent2
- ratio
title: RunColumn_Goal
type: object
result:
@@ -1155,11 +1179,15 @@ virtual_heatchill:
time: time
vessel: vessel
goal_default:
pressure: ''
purpose: ''
reflux_solvent: ''
stir: false
stir_speed: 0.0
temp: 0.0
temp_spec: ''
time: 0.0
time_spec: ''
vessel: ''
handles: []
result:
@@ -1179,22 +1207,34 @@ virtual_heatchill:
goal:
description: Action 目标 - 从客户端发送到服务器
properties:
pressure:
type: string
purpose:
type: string
reflux_solvent:
type: string
stir:
type: boolean
stir_speed:
type: number
temp:
type: number
temp_spec:
type: string
time:
type: number
time_spec:
type: string
vessel:
type: string
required:
- vessel
- temp
- time
- temp_spec
- time_spec
- pressure
- reflux_solvent
- stir
- stir_speed
- purpose
@@ -1203,13 +1243,16 @@ virtual_heatchill:
result:
description: Action 结果 - 完成后从服务器发送到客户端
properties:
message:
type: string
return_info:
type: string
success:
type: boolean
required:
- return_info
- success
- message
- return_info
title: HeatChill_Result
type: object
required:
@@ -2048,13 +2091,18 @@ virtual_pump:
volume: volume
goal_default:
amount: ''
event: ''
flowrate: 0.0
from_vessel: ''
rate_spec: ''
rinsing_repeats: 0
rinsing_solvent: ''
rinsing_volume: 0.0
solid: false
through: ''
time: 0.0
to_vessel: ''
transfer_flowrate: 0.0
viscous: false
volume: 0.0
handles: []
@@ -2112,8 +2160,14 @@ virtual_pump:
properties:
amount:
type: string
event:
type: string
flowrate:
type: number
from_vessel:
type: string
rate_spec:
type: string
rinsing_repeats:
maximum: 2147483647
minimum: -2147483648
@@ -2124,10 +2178,14 @@ virtual_pump:
type: number
solid:
type: boolean
through:
type: string
time:
type: number
to_vessel:
type: string
transfer_flowrate:
type: number
viscous:
type: boolean
volume:
@@ -2143,6 +2201,11 @@ virtual_pump:
- rinsing_volume
- rinsing_repeats
- solid
- flowrate
- transfer_flowrate
- rate_spec
- event
- through
title: PumpTransfer_Goal
type: object
result:
@@ -2325,6 +2388,7 @@ virtual_rotavap:
vessel: vessel
goal_default:
pressure: 0.0
solvent: ''
stir_speed: 0.0
temp: 0.0
time: 0.0
@@ -2385,6 +2449,8 @@ virtual_rotavap:
properties:
pressure:
type: number
solvent:
type: string
stir_speed:
type: number
temp:
@@ -2399,6 +2465,7 @@ virtual_rotavap:
- temp
- time
- stir_speed
- solvent
title: Evaporate_Goal
type: object
result:
@@ -2641,6 +2708,7 @@ virtual_separator:
goal_default:
from_vessel: ''
product_phase: ''
product_vessel: ''
purpose: ''
repeats: 0
separation_vessel: ''
@@ -2651,7 +2719,10 @@ virtual_separator:
stir_time: 0.0
through: ''
to_vessel: ''
vessel: ''
volume: ''
waste_phase_to_vessel: ''
waste_vessel: ''
handles: []
result:
message: message
@@ -2710,6 +2781,8 @@ virtual_separator:
type: string
product_phase:
type: string
product_vessel:
type: string
purpose:
type: string
repeats:
@@ -2732,8 +2805,14 @@ virtual_separator:
type: string
to_vessel:
type: string
vessel:
type: string
volume:
type: string
waste_phase_to_vessel:
type: string
waste_vessel:
type: string
required:
- purpose
- product_phase
@@ -2748,18 +2827,25 @@ virtual_separator:
- stir_time
- stir_speed
- settling_time
- vessel
- volume
- product_vessel
- waste_vessel
title: Separate_Goal
type: object
result:
description: Action 结果 - 完成后从服务器发送到客户端
properties:
message:
type: string
return_info:
type: string
success:
type: boolean
required:
- return_info
- success
- message
- return_info
title: Separate_Result
type: object
required:
@@ -3149,6 +3235,180 @@ virtual_solenoid_valve:
- valve_position
- state
type: object
virtual_solid_dispenser:
class:
action_value_mappings:
add_solid:
feedback:
current_status: status
progress: progress
goal:
mass: mass
mol: mol
purpose: purpose
reagent: reagent
vessel: vessel
goal_default:
mass: ''
mol: ''
purpose: ''
reagent: ''
vessel: ''
handles: []
result:
message: message
return_info: return_info
success: success
schema:
description: ROS Action AddSolid 的 JSON Schema
properties:
feedback:
description: Action 反馈 - 执行过程中从服务器发送到客户端
properties:
current_status:
type: string
progress:
type: number
required:
- current_status
- progress
title: AddSolid_Feedback
type: object
goal:
description: Action 目标 - 从客户端发送到服务器
properties:
mass:
type: string
mol:
type: string
purpose:
type: string
reagent:
type: string
vessel:
type: string
required:
- vessel
- reagent
- mass
- mol
- purpose
title: AddSolid_Goal
type: object
result:
description: Action 结果 - 完成后从服务器发送到客户端
properties:
message:
type: string
return_info:
type: string
success:
type: boolean
required:
- success
- message
- return_info
title: AddSolid_Result
type: object
required:
- goal
title: AddSolid
type: object
type: AddSolid
auto-add_solid:
feedback: {}
goal: {}
goal_default:
mass: ''
mol: ''
purpose: ''
reagent: ''
vessel: main_reactor
handles: []
result: {}
schema:
description: add_solid的参数schema
type: object
type: UniLabJsonCommandAsync
auto-cleanup:
feedback: {}
goal: {}
goal_default: {}
handles: []
result: {}
schema:
description: cleanup的参数schema
type: object
type: UniLabJsonCommandAsync
auto-initialize:
feedback: {}
goal: {}
goal_default: {}
handles: []
result: {}
schema:
description: initialize的参数schema
type: object
type: UniLabJsonCommandAsync
module: unilabos.devices.virtual.virtual_solid_dispenser:VirtualSolidDispenser
status_types:
current_reagent: str
dispensed_amount: float
status: str
total_operations: int
type: python
description: Virtual Solid Dispenser for Add Protocol Solid Reagents
handles:
- data_key: SolidIn
data_source: handle
data_type: resource
description: 固体试剂进料口
handler_key: SolidIn
io_type: target
label: SolidIn
side: WEST
- data_key: SolidOut
data_source: executor
data_type: resource
description: 固体试剂出料口
handler_key: SolidOut
io_type: source
label: SolidOut
side: EAST
icon: ''
init_param_schema:
config:
properties:
config:
type: object
device_id:
type: string
max_capacity:
default: 100.0
description: 最大加样容量 (g)
type: number
precision:
default: 0.001
description: 加样精度 (g)
type: number
required: []
type: object
data:
properties:
current_reagent:
type: string
dispensed_amount:
type: number
status:
type: string
total_operations:
type: integer
required:
- status
- current_reagent
- dispensed_amount
- total_operations
type: object
virtual_stirrer:
class:
action_value_mappings:
@@ -3183,7 +3443,6 @@ virtual_stirrer:
properties:
feedback: {}
goal:
properties: {}
required: []
type: object
@@ -3356,9 +3615,13 @@ virtual_stirrer:
stir_speed: stir_speed
stir_time: stir_time
goal_default:
event: ''
settling_time: 0.0
stir_speed: 0.0
stir_time: 0.0
time: ''
time_spec: ''
vessel: ''
handles: []
result:
success: success
@@ -3377,13 +3640,25 @@ virtual_stirrer:
goal:
description: Action 目标 - 从客户端发送到服务器
properties:
event:
type: string
settling_time:
type: number
stir_speed:
type: number
stir_time:
type: number
time:
type: string
time_spec:
type: string
vessel:
type: string
required:
- vessel
- time
- event
- time_spec
- stir_time
- stir_speed
- settling_time
@@ -3392,13 +3667,16 @@ virtual_stirrer:
result:
description: Action 结果 - 完成后从服务器发送到客户端
properties:
message:
type: string
return_info:
type: string
success:
type: boolean
required:
- return_info
- success
- message
- return_info
title: Stir_Result
type: object
required:
@@ -4367,125 +4645,3 @@ virtual_vacuum_pump:
required:
- status
type: object
virtual_solid_dispenser:
class:
action_value_mappings:
auto-cleanup:
feedback: {}
goal: {}
goal_default: {}
handles: []
result: {}
schema:
description: cleanup的参数schema
type: object
type: UniLabJsonCommandAsync
auto-initialize:
feedback: {}
goal: {}
goal_default: {}
handles: []
result: {}
schema:
description: initialize的参数schema
type: object
type: UniLabJsonCommandAsync
auto-add_solid:
feedback: {}
goal: {}
goal_default:
vessel: main_reactor
reagent: ''
mass: ''
mol: ''
purpose: ''
handles: []
result: {}
schema:
description: add_solid的参数schema
type: object
type: UniLabJsonCommandAsync
add_solid:
feedback:
current_status: status
progress: progress
goal:
vessel: vessel
reagent: reagent
mass: mass
mol: mol
purpose: purpose
goal_default:
vessel: 'main_reactor'
reagent: ''
mass: ''
mol: ''
purpose: ''
handles: []
result:
message: message
success: success
return_info: return_info
schema:
description: ROS Action AddSolid 的 JSON Schema
type: object
type: AddSolid
module: unilabos.devices.virtual.virtual_solid_dispenser:VirtualSolidDispenser
status_types:
status: str
current_reagent: str
dispensed_amount: float
total_operations: int
type: python
description: Virtual Solid Dispenser for Add Protocol Solid Reagents
handles:
- data_key: SolidIn
data_source: handle
data_type: resource
description: 固体试剂进料口
handler_key: SolidIn
io_type: target
label: SolidIn
side: WEST
- data_key: SolidOut
data_source: executor
data_type: resource
description: 固体试剂出料口
handler_key: SolidOut
io_type: source
label: SolidOut
side: EAST
icon: ''
init_param_schema:
config:
properties:
config:
type: object
device_id:
type: string
max_capacity:
type: number
default: 100.0
description: 最大加样容量 (g)
precision:
type: number
default: 0.001
description: 加样精度 (g)
required: []
type: object
data:
properties:
status:
type: string
current_reagent:
type: string
dispensed_amount:
type: number
total_operations:
type: integer
required:
- status
- current_reagent
- dispensed_amount
- total_operations
type: object

File diff suppressed because it is too large Load Diff

View File

@@ -41,6 +41,7 @@ set(action_files
"action/WashSolid.action"
"action/Filter.action"
"action/Add.action"
"action/AddSolid.action"
"action/Centrifuge.action"
"action/Crystallize.action"
"action/Purge.action"

View File

@@ -2,7 +2,7 @@
string from_vessel # 源容器的名称,即样品起始所在的容器(必需)
string to_vessel # 目标容器的名称,分离后的样品要到达的容器(必需)
string column # 所使用的柱子的名称(必需)
string Rf # Rf值可选
string rf # Rf值可选
string pct1 # 第一种溶剂百分比(如 "40 %",可选)
string pct2 # 第二种溶剂百分比(如 "50 %",可选)
string solvent1 # 第一种溶剂名称(可选)