PID 控制器
反馈回路

这是一个典型的反馈控制系统,其中:
| 含义 | 英文 | 举例(以一级喷水减温控制系统为例) | |
|---|---|---|---|
| \(SP\) | 设定值 | Set Point | 一级过热汽温设定值(一般由运行手操) |
| \(PV\) | 过程变量 | Process Value | 一级过热汽温测量值(测点一般选二级减温器前温度) |
| \(OP\) | 控制器输出 | Output | 一级减温水阀门开度 |
| \(e(t)\) | 偏差 | \(PV-SP\) | |
| \(u(t)\) | 被控对象输入 | 一级减温水流量 | |
| \(y(t)\) | 被控对象输出 | 一级过热汽温 | |
| \(d(t)\) | 扰动 | 煤质、入炉煤含水率、炉膛吸热分布 |
为了叙述方便,后文中 \(OP\) 和 \(u(t)\) 、\(PV\) 和 \(y(t)\) 是等价的。
PID分类
PID有很多分类方式:可以根据时间域特性/实现方式分为连续型和离散型;可以根据控制器输出形式(控制量本身或者控制量的增量)来分为位置式和增量式;可以根据结构形式分为串联形式PID(交互式)、并联形式PID和标准形式PID(非交互式、ISA形式、理想形式)。
连续型和离散型PID
(1)连续型 \[ u(t) = K_P e(t) + K_I \int_0^te(t)dt + K_D \frac{de(t)}{dt} \tag{1} \] (2)离散型 \[ u_k = K_Pe_k + K_I \sum_{j=0}^{k}e_j \cdot T + K_D \cdot \frac{e_k-e_{k-1}}{T} \tag{2} \] 其中 \(T\) 为采样时间。
位置式和增量式PID
(1)位置式 \[ u_k = K_Pe_k + K_I \sum_{j=0}^{k}e_j \cdot T + K_D \cdot \frac{e_k-e_{k-1}}{T} \tag{3} \] 其中 \(T\) 为采样时间。
(2)增量式 \[ \Delta{u_k} = K_P(e_k - e_{k-1}) + K_I e_k \cdot T + K_D \cdot \frac{e_k-2e_{k-1}+e_{k-2}}{T} \\ u_k = u_{k-1} + \Delta{u_k} \tag{4} \]
(3)证明位置式与增量式等价
【证明 1】: \[ \begin{aligned} \Delta{u_k} &= u_k - u_{k-1} \\ &= K_Pe_k + K_I \sum_{j=0}^{k}e_j \cdot T + K_D \cdot \frac{e_k-e_{k-1}}{T} - (K_Pe_{k-1} + K_I \sum_{j=0}^{k-1}e_j \cdot T + K_D \cdot \frac{e_{k-1}-e_{k-2}}{T}) \\ &= K_P(e_k - e_{k-1}) + K_I e_k \cdot T + K_D \cdot \frac{e_k-2e_{k-1}+e_{k-2}}{T} \end{aligned} \tag{5} \]
【证明 2】: \[ \begin{aligned} u_k &= u_{k-1} + \Delta{u_k} \\ &= u_0 + \Delta{u_1} + \Delta{u_2} + ... + \Delta{u_k} \\ &= u_0 + K_p(e_k - e_0) + K_I \sum_{j=1}^{k}e_j \cdot T + K_D \frac{e_k-e_{k-1}-e_0+e_{-1}}{T} \end{aligned} \tag{6} \]
串行、并行和标准型PID
(1)串联形式PID
\[
u(t) = K_P \left[ \left( 1 + \frac{T_D}{T_I} \right) e(t) +
\frac{1}{T_I} \int_0^t e(t) dt + T_D \frac{de(t)}{dt} \right]
\tag{7}
\]
(2)并联形式PID
\[
u(t) = K_P e(t) + K_I \int_0^te(t)dt + K_D \frac{de(t)}{dt}
\tag{8}
\] 并行结构允许比例、积分和微分作用完全解耦,即 PID
的三个参数都相互独立。
(3)标准形式PID
\[
\begin{align}
u(t) &= K_P \left[ e(t) + \frac{1}{T_I} \int_0^te(t)dt + T_D
\frac{de(t)}{dt}\right] \\
&= K_P e(t) + \frac{K_P}{T_I} \int_0^te(t)dt + K_P T_D
\frac{de(t)}{dt}
\end{align}
\tag{9}
\] 标准型结构中,修改 \(K_P\)
系数将影响比例、积分和微分作用。相较于并行结构,标准型的各参数有其明确的物理意义:
| \(K_P\) | \(T_I\) | \(T_D\) | |
|---|---|---|---|
| 名称 | 比例增益(Proportional Gain) | 积分时间常数(Integral Time) | 微分时间常数(Derivative Time) |
| 物理意义 | (1)决定当前误差 e(t) 对控制输出的影响强度; (2)增大 \(K_P\),系统响应更快,纠正动作更激烈,但容易振荡; (3)减小 \(K_P\),系统响应变慢,稳态误差可能增大。 |
(1)积分项的时间基准,决定过去误差累积对控制输出的影响; (2)积分项希望在误差持续存在的情况下不断“积累”,逐步将误差逼近 0; (3)积分作用越强(即\(T_I\)越小),系统越快尝试消除稳态误差。 |
(1)预测未来误差趋势; (2)用误差的变化率来提前做出反应; (3)增大 \(T_D\),系统会更敏感地对误差的变化速度做出反应(如防止超调),但太大容易放大噪声,系统变得不稳定。 |
| 通俗理解 | \(K_P\) 决定了当前误差的重要性。 | 在理想条件下,如果误差维持不变,系统将在 \(T_I\) 秒后将该误差完全消除。 | 预测如果当前误差增长趋势持续 \(T_D\) 秒,将会出现多大误差,提前修正。 |
解释一下为什么”在理想条件下,如果误差维持不变,系统将在 \(T_I\) 秒后将该误差完全消除“?
假设控制误差 \(e(t) = e_0\) 是一个不变的常数(比如由于一个阶跃扰动导致系统输出偏离设定值),初始控制器输出为 0,被控对象是时不变系统(即在不同时间,对系统施加相同的 \(u(t)\) ,系统输出 \(y(t)\) 不变),不考虑微分项,所以控制器的输出可以表示为: \[ \begin{align} u(t) &= K_P \left[ e_0 + \frac{1}{T_I} \int_0^t e_0 dt \right] \\ &= K_P \left[ e_0 + \frac{1}{T_I} e_0 t \right] \\ &= K_P e_0 \left[ 1 + \frac{t}{T_I} \right] \end{align} \tag{10} \] 由于 \(e_0\) 是常数,所以 \(u(t)\) 中比例部分是不变的(这也是为什么纯比例调节无法消除静态误差,因为对于时不变系统来时,施加相同的 \(u(t)\) ,系统输出 \(y(t)\) 是不变,如果 \(u(t)\) 那 \(y(t)\) 也不会变化,所以误差一直存在,即静态误差,或叫稳态误差),只有积分部分才影响 \(u(t)\) ,或者可以求一下上式的微分: \[ \frac{du(t)}{dt} = \frac{K_P}{T_I} \cdot e_0 \tag{11} \] 更加明显地看出只有积分部分才影响 \(u(t)\) 的变化,且是线性增加的(每个周期都增加 \(\frac{K_P}{T_I} \cdot e_0\)),\(u(t)\) 的变化会推动 \(y(t)\) 靠近设定值,最终消除偏差。
先假设 \(\Delta y(t) = \frac{1}{K_P} \cdot \Delta u(t)\), 即当 \(u(t)\) 变化 \(\Delta u(t)\) 时,\(y(t)\) 就变化 \(\frac{1}{K_P} \cdot \Delta u(t)\)(这里涉及了如何确定一个纯比例控制器的 \(K_P\) 值,后面讲调节方法的时候会再提及),那么如果想要消除误差 \(e_0\),就应该让 \(u(t)\) 变化 \(K_P e_0\),即 \(u(t+T) = u(t) + K_P e_0\),前面已经说明了比例作用是不会让 \(u(t)\) 变化的,所以其中 \(T\) 就表明了积分作用需要 \(T\) 时刻让 \(u(t)\) 变化 \(e_0\),故现在只需要证明 \(T_I = T\) 即可,证明如下: \[ \begin{align} & u(t + T) - u(t) = K_P e_0 \\ &\implies K_P e_0 \left[ 1 + \frac{t+T}{T_I} \right] - K_P e_0 \left[ 1 + \frac{t}{T_I} \right] = K_P e_0 \\ &\implies K_P e_0 \frac{T}{T_I} = K_P e_0 \\ &\implies T = T_I \end{align} \tag{12} \]
说明了系统将在 \(T_I\) 秒后将误差 \(e_0\) 彻底消除,积分项在 \(T_I\) 秒内就能产生与比例项相等的作用。
PID整定
PID控制器不同参数的阶跃响应分析

