☰
汇川PLC开关量温度PID控制实战:时间比例输出与参数整定
2026/9/28 1:29:30 网站建设 项目流程

1. 项目缘起与核心需求拆解

温度控制这件事,说简单也简单,说复杂也复杂。简单在于原理无非是“冷了加热、热了停”,复杂在于实际工况里加热惯性大、散热条件多变、传感器还有噪声,想稳定在某个设定值附近不来回振荡,就得靠控制算法。我这次接到的活儿,是用汇川PLC做一套温度调节系统,执行机构是典型的开关量器件——加热管配接触器或者固态继电器,也就是说PLC的输出只有“通”和“断”两种状态,没有模拟量输出。这就带来一个很现实的问题:开关量控制天然是“bang-bang”式的,要么全功率加热,要么完全停止,怎么让它表现得像连续调节一样平滑?

答案就是PID加开关量输出,业内常叫“时间比例输出”或者“PWM式开关控制”。核心思路是把PID运算出来的连续控制量,转换成一个周期内的导通时间占比,用占空比去驱动开关器件。比如控制周期设成10秒,PID算出输出60%,那就让加热器导通6秒、断开4秒。从宏观上看,加热功率就是60%,等效于模拟量调节,但硬件成本低了一大截,这也是很多中小型温控项目最常用的方案。

这套东西适合谁看?我觉得有三类人值得参考。第一类是刚接触汇川PLC、想找个完整案例练手的工程师,温度PID是个特别好的切入点,因为它涉及模拟量采集、PID指令、开关量输出、人机交互,麻雀虽小五脏俱全。第二类是从三菱、西门子转过来用汇川的同行,汇川的编程思路和指令体系有自己的特点,尤其是Easy系列和H5U、AM系列在PID实现上差异不小,踩过的坑值得分享。第三类是做设备维护或者非标自动化的朋友,现场经常遇到温控不稳的问题,理解PID和开关量输出的配合逻辑,排查起来就有方向了。

我这次用的硬件平台是汇川Easy320系列PLC,扩展了一个GL20-2HC高速计数模块用来接脉冲式温度传感器,这个组合在热流道、注塑机、包装机械的温度控制里挺常见。下面我把整个项目的设计思路、参数计算、梯形图实现、调试过程完整地捋一遍,尽量把每个“为什么这么选”讲清楚。

2. 整体方案设计与选型考量

2.1 为什么用开关量而不是模拟量输出

先说说选型逻辑。温度控制执行机构常见的有三类:模拟量调功器、固态继电器、接触器。模拟量调功器能接收4-20mA或者0-10V信号,实现真正的连续调功,控制精度最高,但一个调功器动辄几百上千块,而且大功率的还得配散热。固态继电器和接触器只能通断,成本低、接线简单、抗干扰强,缺点是开关动作频繁会影响寿命。

我这次的项目加热功率不大,3kW左右,用的是固态继电器,它的开关寿命远高于机械接触器,支持高频通断,正好适合时间比例输出。如果换成机械接触器,控制周期就不能设太短,否则触点很快就烧了,一般得设到30秒甚至更长,那样温度波动就会明显变大。所以选开关量方案的前提是执行器件能扛得住频繁动作,固态继电器或者可控硅模块是首选。

注意:如果现场只能用机械接触器,控制周期建议不低于20秒,并且要在程序里加最小导通时间和最小关断时间限制,避免PID输出在临界点附近疯狂抖动导致接触器“打点”。

2.2 PID控制周期的确定

控制周期Tc是时间比例输出的关键参数。设太短,开关动作频繁,器件损耗大;设太长,温度波动大,控制品质差。经验公式是Tc取系统时间常数的1/10到1/5。我实测这套加热系统的热时间常数大约在100秒左右(从冷态到设定值63.2%所需时间),所以Tc取10秒比较合适,既保证了控制平滑度,又不至于让固态继电器太累。

具体到程序里,我用一个定时器产生10秒的周期基准,PID指令每个扫描周期都执行运算,但输出只在周期起点更新一次占空比。这样PID的积分项不会因为周期内的重复计算而累积过快,这一点后面讲参数整定时会详细说。

2.3 传感器信号链设计

温度传感器用的是脉冲输出型,接在GL20-2HC模块上。这里要说明一下,GL20-2HC是高速计数模块,本身是给编码器、流量计这类脉冲信号用的,接温度传感器是因为这个传感器输出的是频率信号,频率和温度成线性关系。比如0℃对应1000Hz,100℃对应3000Hz,那频率每升高20Hz对应1℃。这种传感器抗干扰比热电偶强,长距离传输衰减小,在工业现场很实用。

