拓冰建站拓冰建站
首页 / 资讯中心 / 正文

西门子1200 PID控制实战:从PID_Compact到自整定与级联

1. 为什么PID在西门子1200上值得单独拿出来讲搞工控的人对PID这三个字母不会陌生。温度、压力、流量、液位、速度凡是需要“稳在一个值上”的场合背后几乎都有PID在干活。但很多人第一次在西门子S7-1200上做闭环控制时会有一个明显的落差感理论课上讲的PID公式看得懂可真到博途里建个FB、连上工艺对象、面对一堆参数时手就不知道往哪放了。这篇内容就是冲着这个落差来的。我把它定位成一篇“从接线到整定”的完整实操记录核心围绕西门子1200的PID用法与控制展开重点讲清楚三件事PID_Compact这个指令到底怎么用、自整定什么时候能信什么时候不能信、以及参数调不出来时该往哪个方向排查。适合刚接触1200闭环控制的朋友也适合以前用200/300系列、现在转到1200平台、发现玩法变了的老手。先说一个容易被忽略的前提S7-1200做PID主流有两条路。一条是用PID_Compact指令属于工艺指令配合工艺对象使用另一条是自己用SCL或梯形图写位置式/增量式PID算法。前者是西门子官方推荐的“标准答案”后者适合算法透明、需要魔改的场合。热词里出现的“位置式PID用差分方程”“增量式PID算法”“PID算法程序代码实现”其实对应的就是第二条路。两条路我都会讲到但主线放在PID_Compact上因为这是1200平台上最省事、最不容易翻车的做法。提示PID_Compact是S7-1200/1500专用的闭环控制指令和S7-200时代的PID向导、S7-300的FB41是不同世代的东西别拿老经验硬套。2. 先搞清楚PID_Compact和工艺对象的关系2.1 工艺对象不是多余的包装很多新手会问为什么不能像200那样直接调一个指令、填几个参数就完事非要先建一个“工艺对象”这个问题的答案决定了你能不能真正用好1200的PID。工艺对象Technology Object本质上是CPU内部的一块数据结构后台任务。你在博途里新建一个PID工艺对象CPU就会为它分配独立的存储区并且在扫描周期里安排专门的处理。这样做的好处是PID运算和你的主程序解耦采样周期稳定不会因为你主程序里加了几行逻辑就导致积分时间漂移。200时代的PID向导其实也是类似思路只是1200把它做得更显式、更规范了。所以正确的顺序是先建工艺对象再把PID_Compact指令拖到程序里让指令和对象绑定。指令本身只是个“壳”真正的参数、状态、整定结果都存在工艺对象里。你在指令背景数据块里看到的那些引脚很多只是对工艺对象数据的映射。2.2 PID_Compact的引脚哪些必须接PID_Compact的输入输出引脚不少但真正每次都要打交道的就那么几个。我按重要性排一下Setpoint设定值。注意它的量纲默认是0~100的百分比也可以改成工程量纲比如0~150摄氏度。Input反馈值也就是传感器采回来的实际值。这个值的量纲必须和Setpoint一致否则PID永远算不对。Output输出值送给执行器加热器、阀门、变频器。默认也是百分比。Input_PER如果你用的是模拟量输入模块直接采回来的原始值比如0~27648可以接这个脚让指令内部做标定。ManualEnable / ManualValue手动模式使能和手动输出值调试和检修时非常有用。Reset复位清掉积分累积和错误状态。State输出当前PID处于什么状态未激活、预调节、精调节、自动、手动等排查问题时必看。我个人的习惯是Setpoint和Input都用工程量纲在工艺对象里把标定做好程序里直接给物理值。这样调试时脑子里想的是“我要它稳在80度”而不是“我要它稳在53.3%”少一层换算少一层错。2.3 采样周期为什么不能随便设PID是离散控制采样周期SampleTime直接决定积分和微分的计算精度。1200的PID_Compact默认采样周期是0.1秒但这不是万能的。选采样周期的经验法则是它应该远小于被控对象的时间常数。比如一个加热炉从通电到明显升温可能要几十秒那采样周期设0.5秒甚至1秒都够用但如果控制的是电机转速响应在毫秒级采样周期就得往10毫秒甚至更小压。设太大微分项基本失效积分也会变得粗糙系统容易振荡设太小CPU负担加重而且如果传感器本身响应慢采回来的都是噪声反而帮倒忙。我一般会先按对象的大致时间常数的1/10到1/20来估然后靠自整定去修正。注意采样周期一旦定了自整定出来的参数就是针对这个周期的。后面如果改了采样周期整定结果基本作废得重新整。3. 自整定到底怎么用才不翻车3.1 预调节和精调节是两回事PID_Compact的自整定分两个阶段预调节Pretuning和精调节Fine tuning。很多人以为点一下“自整定”就完事了其实这两个阶段解决的是不同问题。预调节是在系统还没稳定时做的它通过给一个阶跃输出、观察反馈的响应曲线来估算对象的增益、时间常数和滞后然后算出一组初始PID参数。这一步相当于“摸底考试”目的是让系统先能大致稳下来。精调节是在系统已经接近设定值、处于相对稳定状态时做的它在这个工作点附近做小幅扰动进一步优化参数让超调和稳态误差更小。这一步相当于“精修”。正确的流程是先预调节等系统稳下来再精调节。如果跳过预调节直接精调节系统可能根本不在工作点附近整定出来的参数没有意义。3.2 自整定失败的五种典型情况自整定不是万能的我踩过的坑基本能归成这几类现象可能原因处理方向整定一开始就报错退出设定值与当前反馈值差距太小把设定值拉开一点或先手动给输出让系统动起来整定过程中输出一直顶到上限对象增益太小或执行器能力不足检查执行器选型或降低对响应速度的期望整定完成但参数很离谱反馈信号噪声大加滤波或改用Input_PER并启用内部滤波整定后系统持续振荡采样周期与对象不匹配调整采样周期后重新整定精调节反复失败系统本身不稳定或存在外部扰动先排除扰动源再考虑手动整定这里面最常见的是第一种和第三种。第一种往往是因为操作员把设定值设得和当前值几乎一样系统没有“动”的余地自整定自然无从下手。第三种则是传感器信号质量的问题尤其是热电偶、压力变送器这类容易引入干扰的场合。3.3 什么时候必须放弃自整定有一种情况我会果断放弃自整定对象具有明显非线性或大滞后。比如某些温度对象升温快降温慢或者管道压力控制里存在几十秒的纯滞后。这种对象自整定出来的参数往往只能在一个很窄的工况范围内有效换个工作点就崩。这时候就得手动整定。手动整定的顺序是先P再I最后D。先把I和D置零慢慢加P直到系统出现等幅振荡记下此时的临界增益和振荡周期然后用齐格勒-尼科尔斯经验公式估算。这套方法老但管用。4. 手动整定的参数到底怎么算4.1 从临界振荡法说起齐格勒-尼科尔斯临界比例度法是最经典的手动整定方法。操作步骤是把积分时间Ti设为最大相当于关闭积分微分时间Td设为0。逐渐增大比例增益Kp直到系统出现等幅振荡。记录此时的临界增益Ku和振荡周期Tu。按经验公式计算参数。对于PID控制器经验公式是Kp 0.6·KuTi 0.5·TuTd 0.125·Tu。这套公式给出来的参数通常偏激进超调会比较大实际用的时候我会把Kp再乘个0.8左右稳一点。需要说明的是1200的PID_Compact里参数是以比例增益、积分时间、微分时间的形式给的和有些教材里用比例度、积分时间、微分时间的表述略有差异换算时注意别搞混。4.2 位置式和增量式的区别别选错热词里反复出现“位置式PID用差分方程”“增量式PID算法”这两个是自写PID时绕不开的选择。位置式PID的输出直接对应执行器的绝对位置公式是u(k) Kp·e(k) Ki·Σe(j) Kd·[e(k) - e(k-1)]它的特点是积分项要累加历史误差输出是绝对量。适合阀门、加热器这类需要绝对位置控制的场合。缺点是积分饱和问题明显需要额外做抗饱和处理。增量式PID的输出是本次相对于上次的增量Δu(k) Kp·[e(k)-e(k-1)] Ki·e(k) Kd·[e(k)-2e(k-1)e(k-2)]它不需要累加历史误差天然抗积分饱和适合步进电机、增量式执行器。缺点是如果执行器需要绝对位置还得自己再累加一次。在1200上如果你用PID_Compact这些底层细节它都帮你处理了你只需要选对输出类型。但如果你要自己写算法比如做级联PID的内环就得明确选哪种。4.3 一个温度控制的参数实例举个我实际做过的例子一个电加热水箱目标80度室温25度加热功率2kW水温从25度升到80度大约需要8分钟。先估时间常数升温过程大致是一阶惯性时间常数大概在2~3分钟。采样周期我设了1秒因为温度变化慢1秒足够。预调节跑下来系统给出的参数是Kp3.2Ti45秒Td8秒。实测超调大约5度稳定时间约4分钟。这个结果可以接受但我把Kp降到2.8Ti加到55秒超调压到2度以内代价是稳定时间长了半分钟。对于水箱这种对象稳比快重要所以我选了后者。这个例子说明自整定给的是起点不是终点。最终参数要结合工艺对超调和稳定时间的要求来微调。5. 级联PID在1200上怎么搭5.1 什么场合需要级联级联PID串级PID解决的是“一个执行器要同时满足两个控制目标”的问题。典型场景是用蒸汽阀门控制换热器出口温度但蒸汽压力本身也在波动。如果只用一个PID压力波动会直接干扰温度控制。级联的做法是外环管温度内环管流量或压力。外环的输出不作为执行器的直接指令而是作为内环的设定值。内环快速跟随把压力波动消化掉外环就能更平稳地控制温度。热词里的“串级PID”“级联PID控制”说的就是这个。在1200上实现级联需要建两个PID工艺对象外环的输出接到内环的Setpoint上。5.2 内外环的采样周期要拉开级联PID有一个硬性要求内环的响应速度必须明显快于外环。一般要求内环的采样周期是外环的1/5到1/10。比如外环温度采样周期设1秒内环压力或流量就得设100~200毫秒。如果两个环速度差不多内环还没稳外环就动系统会互相打架越调越乱。在博途里两个工艺对象的采样周期是分别设的别偷懒设成一样。另外内环的设定值上下限要设好防止外环输出把内环逼到饱和。5.3 级联调试的顺序级联调试必须先内后外。先把内环单独整定好让它能快速、无静差地跟随设定值。内环稳了再把外环接上整定外环。如果反过来先调外环内环还没稳外环看到的反馈全是内环的振荡根本没法整。这个顺序错了调试时间会成倍增加。6. 调试现场最常遇到的几个坑6.1 输出方向反了这是最经典的低级错误但发生率极高。PID的输出是给加热器结果接成了制冷或者阀门开度信号反了输出增大反而关阀。现象是系统一上电就朝反方向跑越跑越远。排查方法很简单手动给一个输出看反馈是往设定值方向走还是反方向走。反了就在工艺对象里把输出方向改一下或者把执行器的接线/信号反一下。6.2 积分饱和系统启动时反馈值和设定值差距很大PID输出长时间顶在上限积分项一直在累加。等反馈值终于接近设定值时积分项已经累了一大堆输出下不来导致大幅超调。1200的PID_Compact内部有抗积分饱和机制但前提是你把输出上下限设对了。如果你把上限设成100%而实际执行器只能接受0~80%那超过80%的部分就是无效累加。所以输出上下限一定要按执行器的实际能力来设。6.3 反馈信号噪声导致微分项发疯微分项对噪声极其敏感。如果反馈信号里有高频干扰微分项会输出剧烈的抖动执行器跟着乱动。处理办法有两个一是在模拟量输入通道上加滤波1200的AI模块可以设滤波等级二是在PID工艺对象里启用微分滤波。我一般两个都做先把硬件滤波加上软件滤波作为兜底。6.4 手动/自动切换时的扰动从手动切自动时如果手动输出值和PID当前计算值差很多切换瞬间会有大扰动。正确做法是用无扰切换切换前让PID跟踪手动输出值切换时从当前值平滑过渡。PID_Compact的ManualEnable和ManualValue配合State状态字可以实现这个逻辑。具体做法是手动模式下让PID处于手动状态输出跟随ManualValue切自动时先确认Setpoint和Input接近再释放手动。7. 几个容易被忽略的细节7.1 State状态字要会用PID_Compact的State输出是个枚举值告诉你当前PID在干什么。调试时盯着它看比盯着曲线猜要快得多。比如State显示“预调节中”你就知道现在不能手动干预显示“错误”你就去查ErrorBits。7.2 工艺对象的在线调试面板博途里工艺对象自带一个在线调试面板可以实时看设定值、反馈值、输出值的曲线还能手动触发自整定。这个面板比自己在HMI上画趋势图方便得多调试阶段强烈建议用它。7.3 参数备份整定好的参数存在工艺对象里下载程序时如果选了“全部下载”参数会被覆盖。所以整定完成后把关键参数记下来或者用工艺对象的“导出”功能存一份。我见过太多人整定了一下午一次下载回到解放前。7.4 不同工况下的参数组有些对象在不同工况下最优参数不一样比如冬天和夏天、满负荷和半负荷。PID_Compact支持参数组切换可以存多组参数根据工况调用。这个功能用好了能省很多事。8. 自写PID算法时的注意事项如果你决定不用PID_Compact自己用SCL写PID有几个点必须注意。第一积分限幅。位置式PID的积分项一定要做上下限否则一旦饱和退出来很慢。第二微分先行。标准PID的微分项是对误差微分设定值突变时微分项会瞬间冲很大。改进做法是对反馈值微分避免设定值突变引起的微分冲击。第三采样周期要准。自写PID通常放在定时中断OB里执行比如OB35循环中断。中断周期就是采样周期别放在主程序OB1里因为OB1的扫描周期不固定。第四数据类型。PID运算涉及累加和乘法用Real类型别用Int否则精度不够积分项很快就溢出了。热词里提到的“OB”“ob数据库”在1200语境下应该指的是组织块Organization Block。PID_Compact本身不强制你放在哪个OB里但自写PID强烈建议放在循环中断OB里保证采样周期稳定。9. 从调试曲线反推问题调试时看曲线是有方法的。几种典型曲线形态对应的问题等幅振荡Kp太大或Ti太小或采样周期与对象不匹配。缓慢爬升到设定值后长期有静差积分作用不足Ti太大或Ki太小。超调后缓慢回落积分饱和或微分不足。输出抖动但反馈平稳微分项对噪声敏感或输出限幅设置不当。反馈值周期性波动存在外部周期性扰动或采样周期与扰动周期共振。学会看曲线比死记参数有用得多。我调试时习惯把设定值、反馈值、输出值三条曲线放在一张图上看三者之间的关系能告诉你绝大部分信息。10. 我个人的几点体会PID这东西理论公式就那么几行但真正难的是把对象摸清楚。同一个PID算法用在加热炉上和在电机调速上参数能差几个数量级。所以别指望有一套万能参数每次都要老老实实从对象特性出发。自整定是个好工具但它替代不了对工艺的理解。它给你一个能用的起点剩下的微调还得靠人。我见过太多人自整定完就不管了结果系统在特定工况下振荡查半天查不出原因。最后说一个习惯每次调试都记录。记录对象类型、采样周期、整定参数、最终曲线形态。下次遇到类似对象翻记录能省一半时间。这个习惯我坚持了几年受益很大。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门