同一个“空气”信号,两种完全不同的工程含义

当仪器从Modbus寄存器读到 air=true 时,很多人会顺手把这个位当成故障结论。这个捷径不安全。这个位只说明传感器适配器观察到了什么,并没有告诉你这次事件究竟是预充阶段本来就该出现的,还是源头空了、吸入侧漏了、旧帧重放,或者管路配置错误导致读数失效。

打开网易新闻 查看精彩图片

本文给出一个不依赖第三方库的小型Python模式,用来把“观察到的原始值”和“工程判断”明确分开。核心不是再解析一个位,而是让控制器拿到一份证据契约,而不是一个被解码出来的孤立布尔值。

两个事件,原始值一模一样

考虑两个包含相同原始值的事件:

  • 第一个发生在试剂切换后120毫秒,泵正在执行经过验证的预充配方,界面持续80毫秒。
  • 第二个发生在从试剂瓶正向吸液期间,持续900毫秒,阀路没有变化。

原始观察完全相同,但工程含义完全不同。因此控制器需要的是证据契约,而不只是一个解码位。契约至少应当携带:样本时间戳和单调序列号;通信、帧和传感器就绪状态;配置身份和管路设置验证;工艺阶段以及进入该阶段后的时间;泵状态、方向和阀路;观察到的流体状态和事件持续时间。

AI层可以帮助生成协议适配器、分析日志或解释结果,但最终的状态转移必须保持确定性和可测试性。

六种判定,故意不写“检测到空气就急停”

参考实现返回六种判定之一。值得注意的恰恰是它刻意缺失的部分:没有 air_detected == emergency_stop 这条规则。也就是说,系统不会因为一个空气位被置起就直接触发急停。

评估器首先拒绝过期、畸形或重放的观测,然后才进入物理上下文推理。具体顺序是:如果通信不正常、帧无效、传感器未就绪、样本年龄小于0或超过策略允许的最大样本年龄,或者序列号无效,就返回 COMMUNICATION_INVALID,并给出“通信、帧、就绪、时间戳或序列证据无效”的说明,动作建议为 SAFE_HOLD。

这个顺序防止了AI代理的一种常见失败模式:自信地解释一个本不该进入决策路径的数字。先卡数据有效性,再谈工艺解释,是整段逻辑的关键。

配置、管路和残留证据先于工艺阶段判断

第二道门检查配置身份、管路设置和残留证据。如果配置修订号与期望配置修订号不一致,或者管路设置未经验证,或者存在残留嫌疑,就返回 SENSOR_SETUP_SUSPECT,说明“配置、管路设置或残留证据使解释无效”,动作建议为 PAUSE_AND_INSPECT_SETUP。

只有通过验证的观测,才会进入工艺阶段规则。这意味着即使空气信号本身看起来真实,只要配置或管路证据不干净,系统也不会继续往下解释。

预期界面与可能的进气要分开处理

空气事件在预充、试剂切换或冲洗阶段可能是预期的,但前提是它落在经过验证的时间窗口内,并且事件持续时间低于经过验证的阈值。判断逻辑会先确认当前阶段是否属于 PRIMING、REAGENT_SWITCH 或相关预期阶段,再结合窗口和持续时间做结论。

这样,一个短暂且处于预期阶段的空气界面不会被误判为进气故障;而一个持续时间过长、或者出现在非预期阶段的空气事件,则会被单独标记出来。原始位相同,但证据链不同,最终判定也不同。