卷 II · 三个旋钮CH 08深度 8/24

三个旋钮一起拧

「PID 调参靠玄学」是一句流传很广的话,而它八成来自没读过那张表的人。1942 年就有人证明:只要量出两个数,全部参数可以直接算出来。这一章讲那张表,讲它为什么总是冲过头,也讲它为什么就是要冲过头。

Ziegler–Nichols临界增益与临界周期整定是有理论的

▷ 先拧一下

你面前一台完全陌生的设备。你不知道它的增益、惯性、延迟,什么都不知道。你只能:改控制器参数,看它的反应。

问:最少需要量几个数,才能算出一组能用的 PID 参数?

A 量不出来。必须先建模,知道 K、τ、L 才谈得上整定 B 三个:增益、惯性、延迟——也就是把模型辨识出来 C 两个。而且都可以在完全不建模的情况下直接测出来 D 一个:只要知道它多快就够了

1942 年的那张表

John Ziegler 和 Nathaniel Nichols 当时在美国泰勒仪表公司。他们要解决的是一个非常具体的商业问题:卖出去的控制器,现场的人不会调

他们给出的方案漂亮得不像话——只需要做一个实验:

◆ 这一章的主线

把积分和微分都关掉,只留比例。然后慢慢加大 Kp,直到系统开始持续地、幅度不增不减地振荡。

记下两个数:

  • 此刻的增益,叫临界增益 Ku(ultimate gain);
  • 此刻振荡的周期,叫临界周期 Tu(ultimate period)。

就这两个数。把它们代进一张表,PID 三个参数全出来了。

完全不需要知道这台设备的增益、惯性、延迟各是多少。这个实验直接问出了控制器真正关心的那件事:这个环最多能承受多大力气,以及它天然想以什么频率晃。

那张表:

  控制器类型     Kp          Ti           Td
─────────────────────────────────────────────────
   P            0.50 Ku      —            —
   PI           0.45 Ku      Tu / 1.2     —
   PID          0.60 Ku      Tu / 2       Tu / 8

# Ti 是「积分时间」,Td 是「微分时间」。换算成本书用的记号:
#    Ki = Kp / Ti        Kd = Kp × Td

# 读这张表的三个观察:
#  ① 三种类型的 Kp 都在 0.5 Ku 上下 —— 用一半的临界力气,是个通用的起点。
#  ② 加了积分之后 Kp 要往下调(0.50 → 0.45),因为积分项自己也在
#     贡献相位滞后,得给它腾出余量。
#  ③ 加了微分之后 Kp 可以往上调(0.45 → 0.60),因为微分项还了一些
#     相位回来 —— 你多买的那点稳定性,可以立刻换成力气花掉。

光是 ②③ 这两条观察,就已经把三个旋钮的相互关系说清了大半:它们在争夺同一份「相位预算」。这份预算是什么、有多大、怎么算,是卷 III 和卷 IV 的内容。

在我们那台设备上试一遍

本书从第 9 章起会反复用同一台设备当靶子:增益 K = 1,惯性 τ = 10 秒,纯延迟 L = 2 秒。它是过程工业里最常见的模型(学名 FOPDT,一阶加纯延迟),也很像一个真实的加热回路。

它的两个数是:Ku = 8.5024,Tu = 7.44 秒。(第 11 章会用四种互相独立的方法把这两个数算出来,并解释它们从哪来。)

代进表里:

整定法KpKiKd脾气
Ziegler–Nichols PI3.82610.616990快,冲过头 44.4%
Ziegler–Nichols PID5.10151.37114.7453更快,也更凶
Tyreus–Luyben2.65700.162300不冲过头,稳当
IMC(λ = 2τ)0.45450.045450非常稳,也非常慢

自己拧一遍。四个预设按钮可以一键切换,也可以自己拖:

为什么 Z-N 总是冲过头

你会发现 Ziegler–Nichols 给的参数在这台设备上冲过头 44.4%。四成四!按第 4 章那张表,这大约对应 ζ ≈ 0.25——晃得相当明显。