PLC读取计数模块的当前计数值,经过换算得到实际温度。换算公式是:实际温度 = (当前频率 - 基准频率) / 频率系数。基准频率和频率系数在传感器手册里都有,我这边基准1000Hz、系数20Hz/℃,程序里用浮点运算处理。

2.4 人机交互与上位机通讯

项目要求能在触摸屏上设定目标温度、查看实时温度、调整PID参数。汇川的HMI和PLC之间走Modbus RTU,寄存器地址要对应好。我把设定值放在D100,实际值放D101,Kp、Ki、Kd分别放D110、D111、D112,触摸屏直接读写这些寄存器就行。上位机那边如果需要远程监控,可以再加一个Modbus TCP模块,把数据映射到以太网寄存器区。

3. 核心细节解析与实操要点

3.1 汇川PLC的PID指令怎么用

汇川Easy320用的是AutoShop编程环境,PID指令是PID功能块,和西门子的FB41类似但参数定义不同。它的输入有:使能端EN、设定值SP、反馈值PV、比例增益Kp、积分时间Ti、微分时间Td、采样周期Ts、输出上限、输出下限。输出是一个0到100的百分比值,正好对应0%到100%的占空比。

这里有个容易搞混的地方:汇川的积分时间Ti单位是秒,不是分钟,和某些品牌不一样。Ti越小积分作用越强,Ti越大积分越弱。微分时间Td也是秒。Kp是纯比例增益,没有量纲。我一开始按三菱的习惯把Ti设成分钟级,结果积分几乎不起作用,温度半天上不去,后来改成秒才正常。

提示:汇川PID指令的采样周期Ts要和实际调用周期一致。如果PID放在定时中断里执行,Ts就填中断周期;如果放在主程序里每个扫描周期都执行,Ts要填平均扫描周期,但这样不稳定,建议还是放定时中断。

3.2 时间比例输出的实现逻辑

PID算出来的输出是0-100的浮点数,要把它变成开关量,需要做三步转换。第一步,把输出值限幅在0到100之间,防止积分饱和时输出超范围。第二步,用输出值乘以控制周期得到导通时间。第三步,用一个周期定时器和一个导通定时器配合,周期定时器计时到Tc就复位,导通定时器计时到导通时间就关输出。

梯形图里我是这么写的:用SM0(始终接通)驱动一个10秒的定时器T0,T0的常闭触点串在T0线圈前形成自复位,这样T0每10秒产生一个扫描周期的脉冲。T0的常开触点触发一个比较指令,把PID输出值和当前周期内已过时间做比较,如果输出值大于已过时间占比,就置位加热输出Y0,否则复位Y0。已过时间用一个1秒定时器T1累加,T1在T0复位时清零。

这样写的好处是逻辑清晰,占空比精度能到1秒,对于10秒周期来说就是10%的分辨率。如果觉得不够细,可以把周期改成5秒,分辨率就是20%,但开关次数翻倍。我实测10秒周期配1秒分辨率,温度波动在±0.5℃以内,完全够用。

3.3 温度换算与滤波处理

GL20-2HC读回来的计数值是32位整数,要先转成浮点数再换算。换算完的温度值不能直接用,因为脉冲信号可能有抖动,尤其是传感器线缆靠近动力线时。我加了一个一阶低通滤波,公式是:滤波值 = 0.8 × 上次滤波值 + 0.2 × 本次采样值。这个系数0.2是我试出来的,太小了响应慢,太大了滤波效果差。

滤波之后还要做量程限幅,防止传感器断线时计数值为0导致温度显示成负几百摄氏度,触发误报警。我设了上下限,低于-20℃或者高于200℃就判定传感器故障,输出报警并强制关闭加热。

3.4 参数整定的实操方法

PID参数整定是这套系统最花时间的环节。我用的是临界比例度法,先把Ti和Td设成0,也就是纯比例控制,然后从小到大调Kp,直到温度出现等幅振荡。记录下此时的Kp叫Ku,振荡周期叫Tu。然后按经验公式:Kp = 0.6 × Ku,Ti = 0.5 × Tu,Td = 0.125 × Tu。

我实测Ku大约是8,Tu大约是40秒,所以Kp取4.8,Ti取20秒,Td取5秒。这套参数下去,温度从室温升到100℃大约用了3分钟,超调量不到2℃,稳定后波动在±0.3℃。后来微调了一下,Kp降到4.5,Ti加到25秒,超调更小,但上升时间长了十几秒。最终我选了Kp=4.5、Ti=22、Td=4,兼顾响应和稳定。

