卷 V · 看不见的东西CH 20深度 20/24

套环

前十九章讨论的都是「怎么调好一个环」。这一章换一个层次的问题:要不要多来一个环。答案往往是要,而且回报大得不成比例——因为一个扰动最好的处理方式,是在它离开出生地之前就被按住。

串级控制把扰动关在内环十倍法则

▷ 先拧一下

一个加热炉:燃气经过阀门进入炉膛,炉温是被控量。炉子的热惯性是 30 秒,阀门到流量的响应是 2 秒。

扰动是燃气管路压力的波动——同样的阀门开度,进气量会变。

现在有两种做法:,一个 PI 直接从炉温算到阀门开度;,两个 PI 串起来——外环从炉温算出「我要多大流量」,内环从流量算到阀门开度。

A 差不多。反正最终都是靠炉温反馈,多一层只是多个中转 B 乙好一些,大概能好 20%–30% C 乙好一个数量级——峰值偏差小 10 倍以上 D 甲更好。多一个环意味着多一份延迟和多一份不稳定风险

扰动进来的地方,决定了它有多贵

先看那个扰动是从哪进来的。

# 单环:从炉温到阀门,一条链

  目标温度 ─▶ ⊕ ─▶ [PI] ─▶ [阀+炉子] ─┬─▶ 炉温
              ▲(−)      ▲              │
              │         │              │
              │      燃气压力波动       │
              └────── 温度计(慢,30s)─┘

# 扰动从阀门那里进来,但要等**炉温**变了才被发现。
# 而炉温的时间常数是 30 秒 —— 扰动早就把炉子搅乱了。

# 串级:套一个快环

  目标温度 ─▶ ⊕ ─▶ [外环 PI] ─▶ ⊕ ─▶ [内环 PI] ─▶ [阀] ─▶ [炉子] ─┬─▶ 炉温
              ▲(−)                 ▲(−)              ▲              │
              │                    │              燃气压力波动       │
              │                    └── 流量计(快,2s)──┘           │
              └───────────── 温度计(慢,30s)────────────────────────┘

★ 扰动一影响流量,**内环两秒内就发现并按住了**。
  外环的温度计还没来得及有反应,事情已经结束了。
◆ 这一章的主线

串级控制的全部道理:把扰动关在离它最近的那个环里。

一个扰动要造成多大伤害,取决于它在被发现之前能自由活动多久。而这个时间等于「从它进来的位置,到你的传感器所在位置」那一段的动态。

单环里,燃气压力波动必须一路传到炉温才被看见——它在这条路上有 30 秒的自由时间。
串级里,它一影响流量就被内环逮住——自由时间 2 秒。

而外环的控制器一个参数都没改。你没有调参,你改的是结构。

结构扰动造成的峰值偏差扰动后的累计误差 IAE
单环0.1833719.18
串级(加一个快内环)0.017360.849
相差10.6 倍22.6 倍

一个数量级。而代价是:多一个传感器(流量计)、多一个 PI、多一次整定。

这就是为什么在过程工业里,串级几乎是默认配置——凡是能找到一个「更快、更靠近扰动」的中间变量,就把它做成内环。

内环该选什么

不是随便找个中间变量都行。一个好的内环变量要满足三条:

  1. 它必须比外环快得多。经验值是快 5 到 10 倍(本例是 30 秒 vs 2 秒,15 倍,很舒服)。如果两个环速度接近,它们会互相干扰——内环还没稳定,外环已经在改它的目标了,两个环会打架。
  2. 主要扰动必须先经过它。如果扰动是从炉膛那边进来的(比如有人开了炉门),那流量内环完全帮不上忙——扰动根本不路过它。内环只能挡住它上游的扰动。
  3. 它必须可测,而且测得快。这一条经常是决定性的:理论上最好的内环变量,可能根本没有传感器。

条件 1 那个「快 5 到 10 倍」值得多说一句。它其实就是第 11 章那条律的另一个用法:对外环来说,内环的动态就是一段额外的延迟。内环越快,这段延迟越小,外环的力气预算就越充裕。如果内环只比外环快一倍,那你等于往外环里塞了一段和它自身尺度相当的延迟——那不但没帮忙,还添了乱。

整定的顺序:从里往外

串级的整定有一个固定顺序,反了就调不出来:

   ① 先把外环切成手动(或者把外环增益设成 0)
   ② 整定内环 —— 它面对的就是一个普通的单环问题
      内环要**快**,可以整定得比较紧;通常用 P 或 PI 即可
   ③ 内环闭合之后,外环看到的「对象」已经变了 ——
      它现在看到的是「内环 + 炉子」,而不是「阀 + 炉子」
   ④ 对着这个**新的**对象整定外环

★ 关键在 ③:内环一闭合,外环面对的对象就换了一个。
  拿开环时辨识的模型去整定外环,会得到完全错误的参数。

