多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

串级PID实战:双容液位系统阀门扰动治理与参数整定全解析

串级PID实战:双容液位系统阀门扰动治理与参数整定全解析 串级PID这三个字我在化工现场摸爬滚打了六七年才敢说真正把它用在刀刃上。前段时间接手了一套双容液位控制系统的整改故障表现非常典型主罐液位设定值不变可阀门稍微动一下液位就来回晃单回路PID怎么调都压不住最后甚至出现了积分饱和导致的液位大幅超调。整套系统因此被工艺车间投诉了好几次。后来我把控制方案改成串级PID把中间容器的液位作为副变量问题才算彻底解决。这篇文章就把这次整改的完整思路、整定步骤和踩过的坑都拆开讲给正在被双容液位和阀门扰动折磨的朋友一个可直接参考的工程方案。如果你是做过程控制、DCS组态调试或者在学校做过程控制实验但发现课本里的串级PID到了现场根本不好使那这篇内容尤其适合你。我会从双容对象的特性讲起再逐步拆解副回路怎么选、主副参数怎么整定最后把阀门扰动这条线的所有隐患点单独拧出来说清楚。全程不绕弯子直接给结论和操作步骤。1. 双容液位为什么难控从对象特性看串级PID的必要性1.1 双容对象的“滞后惯性”从哪来单容液位大家都很熟一个水箱进水阀开度变了液位按一阶惯性环节上升时间常数大概是液位截面积和出口阻力共同决定的。控制起来不算难一个PI基本能搞定。但工业上真正的液位对象很少是单容的常见的反而是两个水箱首尾串联第一个水箱接受上游来水底部或侧面管路再流到第二个水箱第二个水箱底部或侧面再出料。最终我们要控制的是第二个水箱的液位。这个“两箱串联”结构带来的变化是本质性的。第一个水箱对流量变化先做了一次“缓冲”第二个水箱又把这种缓冲后的变化继续滞后一次所以从进水阀开度到第二个水箱液位之间等效对象至少是二阶惯性环节。再加上如果两个水箱之间的管路比较长还会附加纯滞后。我在现场测过一套装置进水阀开度阶跃变化后末端液位要到三四分钟后才有明显响应而中间水箱液位几十秒就开始动了。这个特性的工程后果有两个。第一系统的相位滞后明显变大如果还用单回路PID比例作用稍微调强一点就很容易出现振荡因为控制器看到的误差变化已经延迟了太久。第二时间常数不匹配靠近执行机构的那个水箱时间常数小、响应快末端水箱时间常数大、响应慢两者动态特性差异很大单回路PID根本无法兼顾。1.2 单回路PID在阀门扰动面前的短板单回路PID的逻辑是只盯最终液位也就是第二个水箱的液位传感器。阀门一旦出现扰动比如流量波动、阀芯卡滞后的突然跳动、上游泵出口压力的变化这些扰动要经历“中间水箱液位变化→中间水箱到末端水箱流量变化→末端液位变化→传感器检测到→控制器计算”全过程末端液位才能看到偏差。这个链路太长等PID反应过来扰动造成的后果已经扩散到整个系统了。这里有一个很关键的概念扰动通道的动态特性决定了调节品质的上限。单回路PID对发生在被控对象内部、且远离检测点的扰动基本是“后知后觉”。我见过一个极端情况进水调节阀因为阀门定位器老化每隔几分钟就会自己跳一次开度单回路PID全程都在追液位曲线像心电图一样工艺数据根本没法用。更麻烦的是阀门扰动常常是高频分量和低频分量叠加的单回路PID为了压低低频偏差会把积分做得比较强但积分一强碰到高频扰动就容易让输出反复动作阀门寿命缩短不说系统还会出现“假振荡”——看起来波动变小了实际上阀门在频繁大幅动作。1.3 串级PID的降维思路串级PID的核心思想其实很朴素既然末端液位对阀门扰动反应太慢那就找一个离阀门更近、能快速反映扰动的中间变量先让它把扰动压住别让扰动扩散到末端。这个“中间变量”在双容液位系统里最自然的选择就是第一个水箱的液位或者两个水箱之间的流量。这样控制结构就分成了两层。外层叫主回路负责最终液位的精确保持输出的是第一个水箱液位的设定值内层叫副回路接收主回路的输出作为设定值快速调整进水阀开度让第一个水箱液位紧跟这个设定。阀门扰动一旦发生第一个水箱液位立刻就能感受到副回路会在极短时间内消除偏差末端水箱根本感知不到扰动发生过。从控制理论的角度看这相当于把原来的二阶大滞后对象“压缩”成了两个相对独立的控制问题副回路负责快速消除进料侧扰动主回路负责精调末端液位。串级PID不是让控制变复杂了而是让每一级回路面对的对象都变得更简单、更可控。这也是串级PID在处理双容以及更高阶过程时表现远优于单回路PID的根本原因。2. 串级PID回路设计与被控变量选择2.1 主回路与副回路的“分工合同”先明确主副两个回路的职责边界这是串级设计的第一步很多人上来就调参数结果主副打架越调越乱。主回路只做一件事保证末端液位等于工艺要求的设定值。它的输出不是直接给阀门而是给副回路当设定值所以主回路的控制周期不需要太快但精度要求高需要积分来消除稳态偏差。副回路则完全不同。它需要足够快快到什么程度副回路的时间常数最好比主回路小3到5倍以上这样内外环的动态才能解耦。副回路的设定值来自主回路它必须能稳定地跟踪主回路给出的“中间液位指令”同时还要把进入系统的几乎所有扰动都处理掉。从这个角度讲副回路更像一个“随动系统”要求快而不要求无差比例作用可以适当强一些积分可以弱一些甚至不要。副回路还有一个容易被忽视的作用它把阀门特性、管路压损、泵出口波动等非线性因素都“锁定”在了自己的闭环内部。即使阀门特性很不理想只要副回路有足够的增益和响应速度对外表现出来的就是中间液位能快速跟设定主回路看到的是一个“被校正过的、线性化了的广义对象”。这也是为什么串级PID对阀门特性的敏感度远低于单回路PID。2.2 副被控变量的选型中间液位还是流量双容系统中副变量通常有两个候选第一水箱液位或者两箱之间的流量。选哪个直接决定了副回路能不能快速反映阀门扰动。我个人的经验是优先选中间液位除非中间液位测量确实不可靠或者安装位置受限。为什么中间液位更适合做副变量因为流量测量的噪声大、波动频繁流量控制回路天然容易振荡而且流量计安装在管路上对阀门微小动作的响应非常敏感这反而导致副回路输出频繁变化阀门动作过于频繁。而液位是一个“积分型”变量天然对高频噪声有滤波作用副回路会稳定很多。当然中间液位也有它的短板。如果第一个水箱截面积太大液位变化速率太慢副回路来不及响应那副回路的“快速性”优势就体现不出来。这种情况下可以考虑用流量做副变量或者在中间液位回路上增加微分先行。我做过的另一个项目里前置水箱非常大液位几乎一两个小时才明显变化这时候用流量做副变量效果更好。所以副变量的选择本质上是看哪个变量离扰动源更近、动态响应更快。2.3 传感测量对副回路的制约串级PID对副变量的测量要求比单回路高一个档次因为副回路是“靠测量吃饭”的测量不准副回路越快就越容易把误差放大。这里有几个现场最容易踩的坑。第一个坑是测点安装位置。中间水箱液位变送器取压口如果离进水管太近进水时液面翻滚会造成虚假波动副回路检测到这种“假扰动”后会拼命调节最终表现为阀门频繁抖动。第二个坑是流量计直管段不足。如果副变量是流量流量计前后直管段不够涡流会造成测量值跳动副回路输出跟着跳这个很隐蔽。第三个坑是变送器量程设置过窄。副变量变化范围本来就不大量程设置太窄的话信号容易频繁触顶触底控制器输出很容易拉满。我在整改时对副变量做的第一件事不是调PID而是把所有仪表参数重新核对了一遍包括量程、阻尼时间、安装位置。仪器仪表的可靠性是串级PID发挥作用的绝对前提这一点怎么强调都不为过。很多串级系统“调不出来”问题根本不在算法而在测量。3. 参数整定实操先内后外三步走3.1 内环整定快速性优先怎么操作串级PID参数整定有铁一般的顺序先整定副回路再整定主回路顺序不能颠倒。我先说副回路的整定方法这里有一个很重要的前提整定副回路时要把主回路切到手动模式让主控制器的输出保持在一个固定值相当于副回路暂时独立成一个单回路控制系统。副回路整定的目标是“快且稳”。我推荐用衰减曲线法而不是临界比例度法原因是衰减曲线法不需要把系统振荡到等幅状态对生产装置更安全。具体操作是把副控制器的积分时间放到最大、微分关闭只保留纯比例作用然后逐步增大比例增益或者减小比例度同时给副回路设定值加一个小的阶跃扰动观察中间液位的响应曲线。判断标准是看响应曲线的衰减比4:1衰减是比较理想的。也就是说第一个波峰的高度是第二个波峰高度的四倍左右。一旦达到4:1衰减记录当时的比例增益Kp和振荡周期Ts然后按经验公式计算P控制时Kp保持不变PI控制时比例增益取0.9倍、积分时间取0.85倍的TsPID控制时比例增益取0.7倍、积分时间取0.5倍的Ts、微分时间取0.13倍的Ts。副回路基本以PI居多因为积分可以消除中间液位的偏差避免阀门在长期运行中发生偏移。3.2 外环整定在安全内环的基础上走副回路整定完成后把它投到自动模式再把主控制器切到手动然后开始整定主回路。这里的难点在于主回路看到的被控对象已经不是原来的双容对象而是“经过副回路校正后的等效对象”。这个等效对象的传递函数接近一个一阶惯性加纯滞后的结构但纯滞后时间比原来的双容对象要小得多所以主回路可以比单回路PID更激进一点但仍需谨慎。外环整定的操作方法和内环类似但有几个细节区别。第一外环的设定值扰动要加在主回路的设定值上观察末端液位的响应第二外环整定时副回路必须保持自动否则你整定的是错误对象第三外环的振荡周期普遍比内环长需要更多时间观察不要急着调参数。外环参数的经验取值范围一般是比例增益比内环小一个数量级左右积分时间比内环大5到10倍。举个例子我在这次整改中内环比例增益最终整定到8.0积分时间大约15秒外环比例增益只有2.5积分时间到了80秒。这个数值比例关系不是巧合而是内外环时间尺度匹配的自然结果。3.3 主副参数相互影响时的收敛技巧串级PID整定过程中有个很烦人的现象调完内环外环一通系统又开始振荡了回过去调内环外环又不行了来回死循环。这通常是因为内外环的响应速度差距不够大导致两个回路“共振”。解决办法有两个方向。一个方向是继续拉大内外环时间尺度差距。把内环加快——比如去掉积分的迟滞影响、增大比例作用或者把外环放慢——加大积分时间、减小比例增益。实际操作中我一般优先放慢外环因为内环已经接近工况承受极限再去压榨快速性风险很大。另一个方向是给副回路的设定值变化速率做限制。很多DCS系统有斜坡限制或变化率限制功能把主控制器输出到副控制器设定值的这段信号加上“斜坡”让副设定值不要骤变这样内外环之间的动态耦合会明显减弱。这是个很容易被人忽略但非常有效的小技巧。4. 阀门扰动专项治理不只是PID的事4.1 扰动来源排查先找源头再调参数很多工程师遇到阀门扰动第一反应就是调PID但我在现场的经验是阀门扰动至少要分成三类来排查每一类的处理办法完全不同。第一类是执行机构本身的非线性包括死区、回差、摩擦力变化。这类扰动通常表现为阀门对控制器输出响应不均匀同一个PID输出变化阀门在小开度区域动作正常在某个开度附近却突然大幅跳动。处理办法是校核阀门定位器、增加反馈闭环或者在DCS里做一个增益自适应补偿。第二类是驱动能源波动比如压缩空气压力不稳定、电气定位器供电电压波动。这类扰动大多是间歇性的阀门会随机出现一顿一顿的动作。排查时可以在就地观察阀门阀杆运动是否平滑或者调出阀门开度反馈曲线看有没有异常跃变。第三类才是系统外部的负荷扰动比如上游泵的流量波动、进料组分变化引起的密度变化。这类扰动是真实的生产扰动PID的作用是尽量削弱它但无法完全消除。我的建议是先把第一类和第二类问题排查干净再让PID去处理第三类否则参数一定会被“带偏”。4.2 抗积分饱和与微分先行两个必要保护串级PID在阀门扰动工况下最容易出现的一个问题就是积分饱和。举个例子阀门因为故障被强制手动或者限位卡住而主回路一直检测到液位偏低积分项持续累加输出不断增大。当扰动消除后阀门恢复正常这时控制器的输出还停在一个很高的值上系统会以最大速度往反方向冲形成很大的超调严重时液位会溢出或抽干。解决积分饱和有几个层级的做法。最基础的是在PID算法中做积分限幅限制积分项的输出范围进阶一点的做法是采用“条件积分”算法当输出接近执行机构极限时暂停积分工程上最常用的还是“外部积分反馈”把实际送到阀门的信号反馈给PIC算法做抗积分饱和计算。用哪种取决于你用的DCS品牌和PID算法库但原理都是同一件事积分不能在执行机构已经无法响应的时候继续无意义地累加。微分先行则是针对液位控制中设定值变化场景设计的。普通PID的微分作用会放大设定值变化带来的冲击阀门容易出现一个较大的“甩动”。微分先行只对测量值做微分、不对设定值做微分这样操作员调整设定值时系统能平稳过渡。在双容液位串级控制中我强烈建议主回路开启微分先行功能你会明显感觉到切换和设值时的过程稳定很多。4.3 阀门特性线性化与定位器的工程调校阀门本身的开度-流量特性也会影响串级PID的控制质量。如果用的是等百分比特性阀门在小开度时增益低、大开度时增益高副回路在低负荷工况下会偏“钝”高负荷工况下会偏“敏感”参数就很难在高负荷和低负荷之间兼顾。我在现场恒用一种实用做法把阀门特性曲线实测出来然后分别在低、中、高三个工作点各做一次扰动测试看副回路的阻尼程度是否差别很大。如果差别大要么用DCS里的特性折线修正功能做补偿要么在阀门定位器里做分程校正。还有定位器校准时的一个细节很多阀门故障导致扰动其实不是定位器坏了而是定位器和阀门之间的反馈杆松动。反馈杆一旦松动定位器检测到的阀门位置是假的控制器输出正确但阀门实际位置不对副回路会一直挣扎。每次排查阀门扰动问题我都会先让人用手电筒照一照反馈杆确认机械连接紧固后再去动PID参数。这半个小时的时间换来的可能是未来一个月的安稳。5. 高频故障排查与工程避坑实录5.1 内环震荡排查速查表串级系统最常见的故障就是系统振荡。但振荡到底出在内环还是外环很多人分不清。我把判断方法整理成了一张速查表现场照着查就能省下大量时间。现象可能原因排查顺序阀门开度快速摆动中间液位随之波动副回路增益过大或副变量测量噪声过大先查变送器和阻尼时间再降副回路比例增益中间液位稳定末端液位等幅振荡主回路增益过大或内外环时间尺度太接近降低主回路比例增益加大主回路积分时间阀位频繁全开全关中间液位大幅冲撞积分饱和或输出限幅设置不当检查抗积分饱和设置限制输出变化率系统周期性“打嗝”每隔一段时间就振荡一下阀门定位器死区波动或供气压力不稳定检查定位器和气源单独做阀门步进测试这个表是我在现场反复摸索出来的。尤其要注意第一行排查顺序一定是先排除测量问题再动参数。测量噪声引起的误判会让PID输出高频抖动这时候调低增益固然能减小抖动但会导致回路变钝真正的扰动反而压不住了。正确做法是先处理测量端加阻尼或者信号滤波让控制回路“看”到平滑的液位信号。5.2 阀门扰动“压不住”的隐藏原因串级PID调得好好的阀门扰动还是压不住这种情况我也遇到过不少。每次遇到我都会下意识地检查几个隐藏原因这里逐条分享出来。第一个隐藏原因是副变量选择错误。如果你的副回路响应速度其实比阀门扰动还要慢那副回路就等于没起作用扰动照样穿透到主回路。判断方法很简单把副回路输出扰动后看中间液位多久能恢复如果恢复时间超过几秒钟说明副回路选型或参数不合适。第二个原因是主控制器输出到副控制器的设定值信号被DCS组态成了“无扰动切换”但实际有扰动。有些DCS在切串级模式时会自动做设定值跟踪但跟踪逻辑如果不对切换瞬间副设定值会跳变造成工艺波动。解决方法是在组态里检查切换逻辑确保从手动切到串级时副设定值和当前中间液位完全相等。第三个原因很反直觉阀门扰动不是因为阀门本身而是因为阀门下游或上游的管路有气穴、水锤或者堵塞。这些水力现象会间歇性地改变阀门两端的压差让同一个阀门开度对应不同的流量。这种扰动是PID无论怎么调都无法真正解决的只能通过工艺整改来消除。我的经验是如果串级PID参数已经调到很合理的位置扰动仍然存在一定要跳出来看控制回路以外的东西。5.3 投运顺序与组态细节无扰切换没那么简单串级控制系统投运是一个很容易被忽视但事故高发的环节。一套串级PID组态完成后直接一键投串级很可能出现剧烈波动。正确做法是分三步走。第一步主回路手动、副回路手动先通过手动输出让阀门处于一个稳定的开度等到中间液位和末端液位都基本稳定在正常工作点。第二步把副回路切自动观察它能不能维持中间液位在设定值附近这一步是在验证副回路是可靠的。第三步将主回路的输出跟踪为当前副回路的设定值然后把主回路切自动或切串级此时主回路看到的就是一个已经稳定的副回路无扰切换基本能保证。组态侧还有一个很实用的细节主控制器的输出上下限要和副控制器的设定值上下限保持一致。如果不一致控制器切换时会出现副设定值跳变。我在多个项目里都遇到过这个问题因为DCS默认配置不会自动统一这些限幅必须人工核对。类似这样的细节在调试阶段多花十分钟确认清楚后面能少很多折腾。6. 从双容液位到通用经验串级PID的工程底色这次整改结束后我把双容液位系统的几个最终参数记录在了工作日志里作为后续类似项目的参考基准。主回路比例增益2.5、积分时间80秒副回路比例增益8.0、积分时间15秒系统投用后末端液位偏差基本稳定在设定值上下0.5%以内阀门扰动导致的最大波动也降到了原来的四分之一左右。这不是什么惊人的数字但工程项目的价值从来不在于参数多“漂亮”而在于系统能在真实工况下长期稳定运行。回头看这次经历有几点体会是通用性很强的不只限双容液位。第一串级PID面对的是“扰动源靠近执行机构、被控变量远离执行机构”这类结构性问题只要对象满足这个特征不管是液位、温度、压力还是流量都可以考虑用串级结构来解耦。第二串级系统的上限由副变量测量质量决定测量不过关算法再先进也是空中楼阁。第三阀门扰动问题的解决路径永远是“先机械后仪表再控制算法”顺序不能乱。我自己做控制调试这些年最大的一个感受是过程控制里真正困难的从来不是PID公式而是对现场物理过程的理解。双容液位这个对象结构相对简单但它的滞后、惯性和扰动通道特性几乎涵盖了工业过程控制的全部基本矛盾。把这个项目彻底搞透之后再碰到蒸汽温度串级、反应釜压力串级上手都会从容很多。如果你现在正被类似的问题卡住我建议你先回到对象本身把扰动通道画出来把副变量的动态响应测一遍再回头调参数多半会有意外的收获。
返回列表