图 5 显示了比例系数\(K_P\)和积分时间\(T_I\)的差异如何影响 PI 控制器的响应。正中间的图形为基本情况,随着参数的整定,无论是翻倍还是减半,过程的每一个动态响应都截然不同。左上角的图显示,当比例作用加倍(比例系数加倍)且积分作用加倍(积分时间减半)时,控制器会产生大而缓慢的阻尼振荡。相反,右下角的图显示,当控制器比例作用减半(比例系数减半)且积分作用减半(积分时间加倍)时,响应变慢。
比例作用和积分作用增强时,系统振荡;比例作用和积分作用减弱时,系统响应变慢。

比例系数 \(K_P\) 加大,使系统的动作灵敏,速度加快,振荡次数增多,调节时间变长。当比例系数太大时,系统会趋于不稳定。加大比例系数,在系统稳定的情况下,可以减小余差,提高控制精度,却不能完全消除余差(有余差,系统始终未达到1)。

PI 控制器主要用来改善控制系统的稳态性能。因为单纯增大 P 的方法减小余差的同时会使系统的超调量增大,破坏了系统的平稳性,而积分环节的引入可以与 P 控制合作来消除上述的副作用。此外,引入积分作用可以消除余差。

增加微分有利于加快系统的响应速度,使系统的超调量减小,稳定性增加,同时增大比例可以进一步加快系统的响应速度,使系统更快速。
自衡对象和积分对象
工业过程中常见的过程有自衡和非自衡两种,下图显示了两个过程对输出阶跃变化的理想化趋势。左边的过程是非积分对象,也叫自衡对象;右边的过程是非自衡对象,也叫积分对象。如下图左侧所示,自衡对象能够响应控制器输出并逐渐达到新的稳态操作点,典型的自衡对象如调节阀控制的流量;如右侧所示,积分过程没有平衡点,即控制器输出变化后过程在一个方向持续变化,除非进行新的干预否则积分过程将持续变化而无法达到新的稳态,典型的积分对象如液位。

