1. 这个温控项目到底要解决什么问题1.1 为什么不能用最简单的开关控制很多人一开始觉得温度控制不就是低于设定值就加热高于就停止嘛。这就是最简单的两位式ON-OFF控制一个温控继电器加一个接触器就能实现成本最低逻辑最简单。但实际用下来这种控制方式有两个很难受的问题。第一是过冲。加热体有巨大的余热热电偶或者PT100测到温度到了设定值你切断加热器但发热管、加热砖、加热筒本身还在往外放热温度还会继续往上冲一段冲个三五度是家常便饭。第二是周期振荡。温度低于下限又开、高于上限又停温度曲线会在设定值附近形成锯齿形来回波动永远稳不下来。在一些不太讲究的场合比如车间保温、粗加热这个精度够用了但碰上恒温槽、涂布烘干、挤出机料筒、半导体工艺设备这种波动直接决定了产品合格率。PID控制的价值在于它不等到温度越界才动手而是根据偏差有多大、偏差正在以什么速度变化提前调整输出。加热到一半虽然实际温度还没到设定值但控制器发现温度升得很快、加热体已经很热它会在温度到达之前就开始降低输出功率让温度平滑地贴上设定值。这样既减小过冲又让稳态精度高得多。1.2 PID控制思路要讲人话PID三个字母的意思我用开车来打比方一说就懂。P是比例偏差越大输出越大。相当于你开车看到离目标距离还远就踩大油门越近越松油门。问题是比例太大会在目标附近来回晃太小又慢吞吞。I是积分它把历史上的偏差累积起来只要存在残余偏差就一直修正哪怕偏差很小时间长了也能把它抹平。相当于开车遇到下长坡速度一直差一点你就持续轻踩油门修正。但它有个毛病响应慢而且容易攒过头。D是微分它看的是偏差的变化速度变化越快输出提前收得越狠。相当于你判断按现在的减速趋势再有两秒就到目标于是提前松油门甚至轻踩刹车。微分能压制过冲但对信号噪声很敏感。温度控制是典型的大惯性、大滞后对象升温慢、降温更慢热量在系统里到处传递。这就决定了温度PID的积分时间要设得比较长微分不能加得太猛否则一点噪声就能让输出抖得不像话。后面讲到整定时我会具体说。1.3 项目整体架构和硬件选型我做的这套模拟项目X目标是把一个加热试验槽的温度稳定控制在80℃允许波动正负1℃。加热元件是220V交流电阻加热管测温用PT100铂电阻执行机构是固态继电器加可控硅调功控制器是关键用一台小型PLC的PID指令来做闭环运算。整条信号链路是这样的测温元件PT100把温度变成电阻信号送到温度变送器输出4到20毫安电流进PLC的模拟量输入模块经过量程换算得到实际温度PVPLC内部运行PID指令用PV和设定值SV计算偏差输出一个4到20毫安的控制信号到固态继电器触发板最后由触发板控制加热管的输出功率。选这个架构的原因有几个。固态继电器SSR无触点不像接触器那样频繁吸合有火花、寿命有限特别适合温度控制这种需要频繁调节功率的场合。4到20毫安电流信号抗干扰能力强走线距离长也不怕电压降。PT100在中低温段精度高、线性度好80℃这个范围选它非常合适。如果你用的是K型热电偶那就得多做一道冷端补偿后面我会单独讲。2. PID指令核心参数解析与配置要点2.1 指令参数面板到底在说什么不同品牌的PLCPID指令长得不太一样有的叫PID、有的叫PID_CONTROL、有的叫PID算法功能块但核心参数大同小异绕不开这几个设定值SV、过程变量PV、输出值MV、比例增益Kp、积分时间Ti、微分时间Td还有采样周期Ts。我第一次用PID指令时也犯过糊涂面板上参数一大堆根本不知道先填哪些。后来总结出一套方法先把参数分成两组。第一组是信号和量程参数它们负责描述外部信号的换算关系第二组才是控制参数也就是Kp、Ti、Td这些真正决定控制效果的东西。两组分开处理思路就清晰很多。以我用过的某品牌PLC的PID指令为例参数分配是这样的参数名称本例取值说明设定值SV80.0℃期望温度过程变量PV变送器读回的温度0到100℃对应4到20毫安输出下限/上限0%到100%对应4到20毫安输出Kp 比例增益8.0初始值Ti 积分时间120秒温度系统惯性大先给长一点Td 微分时间0先不加微分Ts 采样周期1秒温度变化慢没必要太快这里有个必须提醒的坑积分时间Ti和微分时间Td的单位不同品牌、不同固化算法可能完全不同。有的用秒有的用分钟有些自整定算法用的是倒数形式的增益值。拿到一台不熟悉的PLC第一件事永远是翻手册确认这些参数的单位和方向不然你按照经验填了一组参数进去实际效果却南辕北辙浪费时间不说还容易误判成硬件问题。2.2 正作用和反作用第一步就决定成败PID指令里有一项设置叫作用方式也叫正作用、反作用这个概念很多新手一开始完全没意识到它的存在但它恰恰是温控项目里最容易让人抓狂的一个环节。它的含义很简单当过程变量PV变大时PID输出应该是变大还是变小。放到加热系统里想实际温度高了PV变大这时候我们要减小输出功率、停止加热所以输出应该变小这属于反作用。反过来在冷却系统里比如用冷水阀控温温度高了PV变大我们需要开大冷水阀、增大输出这就是正作用。如果作用方式设反了系统会进入一个非常诡异的状态温度超过设定值了控制器不但不减小输出反而继续加大功率温度越超越多输出一路顶到100%然后变成纯开关式失控。很多现场查了半天电路、换了传感器都不解决问题最后发现就是PID指令里一个位设错了。我当时在这套模拟项目X上就栽过一回。加热槽温度反复超温发热管全功率工作查线路、查传感器、查变送器都没问题折腾了一个下午最后拿起指令手册一看默认作用方式位是0对应正作用而我的加热场合需要的是反作用改成反作用后系统立刻就乖了。这个教训写出来希望大家记住调试温控系统第一步永远先确认PID的作用方式再谈参数整定。2.3 采样周期怎么选才合理采样周期Ts是很多人忽略的一个参数。温度控制是慢过程温度信号几秒钟都变不了几度所以采样周期完全没必要像运动控制那样做到毫秒级。采样太快会带来两个副作用。第一PID计算太频繁而PV变化量很小微分项会把输入信号中的微小噪声放大输出会抖。第二执行机构频繁动作对固态继电器来说频繁改变触发状态会增加发热和损耗缩短寿命。我一般会根据系统的时间常数来定采样周期。加热功率几千瓦、容积几升到几十升的加热槽时间常数通常有几十秒到几分钟采样周期选1到5秒都很合适。如果是几百毫升的小型加热体比如微型锡炉、小型模具加热升温很快时间常数可能只有几秒这时候采样周期缩到0.2到0.5秒比较合适。另外有个经验模拟量输入在进PID之前最好在程序里做一次滤波比如移动平均或者一阶惯性滤波。温度变送器输出如果有工频干扰直接进PID的微分项输出会跟着一起抖从温度曲线上看就是设定值附近有高频小毛刺很烦人。3. 实操过程从接线到参数整定3.1 I/O分配和接线要点模拟项目X的I/O表是这样的地址类型信号说明AIW0AI4到20毫安温度变送器输出AQW0AO4到20毫安PID输出到SSR触发板I0.0DI运行/停止启动PID控制Q0.0DO加热允许联锁信号接线有几点经验都是拿现场教训换来的。4到20毫安信号线一定要用屏蔽双绞线屏蔽层单端接地别图省事穿管时跟动力电缆放同一个线槽否则变频器、接触器一动作PID输出马上给你跳几下。电源处理上PLC的电源和加热主回路的电源要分开零线不要共用。模拟量通道非常娇气共零线带来的地电位差很容易把模拟量输入烧掉这个我见过不止一次。固态继电器触发板虽然自带光电隔离但安装时别让信号线贴着发热管的电源线走。发热管大电流通断瞬间会产生较强的电磁干扰离得太近PID输出异常跳变温度曲线像海浪一样起伏排查起来非常费劲。3.2 程序段实现和PID指令调用不同PLC的PID实现方式差别比较大这里给两种常见写法作参考。第一种是S7-200系列那种带参数表地址的PID指令梯形图里这样调用调用 PID 指令 EN SM0.0 // 始终允许 TBL VB100 // PID参数表起始地址 LOOP 0 // 回路号调用之前要做的事情是初始化参数表。把PV地址、设定值SV、输出值MV、Kp、Ti、Td、采样时间这些按偏移量填到VB100开始的参数表里。初学者最容易犯的错误是忘了初始化参数表里是内存随机数PID输出直接疯掉温度完全不受控还会被误以为是PLC坏了。第二种是结构化文本风格现在很多PLC系统都支持逻辑上更直观// 温度PID控制主程序简化示意 pid1.SV : 80.0; // 设定温度 pid1.PV : Temp_Real; // 变送器换算后的实测温度 pid1.Kp : 8.0; // 比例增益 pid1.Ti : 120.0; // 积分时间/秒 pid1.Td : 0.0; // 微分时间/秒 pid1.OutputMin : 0.0; // 输出下限 pid1.OutputMax : 100.0; // 输出上限 pid1.PosAction : FALSE; // 加热系统用反作用 pid1.run : RunSignal; // 运行标志 pid1(); MV_Percent : pid1.Output; // 取出0到100%输出模拟量换算那段特别容易写错。4到20毫安对应0到100℃PLC的模拟量输入模块把4到20毫安转换成数字量常见的是0到27648或0到32000的范围。换算公式很简单实际温度等于AIW原始值减量程下限除以量程上限减量程下限再乘以温度上限。这里有个非常常见的错误就是把0到20毫安当成量程范围来算或者把4毫安对应的数字量当成0。我在现场帮人排查过几次都是这种问题温度PV偏了一截PID调得再好也白搭。换算好后记得转成浮点数用REAL类型继续计算。PLC做整数除法会丢掉小数部分虽然只差一点点但在PID这种积分型算法里微小误差会累积最后表现为稳态误差始终消不掉。3.3 参数整定的实战流程参数整定是温控项目最见功力的环节也是这套实例里最核心的价值点。我的固定套路分四步每一步都有明确目的。第一步先关掉积分和微分纯比例运行。把Ti设成最大值相当于积分几乎不起作用Td设0Kp先从一个小值开始比如5。投运后观察温度曲线。这时候系统大概率会有稳态误差温度停在设定值下方某个位置这完全正常纯比例控制有静差是物理特性决定的。第二步逐步加大Kp找到临界振荡点。每次加大一点比如从5到8再到12、15直到温度曲线出现等幅振荡也就是温度在设定值附近以固定的幅度来回波动停不下来。记下这时候的比例增益Ku同时量出振荡周期Tu。这一步要耐心温度系统滞后大每次调整参数后要等温度曲线稳定走完至少两三个振荡周期再下结论不能看到一点波动就急着改参数。第三步按经验公式算出PID参数。我用的是经典的临界比例度法公式如下控制方式KpTiTdP0.5×Ku——PI0.45×Ku0.85×Tu—PID0.6×Ku0.5×Tu0.125×Tu在模拟项目X上我实测临界振荡出现在Kp18振荡周期Tu约90秒。按PID公式计算得到Kp10.8Ti45秒Td约11秒。取整后我先用了Kp10Ti45Td先不加因为温度信号滞后大、微分容易引发噪声我宁可保守一点。第四步试凑微调。投运后如果升温过冲偏大超过了设定值2℃我先把Kp降一点或者把Ti从45秒加到60秒让积分作用更温和如果温度一直回不到设定值就把Ti减小加快积分消除静差的速度如果温度在设定值附近小幅高频抖动再考虑加一点Td同时检查传感器信号质量。我最终停在Kp12、Ti60秒、Td5秒这组参数上。实测效果是升温到80℃用时约18分钟最大过冲1.2℃稳定后波动正负0.3℃以内完全满足正负1℃的工艺要求。提醒一句上面测到的Ku和Tu是这套模拟项目的实际数据换一套设备差异会非常大。你拿到手可能是Kp50、Ti几百秒这都很正常。真正能复用的是这套整定流程而不是我给出的具体数值。4. 常见问题与排查技巧实录4.1 温度过冲大、一直往上冲最常见的三个原因作用方式设反了、Kp太大、输出已经顶到100%。排查顺序我建议先确认作用方式再看输出值是不是已经到上限最后才动Kp。如果输出已经100%了但温度还在缓慢上升说明系统本身的加热能力大于热耗散供大于求再调PID参数也没用要从执行器层面解决比如降低加热功率上限、加散热风扇、分阶段限功率。反过来如果输出顶到100%温度还是上不去那是加热功率选小了也要从系统设计层面解决。这两种情况都属于PID光靠算法救不了的极端工况。4.2 稳态误差消不掉纯比例控制有静差是正常的消除静差要靠积分作用。排除了纯比例之后如果仍然有稳态误差我从两个方向查。第一积分是否加得太慢了。Ti设得太大积分作用太弱误差消除过程很长看起来就像永远差一点。把Ti逐步调小观察静差是不是在缓慢消失。第二PV是否准确。温控系统里传感器显示值就不准的话PID算法再正确也白搭。拿一个标准温度计做个比对在恒温状态下看看PLC里读到的PV和实际温度是不是一致。我遇到过变送器零点漂移的情况显示温度比实际温度偏高3℃结果PID拼命把温度压到设定值实际产品全废了。这种问题不是PID能解决的要定期做传感器校准。4.3 积分饱和和手自动切换温度系统从冷态启动时偏差很大积分项会快速累积PID输出很快到100%。等温度到了设定值偏差归零但积分项还保持着之前的累计值输出还要花很长时间慢慢从100%降下来。这期间温度会远远冲过设定值看起来特别像参数没整好实际是积分饱和了。解决办法有几个层面。首先确认PID指令里的输出限幅已经设成0到100%。其次很多高端PLC的PID功能块自带抗积分饱和逻辑确认已经使能。另外我现场最常用的一个土办法是分段启动温度低于设定值还比较远的时候直接用全功率开环加热等温度接近设定值比如相差5℃以内再把PID投入闭环。升温速度更快过冲更小积分饱和问题也自然绕开了。手自动切换的坑也值得说两句。如果设备需要在手动输出和自动PID之间切换一定要用无扰切换功能在手动状态下让PID内部积分项反复跟踪当前实际输出值。这样切到自动的时候输出不会瞬间跳变。没有这个功能的切换瞬间输出会猛地跳一下加热功率突变造成温度波动对有些工艺来说就是废品了。4.4 传感器和执行器相关的坑PT100三线制接法的问题很典型。三线制的好处是能抵消线路电阻的影响但有人接线时图省事把三根线当两根用或者接错位置线路电阻引入误差温度显示比实际偏高或者偏低几度。如果传感器导线比较长这个误差会很可观。K型热电偶要特别注意补偿导线极性问题。接反了冷端补偿方向错误显示温度来回漂移看起来像PID失控其实是信号源就错了。补偿导线最好用屏蔽型屏蔽层接到仪表端的地。固态继电器调功方式也有讲究。温度控制常用的有调功方式和移相调压方式前者过零触发的整周波调功对电网干扰小后者连续调压会产生谐波严重的时候干扰PLC模拟量信号温度曲线会出现周期性波浪。我在一次设备改造中遇到过这个问题最后把移相触发改回过零整周波方式温度才真正稳下来。还有一个容易忽略的细节同样的设备冬天和夏天的PID参数可能不一样。环境温度低加热系统热耗散更大临界参数变化很明显。跨季节使用PID参数漂移导致精度下降不一定要怀疑算法坏了重新整定一次就行。给设备做温控的最好把四季的整定参数都记录存档换季直接调出来用省很多功夫。说说我个人的体会。温度控制项目的成败七分在参数整定三分在传感器信号质量。PID指令本身并不神秘它就是那套看偏差、追偏差、预判偏差的逻辑固化成了指令真正难的是你愿不愿意花时间去看温度曲线的形状并根据曲线形状去推断系统的脾气。我第一次整定恒温水槽温控的时候来回调了三天看了无数条S型、波浪型、锯齿型的曲线后来才练出看一眼曲线形状就大概知道该动Kp还是该动Ti的手感。如果你正在被温控问题折磨就按本文的顺序走一遍先确认作用方式再确认传感器换算然后纯比例找临界振荡最后按公式落参数。这套流程不用记太多花哨的东西每一步都有工具和公式兜底基本不会翻车。这套实例后续还可以往两个方向扩展。一个方向是把二维温度场做分区控制比如多点加热的模头用多个独立PID回路再通过前馈补偿相邻区域的互相干扰。另一个方向是在PID前端加一点简单的自整定逻辑让设备在不同工况下自动微调参数。但不管怎么扩展底子还是今天聊的这些逻辑基础扎实了后边的花样才玩得动。