查看 GitCode 可运行示例
查看动作契约、能力门控、适配器和模拟驱动的完整实现。
一句话说:契约定义动作,门控决定是否放行,适配器对接设备;厂商设备接口必须包含操作、对象、系统三个维度的内容。
1. 动作契约:把动作的意思写清楚
动作契约不写串口地址、厂商命令或某台设备的连接配置。它说明同名操作应该遵守的共同规则。 以add_liquid 为例:
这些数字只是教学例子,不代表真实设备规格。不同设备可以采用更严格的范围,但不能偷偷改变单位或降低完成要求。
契约检查伪代码
source、target 角色确定,所以参数中不重复填写来源编号。若接口同时提供两处容器编号,必须检查它们一致。
2. 能力门控:不能只看“支持”两个字
“支持加液”至少要分开检查:- 硬件支持:这台设备是否有加液能力?
- 代码已实现:有没有这台设备对应的
add_liquid实现? - 配置完成:必要连接参数、标定和验收是否完成?
- 本次允许执行:调用方有权限吗?设备是否空闲?容器和版本是否正确?
门控伪代码
3. 适配器:只负责这台设备怎么做
同一个加液动作,不同设备可能使用不同单位、命令和返回格式。这些差异放在适配器和驱动中,不要求调用方了解。
驱动负责具体通信。适配器可以调用串口、HTTP 或厂商 SDK 驱动,但不会因为调用方式不同,就改变
add_liquid 的含义。
适配器伪代码
4. 三部分怎样接起来
设备绑定使用“设备编号、动作名称、契约版本”作为查找条件。找不到就拒绝,不使用默认适配器。- 操作状态放入
operation.status。 - 实际加液量放入
operation.actual_parameters.measured,并附测量来源、时间和任务等证据信息。 - 容器状态变化放入
object.changes。实际转移量不能自动当成两个容器的当前液量;仍需按操作要求取得容器状态。 - 设备状态、资源占用和任务信息放入
system。