PID控制器正反作用判定

| 正作用 | 反作用 | |
|---|---|---|
| 偏差计算 | \(e = PV-SP\) | \(e = SP-PV\) |
| \(PV\)与\(OP\)的关系 | \(PV\)与\(OP\)同向(\(PV \nearrow\),\(OP \nearrow\) ) | \(PV\)与\(OP\)反向(\(PV \nearrow\),\(OP \searrow\) ) |
| 控制系统 | 反过程 | 正过程 |
判定PID控制器应该采用正作用还是反作用的方法:
(1)先判定被控对象是正过程还是反过程
根据控制量与被控量直接的物理因果关系来判断,当控制量增大,被控量也增大时,为正过程;当控制量增大,被控量减小时,为反过程。火电中常见的正过程有:汽机阀门控制(汽机阀门开度增大,蒸汽流量增大);反过程有:减温水控制(喷水减温阀门开度增大,蒸汽温度减小)。
(2)根据被控对象选择正反作用
如果被控对象是反过程则控制器应选择正作用,如果是正过程则选择反作用。
关于PID的调试技巧
PID的整定方法有很多,这里只是整理一下自己的调试思路。
(1)研究被控对象,确定其是正过程还是反过程,然后确定PID控制器应该采用反作用(正过程)还是正作用(反过程)
这里以一级过热蒸汽喷水减温控制系统为例:(实际上它的控制系统是一个串级PID,这里为了方便叙述我们简化了,调试的方法的都是类似,只不过串级PID需要先将内环PID先整定好,使得它内环的PV值可以很快的去跟随SP值(外环的输出OP)。)

