尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Smith预估补偿消除纯滞后:Simulink仿真与工程实现

Smith预估补偿消除纯滞后:Simulink仿真与工程实现 简介一份面向自动化、控制工程与MATLAB仿真学习者的专业参考文献围绕史密斯预估补偿控制方法展开系统讲解纯滞后系统的补偿原理、闭环特征方程分析、预估补偿器结构设计以及使用Simulink搭建仿真模型的完整思路适合课程设计、毕业设计、科研入门和工业过程控制研读。资源包体为单个PDF文档共1个文件格式为pdf大小仅161KB便于直接阅读与本地保存。内容以科技论文形式呈现包含史密斯预估补偿系统方框图、PID反馈控制对比、纯滞后对象建模、加入随机干扰后的仿真结果与稳定性分析等关键信息可直接用于理解参数整定、抗扰动能力评估以及控制方案改进方向。目前已有2339人学习对于需要快速掌握纯滞后系统补偿控制或撰写相关实验报告的学习者来说是一份短小精悍、值得反复查阅的参考资料。1. 史密斯预估补偿让PID不再对着纯滞后空等纯滞后是过程控制里最让PID难受的对象之一控制量已经加上了被控参数却在 τ 秒内毫无反应等到曲线终于开始动误差已经积累了很久。这不是理论上的特例而是热力管道温度、传送带配料、长距离管道压力这些场景的常态。常规PID面对大滞后要么压低增益去换稳定要么眼睁睁看着超调和长时间振荡。史密斯预估补偿的思路不是换掉PID而是在PID外面加一个过程参考模型把纯滞后项从闭环特征方程里“请”出去让反馈信号提前 τ 时刻反映控制作用的效果。这篇文章以一篇 2007 年发表的 Simulink 仿真文献为底稿对象是 K2、T4、τ4 的一阶惯性加滞后系统我会从数学原理讲到模型搭建再讲PI参数整定、随机干扰和模型失配时的表现最后落到工程化落地时容易翻车的几个细节。适合正在做过程控制课程设计、仿真验证或准备把Smith预估移植到DCS/PLC项目里的工程师。2. 从特征方程看史密斯预估补偿为什么能消除纯滞后2.1 纯滞后为什么会让PID束手束脚单回路纯滞后系统的闭环传递函数可以写成Y(s)/R(s) Wc(s)Wp(s)e^{-τs} / [1 Wc(s)Wp(s)e^{-τs}]对应的闭环特征方程是1 Wc(s)Wp(s)e^{-τs} 0问题就出在分子和分母里的 e^{-τs} 上。e^{-τs} 在频域里不改变幅值只提供随频率线性增加的相位滞后。随着频率升高开环奈奎斯特曲线被不断向下“拽”向临界点 (-1, j0)相位裕度和幅值裕度同时缩水。为了保住稳定只能减小控制器增益结果就是系统响应变慢、调节时间拉长如果不减小增益系统又会因为滞后产生明显超调甚至持续振荡。用MATLAB可以直接看到这个效果。对被控对象 2/(4s1) 加一个 PI 控制器 0.1 0.08/s然后画开环伯德图s tf(s); Gp 2/(4*s 1) * exp(-4*s); C 0.1 0.08/s; margin(C * Gp)margin命令会返回增益裕量、相位裕量以及对应的穿越频率。对带延迟对象运行后会看到相位裕量明显偏小这正是大滞后系统难以用高增益的原因。PID 的超前能力有限只能在一个较窄的频率范围内补偿相位而 e^{-τs} 的相位延迟是宽频带的所以靠 PID 本身无法根治。2.2 预估算法的核心把延迟项从分母里挪出去Smith预估补偿的基本控制策略是构造一个被控过程的参考模型设参考模型的不含延迟部分为 Gm(s)真实对象为 Wp(s)e^{-τs}且 Gm(s) Wp(s)。预估补偿器取Gm(s)(1 - e^{-τs})把这个补偿器接到控制器输出端补偿信号为 Gm(s)(1 - e^{-τs})u(s)然后加到反馈通道上。此时反馈到误差比较点的信号不再是单纯的 y(t)而是y(t) Gm(s)(1 - e^{-τs})u(t)也就是说误差为e(s) r(s) - [y(s) Gm(s)(1 - e^{-τs})u(s)]经过代数整理在参考模型与真实对象完全一致时闭环传递函数变成Y(s)/R(s) Wc(s)Gm(s)e^{-τs} / [1 Wc(s)Gm(s)]特征方程变为1 Wc(s)Gm(s) 0可以看到 e^{-τs} 从特征方程里消失了。注意分子上的 e^{-τs} 仍然保留这意味着系统的输出在时间轴上仍然会滞后 τ 秒不会“预知未来”。史密斯补偿消除的是纯滞后对稳定性的影响而不是让被控量提前响应。可以用一段MATLAB脚本验证Smith补偿后闭环极点的变化。这里关键看分母s tf(s); Gm 2/(4*s 1); C 0.1 0.08/s; G_smith_den 1 C * Gm; % 用2阶Padé近似模拟真实滞后便于比较极点 Gp_approx Gm * pade(exp(-4*s), 2); G_pid_den 1 C * Gp_approx; fprintf(Smith闭环极点:\n); pole(G_smith_den) fprintf(普通PID闭环极点(滞后近似):\n); pole(G_pid_den)pole(G_smith_den)给出的是无延迟特征方程 1 C*Gm 的极点它们完全由控制器和对象惯性决定与 τ 无关。而pole(G_pid_den)因为分母里包含了延迟项在近似后会出现更靠近虚轴的极点说明稳定裕度变小。实际工程中并不需要用 Padé 近似直接看 Simulink 的阶跃响应就能感受到差异。需要强调一个容易误解的地方Smith预估补偿器的表达式 Gm(s)(1 - e^{-τs}) 不是一个单独的“死区补偿块”而是“无延迟预测输出”减去“延迟后的预测输出”。实现上必须有两个并联路径一个通向正常模型一个经过传输延迟然后在求和点做减法。2.3 传递函数里的每个符号对应什么模块在把数学公式转成 Simulink 模型之前先把符号和实际模块的对应关系理清楚。符号含义Simulink中的对应Wc(s)控制器本文用PIPID ControllerP0.1I0.08Wp(s)对象不含延迟部分Transfer Fcn2/(4s1)e^{-τs}纯滞后Transport DelayDelay Time4Gm(s)参考模型不含延迟部分Transfer Fcn12/(4s1)Gm(s)e^{-τs}参考模型延迟后输出Transfer Fcn1 Transport Delay1 串联Gm(s)(1-e^{-τs})预估补偿器上述两路输出求差表格里的关键点是真实对象路径和参考模型路径必须各自独立不能共用一个 Transfer Fcn 再加一个 delay。很多初次搭建的人把 Transport Delay 直接加在反馈回路上那等于把整个反馈信号延迟了而不是构造补偿量。正确做法是让控制量同时走两条路一条算出无延迟的预测值另一条算出延迟后的预测值再求差。3. 在Simulink里搭建Smith预估补偿仿真系统3.1 模块清单与库路径这一节以 MATLAB 6.5 / Simulink 5.0 环境为背景但模块路径在现代版本里变化不大。典型工业对象取放大系数 K2时间常数 T4滞后时间 τ4传递函数为Wp(s)e^{-4s} 2/(4s1) · e^{-4s}在 Simulink 中依次拖出下列模块模块库路径参数设置StepSimulink/Commonly Used BlocksStep time0Final value1SumSimulink/Commonly Used Blocks需要两个或三个输入符号设为 I-PID ControllerSimulink/ContinuousP0.1I0.08D0Transfer FcnSimulink/ContinuousNumerator[2]Denominator[4 1]Transport DelaySimulink/ContinuousDelay Time4Snk (Scope)Simulink/Sinks显示仿真结果需要特别注意 PID 模块在旧版 Simulink 里位于 Simulink Extras 库下的 Additional Linear 子模块库中新版统一放到 Continuous 里。如果没有 PID Controller也可以用 Gain 模块加 Integrator 模块自行搭 PI 结构。3.2 搭建步骤与关键连线新建一个模型窗口按下图思路搭建。主线是Step 输出 r → Sum1 求误差 → PID → 控制量 u → 真实对象。真实对象由 Transfer Fcn 和 Transport Delay 串联构成输出 y。Smith补偿支路从控制量 u 分一路出来进入预测器。预测器的无延迟部分用 Transfer Fcn1 实现再用 Transport Delay1 实现延迟。这样有两个输出ym_undelay 和 ym_delay。用 Sum3 计算 ym_undelay - ym_delay得到补偿量。最后用 Sum2 把真实输出 y 和补偿量相加作为反馈信号 b。反馈信号 b 进入 Sum1 与 r 相减形成误差。具体连线时要注意符号方向。推荐三个求和模块这样设置Sum1两个输入符号I-第一个是给定 r第二个是反馈 b输出误差 e。Sum2两个输入符号把 y 和补偿量相加。Sum3两个输入符号-求无延迟预测输出减去延迟后预测输出。搭建完成后用下面的命令设置关键模块参数set_param(smith_sim/Transfer Fcn, Numerator, [2]); set_param(smith_sim/Transfer Fcn, Denominator, [4 1]); set_param(smith_sim/Transport Delay, DelayTime, 4); set_param(smith_sim/Transfer Fcn1, Numerator, [2]); set_param(smith_sim/Transfer Fcn1, Denominator, [4 1]); set_param(smith_sim/Transport Delay1, DelayTime, 4); set_param(smith_sim/PID Controller, P, 0.1); set_param(smith_sim/PID Controller, I, 0.08);这里smith_sim是模型文件名实际上应该使用你保存的模型名。PID Controller 的I参数表示积分增益 Ki不是积分时间。如果使用旧版 PID 模块参数名可能是Kp、Ki、Kd需要对应调整。Numerator和Denominator是传递函数的系数向量分子 [2] 对应 K2分母 [4 1] 对应 4s1。3.3 仿真参数与求解器设置点击 Simulation 菜单下的 Model Configuration Parameters将 Stop Time 设为 60Solver 选择 Fixed-stepSolver 类型选择 ode4四阶龙格库塔Fixed-step size 设 0.01。为什么不用默认的变步长Transport Delay 模块对仿真步长很敏感。变步长求解器在系统进入稳态后会把步长拉大此时延迟信号的时间点可能落在两个步长之间容易引入插值误差阶跃响应曲线会出现不自然的毛刺。固定步长 ode4 在精度和计算量之间比较均衡对于这个二阶系统足够。如果希望曲线更平滑可以把步长改成 0.005仿真时间不会明显增加。在旧版 Simulink 中Transport Delay 默认的初始输入是 0这个不用改。滞后时间 4 秒意味着在 0 到 4 秒内延迟信号的输出始终保持 0正好模拟纯滞后阶段被控量不变化的现象。3.4 与普通PID的阶跃响应对比为了确认Smith补偿效果可以单独搭一个普通 PID 闭环或者用控制工具箱做对比。推荐用下面这段脚本直接观察闭环响应s tf(s); K 2; T 4; tau 4; Gm K/(T*s 1); Gd Gm * exp(-tau*s); C 0.1 0.08/s; G_smith C * Gd / (1 C * Gm); G_pid C * Gd / (1 C * Gd); step(G_smith, b, G_pid, r--, 60); legend(Smith预估, 普通PID); grid on;G_smith的表达式对应上节推得的闭环传递函数分母1 C*Gm不含延迟。G_pid是普通 PID 闭环分母里包含真实对象延迟因此稳定性更差。运行后在响应曲线上能看到两个明显差异普通 PID 的阶跃响应超调更大可能要振荡几个周期才稳定Smith预估的输出在前 4 秒同样没有响应但 4 秒后曲线以更平缓的姿态进入稳态超调大幅下降。这正是文献中“抵消纯滞后特性所造成的影响”的实际含义。4. PI参数整定、随机干扰与模型失配时的鲁棒性4.1 为什么这里用PI而不是PID纯滞后系统对噪声很敏感微分项会把测量噪声和高频扰动放大尤其在后面加随机干扰时KD 设为 0 可以避免控制器输出剧烈跳动。所以文献中采用 PI 控制用凑试法整定参数。凑试法的顺序有讲究先只调 P 让系统不振荡再逐步加 I 消除稳态误差。这里给出几组参数组合供参考具体响应取决于模型搭建是否准确不一定能直接照搬。KpKi响应特点0.050.08响应偏慢超调小但调节时间较长0.10.08兼顾稳定性和快速性超调可接受0.20.08快速性提高但超调明显增大0.10.02稳态误差消除变慢后期曲线拖尾0.10.15积分作用过强输出出现低频振荡文献中最终选定的参数是 KP0.1、KI0.08、KD0。这个组合下系统超调量明显小于普通PID且稳态无差。凑试法的关键是在实际模型上观察曲线如果响应上升缓慢适当增大 Kp如果出现等幅振荡减小 Kp如果稳态值始终低于目标增大 Ki。不要同时调两个参数每次只改一个记录曲线变化。对于Smith预估系统控制器参数可以选择比普通PID更激进一些因为特征方程已被改造成无延迟形式稳定裕度更高。但要注意参数过于激进仍会使对象本身不含延迟部分的动态变得激烈所以不能无限增大。4.2 加入随机干扰后的仿真表现仿真中想要模拟工业现场的测量噪声可以在被控对象输出端加入一个 Uniform Random Number 模块幅值取正负 0.1。如果用 Random Number 模块方差设置为 0.0033对应均匀分布区间 [-0.1, 0.1] 的方差采样时间 0.1 秒种子 Seed 随意但固定 Seed 可以保证每次仿真结果可复现。在模型中添加模块后用以下命令设置参数set_param(smith_sim/Uniform Random Number, ... Mean, 0, Variance, 0.0033, ... Seed, 0, SampleTime, 0.1);这里的Mean0保证噪声没有直流偏置不会让稳态值偏移SampleTime0.1表示每 0.1 秒更新一次噪声值。如果干扰加在被控对象的输入端等效于负载扰动系统的抗扰表现会和加在输出端不同仿真时应该根据实际物理含义选择位置。加入随机干扰后可以看到Smith预估输出在稳态值附近小幅波动但不会因为滞后导致波动放大。这是因为随机干扰属于测量噪声通道不在纯滞后补偿的设计范围内Smith预估解决的核心问题是控制通道的滞后而不是噪声滤波。如果希望进一步抑制噪声可以在反馈通道加低通滤波但要小心不要让滤波器本身引入额外滞后。4.3 模型失配Smith预估值什么时候失效Smith预估补偿有一个隐含前提参考模型 Gm(s) 与真实对象的不含延迟部分一致。实际过程里对象参数会随工况漂移比如阀门口径改变导致增益变化热容量变化导致时间常数变化输送距离变化导致滞后时间变化。要观察模型失配的影响可以在仿真中把预测器参数改成和真实对象不同。例如真实对象保持 K2、T4、τ4预测器分别设为 K2.2、T5、τ4.5set_param(smith_sim/Transfer Fcn1, Numerator, [2.2]); set_param(smith_sim/Transfer Fcn1, Denominator, [5 1]); set_param(smith_sim/Transport Delay1, DelayTime, 4.5); sim(smith_sim);运行后会发现补偿后的闭环特征方程里不再能完全消去延迟项。因为真实对象是 P(s)e^{-τs}而补偿器用的是 Gm(s)(1-e^{-τ_m s})当 P≠Gm 或 τ≠τ_m 时分母中会残留与延迟相关的动态项。轻则超调变大重则重新出现振荡。这也解释了为什么Smith预估适用于“对象无变化时效果较好”的场景。工程上如果参数漂移明显通常需要在线辨识对象模型并同步更新补偿器参数这就超出了固定补偿器的范畴进入自适应控制领域。5. 把Smith预估器落到工程时容易翻车的几个细节5.1 离散化纯滞后在数字控制器里是整数拍在 Simulink 里连续时间 Transport Delay 很方便但写到 DCS、PLC 或单片机里时必须先离散化。常见做法是用一阶惯性差分方程计算无延迟预测输出// Ts为采样周期T为对象时间常数K为对象增益 static float ym_old 0.0f; static float buf[256]; static int pos 0; float a expf(-Ts / T); float b K * (1.0f - a); float ym_undelay a * ym_old b * u; ym_old ym_undelay; float ym_delay buf[pos]; buf[pos] ym_undelay; pos (pos 1) % 256; float feedforward ym_undelay - ym_delay; float feedback y_actual feedforward; error r - feedback;环形缓冲区的长度由最大滞后时间除以采样周期决定。比如最大滞后 10 秒采样周期 0.1 秒缓冲区至少要 101 个点。如果实际滞后不是 Ts 的整数倍需要在缓冲区的两个相邻点之间做线性插值否则会在输出上叠加一个周期性纹波。5.2 抗积分饱和Smith预估系统在启动阶段就会产生一个很大的误差信号因为前 τ 秒内被控量完全不动PID 的积分项会持续累加。等到模型预测值赶上真实输出后积分项可能已经积累得过大导致控制量饱和。Simulink 的 PID Controller 模块里可以设置 Output Saturation 上下限并把 Anti-windup method 选为 back-calculation。下限设为 0 或者执行器的实际下限上限同理。不要只加 saturation 不选抗饱和否则积分会在限幅值附近继续累加退出饱和变得非常慢。5.3 验证仿真结果是否可信仿真曲线好看不代表实现正确。强烈建议做三个检查。第一把 Transport Delay 的 Delay Time 改成 0Smith补偿器会退化成普通反馈控制此时响应应该和普通 PID 几乎一致如果差别很大说明预测器支路连接有误。第二用allmargin(C*Gm)查看补偿后系统的稳定裕度确认特征方程确实无延迟。第三给 Step 信号加上一个限幅观察控制量在启动阶段是否饱和以及退出饱和后系统是否还能稳定收敛。allmargin(C * 2/(4*s1))这一步返回的幅值裕量和相位裕量是补偿后真实闭环的裕量。如果相位裕量仍然很低说明参考模型或控制器参数需要重新整定。把仿真参数、模型失配情况和整定过程记录下来至少能为后续现场调试省下一半时间。本文还有配套的精品资源点击获取
返回列表