第 ③ 步那句话是串级最容易踩的坑。而它也揭示了串级的另一个好处:内环把一个可能很难缠的对象(有非线性、有滞回、特性会漂的阀门),包装成了一个对外环来说干净得多的东西。阀门的非线性被内环吃掉了,外环看到的近似是一个规规矩矩的一阶环节。

⟳ 回到那个环

串级和第 18 章的前馈,是应对扰动的两种正交手段,值得并排记住:

  • 前馈:我能测到扰动本身,所以我在它生效前就抵消掉。要求:扰动可测、有模型。
  • 串级:我测不到扰动,但我能测到一个离它更近的中间量,所以我在它扩散之前就按住。要求:中间量可测、且够快。

它们可以叠加,而且在工业上经常叠加。共同的思想是同一句话:缩短「扰动发生」到「有人反应」之间的距离。而这句话,正是第 11 章那条延迟律在扰动侧的翻版。

▸ 在现实里

汽车的三层环。巡航定速(外环,管车速)→ 发动机扭矩控制(中环)→ 喷油/点火的闭环(内环,毫秒级)。每一层都比外面那层快一个数量级。你踩油门时感受到的线性响应,是这三层环共同伪装出来的——真实的燃烧过程一点也不线性。

Kubernetes 的两层。HPA(按指标调副本数,分钟级)是外环,kubelet 的健康检查和重启(秒级)是内环。一个 Pod 挂掉不需要惊动 HPA——内环几秒内就补上了。如果没有内环,每一次单点故障都会变成一次扩缩容决策,那个环会忙得不可开交。

组织的层级。一个健康的组织结构就是串级:一线自己能处理的问题不上报(内环,小时级),需要跨团队的上一级(中环,天级),需要改战略的再上一级(外环,季度级)。而「什么事都要汇报到老板」等于把内环拆了——所有扰动都要跑完整条链路才被处理,于是每一件小事都以季度的时间尺度在系统里荡漾。

反过来,层级之间速度差不够也是常见病:如果中层和高层的决策周期都是「每周例会」,那它们就是两个速度相同的环,会持续互相推翻。这在控制论里有精确的诊断——不是沟通问题,是时间尺度没分开。

✗ 这个直觉是错的
多一个环意味着多一份延迟、多一份耦合、多一份失稳的风险,所以能用单环就别用串级。 内环减少了外环看到的延迟,而不是增加。因为对外环来说,一个整定良好的快内环比它包住的那个原始对象响应更快、更线性、也更可预测

这个直觉来自一个合理的顾虑(更多的环 = 更复杂 = 更多出错的地方),但它把因果搞反了。关键在于那个「快 5 到 10 倍」的条件:

  • 内环足够快时:外环看到的是一个近似理想的执行器。阀门的滞回、非线性、压力波动全被内环吃掉了。外环的日子变好过了。
  • 内环不够快时:那确实是在往外环里加相位滞后,会让事情变糟。所以速度差是串级能不能成立的硬门槛,不是一个可选的优化。

换句话说,这个直觉不是错的,只是它描述的是串级没做对的情况。做对的判据只有一条,而且很好查:内环闭合后的响应速度,是不是比外环快 5 倍以上?是,就上;不是,那你要么把内环调快,要么别做串级。

◈ 回读

C好一个数量级。峰值偏差从 0.18337 降到 0.01736(小 10.6 倍),扰动后的累计误差从 19.18 降到 0.849(小 22.6 倍)。

而外环控制器的参数一个字都没改。这个回报不是来自更好的整定,是来自把传感器放到了离扰动更近的地方

A 「反正最终都靠炉温反馈」——最终确实都靠炉温,但「最终」之前那段时间才是全部代价所在。扰动在被发现之前能自由活动多久,决定了它造成多大的坑。这也是第 12 章那句话的又一次应用:稳态一样,路上天差地别。 B 「好 20%–30%」——这是把串级当成一次「优化」。它不是优化,是结构改变:扰动被发现的时间从 30 秒尺度变成 2 秒尺度,差了 15 倍,所以效果也在这个量级上。结构改动的回报,通常和参数调优不在一个数量级。 D 「多一个环 = 多一份风险」——如果内环不够快,这个担心是对的。而当内环快 5 到 10 倍时,它对外环近似是一根导线,几乎不加相位。判据很简单,去量一下内环闭合后的响应时间就知道。

这一章的一句话

一个扰动的代价,取决于它在被发现之前能跑多远——所以最有效的改进往往不是把控制器调得更好,而是把传感器搬得更近。

卷 V 到此结束。你现在手上有一整套工具:三个旋钮、稳定判据、两把尺子、抗饱和、前馈、观测器、串级。最后一卷不再教新工具,而是把这套工具拿去看别的地方——仓库、机房、身体、央行。第一站是一条四级供应链:顾客的需求一点没变得更疯,而工厂看到的订单波动是它的 4.27 倍,而且每一级都做了完全理性的事。