卷 III · 迟到CH 09深度 9/24

你看到的是过去

前八章我们一直在改控制器。这一章反过来:控制器一个字都不改,Kp 钉死在 4,只动一根滑杆——你多久之后才看得见结果。从 0 秒拉到 6 秒,同一个控制器会从「一次也不越线」变成「永远停不下来」。

纯延迟可用增益上限全书的反派登场

▷ 先拧一下

那台设备(K = 1,惯性 τ = 10 秒),纯比例控制,Kp 固定为 4。没有延迟时它表现完美:单调爬升,一次也不越线,7.8 秒安静下来。

现在给它加上延迟。延迟 2 秒,也就是惯性的五分之一——听起来很小。

A 几乎没变化。2 秒相对 10 秒的惯性微不足道 B 慢一点,大概 10 秒左右安静下来,仍然不越线 C 开始越线,冲过头百分之几 D 冲过头 30%,而且要 16.6 秒才安静——比没有延迟时慢一倍多

如果你选了 A 或 B,下面这张表会让你重新排一次序。

控制器一个字都没改

请先确认这件事:下面这张表里,Kp 从头到尾都是 4。没有换算法,没有加微分,没有滤波。改的只有一件事——那个动作生效之前有多长时间「什么都不发生」。

延迟 L能用的最大增益 KuKp=4 用掉了晃的幅度安静下来要
0 s0%0.0%7.8 s
0.5 s32.05612%0.0%6.5 s
1.0 s16.35124%0.7%4.3 s
2.0 s8.50247%30.3%16.6 s
3.0 s5.89068%62.3%44.8 s
4.0 s4.58787%90.7%177.3 s
6.0 s3.289122%停不下来永远

几件事同时值得注意。

第一行的 ∞ 不是笔误。没有延迟时,这台一级惯性设备的可用增益真的没有上限——第 4 章已经证过了。所以「Kp = 4 会不会太大」这个问题,在 L = 0 时根本不成立。

延迟一出现,这个上限立刻变成有限的,而且下降得很快。0.5 秒 → 32;1 秒 → 16.4;2 秒 → 8.5;4 秒 → 4.6。你会注意到每次延迟翻倍,上限差不多对半砍——这正是第 1 章那个洗澡水龙头里出现过的规律,第 11 章会把它变成一条能验算的等式。

第三列是这张表真正的主角。Kp 一直是 4,但它「占用了多少预算」在飞快上升:12% → 24% → 47% → 68% → 87% → 122%。不是你的力气变大了,是预算变小了。越过 100% 的那一刻,系统就再也回不来了。

◆ 这一章的主线

延迟不是「让事情变慢」,延迟是在收走你的力气预算

每个反馈环都有一个「最多能用多大增益」的上限。没有延迟(也没有多级惯性)时,这个上限是无穷大——你想用多少力气都行。而延迟每翻一倍,这个上限就大约减半。

所以「延迟」这件事的正确读法不是「我要多等几秒」,而是:「我被没收了多少力气。」而力气就是精度、就是速度、就是抗扰动能力(第 5 章那三条全部由回路增益决定)。延迟收走的是这一切。

「安静下来」那一列的 U 形

最后一列有个容易被忽略的现象:它先变快,再变慢。

0 秒时 7.8 秒安静,0.5 秒时 6.5 秒,1 秒时 4.3 秒——比没有延迟还快。然后才开始恶化:2 秒时 16.6,4 秒时 177.3,6 秒时永远。

为什么加了延迟反而更快?因为「安静下来」的定义是进入终值 ±2% 并不再出来。没有延迟时曲线是单调爬升的指数,它要爬很久才进入那条窄带;有一点延迟时曲线开始有轻微的振荡成分,反而更快地进了那条带子里。

这不是延迟的功劳,是指标的口径造成的。它是一个很好的提醒:

任何一个单一指标都可以被优化到骗人。只看「调节时间」,你会得出「延迟 1 秒比不延迟更好」这种荒唐结论。要看清一个环的状态,至少要同时看:冲过头多少、多久安静、离失稳还有多远。

第 14 章会给出「离失稳还有多远」的两把标准尺子;第 24 章的自查表会把这几项一起摆出来。

惯性和延迟,代价差多少

第 3 章说过它们是「两种不同的毒」。现在可以把这句话量化了。

比较这两台设备,它们的「从动手到基本到位」都是大约 12 秒:

                              可用增益上限 Ku    Kp=4 时的表现
  ────────────────────────────────────────────────────────
   τ = 12 秒,L = 0(纯惯性)        ∞            不越线,单调
   τ = 10 秒,L = 2 秒               8.502         冲过头 30.3%

# 同样「大约 12 秒到位」,一个给你无限的力气预算,
# 另一个只给你 8.5,而你已经花掉了近一半。

