MHS 开发指南
七天实战
Driver 与编排实战见 7 天学会 MHS Day 4–5 及 Driver 工作台(LAB.05)。
延伸阅读
开源依赖选型见 GitHub 项目导读;生产安全见 最佳实践。
开发指南定位
本文档面向需要实现 MHS Driver、编写 Device Description、设计闭环编排器的工程师。不涉及 mhs_frontend 站点部署;聚焦协议语义与可复用实现模式。
Driver 最小接口
每个 MHS Driver 必须实现:
| 方法 | 职责 |
|---|---|
initialize() | 连接硬件、加载 Description、自检 |
read() | 返回完整或增量状态向量 |
write(cmd) | 执行物理操作,内部做边界校验 |
get_description() | 返回 Device Description |
shutdown() | 安全关闭,尽量进入 safe state |
safe_state() | 故障时进入已知安全配置 |
from abc import ABC, abstractmethod
class MHSDriver(ABC):
@abstractmethod
def read(self) -> StateVector: ...
@abstractmethod
def write(self, cmd: dict) -> WriteResult: ...
@abstractmethod
def get_description(self) -> DeviceDescription: ...
def write_with_verify(self, cmd, tolerance):
self.write(cmd)
state = self.read()
if not verify(state, cmd, tolerance):
raise VerifyFailed(state)
return state
协议适配模式
| 模式 | 适用 | 优点 | 缺点 |
|---|---|---|---|
| 轮询 Polling | Modbus、简单串口 | 实现简单 | 总线占用高 |
| 事件驱动 | CAN、OPC-UA 订阅 | 低延迟、省带宽 | 状态合并复杂 |
| 混合 | EtherCAT + 慢传感器 | 兼顾实时与完整 | Driver 复杂度高 |
状态缓存策略:高频 read 通道可本地缓存 50–200 ms,但须在 Description 声明 max_staleness_ms,编排器据此判断是否信任缓存。
从厂商 SDK 封装
典型步骤:
- 逆向协议文档:提取寄存器/命令与物理量对应关系。
- 单位标准化:mA → A,mmHg → Pa,厂商 enum → 字符串 literal。
- 异步回调 → 状态向量:SDK 回调更新内部
StateVector草稿,read 时返回快照。 - 边界映射:把 SDK 的
SetPower(w)包装为带 hard_limit 检查的 write。
Genentech 蛋白质处理案例表明:厂商 SDK 往往不区分「配置错误」与「物理故障(气泡)」—— Driver 层应增加 quality 或 anomaly 通道供 Agent 解读。
Device Description 工程
Schema 核心区块
device: { vendor, model, firmware, serial }
capabilities: { channel_name: { access, range, unit, verify, ... } }
safety: { hard_limits, soft_limits, interlocks, modes }
interface: { protocol, address, baud, timeout_ms }
metadata: { calibration_date, environment, maintenance }
互锁表达
interlocks:
- id: laser_cooling
when: "power_w > 0"
requires:
cooling_lpm: { min: 2.0 }
shutter_closed: { equals: false }
on_violation: reject # reject | safe_state | human
互锁应可单元测试:给定 mock 状态向量,断言 check 结果。
从 Description 生成 MCP Tool Schema
Day 2 课纲对比示例:Description 中 power_w 的 range 与 hard_limits 自动裁剪 JSON Schema 的 maximum。扩展字段 x-mhs 携带 verify 策略,Bridge 层读取后执行闭环。
多协议 Driver 示例矩阵
| 协议 | Python 库 | read 映射 | write 映射 |
|---|---|---|---|
| Modbus | modbus-tk | 读寄存器→缩放 | 写寄存器 |
| CAN-FD | python-can | 解码 DBC |