首先确定我们的目的是通过控制减温水阀门的开度来控制喷水减温的流量,最终将屏式过热器后的蒸汽温度控制在设定值的附近。阀门开度(控制量)增加,蒸汽温度(被控量)减小,所以该被控对象为反过程,PID控制器应该选择正作用。PID控制器的SP为屏式过热器后汽温设定值,PV为屏式过热器后汽温测量值,OP为减温水阀门开度。
(2)确定纯比例调节的\(K_P\)数值
这里提到的 \(OP\) 和 \(u(t)\) 、\(PV\) 和 \(y(t)\) 是等价的。
纯比例控制: \[ u(t) = K_P \cdot e(t) \tag{13} \] 这里首先需要确定单位OP动作可以影响多少PV,假设PV和OP是存在线性关系的,即
\[ y(t) = K \cdot u(t) + b \tag{14} \]
可以采集历史数据后,进行线性回归获得这个 \(K\) 值,它也被叫做过程模型的增益,或者表示为
\[ K = \frac{\Delta PV}{\Delta OP} \tag{15} \]
此时便确定了单位OP动作可以影响多少PV,即OP每变化单位1,PV会改变单位 \(K\)。所以当PV与SP的偏差为单位1的时候,OP就需要动作 \(\frac{1}{K}\),所以这个 \(\frac{1}{K}\) 的绝对值就是纯比例调节应该设置的 \(K_P\) 值,即: \[ K_P = \vert \frac{1}{K} \vert \tag{16} \]
解释一下为什么 “\(\frac{1}{K}\) 的绝对值就是纯比例调节应该设置的 \(K_P\) 值”?
刚才已经确定了OP每变化单位1,PV会改变单位 \(K\),即 \[ \Delta y(t) = K \cdot \Delta u(t) \tag{17} \] 假设 \(t\) 时刻因阶跃扰动产生了一个控制误差 \(e(t) = e_0\),对于纯比例控制,如果想消除这个偏差 \(e_0\),需要让 \(y(t)\) 改变 \(e_0\),那么 \(\Delta u(t)\) 应该满足 \(\Delta u(t) = \frac{1}{K} e_0\),怎么让 \(\Delta u(t) = \frac{1}{K} e_0\) 呢?根据纯比例控制的PID公式可知: \[ \begin{align} & u(t) = K_P \cdot e(t) \\ & \implies u(t) - u(t-1) = K_P \cdot \left[ e(t) - e(t-1) \right] \\ & \implies \Delta u(t) = K_P \cdot \left[ e_0 - 0 \right] \\ & \implies \Delta u(t) = K_P e_0 \\ \end{align} \tag{18} \]
当 \(K_P = \frac{1}{K}\) 时,\(\Delta u(t) = \frac{1}{K} e_0\),但如果系统时反过程,那么 \(K < 0\), 所以 \(K_P\) 设为 \(\frac{1}{K}\) 的绝对值,即\(K_P = \vert \frac{1}{K} \vert\)。
注意在拟合模型增益 \(K\)
的时候,要消除系统滞后带来的影响,即拟合: \[
y(t+\tau) = K \cdot u(t) + b
\tag{19}
\]

如图 12 所示,可以找到一些关联数据段\(( \ u(t), \ y(t+\tau) \ )\),拟合出不同时间段(不同工况下)的模型增益 \(K\) ,然后可以利用核密度估计等方法找到它们的中心点作为模型增益 \(K\) ,进而计算出纯比例控制下的 \(K_P\) 值。
(3)将计算得的纯比例调节下的 \(K_P\) 值和一个较大的\(T_I\)值(比如 \(T_I = 1000s\))设入PID控制器,然后逐渐减小 \(K_P\)(减小比例作用) 和 \(T_I\) (增加积分作用)。
参考
[1] 冯少辉. PID 参数整定与复杂控制[M]. 北京: 化学工业出版社, 2023(11).
附件
【代码】