★ 惯性花你的是时间,延迟花你的是力气。
  时间可以等,力气不能凭空变出来。

这也解释了一个常见的现场经验:把一个慢的传感器换成快的,往往比调一整天参数管用。因为前者是在把预算加回来,后者只是在有限的预算里重新分配。

⟳ 回到那个环

那么延迟到底是怎么收走力气的?它凭什么能做到这件事?

答案在下一章,而且是这本书里最漂亮的一个转折:延迟会把「晚」变成「反」。一个迟到的信号,在某些频率上会和原信号精确地反相——此刻你以为自己在做负反馈,实际上你在做正反馈。而正反馈是会自我放大的。

这就是那个上限的来历:你能用的力气,恰好是「在反相的那个频率上,环路增益不超过 1」所允许的力气。超过 1,误差绕一圈回来变大了,于是下一圈更大,于是永远停不下来。

▸ 在现实里

你的监控看板。一分钟粒度 + 五分钟告警窗口 = 这个环至少 5 分钟的延迟。按上面那张表的规律,这个环能承受的「纠偏力度」比一个秒级反馈的环小一到两个数量级。这就是为什么「人看着告警手动扩容」总是过量:人的动作力度是按秒级反馈的直觉来的,而这个环的预算是分钟级的。

代码评审到合并的时间。如果一个改动从提交到有人看要两天,那这个团队的质量反馈环延迟是两天。此时任何「加强代码规范」的强力动作(增大增益)都会引起震荡:一阵子管得极严,一阵子又全放开。有效的做法是缩短延迟——把评审拆小、加自动检查、pre-commit hook。同一个动作,在短延迟的环里是良药,在长延迟的环里是毒药。

疫情期间的防控政策。感染到确诊到统计上报,延迟以周计;而政策生效到感染数变化,又是一到两周。这是一个总延迟三四周的环,而它面对的是一个倍增时间只有几天的对象。结构上就注定了要么反应不足、要么过度反应——这不是决策者水平问题,是这个环的算术。

✗ 这个直觉是错的
延迟只要比系统的时间常数小很多,就可以忽略不计。2 秒延迟对 10 秒惯性的系统来说是小事。 L/τ = 0.2 已经把可用增益从无穷大砍到了 8.5。这不是「小事」,这是从「没有约束」变成「有一个很紧的约束」。

这个直觉的问题在于它用加法的眼光看延迟:「12 秒和 10 秒差不多」。而延迟在闭环里的作用是乘法性的——它决定的是一个比值(你用了预算的百分之几),不是一个绝对量。

工业界有一条流传很广的经验,可以作为对照:

  • L/τ < 0.1:延迟基本可忽略,PID 好调,可以整定得很紧。
  • 0.1 < L/τ < 0.5:延迟已经是主要约束,整定必须留余量。我们这台设备(0.2)就在这一档。
  • L/τ > 1延迟主导。此时换控制器算法收益很小,该做的是缩短延迟,或者上专门对付延迟的结构(Smith 预估器,第 18 章会提到)。

第 24 章的自查表第一项就是算这个比值——它决定了你接下来该做什么,比任何参数都更早需要知道。

◈ 回读

D冲过头 30.3%,而且要 16.6 秒才安静下来——比没有延迟时(7.8 秒)慢了一倍多。而 Kp 一个字都没改。

更值得记住的是那个背景数字:这台设备的可用增益上限从 ∞ 掉到了 8.502,而你用的 4 已经占了 47%。你没有变得更激进,是安全区变小了

A 「2 秒相对 10 秒微不足道」——这是拿延迟和惯性做加法比较。它们不在一个账本上:惯性花时间,延迟花力气预算,而力气预算是不可再生的。 B 「慢一点,仍然不越线」——「不越线」这件事在 L = 0 时是结构保证的(一阶闭环单调)。而只要加上延迟,闭环就不再是一阶的了——严格说,带纯延迟的系统有无穷多个特征根(第 11 章会真的把它们找出来)。结构一变,那个保证就没了。 C 「冲过头百分之几」——方向对了,量级差一个数量级。这个偏差很典型:人对延迟后果的直觉普遍是线性的,而真实关系里,冲过头的幅度随 L 的增长要快得多(0.7% → 30.3% → 62.3% → 90.7% → 发散)。

这一章的一句话

延迟不让你等,它让你穷——它收走的是你能用的力气,而力气就是精度、速度和抗扰动能力的全部来源。

下一章解释这件事的机制,而这是全书最不舒服的一个结论:你设计的负反馈,会在某个频率上精确地变成正反馈。那个频率不神秘,它就是周期恰好等于两倍延迟的那个——在那里,迟到的信号和原信号的相关系数是 −1.0000,一分不差。