很多人第一次用完 Z-N 的反应是「这表不行啊」。但它不是不行,是它优化的根本不是你以为的那件事

Ziegler 和 Nichols 的设计目标叫「四分之一衰减比」(quarter amplitude decay):让每一次振荡的幅度衰减到上一次的四分之一。这在他们的场景里是合理的——1940 年代的过程工业,设定值几乎从不改变(炉温常年就那一个),控制器一辈子在干的事是抵抗扰动:进料变了、环境温度变了、燃气压力波动了。

对于抵抗扰动,你要的是反应快、恢复快,至于恢复过程中晃两下没人在乎。而 Z-N 在这件事上确实很强:在上面的 demo 里,Z-N 的 IAE(误差的累计面积,越小越好)是 5.46,而稳当的 IMC 整定是 22.00——差了四倍

# 同一台设备,两种整定,两种评分标准

                     过冲     调节时间    IAE(累计误差)
  ─────────────────────────────────────────────────
   Ziegler–Nichols   44.4%     20.9 s        5.46
   IMC(λ = 2τ)      0.0%     79.9 s       22.00

# 如果你的评分标准是「不许冲过头」,Z-N 惨败。
# 如果你的评分标准是「误差的累计面积」,Z-N 赢了四倍。

★ 没有「最好的整定」,只有「针对某个评分标准最好的整定」。
# 而这个评分标准,是你的业务定的,不是控制理论定的。

所以,Z-N 该怎么用?现代的普遍做法是:把它当起点,不当终点。拿它算出一组参数,然后按你在乎的东西往回退——大多数场合会把 Kp 乘个 0.5 到 0.8。而如果你在乎的是「不许超调」(比如给电池充电、给病人输药、给锅炉升温),那就直接用 Tyreus–Luyben 或者 IMC 这类保守整定,别绕道 Z-N。

✎ 术语正名:「整定」

整定(tuning)这个词在中文技术圈经常被说成「调参」,然后就和机器学习里那种「网格搜索碰运气」混为一谈了。

它们不是一回事。机器学习的调参之所以要搜,是因为超参数和最终指标之间没有解析关系。而 PID 整定:你面对的是一个可以写出来的动力学系统,参数和过冲、调节时间、稳定裕度之间有闭式关系(第 6 章那两行 ζ 和 ωn 就是),而且有一百年的理论。

「PID 靠玄学」这句话,真正准确的版本是:「如果你不知道对象的 Ku 和 Tu,那 PID 靠玄学。」而这两个数,做一次实验就能量出来。

还有别的整定法,而且它们各有各的脾气

Z-N 是最有名的,但绝不是唯一的。值得知道的还有两类:

Tyreus–Luyben:同样只要 Ku 和 Tu,但参数保守得多(Kp = Ku/3.2Ti = 2.2 Tu)。它专门为化工过程设计——那里的设备贵、事故代价大,宁可慢也不要晃。在我们这台设备上它给出 0.0% 过冲、40.2 秒调节时间

IMC(内模控制)/ λ 整定:这一类需要你知道对象模型(K、τ、L),但回报是你可以直接指定你想要的闭环速度——那个 λ 就是你希望的闭环时间常数。λ 越大越稳越慢。它的公式对 FOPDT 是:

   Kp = τ / ( K (λ + L) )        Ti = τ

# 这个式子有一个非常好的性质:λ 是一个**有物理意义**的旋钮。
# 「我希望这个环大约 20 秒稳下来」→ λ = 20,参数直接出来。
# 而 Z-N 里没有任何一个旋钮对应「我希望它多快」。

# 我们那台设备取 λ = 2τ = 20:
   Kp = 10 / (1 × (20 + 2)) = 0.4545      Ti = 10  →  Ki = 0.04545

IMC 在今天的工业界比 Z-N 更常用,原因就是那个 λ:它把整定从「调出来」变成了「指定出来」。

