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

# 系统

> 设备技能所需的运行状态、安全围栏和结果验证

## 作用

系统维度说明某项技能可执行时的设备条件，包括设备状态、可用性、安全围栏和结果验证要求。设备级状态可以被多项技能引用，但不能脱离具体技能替代其前置条件。

## 技能系统维度

```json theme={null}
{
  "command_id": "dispense",
  "request_class": "invoke",
  "system": {
    "required_device_states": ["idle"],
    "forbidden_device_states": ["offline", "fault", "maintenance"],
    "safety_fences": [
      "目标容器剩余容量必须大于或等于加液体积",
      "单次加液量不得超过技能声明上限"
    ],
    "result_verification": [
      "动作任务必须进入 completed 状态",
      "返回实际加液体积和目标容器执行后状态"
    ]
  }
}
```

系统维度只描述 `dispense` 技能的执行条件。另一项技能即使作用于同一设备，也必须声明自身适用的状态、围栏和结果验证规则。

## 状态读取

```json theme={null}
{
  "jsonrpc": "2.0",
  "id": "read-system-1",
  "method": "fsp/read",
  "params": {
    "device_id": "2002186824385539",
    "command_id": "read_device_state",
    "arguments": {}
  }
}
```

| 输入字段         | 类型       | 作用                                       |
| ------------ | -------- | ---------------------------------------- |
| `device_id`  | `string` | 指定要读取的设备                                 |
| `command_id` | `string` | 指定完整技能定义中 `request_class=read` 的设备状态读取技能 |
| `arguments`  | `object` | 提供该读取技能声明的参数；没有参数时使用空对象                  |

```json theme={null}
{
  "result_type": "complete",
  "value": {
    "state": "idle",
    "available": true,
    "current_task": null,
    "capability_revision": "12",
    "observed_at": "2026-09-01T12:00:00Z"
  },
  "diagnostics": []
}
```

| 输出字段                  | 类型                | 作用                    |
| --------------------- | ----------------- | --------------------- |
| `state`               | `string`          | 表示离线、空闲、忙碌、暂停、故障或维护状态 |
| `available`           | `boolean`         | 表示设备当前是否接受操作          |
| `current_task`        | `string` 或 `null` | 关联当前任务；空闲时为 `null`    |
| `capability_revision` | `string`          | 表示当前状态对应的能力版本         |
| `observed_at`         | `string`          | 表示状态观测时间              |
| `diagnostics[]`       | `array[object]`   | 提供状态异常或读取问题的结构化诊断     |

## 状态值

系统至少应当区分：

```text theme={null}
offline
idle
busy
paused
fault
maintenance
```

设备无法准确判断时，可以使用 `unknown` 并返回诊断。

## 安全围栏

安全围栏用于表达设备服务必须执行的保护规则，例如：

* 设备忙碌时是否允许新任务；
* 参数是否超出物理能力；
* 当前状态是否允许目标操作；
* 操作是否与现有任务冲突；
* 是否需要人工确认；
* 故障或急停状态是否禁止执行。

安全围栏必须在 `write` 或 `invoke` 请求进入设备前判断。`invoke` 类技能还必须在动作完成后按系统维度中的 `result_verification` 验证实际结果。自然语言实验方法、函数式技能或调用方提示不能绕过安全围栏。
