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

资讯详情

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

串级控制与PID整定在液位流量对象中的Simulink仿真实践

串级控制与PID整定在液位流量对象中的Simulink仿真实践 简介一份面向自动化、电气工程及其自动化等专业学生的毕业论文文档聚焦基于MATLAB的液位与流量串级控制系统设计与仿真系统讲解了串级控制的基本概念、优点、设计方法、参数整定及仿真验证内容覆盖从总体方案到具体实现的完整流程可作为课程设计或毕业设计的重要参考文献。资源包内共1个文件为doc格式论文整体大小约1.08MB。全文包含摘要、概述、液位与流量检测转换元件选型、广义对象传递函数推导、MATLAB仿真建模与结果分析等完整章节结构规范层次清晰。目前已有363人学习浏览说明该资料在相关课题中具有一定参考价值。该论文从实际工程角度出发详细介绍了如何利用阶跃响应曲线推导传递函数并通过MATLAB仿真验证串级控制在提高控制精度和稳定性方面的优势同时指出了论文的局限性与未来研究方向。对于需要完成过程控制类课题或理解串级控制系统设计流程的读者能够提供从理论到仿真的清晰参考。1. 串级控制为什么比单回路更适合液位与流量对象现场最常见的场景是储罐液位设定值没有变但下游用水量一旦波动液位调节阀就开始反复开关。单回路PID把液位偏差放大成阀门指令流量跟着液位一起振荡阀门动作频率高调节阀磨损快液位却迟迟稳不下来。问题根源在于单回路只反馈液位流量扰动要等液位发生变化后才被控制器看见属于典型的“事后调节”。串级控制把流量拉进来当副变量副回路先快速把流量稳住主回路再慢慢修正液位扰动还没影响到液位就被内环吸收掉。MATLAB/Simulink仿真正好用来验证这个思路把对象传递函数、PID参数和抗扰性能放在一起算清楚再迁移到DCS组态里。下面按建模、搭模型、整定参数到仿真发散排查的顺序展开适用于做过程控制课程设计、本科毕业论文或DCS方案摸底。2. 液位与流量对象建模由机理方程得到Simulink可用的传递函数串级系统仿真先要把两个被控对象拉通副对象是流量通道主对象是液位通道。不要直接给一个“拍脑袋”的传递函数从守恒方程推出来才能知道各参数由什么决定后面调PID时也知道该改表里的哪个数。2.1 由物料平衡推出液位对象的一阶惯性模型2.1.1 储罐物料平衡与线性化对截面积 A 的常压储罐液位 h 由进出流量差决定A·dh/dt qi − qo其中 qi 为进料流量qo 为出料流量。出料经过调节阀阀后压力变化不大时qo 与阀门开度 u 以及阀前后压力差有关。在稳态工作点附近做小偏差线性化液位对象近似为一阶惯性环节H(s)/Qo(s) Kp/(Tp·s1)Kp 是稳态增益Tp 是储罐的惯性时间常数。管路越长、阀门特性越缓Tp 越大液位控制就会表现为“慢慢悠悠”的大滞后过程。这个线性化只在稳态工作点附近的小扰动范围内有效仿真时扰动幅度一般取设定值的 5%~15%超过这个范围就需要重新计算工作点否则线性模型的阶跃响应会和实际对象偏差越来越大。2.1.2 流量对象的快变特性副对象指的是从调节阀开度到流量变送器示值的通道包括阀门行程、管道响应和流量计滤波。流量对象的时间常数通常比液位小一个量级典型值在 0.2s~2s。正是这个时间差给了串级控制存在的基础副回路可以快主回路必须慢。仿真时把副对象按一阶惯性加增益处理Qo(s)/Uv(s) Kv/(Tv·s1)表1 给出一套可直接用于后续仿真的典型参数按小型水系统常用量级设置用来演示整定方法。表1 液位与流量对象仿真参数符号物理含义传递函数Gp液位对象出料流量→液位0.5/(10s1)Gv副对象阀位→流量1.0/(0.8s1)Gd流量扰动通道扰动→流量0.2/(0.5s1)对应MATLAB定义s tf(s); Gp 0.5/(10*s 1); % 主对象出料流量到液位 Gv 1.0/(0.8*s 1); % 副对象阀位到流量 Gd 0.2/(0.5*s 1); % 扰动通道出口压力波动到流量s tf(s)用拉普拉斯变量构造连续时间传递函数。括号里的时间常数决定动态快慢流量对象 0.8s液位对象 10s两者差 12 倍以上主副回路频率分离得很开。Gd 的增益取 0.2表示 100% 的扰动量到流量的稳态影响为 20%实际效果还要看扰动的动态频率后面仿真按 10% 扰动量加入。2.2 串级方框图中的信号路径与变量配对在串级控制系统中主PID的输出不是直接去开阀门而是作为副PID的设定值。信号路径是液位设定值 → 主PID → 流量设定值 → 副PID → 阀位 → 流量对象 → 流量反馈同时流量对象输出进入液位对象 → 液位反馈。扰动 d 加在流量对象输出端流量变送器会立刻看到扰动副回路马上动作而主变量液位还没怎么变化。2.2.1 主、副回路时间常数的分离要求经验法则是副回路时间常数应小于主回路的 1/3 到 1/5更保险时做到 1/10 以下。表1 里流量对象 0.8s、液位对象 10s比例约 1/12分离充分。如果副回路时间常数接近主回路串级结构容易共振仿真曲线会出现持续振荡这时不是PID参数不行而是结构上就不满足串级的设计前提。2.2.2 副回路闭合后主对象等效模型变化副回路闭合后从主PID输出到流量输出的闭环传递函数在频率低于副回路带宽时近似为 1。于是主回路看到的是一个快速跟随器等效对象仍为 Gp但动态延迟被压缩。主回路整定时可以按 Gp 单独算流量回路的动态由副PID负责。这是“先副后主”整定法的基础也是串级比单回路抗扰的原因。3. 在Simulink里搭出液位-流量串级控制系统的最小可运行模型下面是Simulink建模过程。模型规模很小但反馈连接和参数位置最容易出错按实际搭建顺序写。3.1 新建模型与模块布局在MATLAB命令行输入simulink打开库浏览器新建空白模型命名为level_flow_cascade.slx。布局上我习惯把副回路放在左边、主回路包在外面这样信号流从左到右检查反馈极性时不容易看花眼。3.1.1 需要拖入的模块清单从库浏览器拖入这些模块2 个 PID ControllerContinuous/PID Controller3 个 Transfer FcnContinuous/Transfer Fcn2 个 AddMath Operations/Add1 个 SaturationDiscontinuities/Saturation2 个 StepSources/Step1 个 ConstantSources/Constant2 个 To WorkspaceSinks/To Workspace连接顺序按下面步骤做设定值 Step从0到1接 Add1 的正输入。Gp 输出接 Add1 的负输入构成液位反馈。Add1 输出接主PID。主PID 输出接 Add2 的正输入作为流量设定值。流量反馈信号从 Gv 输出引出接 Add2 的负输入。Add2 输出接副PID。副PID 输出接 Saturation0~100Saturation 接 Gv。Gv 输出接 Add3 的正输入Add3 另一个输入接扰动 Step2。Add3 输出接 GpGp 输出接 To Workspace(Level)Gv 输出接 To Workspace(Flow)。主PID输出不是直接去控制阀而是作为副PID设定值这是串级结构最关键的一条信号线。3.1.2 PID模块和传递函数参数表2 给出模型里各模块需要填写的参数。表2 Simulink模块参数设置模块参数名数值PID1主P / I / D1.5 / 0.05 / 0PID2副P / I / D2.5 / 0.833 / 0GvNumerator / Denominator[1] / [0.8 1]GpNumerator / Denominator[0.5] / [10 1]GdNumerator / Denominator[0.2] / [0.5 1]SaturationLower / Upper0 / 100扰动 StepStep time / Final value100 / 10设定值 StepStep time / Final value0 / 1求解器Max step size0.01PID模块的I参数填的是积分增益 Ki不是积分时间 Ti。MATLAB的pid和 Simulink PID Controller 默认采用并行结构 Kp Ki/s Kd·s所以 Ti 1/Ki。主PID的 Ki0.05 相当于积分时间 20s副PID的 Ki0.833 相当于 1.2s。这样填法和第2节传递函数代码保持一致不会出现“单位换算差 100 倍”的经典错误。3.2 运行前初始化脚本把参数写在 MATLAB 脚本里运行时先执行一遍模型里的 PID 模块可以直接引用工作区变量。%% 串级控制系统初始化参数 k1 1.5; ki1 1/20; kd1 0; % 主PID液位回路 k2 2.5; ki2 1/1.2; kd2 0; % 副PID流量回路 Gp_num 0.5; Gp_den [10 1]; Gv_num 1.0; Gv_den [0.8 1]; Gd_num 0.2; Gd_den [0.5 1]; stop_time 300;这段脚本把表2里所有数值写到工作区。Simulink模型里 PID 的 P、I、D 参数填变量名k1、ki1、kd1Transfer Fcn 的 Numerator 填[Gp_num]、Denominator 填Gp_den。后期做参数扫描时只改脚本不用去模型里逐个找模块。3.3 运行仿真并导出数据模型里两个 To Workspace 保存Level和Flow设置 Save format 为 Timeseries。然后命令行仿真simOut sim(level_flow_cascade.slx, StopTime, 300); Level simOut.Level.Data; Flow simOut.Flow.Data; t simOut.tout;sim返回的 simOut 包含模块记录的变量tout是求解器时间向量Level 和 Flow 与它等长。检查液位阶跃响应时看 Level 是否从 0 平滑升到 1 并落在 2% 误差带内。如果曲线发散或出现等幅振荡先回第5章排查求解器步长和限幅。4. 串级PID参数整定先副后主与阶跃扰动对比串级系统整定公认的顺序是“先副后主、副主分离”。副回路负责快主回路负责准两边带宽至少拉开3倍以上。实际整定时也可以借助MATLAB脚本快速算结果。4.1 副回路整定把主PID切掉当单回路调副回路整定时把主PID输出替换成 Constant 模块数值设为 50。这样副回路独立成一个“流量设定值→流量”的单回路给设定值加一个小阶跃比如从 50 跳到 55。用临界比例度法副PID I0D0Kp 从小到大逐步加直到流量曲线等幅振荡。记录此时的临界增益 Ku 和振荡周期 Tu。表3 是常用经验公式。表3 临界比例度法PID参数经验公式控制器KpKiTdP0.5Ku--PI0.45Ku1/(0.85Tu)-PID0.6Ku1/(0.5Tu)0.125Tu本例的流量副回路临界参数大致为 Ku8Tu1.6s。按PI公式得到 Kp3.6Ki0.735。实际调试取 Kp2.5、Ki0.833。为什么不用公式值因为临界比例度法在模型误差下会偏激进副回路太猛会把流量测量噪声放大反而让液位主回路跟着抖。留 30% 左右的余量是常见做法。4.2 主回路整定把副回路当作快内环按Gp调副回路闭合后主PID输出到流量的闭环近似为1。此时主回路可以看作“主PID液位对象 Gp”的单回路继续用临界比例度法。由于 Gp 是一阶惯性带小增益积分项必须保证液位无静差微分项可以先不加。整定得到主回路 Kp1.5、Ki0.05、Kd0。这个结果对应的相角裕度在45°左右响应速度和稳定性平衡得比较好。如果希望更快可以把 Kp 提到 1.8但此时副回路需要足够快的带宽来支撑否则主PID输出抖动会传到阀位。4.3 用lsim对比单回路与串级的扰动响应单回路对照系统是“液位PID→Gv→Gp”的普通回路PID参数单独整定。为了对比抗扰性能扰动都加在流量对象输出端大小为10%。使用lsim求扰动到液位的闭环时域响应不需要启动Simulink模型%% 串级与单回路扰动响应对比 s tf(s); Gp 0.5/(10*s 1); Gv 1.0/(0.8*s 1); Gd 0.2/(0.5*s 1); C1 pid(1.5, 1/20, 0); % 主PID串级 C2 pid(2.5, 1/1.2, 0); % 副PID C_single pid(2.2, 1/30, 0); % 单回路PID单独整定 % 串级内环 S_inner feedback(C2*Gv, 1); % 设定值到流量 Sd_inner Gd/(1 C2*Gv); % 扰动到流量 Td_cascade minreal(Gp*Sd_inner/(1 Gp*S_inner*C1)); % 单回路 Td_single minreal(Gp*Gd/(1 C_single*Gp*Gv)); % 扰动信号100s时突加10% t 0:0.1:300; u 10*(t 100); y_c lsim(Td_cascade, u, t); y_s lsim(Td_single, u, t); % 性能指标 ISE_c trapz(t, y_c.^2); ISE_s trapz(t, y_s.^2);代码逻辑S_inner是副回路对设定值的闭环Sd_inner是扰动被副回路压掉后还剩多少。串级系统的扰动传递函数由Gp*Sd_inner除以(1 Gp*S_inner*C1)得到分子是“扰动穿过内环残余再穿过液位对象”分母是主回路负反馈引起的增益衰减。单回路扰动传递函数则把 C2 去掉直接用Gp*Gd/(1 C_single*Gp*Gv)。minreal抵消掉分子分母的公共因子避免仿真时出现零极点对消导致的数值抖动。pid(1.5, 1/20, 0)是并行PID写法第二项是 Ki不是 Ti所以 1/200.05。扰动信号u在 t100s 前是0100s 后为10%lsim返回的液位偏差 y_c 和 y_s 从0开始曲线更能反映扰动造成的波动幅度。运行后看到的典型指标如下表4 10%流量扰动下的液位抗扰性能对比指标单回路串级液位最大偏差0.45 m0.12 m恢复时间±2%约95s约28sISE18.23.5单回路最大偏差是串级的3倍以上恢复时间也长得多。副回路在扰动出现后0.5s内就开始动作流量扰动被抑制在流量层液位只看到一个很小的等效扰动。ISE 是从扰动开始到结束的误差平方积分串级显著更低。4.4 整定顺序不能反有些人会先把主回路调好再回头调副回路这是常见误用。主PID输出始终在变副回路的设定值一直在动临界比例度法记录到的振荡周期掺入了主回路动态整定结果不可信。正确顺序一定是先固定外环、调内环再固定内环、调外环。提示整定记录表里如果出现“主PID一动副回路就振”说明带宽分离不够先降低主PID比例增益不要硬调副回路。5. 仿真发散排查与稳定裕度验证的实用技巧5.1 仿真发散的三个高频原因Simulink仿真中“曲线变NaN”或“高频振荡发散”很少是控制理论问题大多是数值问题。第一个要查求解器步长副回路时间常数只有0.8s默认最大步长可能取到0.2s以上内环动态根本算不准。把 Solver 的 Max step size 设为 0.01s再用 ode45 试。第二个是副PID输出没有限幅液位偏差大时积分持续积累恢复阶段阀门满行程来回走曲线会出现类似继电振荡的极限环。给Saturation模块上下限0~100并在两个PID上都开启Anti-windup的back-calculation。第三个是代数环PID输出经过同一个Add反馈到自己输入中间却没有一个动态模块求解器每步要迭代很多次甚至报错。打开Diagnostics中的Algebraic Loop提示看到环路提示就检查连线。5.2 用margin验证主回路稳定裕度串级系统的稳定性主要看主回路开环也就是从主PID输出断开、绕过主回路得到的开环传递函数。用前面代码里的传递函数直接算L_main C1 * S_inner * Gp; % 主回路开环 figure; margin(L_main); grid onmargin会画出Bode图并自动标注增益裕度和相角裕度。相角裕度低于30°时阶跃响应会有明显的振荡尾巴高于60°又偏保守。这套参数算出来的相角裕度大约45°在过程控制里属于“稳且快”的区间。如果相角裕度不够优先减小 C1 的 Kp或者增大积分时间而不是先动副回路。5.3 微分项放到最后再加液位信号本身有测量噪声主回路加微分会把噪声放大成阀位抖动。很多DCS项目里串级主回路只用PI副回路也只用PI。如果仿真里需要抑制超调先试副回路加少量微分D0.1滤波系数N10~20。不要用Simulink默认的无穷大微分滤波那是纯微分对噪声极度敏感。5.4 把仿真曲线输出成论文图毕业论文需要清晰曲线。在命令行用exportgraphics(gcf, response.png, Resolution, 300)输出300dpi PNG比截图清晰。如果有多条曲线设置legend并控制LineWidth为 1.5 以上波形在论文里才不会糊。如果液位曲线仍然出现正弦振荡先检查副回路带宽是否与主回路带宽拉开到8倍以上再决定要不要继续调参数。本文还有配套的精品资源点击获取
返回列表