> ## Documentation Index
> Fetch the complete documentation index at: https://all.mimedal.cn/llms.txt
> Use this file to discover all available pages before exploring further.

# 概述

> 说明 FSP 服务如何通过动作契约、能力门控和适配器调用设备接口。

Function State Protocol（FSP，函数状态协议）用于把上层的函数调用变成可检查、可执行、可核对结果的设备动作。

FSP 服务的具体实现由三部分组成：

1. **动作契约**：定义动作的含义、参数、前置条件、结果和完成证据；
2. **能力门控**：确认目标设备硬件支持、代码已实现、配置已就绪，且当前条件允许执行；
3. **适配器**：把通用动作转成具体设备命令，再把驱动返回值转成通用结果。

FSP 对厂商设备接口提出三个维度的内容要求：**操作、对象、系统**。厂商接口必须能够说明做了什么、作用于什么对象，以及设备和任务处于什么状态。这三个维度不是 FSP 服务的三个执行模块，也不是要求厂商建立三套独立接口。

<img src="https://mintcdn.com/automationlaboratoryprotocol/FjW13lSwlkUqc7qm/images/fsp-service-architecture.svg?fit=max&auto=format&n=FjW13lSwlkUqc7qm&q=85&s=50f86ee799063ce274a657656f8e584c" alt="FSP 服务实现与设备接口架构" width="1600" height="1080" data-path="images/fsp-service-architecture.svg" />

## FSP 服务的执行顺序

```text theme={null}
上层函数调用
  → 动作契约：解析动作和校验参数
  → 能力门控：选定设备并检查是否允许执行
  → 适配器：转换单位、坐标和命令，调用驱动
  → 厂商设备接口：提供操作、对象、系统三个维度的实际信息
  → FSP 服务：按契约判断成功、失败或结果未知
```

动作契约通过不代表可以下发；能力门控通过也不代表设备已经完成动作。只有取得契约要求的实际结果和完成证据，才能返回成功。

## 厂商设备接口必须覆盖的三个维度

| 维度                                                      | 请求要表达                 | 返回要表达                    |
| ------------------------------------------------------- | --------------------- | ------------------------ |
| [操作](/docs/specification/device-integration/operations) | 动作标识、参数、版本和执行前条件      | 是否执行、实际参数、结果、诊断和完成证据     |
| [对象](/docs/specification/device-integration/objects)    | 相关容器、样品、角色、位置和执行前状态   | 实际变化、当前状态、观测时间和对象版本      |
| [系统](/docs/specification/device-integration/system)     | 设备状态、安全限制、资源、幂等键和执行模式 | 实际设备状态、安全检查、任务、资源占用和注意事项 |

厂商接口的操作调用、状态查询、结果回调或事件通知可以采用不同方法，但合在一起必须完整覆盖这三个维度。接口不能只告诉调用方“命令已收到”，却不提供对象变化和设备或任务状态。HTTP、CLI、MCP、RPC 或厂商 SDK 都可以作为承载方式；FSP 不规定 URL、工具名、命令名或 SDK 方法名。

## 三个实现页面

<CardGroup cols={3}>
  <Card title="动作契约" href="/docs/specification/fsp/action-contract">定义动作的通用语义和完成条件。</Card>
  <Card title="能力门控" href="/docs/specification/fsp/capability-gating">决定这次请求是否允许进入设备实现。</Card>
  <Card title="适配器" href="/docs/specification/fsp/adapter">用伪代码说明单位转换、驱动调用和结果解释。</Card>
</CardGroup>