注意:整定的时候一定要在系统实际工况下进行,空载和带载的热惯性差别很大。我一开始空载整定完,装上工件后温度直接冲过头,后来带载重新整定才稳。

4. 实操过程与核心环节实现

4.1 硬件接线与模块配置

接线部分不复杂,但有几个细节要注意。GL20-2HC模块的脉冲输入端子要接传感器的信号线和屏蔽线,屏蔽层单端接地,接在PLC的接地排上。传感器供电如果是24V,要从PLC的24V输出取电,不要和动力线共用电源,否则干扰很大。固态继电器的控制端接PLC的Y0,注意Y0是晶体管输出还是继电器输出,晶体管输出响应快,适合高频通断,继电器输出不行。

模块配置在AutoShop里做,先扫描到GL20-2HC,然后设置计数模式为频率测量,采样时间设1秒。这样模块每秒更新一次频率值,PLC直接读寄存器就能拿到。频率值放在模块的输入映像区,具体地址看模块手册,我这边是IW100开始的几个字。

4.2 梯形图程序框架

程序分四个部分:初始化、数据采集与换算、PID运算、输出控制。初始化部分设置PID参数初值、定时器初值、报警标志清零。数据采集部分读GL20-2HC的频率值,换算成温度,滤波,限幅。PID运算部分调用PID指令,输入SP和PV,输出控制量。输出控制部分做时间比例转换,驱动Y0。

我重点说一下PID运算和输出控制的衔接。PID指令我放在一个100ms的定时中断里执行,这样采样周期固定,积分和微分计算准确。输出控制放在主程序里,每个扫描周期都执行,但占空比只在周期起点更新。具体做法是:PID输出存在D200里,主程序里用T0的上升沿把D200的值复制到D201,D201才是实际用于比较的占空比。这样PID在周期内更新D200不会影响当前周期的输出,避免了输出抖动。

4.3 关键参数计算过程

控制周期Tc=10秒,占空比分辨率1秒。PID采样周期Ts=0.1秒,即100ms中断。积分时间Ti=22秒,意味着积分项每22秒累积到和比例项相当的程度。微分时间Td=4秒,对温度这种大惯性系统来说,微分作用不宜太强,否则噪声会被放大。

输出限幅我设的是0到100,但实际运行时下限我抬到了5,也就是最小导通时间0.5秒。为什么?因为如果PID输出是1%,导通时间0.1秒,固态继电器可能还没来得及完全导通就断了,反而造成波形畸变和发热。设个最小导通时间,保证每次导通都有效。

4.4 调试现场记录

第一次上电,温度显示正常,但PID输出一直是100,加热不停。检查发现是PV值接反了,PID的反馈输入应该是实际温度,我误接了设定值。改过来之后正常。第二次调试,温度到了设定值附近开始振荡,周期大约20秒。分析是Kp太大,降到3之后振荡消失,但稳态误差有2℃。加上积分作用,Ti设30秒,稳态误差消除,但超调变大。再调Td到6秒,超调压下去了。最终参数Kp=3.5、Ti=28、Td=5,运行稳定。

还有一次,触摸屏上改设定值,PLC没反应。查了半天发现是Modbus寄存器地址偏移了一位,触摸屏写的是D100,但PLC里实际映射到了D101。汇川的Modbus地址和寄存器编号有时候差1,这个坑很常见,建议对照手册仔细核对。

5. 常见问题与排查技巧实录

5.1 温度波动大怎么办

温度波动大是最常见的问题,原因通常有三个。一是PID参数不合适,比例增益太大或者积分时间太短,都会引起振荡。排查方法是先把Ti和Td设0,只留比例,看振荡是否消失,如果消失就是积分或微分的问题。二是控制周期太短,开关动作太频繁,导致加热功率实际值和理论值偏差大。可以试着把Tc从10秒加到20秒,看波动是否减小。三是传感器噪声大,滤波系数太小。把滤波系数从0.2降到0.1,波动会明显改善,但响应变慢。

5.2 温度上不去或者超调严重

温度上不去,先看PID输出是否到了100。如果到了100还上不去,说明加热功率不够,或者传感器位置不对,测的不是加热区。如果输出没到100,检查设定值和实际值的偏差,偏差大但输出小,可能是Kp太小或者Ti太大。超调严重,通常是积分饱和引起的。解决办法是加积分分离,当偏差大于某个阈值时,暂时关闭积分作用,等偏差小了再开启。汇川PID指令本身不带积分分离,需要自己在程序里做,用一个比较指令控制Ti的输入,偏差大时把Ti设成一个很大的值,相当于关闭积分。

