输入:最终执行计划
最终执行计划必须采用以下结构。示例展示两份样品加液并进行光谱表征的最小闭环:{
"实验名称": "A01 CoFeNi 高熵氧化物:样品准备与 UV-Vis 表征最小闭环",
"plan_name": "A01 CoFeNi 高熵氧化物:样品准备与 UV-Vis 表征最小闭环",
"实验流程": [
"1. 开盖 (离心瓶 2个)",
"2. 加液_物料绑定 (离心瓶 2个)",
"3. 加液_物料绑定 (离心瓶 2个)",
"4. 关盖 (离心瓶 2个)",
"5. 开盖 (离心瓶 2个)",
"6. 紫外光谱离心绘图 (离心瓶 2个)"
],
"涉及设备": [
"移液平台_1ml_V2 (关盖, 加液_物料绑定, 开盖)",
"紫外可见光谱仪_V1 (紫外光谱离心绘图)"
],
"path": {
"开始节点id": ["移液平台_1ml_V20节点id"],
"移液平台_1ml_V20节点id": ["紫外可见光谱仪_V10节点id"],
"紫外可见光谱仪_V10节点id": ["结束节点id"]
},
"steps": [
{
"step_number": 1,
"id": "2002186824385539",
"device_name": "移液平台_1ml_V2",
"command_id": "open_caps",
"request_class": "invoke",
"operation": "开盖",
"parameters": {
"container_type": "离心瓶",
"container_count": 2,
"container_ids": [1, 2]
}
},
{
"step_number": 2,
"id": "2002186824385539",
"device_name": "移液平台_1ml_V2",
"command_id": "add_liquid_with_material",
"request_class": "invoke",
"operation": "加液_物料绑定",
"parameters": {
"container_type": "离心瓶",
"container_count": 2,
"container_ids": [1],
"dispensing_plan": [
{"原液瓶编号": 1, "加液体积": 0.5}
]
}
},
{
"step_number": 3,
"id": "2002186824385539",
"device_name": "移液平台_1ml_V2",
"command_id": "add_liquid_with_material",
"request_class": "invoke",
"operation": "加液_物料绑定",
"parameters": {
"container_type": "离心瓶",
"container_count": 2,
"container_ids": [2],
"dispensing_plan": [
{"原液瓶编号": 2, "加液体积": 0.5}
]
}
},
{
"step_number": 4,
"id": "2002186824385539",
"device_name": "移液平台_1ml_V2",
"command_id": "close_caps",
"request_class": "invoke",
"operation": "关盖",
"parameters": {
"container_type": "离心瓶",
"container_count": 2,
"container_ids": [1, 2]
}
},
{
"step_number": 5,
"id": "2002186824385539",
"device_name": "移液平台_1ml_V2",
"command_id": "open_caps",
"request_class": "invoke",
"operation": "开盖",
"parameters": {
"container_type": "离心瓶",
"container_count": 2,
"container_ids": [1, 2]
}
},
{
"step_number": 6,
"id": "1664783667397632",
"device_name": "紫外可见光谱仪_V1",
"command_id": "measure_uv_vis",
"request_class": "invoke",
"operation": "紫外光谱离心绘图",
"parameters": {
"container_type": "离心瓶",
"container_count": 2,
"container_ids": [1, 2],
"start_wavelength": 200,
"end_wavelength": 800
}
}
],
"unknown_steps": null
}
steps 使用绑定中的结构。
执行计划字段
| 字段 | 作用 |
|---|---|
实验名称、plan_name | 提供面向人员与程序的计划名称 |
实验流程[] | 提供可读的步骤摘要,不作为设备调用依据 |
涉及设备[] | 汇总计划绑定的设备及操作 |
path | 表达设备之间的有向依赖关系 |
steps[] | 保存可下发步骤的设备、操作和参数 |
steps[].step_number | 确定步骤顺序 |
steps[].id | 绑定 FSP device_id |
steps[].device_name | 提供设备显示名称 |
steps[].command_id | 指定完整技能定义中的稳定技能标识 |
steps[].request_class | 指定请求分类并决定下发入口与安全规则 |
steps[].operation | 保存已绑定的操作名称 |
steps[].parameters | 保存通过校验的操作实参 |
unknown_steps | 保存无法绑定的步骤;非空时禁止执行 |
下发方式
执行服务按steps[].request_class 选择 FSP 分类入口:
steps[].id → device_id
steps[].command_id → command_id
steps[].request_class → read → fsp/read
write → fsp/write
invoke → fsp/invoke
steps[].parameters → 通过参数绑定解析为 arguments
仿真输出
方法在进入物理执行前必须生成仿真报告:{
"simulation_status": "passed",
"verified_by": "run_simulation.py",
"command_exit_code": 0,
"operation_count": 6,
"checks": [
"调用仅使用已准入设备函数",
"开盖、加液、关盖和检测构成研究对象从 St 到 St+1 的状态演化",
"强制条件失败时不提交研究对象的模拟状态"
]
}
状态提交
仿真或执行成功且完成条件满足
→ 保存结果和诊断
→ 提交实际状态变化
强制校验失败、仿真阻断或设备结果未知
→ 不提交预期成功状态
→ 保留原状态或重新读取实际状态
→ 返回诊断并重新生成或修订方法
失败回退与再验证
执行服务不能把计划中的预期状态当作真实结果。read 完成后保存观测时间和数据新鲜度;write 完成后回读或取得等价确认;invoke 完成后按技能的系统维度验证实际结果。只有验证通过后才能决定是否提交研究对象状态。
- 设备成功且返回值满足操作完成条件:保存结果、诊断和证据引用,提交实际状态变化;
- 设备失败、取消或返回未知结果:不提交预期状态,保留已确认状态并读取对象和系统最新值;
- 将失败步骤、实际状态、能力修订号和诊断反馈给方法生成与验证阶段;
- 只有重新生成的方法通过完整验证并重新绑定后,才允许形成新的执行任务。
真实执行证据边界
真实执行至少应当返回:- 实际调用的操作和参数;
- 开始和完成状态;
- 实际对象和系统状态;
- 结果或诊断;
- 可以关联到研究对象来源记录的执行引用。
执行证据输出示例
{
"execution_id": "exec-a01-001",
"plan_name": "A01 CoFeNi 高熵氧化物:样品准备与 UV-Vis 表征最小闭环",
"status": "succeeded",
"started_at": "2026-09-01T12:00:00Z",
"completed_at": "2026-09-01T12:08:00Z",
"step_results": [
{
"step_number": 1,
"device_id": "2002186824385539",
"command_id": "open_caps",
"status": "succeeded",
"task_id": null,
"result": {"opened_bottles": [1, 2], "opened_bottles_count": 2},
"diagnostics": []
}
],
"state_committed": true,
"evidence_refs": ["evidence://exec-a01-001/step-1"]
}
| 输出字段 | 作用 |
|---|---|
execution_id | 唯一标识一次计划执行 |
status | 汇总执行是否成功、失败、取消或结果未知 |
started_at、completed_at | 记录真实运行时间边界 |
step_results[] | 保存每步实际设备、指令、任务、结果和诊断 |
state_committed | 表示是否已经依据设备确认结果提交研究对象状态 |
evidence_refs[] | 把执行结果关联到可审计证据位置 |