PID 整定实录及抗积分饱和的代码实现

引言

在工业自动化和控制系统中,PID(比例-积分-微分)控制器是一种广泛应用的控制算法,它的核心作用是通过实时调整系统输入,使输出跟随期望值,从而达到控制目标。无论是在温度控制、流量控制、速度调节还是位置控制,PID 控制器都发挥着重要的作用。然而,PID 整定并不是一件简单的任务,尤其是在实际应用中,经常会面临系统震荡、过冲以及控制不稳定等问题。本文将通过一个实际的 PID 整定过程,带你走进从震荡到平稳的全过程,同时分享手动整定经验值参考表及抗积分饱和的代码实现,帮助大家更好地理解和应对 PID 整定过程中的挑战。

PID 控制器的基本原理

PID 控制器由三部分组成:比例(P)、积分(I)和微分(D)。每个部分的作用如下:

  • 比例控制(P):根据当前误差大小来调整输出。比例系数(Kp)越大,系统反应越迅速,但过大可能导致系统震荡。

  • 积分控制(I):通过对误差进行积分,消除长期存在的小误差。积分作用较强时,可以消除稳态误差,但容易引起系统的过冲和振荡。

  • 微分控制(D):预测误差变化趋势,提前调整控制量,减小系统响应的过度波动。微分作用有助于减少系统的震荡和过冲。

PID 整定的关键在于合理选择这三个参数的值,使得系统能够在快速响应与稳定之间取得良好的平衡。

2  PID 整定的挑战与难点

在理论上,PID 控制器的整定过程相对简单,但在实际应用中,整定参数的选择往往面临很多挑战。常见的困难包括:

  • 震荡与过冲:如果比例增益(Kp)过大,系统可能会出现震荡,甚至导致控制不稳定。积分增益(Ki)过大会使得系统慢慢积累误差,产生过冲。

  • 响应速度与稳定性之间的平衡:想要系统响应更快,可能会牺牲稳定性;而为了保证稳定性,系统响应可能变得过慢。

  • 积分饱和问题:当系统长时间处于某一误差状态时,积分项可能会累积过大,导致输出信号无法恢复到合适的范围,出现饱和现象。

这些问题通常会使得 PID 控制的整定过程变得复杂和具有挑战性,因此需要系统地进行调整和优化。

3  手动整定经验值参考表

手动整定 PID 参数的方法是通过逐步调整 Kp、Ki、Kd 的值,观察系统的响应,并根据实际情况做出调整。以下是一个常见的手动整定经验值参考表,适用于大多数控制系统:

图片

这个表格中的值只是参考,实际应用中需要根据具体的设备和系统进行调整。在手动整定过程中,我们通常遵循以下几个步骤:

  1. 设定初值:根据系统类型选择合适的初始值,通常可以从经验值参考表开始。

  2. 逐步调整:先调整 Kp,观察系统响应是否变快或变慢,再调整 Ki 和 Kd,直至系统达到预期的控制效果。

  3. 观察结果:观察系统的响应曲线,重点关注系统的稳定性、响应速度和是否存在震荡。

4  从震荡到平稳的过程

在实际的 PID 整定过程中,我们通常会经历以下几个阶段:

4.1 系统初始化与参数设定

假设我们正在调节一个温度控制系统,初步设定 PID 参数为 Kp=20, Ki=0.5, Kd=0.1。系统启动后,温度逐渐上升,但由于 Kp 较大,系统的响应过于剧烈,产生了较明显的震荡。

4.2 调整比例增益(Kp)

为了减少震荡,我们首先将比例增益(Kp)逐步调低至 10。此时,系统响应变得更为平稳,但温度上升较慢。我们发现,Kp 的增大提高了响应速度,但也加剧了震荡。

4.3 调整积分增益(Ki)

接着,我们调整积分增益(Ki),初步设定为 0.1。积分作用帮助消除了小的稳态误差,但过高的 Ki 可能导致系统出现过冲。因此,我们逐步增加 Ki,直到系统温度在稳态时没有明显偏差,并且没有明显的过冲。

4.4 调整微分增益(Kd)

为了进一步减少过冲并提高响应的平稳性,我们适度增加微分增益(Kd)。微分增益的作用是预测系统误差的变化趋势,并提前作出调整,从而避免温度过度波动。通过细微调整 Kd,系统的响应曲线变得更加平滑。

4.5 最终调整与验证

经过多次反复的调整,系统逐步达到了既有良好响应速度,又能保持稳定的状态。此时,我们可以看到,温度曲线平稳上升并稳定在设定值附近,没有明显的震荡和过冲。

抗积分饱和的代码实现

在一些控制系统中,积分项的累积可能会导致输出信号超出合理范围,进而引发系统饱和现象。为了避免这一问题,我们可以在代码中实现抗积分饱和的功能。以下是一个简单的抗积分饱和的 PID 控制代码示例:

  • FUNCTION_BLOCK 'PID_Controller'
  • { S7_Optimized_Access := 'TRUE' }
  • VERSION : 0.1
  • VAR_INPUT
  •       setpoint : Real;                 // 目标值
  •       measured_value : Real;           // 实际测量值
  •       Kp : Real := 10.0;               // 比例增益
  •       Ki : Real := 0.5;                // 积分增益
  •       Kd : Real := 0.1;                // 微分增益
  •       max_integral : Real := 100.0;    // 积分项的最大值,防止积分饱和
  •       min_output : Real := 0.0;        // 输出的最小值
  •       max_output : Real := 100.0;      // 输出的最大值
  •  END_VAR
  • VAR_OUTPUT
  •       control_signal : Real;            // 输出控制信号 
  • END_VAR
  • VAR
  •       prev_error : Real;                // 上一次的误差
  •       integral : Real := 0.0;           // 积分项累积误差
  •       error : Real;                     // 当前误差
  •       derivative : Real;                // 误差的微分
  • END_VAR
  • BEGIN
  •                // 计算误差
  •               #error := #setpoint - #measured_value;
  •               // 计算积分项,并进行饱和处理以防止溢出
  •               #integral := #integral + #error;
  •               IF #integral > #max_integral THEN
  •                     #integral := #max_integral;
  •               ELSIF #integral < - #max_integral THEN
  •                     #integral := - #max_integral;
  •               END_IF;
  •              // 计算误差的微分项
  •              #derivative := #error - #prev_error;
  •              // PID输出计算
  •              #control_signal := #Kp * #error + #Ki * #integral + #Kd * #derivative;
  •              // 输出信号饱和处理,防止超出最大值和最小值
  •              IF #control_signal > #max_output THEN
  •                     #control_signal := #max_output;
  •               ELSIF #control_signal < #min_output THEN
  •                     #control_signal := #min_output;
  •               END_IF;
  •             // 存储当前误差,以便下次计算微分项
  •             #prev_error := #error;
  • END_FUNCTION_BLOCK      

在这段代码中,我们通过设置一个 max_integral 值来限制积分项的累积,避免其导致控制信号超出合理范围。我们还设定了输出的最大和最小值,确保控制器不会输出超出系统承受范围的信号。

结语

PID 控制器虽然原理简单,但在实际应用中却充满挑战。通过合理的整定和调整,我们可以将系统从震荡状态引导到平稳状态,从而实现高效和稳定的控制。希望本文分享的手动整定经验值参考表以及抗积分饱和的代码实现,能够为你在实际应用中调试 PID 控制器提供一定的帮助。最终,掌握 PID 整定的技巧,将是你优化控制系统性能的关键。

图片

2025年04月

Tags: