总装:一个全自动系统

第 6 课 · 共 7 课 约 10 分钟

把四个闭环连起来:事件流、链式上限、冷却与配额、运行手册、失败模式与真正存在的紧急停止办法。

本课目标

读完这一课,你将能够

  • 画出四个闭环之间的事件流,并用单写手规则和链式上限检查这张图
  • 按运行手册的顺序排查一个卡住的系统:运行记录、用量、绑定、对象的改动历史
  • 说出 AIDC 里真正存在的三种停止办法,以及目前还没有的总开关

四个闭环怎样接起来

前四课各自完整,可在工厂里它们碰的是同一批对象。接起来的第一步,是写清楚每个闭环读什么、写什么。

ORDER

闭环一:订单

读 salesOrder、orderLine、material;不写,只建议,由人执行 release-work-order。

BUY

闭环二:采购

读 material、supplier、purchaseOrder;写 purchaseOrder 草稿。

QUALITY

闭环三:质量

读 inspection;写 defect,并把 workOrder 暂停。

MACHINE

闭环四:设备

读 machine 的时间序列;写 MaintenanceTask 和 maintenanceState。

按单写手规则,每个可改的属性只有一个写手。workOrder.status 由人下达、由质量闭环暂停,订单闭环不去碰它;否则「暂停、下达、再暂停」会来回打架。一张订单从确认到发运,事件这样接力:

  1. 01订单确认闭环一检查齐套
  2. 02缺料闭环二起草采购订单
  3. 03到货库存一变,再检查一次
  4. 04下达计划员执行 Action
  5. 05检验失败闭环三建缺陷、暂停
  6. 06设备超限闭环四申请维保

「到货再检查一次」需要第二个入口:它监听 material,复用同一套 Action,不复制逻辑。同一件事有两个入口时,写两个工作流,共用 Action。

链式、冷却与配额

3 层触发链最多连续几层
5 分钟最密的定时,更密的被拒收
20 条每个应用每天通知的缺省上限
2000 分钟每个应用每月计算分钟的缺省上限
  • 每条变化只触发一次,工作流自己写出的变化不会回头触发自己;写出的数据可以再触发别的工作流,最多 3 层。
  • 冷却按对象(主键)算:同一个对象两次运行至少隔这么久,冷却期内的变化只推进游标。
  • 配额按应用算:四个闭环若有六个工作流应用,就有六份计算分钟和通知额度。一条通知发给多人、多个通道,仍只占一条额度。计算分钟用完后,数据变化与定时停止,下月恢复;期间错过的变化不补跑。通知额度每天重置。

设计时要数层数:从一次数据变化出发,画出每个工作流写了什么、谁在监听它,链不能超过 3 层。超过了,就合并步骤,或者把中间那一步改成人。靠 3 层上限截断两个互相监听的工作流,是事故,不是设计。

运行手册:卡住了先查什么

  1. 有没有运行?

    没有:应用是不是「已上线」,when 为不为真,是不是在冷却里,本月计算分钟是不是用完,是不是它自己的写入。

  2. 运行失败或中断?

    看每一步的输出。心跳超过 5 分钟未更新时,运行状态为 failed,错误信息提示「运行被中断」,可以重跑。运行记录保留 180 天。

  3. 运行成功,对象没变?

    先核对运行状态和通道,再看是否为预演,以及写入步骤是否被 when 跳过。提交条件失败会使对应步骤和运行失败。最后查改动历史。

  4. 对象的值不对?

    看 overridden(语义层盖住了数据源的值)、sourceGone(数据源里已没有这一行,别据此行动)和 rev。

  5. 数据没来?

    看数据绑定的状态和落后几批,再看发布端是否在线、是否「连不上数据源」。

aidc semantic automate runs order-release --limit 20
aidc semantic automate status order-release <运行 id>
aidc app usage order-release
aidc semantic object workOrder WO-2609-031
aidc semantic edits-history workOrder --pk WO-2609-031
aidc semantic datasource list
aidc semantic streams status erp-orders

失败模式与紧急停止

  • 悄悄变旧:数据不来,就没有变化可触发。对策是自动化⑥的看门狗,按 hoursSince 判断,每小时一次会收到高频告警,那是有意为之的代价。
  • 风暴:一次盘点改了几十个对象。change.input 留空的工作流,同一批变化只开一次运行;写入类的要靠冷却和汇总,别让每个对象各发一封邮件。

先说没有的:目前还没有一键暂停全部自动化的总开关,也没有按组织的总闸。真正存在的停止办法有三个:

ROLL BACK

停这个应用

把正式通道切回一个没有 change 与 schedule 的旧版本,触发条件随之不再生效。要预先发布好这个「停用版」,回滚只能回到更早的版本。

CUT UPSTREAM

断数据源

解除数据绑定,或吊销发布 Key。数据不再进来,就没有变化可触发。

QUOTA

配额是上限,不是开关

计算分钟用完会让触发停下,但那是成本上限,靠它救火太晚。

还有两个办法不在这三张卡里。让提供方应用发布一个不再登记那个 Action 的版本,工作流跑到写入步骤就会失败。或者自己设计一个软开关对象,每个工作流第一步读它;那是你的设计,不是平台功能,见无人值守的治理那一课。

aidc app rollback order-release --version 1.0.0 --notes "紧急停用:回到只有手动触发的版本"
aidc app status order-release
aidc semantic datasource remove <对象类型> --stream <流>
aidc semantic streams revoke erp-orders --prefix aidc-pk-…

要点

  • 接起来之前,先写清每个闭环读什么、写什么,让每个可改的属性只有一个写手。
  • 触发链最多 3 层,自己写出的变化不回头触发自己;设计时数层数,不要靠上限截断。
  • 卡住了按顺序查:运行记录、应用用量、数据绑定、对象的改动历史与 overridden、sourceGone。
  • 目前没有总开关;真正的停止办法是回滚到停用版、断数据源,配额只是成本上限。

练一练

总装你自己的闭环

拿你在前几课设计的两个闭环,把它们接起来。

为每个自动化列出它读的和写的对象与属性,找出被两个自动化同时写的属性,指定唯一写手。

小测

选一个答案,马上看解析。

Q1两个工作流 A 和 B 互相监听对方写出的对象,会怎样?

Q2订单工作流本该在库存变化后重新跑,却一直没跑。第一步该查什么?

Q3下面哪一个是 AIDC 里真正存在的紧急停止办法?

延伸阅读