5.3 固态继电器发热严重

固态继电器发热是正常现象,但如果烫手就不正常了。原因可能是导通时间太短、开关频率太高,导致继电器内部损耗大。解决方法是加大控制周期,或者加最小导通时间限制。另外,固态继电器一定要配散热器,电流余量留足,3kW加热按220V算电流约14A,选25A以上的固态继电器比较稳妥。

5.4 通讯不上或者数据不对

汇川PLC和触摸屏通讯,最常见的问题是站号、波特率、校验方式不匹配。站号默认是1,波特率9600,校验偶校验,这些在PLC和触摸屏里都要设成一样。数据不对,先检查寄存器地址,汇川的Modbus地址有0基和1基的区别,手册上写40001,程序里可能要填0。还有一个坑是数据类型,温度是浮点数,占两个寄存器,触摸屏那边也要设成32位浮点,否则显示的是乱码。

5.5 常见问题速查表

现象可能原因排查方法解决措施
温度波动大PID参数不当关闭积分微分看是否改善减小Kp,增大Ti
温度上不去加热功率不足看PID输出是否到100更换更大功率加热器
超调严重积分饱和观察偏差大时输出是否持续100加积分分离
固态继电器发热开关频率太高测量导通时间加大控制周期
通讯失败参数不匹配核对站号波特率统一通讯参数
温度显示异常传感器故障检查频率值是否正常更换传感器或接线

实操心得:调试的时候一定要用趋势图记录温度曲线,光看数字看不出振荡周期和超调量。汇川的AutoShop有示波器功能,可以把温度值和PID输出同时抓出来,一眼就能看出问题在哪。

6. 参数整定进阶与优化思路

6.1 前馈补偿的引入

纯反馈PID在设定值变化时总是先有偏差再调节,响应有滞后。如果能在设定值变化的瞬间,直接给一个前馈量加到输出上,就能大大加快响应。前馈系数的确定方法是:在开环状态下,给一个固定的加热功率,记录温度上升斜率,然后反推需要多少功率才能达到目标斜率。我实测前馈系数取0.3左右,设定值从80℃跳到100℃时,前馈直接给30%输出,温度上升明显加快,超调也没增加。

前馈加在PID输出之后,用设定值的变化率乘以系数得到。程序里用一个微分指令对设定值求导,乘以系数后限幅,再加到PID输出上。注意前馈只对设定值变化有效,对负载扰动无效,所以不能替代反馈。

6.2 串级控制的适用场景

如果加热区有多个温区,或者传感器位置和加热位置距离远,单回路PID可能控不好。这时候可以用串级控制,主回路控温度,副回路控加热器附近的温度或者功率。主回路输出作为副回路的设定值,副回路快速响应,抑制扰动。汇川PLC支持多个PID指令并行,实现串级不难,但参数整定更复杂,先从副回路整定,再整定主回路。

6.3 模糊PID的简化实现

模糊PID听起来高大上,其实在PLC里可以做个简化版。根据偏差和偏差变化率,把Kp、Ti、Td分成几档,用查表法动态调整。比如偏差大时用大Kp小Ti加快响应,偏差小时用小Kp大Ti减少超调。汇川PLC的查表指令可以用比较指令堆叠实现,虽然代码量大点,但效果比固定参数好。我试过三档调整,温度波动从±0.5℃降到±0.2℃,代价是程序多了几十行。

7. 项目复盘与个人体会

这套系统跑了大半年,中间出过几次小问题,但整体稳定。我最大的体会是,PID参数没有“最优”,只有“最合适”。同一个加热系统,冬天和夏天的散热条件不同,参数就得微调。我后来在触摸屏上加了参数保存功能,操作工可以根据季节自己调,省得我老往现场跑。

另一个体会是,开关量控制虽然精度不如模拟量,但只要控制周期和最小导通时间设得好,实际效果差不了多少。关键是理解“等效”这个概念,用时间换精度,用周期换平滑。对于成本敏感的项目,这套方案性价比很高。

最后分享一个小技巧:如果现场干扰特别大,温度值跳得厉害,可以在传感器信号线上套个磁环,成本几块钱,效果立竿见影。我有个项目温度一直不稳,查了半天是变频器干扰,加磁环后曲线立刻平滑了。这种土办法,往往比改程序管用。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询