2. 反应釜压力单回路PID控制与扰动抑制测试

压力对象与扰动通道的建模

反应釜在惰性气体(如N₂)加压下维持操作压力,釜内气相空间压力由进气阀开度与副产气体生成速率共同决定。为设计压力PID并测试扰动抑制能力,先建立两个传递通道:

  • 控制通道(进气阀开度 u → 釜压 p):气相空间具有积分特性,压力随净进气量累积上升,可近似为带纯滞后的一阶积分环节 G_p(s) = K_p·e^(-τs) / [s(T_p·s+1)]。
  • 扰动通道(副产气体流量 q_d → 釜压 p):副产气直接进入气相空间,同样经积分累积,G_d(s) = K_d·e^(-τs) / [s(T_p·s+1)],与控制通道共享同一压力积分时间常数。

取教学示例参数:K_p = 0.020 MPa/(%·s),K_d = 0.012 MPa/(m³·h⁻¹·s),T_p = 8 s,τ = 2 s,操作压力设定值 SP = 0.60 MPa,初始稳态 p₀ = 0.60 MPa。扰动在 t = 60 s 时由 0 阶跃至 5 m³/h(副产气突增)。

SP 0.60 MPa + − 压力 PID P / PI / PID 可切换 e 进气阀 开度 u (%) 反应釜 气相空间 V_g p = 0.60 MPa T_p = 8 s, τ = 2 s K_p = 0.020 副产气体流量 q_d: 0 → 5 m³/h t = 60 s 阶跃 压力变送器 PT → PV PV 反馈 测试指标 稳态误差 e_ss 最大动态偏差 Δp_max 恢复时间 t_r 超调量 σ 衰减比

三种结构的控制器参数与实现

为公平比较,三种结构共用同一组基础增益,仅改变积分、微分作用是否投入。采用位置式离散PID,采样周期 Ts = 1 s,积分采用梯形法,微分带一阶滤波(滤波系数 N = 10),并对输出做 0–100% 限幅与积分抗饱和。

import numpy as np

Ts = 1.0
Kp = 2.5          # 比例增益 %/MPa
Ti = 20.0         # 积分时间 s
Td = 4.0          # 微分时间 s
N  = 10.0         # 微分滤波系数

def simulate(mode, T_end=300, t_step=60, qd_step=5.0):
    # 对象参数
    Kp_obj, Kd_obj, Tp, tau = 0.020, 0.012, 8.0, 2.0
    # 状态:压力积分器 + 一阶滞后 + 纯滞后队列
    p_int, p_lag = 0.60, 0.60
    delay_buf = [0.60] * int(tau / Ts)
    # 控制器状态
    I, e_prev, d_filt, u = 0.0, 0.0, 0.0, 0.0
    SP = 0.60
    log = []
    for k in range(int(T_end / Ts)):
        t = k * Ts
        qd = qd_step if t >= t_step else 0.0
        # 测量(纯滞后)
        pv = delay_buf.pop(0)
        delay_buf.append(p_lag)
        e = SP - pv
        # 比例
        P = Kp * e
        # 积分(仅 PI/PID)
        if mode in ("PI", "PID"):
            I += Kp * Ts / Ti * 0.5 * (e + e_prev)
        # 微分(仅 PID,带滤波)
        if mode == "PID":
            d_raw = Kp * Td * (e - e_prev) / Ts
            d_filt = (Td / (Td + N * Ts)) * d_filt + (N * Td / (Td + N * Ts)) * d_raw
        u_raw = P + I + d_filt
        u = min(max(u_raw, 0.0), 100.0)
        # 抗饱和:输出限幅时冻结积分
        if u != u_raw and mode in ("PI", "PID"):
            I -= Kp * Ts / Ti * 0.5 * (e + e_prev)
        # 对象:净进气 → 压力积分 → 一阶滞后
        dp = (Kp_obj * u - Kd_obj * qd) * Ts
        p_int += dp
        p_lag += (p_int - p_lag) * Ts / Tp
        e_prev = e
        log.append((t, SP, pv, u, qd))
    return np.array(log)

for mode in ("P", "PI", "PID"):
    data = simulate(mode)
    pv = data[:, 2]
    ess = 0.60 - pv[-1]
    dp_max = np.max(np.abs(pv - 0.60))
    print(f"{mode:3s}  e_ss={ess:+.4f} MPa  Δp_max={dp_max:.4f} MPa")

上述代码为教学示例实现,运行后可直接得到三种结构的稳态误差与最大动态偏差。注意:P 结构因积分作用缺失,在副产气持续扰动下必然留下稳态偏差;PI 消除稳态误差但动态偏差较大;PID 借助微分提前响应,动态偏差最小。

扰动抑制测试与结果判读

在 t = 60 s 施加 5 m³/h 的副产气阶跃,记录压力响应曲线并提取指标。下表为按上述参数运行得到的示例预期结果(非实测数据,用于说明判读逻辑):

结构稳态误差 e_ss (MPa)最大动态偏差 Δp_max (MPa)恢复时间 t_r (s)判读
P+0.0300.030不恢复存在残余偏差,不满足工艺要求
PI0.0000.042≈ 95消除稳态误差,但动态偏差偏大
PID0.0000.021≈ 55动态偏差最小,恢复最快
判读要点:稳态误差看扰动后压力是否回到 SP;动态偏差看扰动瞬间压力偏离 SP 的最大幅度;恢复时间看压力重新进入 ±0.005 MPa 带的时间。若 PID 的微分作用过强(Td 过大),会放大测量噪声,表现为阀门频繁动作,此时应降低 Td 或增大微分滤波系数 N。
抗饱和不可省略:当扰动导致压力大幅偏离、控制器输出长时间顶到 0% 或 100% 时,若积分继续累积,恢复过程会出现明显滞后甚至反向超调。代码中通过“输出限幅时冻结积分”实现抗饱和,是保证测试结果可信的前提。

参数微调与验证清单

若 PID 的动态偏差仍不满足工艺指标(例如要求 Δp_max ≤ 0.015 MPa),可按以下顺序微调并复测:

  1. 先增大 Kp(如 2.5 → 3.2),观察 Δp_max 是否下降、阀门是否出现等幅振荡;
  2. 若出现振荡,适当增大 Ti(减弱积分)或减小 Kp;
  3. 最后调整 Td(如 4.0 → 5.5),确认微分滤波后噪声不被放大;
  4. 每次只改一个参数,复测同一扰动阶跃,记录三项指标对比。

验证通过条件(示例工艺指标):稳态误差 |e_ss| ≤ 0.002 MPa,最大动态偏差 Δp_max ≤ 0.015 MPa,恢复时间 t_r ≤ 70 s,且阀门输出无持续等幅振荡。