Skip to content

真实设备操作与验证安全边界

内容类型:安全边界难度:进阶适合:涉及高压、电机、阀门、继电器、加热、气路、信号输出等真实设备的工程师阅读时间:约 10 分钟

AI 可以自动修改代码、跑 Fake/Replay、做静态检查和 focused test,但真实设备动作不是普通自动测试资源

V10 默认:

text
HardwareAction: ForbiddenByDefault

没有明确授权时,不让 Agent 为了“验证一下”自动改变真实设备状态。

1. 先把“验证”分成四层

层级例子默认策略
软件静态/单测parser、状态转换、参数校验可自动
Fake / ReplayFake SCPI、录制报文、模拟设备优先自动
真实设备只读观察读取状态、错误队列、查询模式需确认安全性和授权,尽量不改变状态
真实设备状态改变高压输出、运动、阀门、继电器、加热、启动试验必须显式授权;高风险动作保持 HITL

不要因为某条 SCPI 命令名字是 QUERY 就默认无副作用;设备手册和现场行为才是证据。

2. 未授权时禁止自动做什么

未经用户明确授权,Agent 不应自动:

  • 打开高压或信号输出;
  • 运动电机、平台、执行机构;
  • 操作阀门、继电器、气路、加热器;
  • 改变联锁、急停、保护状态;
  • 修改真实设备关键保护参数;
  • 为回归测试重复执行有物理后果的动作;
  • 新建第二设备会话去“顺便查状态”,造成会话抢占或状态改变。

代码已经具备这些能力,不等于 Agent 可以直接调用。

3. 高风险动作即使授权也保持 HITL

高压、联锁、急停、运动、气路等高风险行为应拆成:

text
Agent
→ 完成代码、配置和软件侧检查
→ 明确将要执行的设备动作
→ 操作员确认现场条件
→ 人工触发/在场执行
→ Agent 读取结果和证据

不要把“用户允许真机测试”理解成“以后所有真实设备命令都可以自动执行”。授权应对应当前目标和当前范围。

4. 软件侧先证明能证明的部分

真机之前优先完成:

text
V0/V1 static/build
→ focused unit
→ Fake transport
→ Captured Replay
→ WorkflowSmoke
→ HardwarePending

例如高压电源功能可以先证明:

  • 电压目标值校验正确;
  • 状态机在联锁未满足时不会进入输出状态;
  • Fake 记录到正确命令顺序;
  • Stop/Cancel 会走预期路径;
  • 告警后果符合 Behavior Contract。

这些软件侧证据成立后,仍不能写“真实高压已验证”。

5. 最终状态要区分 Verified 和 HardwarePending

推荐报告:

text
VerificationLevel: V3
AffectedBuild: Verified
FocusedTests: Verified
FakeSCPI: Verified
WorkflowSmoke: Verified
RealHardware: HardwarePending
Reason: 未授权执行 2 kV 输出动作

比“测试通过”更准确,也不会逼 Agent 为了补一个绿色结果去自动碰真机。

6. 只读设备诊断也要有边界

真实设备只读诊断适合:

  • 读取当前状态;
  • 查询 error queue;
  • 查询输出/模式;
  • 读取版本/配置快照;
  • 对照当前软件状态。

执行前仍要确认:

  1. 查询不会改变设备状态;
  2. 不会打开第二个互斥 Session;
  3. 不会抢占正在运行的测试窗口;
  4. 不会清空后续需要保留的诊断队列;
  5. 现场当前允许执行查询。

如果查询本身有副作用,就按状态改变动作处理。

7. 联锁和 UI 按钮是两层安全

text
UI Disable
≠ Safety Interlock

按钮禁用是操作体验,真正的危险动作必须在后端执行边界再次检查:

text
Operator Command
→ Workflow / Safety Gate
→ Device Action

不能出现:

text
按钮灰了
但其它调用路径仍能直接 SendCommand()

安全条件应由稳定 owner 管理,而不是散落在几个页面控件里。

8. Advisory Fail-Open 不等于安全联锁 Fail-Open

V10 对磁盘容量、日志空间等非安全提示检查推荐 Fail-Open:检查失败不阻断试验。

但真正的安全联锁不能照搬:

text
Advisory check failure
→ 可记录并继续

Safety interlock unknown/failure
→ 按项目安全设计处理,通常不能自动当作“条件满足”

“提示功能”和“安全保护”必须先分类。

9. ExperimentalChange 不能偷偷绕开保护

临时边界测试可以放宽业务上限,但要明确:

text
ExperimentalScope
OfficialRulePreserved
SafetyInterlockPreserved
RestoreMethod
OperatorAuthorization

如果实验本身需要改变保护阈值、联锁或危险设备参数,这已经不是普通 ExperimentalChange,必须单独确认风险和现场授权。

10. Session / Stop / Recovery 也是安全问题

真实设备控制常见风险并不只来自“数值太大”:

  • Stop 返回了,但后台命令还在发送;
  • Cancel 没传播到设备会话;
  • 重连后旧 receive loop 仍存活;
  • 第二 SCPI Session 与第一 Session 并发;
  • 软件退出但输出状态未明确;
  • 故障恢复自动重新启动危险动作。

详见 线程与资源生命周期通信与协议设计

11. 真机验证前最小检查

  • 当前代码版本和配置已固定;
  • 本次设备动作、目标值、持续时间明确;
  • 联锁/急停有效;
  • 操作员知道预期动作和停止方法;
  • 日志/时间戳已开启;
  • 只执行当前验收所需最小动作;
  • 异常时有明确停止和断电/复位路径;
  • 验证后保存设备状态和结果证据。

12. 和资料安全不是一回事

本站原有 AI 开发安全与脱敏边界 主要回答“什么资料能不能交给 AI”。

本页回答的是另一件事:AI 在软件和真实设备之间可以自动做到哪一步。

两种安全都需要,但不能混成一条规则。

一句话原则

能用 Fake/Replay 证明的先在软件侧证明;真实设备状态改变默认不自动执行,高风险动作即使授权也保持人工在环。

别来无恙 · C# 上位机 AI 实战站 · 从零到交付 · QQ 群:1016188499