▸ 在现实里

做那个临界实验有风险。「加大增益直到持续振荡」在真设备上意味着让它真的晃起来——对锅炉、反应釜、飞行器来说这是不可接受的。所以现代做法通常是继电反馈实验(Åström 和 Hägglund,1984):临时把控制器换成一个开关式的继电器,系统会自动进入一个小幅度的极限环,从这个环的周期和幅度就能反推出 Ku 和 Tu,而且振幅可控。今天几乎所有带「自整定」按钮的温控器,按下去做的就是这件事——第 16 章会讲那个极限环本身。

你的自动扩容也有 Ku 和 Tu。把扩容的比例系数一点点加大,直到机器数开始周期性地上下摆——那个摆动周期就是 Tu,而它约等于「指标延迟 + 机器启动时间」的两倍上下(第 11 章会解释为什么是两倍)。第 22 章会让你看到它真的这么摆。

组织也一样。一个团队「多久能感知到方向错了」(延迟)和「纠偏动作多大」(增益)决定了它会不会来回横跳。而 Z-N 的忠告在这里同样成立:先找出它开始横跳的那个力度,然后只用一半。

✗ 这个直觉是错的
存在一组「最优的 PID 参数」,找到它就大功告成。 「最优」必须先说清楚是对哪个指标最优,而不同指标之间是真实冲突的。同一台设备上,按「累计误差」最优的整定,会按「不许超调」的标准得零分。

这一条比听起来重要,因为它决定了你该问什么问题。别问「这个 PID 调好了吗」,问:

  • 这个环主要在对付什么?目标经常变(跟随),还是目标基本不动、专门抗扰动?——Z-N 优化后者,对前者不友好。
  • 超调的代价是什么?温度冲过头只是浪费一点能量,还是会烧掉产品?前者可以激进,后者必须保守。
  • 执行器受得了吗?IAE 最小的整定往往让阀门动得最频繁——你在拿设备寿命换曲线好看(第 7 章那个 11 倍)。

这三个问题回答完,参数基本就定了。整定的难点从来不在数学,在于说清楚你到底要什么。

◈ 回读

C两个数:临界增益 Ku 和临界周期 Tu。而且它们都可以在完全不建模的情况下直接量出来——把 I 和 D 关掉,加大 Kp 直到持续振荡,读那一刻的增益和周期。

这件事之所以令人惊讶,是因为它意味着:你不需要理解这台设备,你只需要问它一个正确的问题。而这个问题是「你最多能承受多大力气」。

A 「必须先建模」——这是一个非常合理但被 1942 年的事实推翻的直觉。建模当然更好(IMC 就需要模型,而且回报是那个有物理意义的 λ),但它不是必要条件。 B 「三个:把模型辨识出来」——K、τ、L 这三个数确实能推出 Ku 和 Tu(第 11 章就是这么算的),所以这条路走得通。但它比必要的多问了一个数:Ku 和 Tu 已经把 K、τ、L 里控制器关心的那部分信息压缩完了。多出来的那一维,对整定没有贡献。 D 「一个就够」——只知道「多快」不够,因为你还需要知道「能用多大力气」。而这两件事在带延迟的系统里不是同一个数:第 11 章会给出它们的确切关系,也会告诉你一个更漂亮的事实——这两个数其实由同一个东西决定。

这一章的一句话

整定不是玄学,是一个只需要两个测量值的算术;难的从来不是算参数,而是先说清楚你到底在优化什么。

卷 II 到此结束。你现在有了三个旋钮,也知道了怎么调它们。但整卷都在回避一个问题:那个 Ku 到底是从哪来的?为什么这台设备恰好是 8.5024,不是 850,也不是无穷大?

卷 III 回答这个问题,而答案会让前面八章的很多东西重新排队。剧透:把这台设备的延迟从 2 秒改成 4 秒,Ku 会从 8.5024 掉到 4.5868——几乎正好是一半。