ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

汇川PLC开关量PID温控实战:从原理到梯形图程序与参数整定

汇川PLC开关量PID温控实战:从原理到梯形图程序与参数整定 1. 从一台注塑机温控改造说起为什么开关量也能做PID去年帮朋友改造一台老式注塑机的料筒温控原厂用的是温控表加接触器控温精度差、超调大料筒温度经常在设定值上下十几度来回晃。朋友第一反应是换一套模拟量输出的温控模块用4-20mA去驱动固态继电器做连续调节。但我看完现场后给了另一个方案保留原有的接触器加热回路只把温控表换成汇川PLC用开关量输出配合PID算法来做时间比例控制。改完之后控温精度稳定在正负1.5度以内成本比换模拟量方案省了一大半。这件事让我意识到很多做温度调节的同行一提到PID就默认必须配模拟量输出其实这是个误区。PID开关量控制的核心思路是PID运算的结果不是直接输出一个模拟电压或电流而是转换成一个在一个控制周期内加热器导通时间占比的数值再通过PLC的普通数字量输出点去控制接触器或固态继电器的通断。说白了就是把连续调节变成了快速通断的等效调节。这套方案特别适合几类场景一是老设备改造原有加热回路是接触器或固态继电器不想大动干戈二是成本敏感的项目模拟量输出模块比数字量输出模块贵不少三是加热惯性较大的系统比如注塑机料筒、烘箱、热流道模具这些负载本身热惯性大对输出分辨率要求没那么苛刻。当然如果你的系统要求控温精度到0.1度级别或者加热器功率很小、热惯性极低那还是老老实实上模拟量。这篇文章我会把汇川PLC上做PID开关量温控的完整思路拆开讲包括PID参数怎么整定、控制周期怎么选、梯形图程序怎么写、实际调试中会遇到哪些坑。内容基于汇川Easy系列和H5U系列PLC的编程实践梯形图为主部分逻辑用ST补充说明。不管你是刚接触汇川PLC的新手还是做过模拟量PID想了解开关量方案的老手应该都能从中找到能直接用的东西。2. 开关量PID的底层逻辑把连续输出切碎成时间片2.1 位置式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)]在开关量温控场景下我一般推荐用位置式PID。原因很直接位置式PID的输出天然就是一个0到100%的百分比值这个值可以直接映射成一个控制周期内加热器导通的时间占比物理意义非常清晰。增量式PID输出的是增量你还得再做一个累加才能得到百分比多了一步不说累加值还容易因为积分饱和跑飞。但位置式PID有个必须处理的问题积分饱和。当温度远低于设定值时误差很大积分项会持续累加输出很快冲到100%上限。等温度接近设定值时积分项已经积累了一个很大的值退不下来导致严重超调。解决办法有两个一是输出限幅把PID输出钳在0到100之间二是积分分离当误差大于某个阈值时暂时关闭积分作用。这两个手段在实际项目中基本是标配后面写程序时会具体实现。2.2 时间比例输出的实现原理假设PID运算输出是60%控制周期设为10秒那么在一个10秒周期内加热器导通6秒、断开4秒。这就是时间比例输出的基本逻辑。听起来简单但有几个关键点决定了控制效果的好坏。控制周期怎么选这是第一个要拍板的事。周期太短接触器频繁动作机械寿命受不了而且固态继电器虽然开关快但频繁通断也会增加发热和电磁干扰。周期太长温度波动会明显变大因为在一个周期内加热是全开或全关的周期越长这种通断带来的温度纹波越大。我的经验值是接触器输出选10到30秒固态继电器输出选2到5秒。注塑机料筒这种大热惯性负载用接触器的话我一般设20秒烘箱类负载用固态继电器设3秒左右。这个值不是绝对的你可以根据实际温度波动情况微调。判断标准是如果温度在设定值附近有规律地上下波动波动周期和控制周期接近说明控制周期太长了如果接触器动作太频繁、声音很吵说明周期太短了。最小导通时间是第二个关键点。如果PID输出是2%控制周期10秒那导通时间只有0.2秒。接触器吸合都需要几十毫秒0.2秒的通断对接触器来说就是点动既不能有效加热又加速触点磨损。所以需要设一个最小导通时间比如1秒。当计算出的导通时间小于1秒时有两个处理策略一是直接忽略这次输出导通时间为0二是把这次的时间累积到下次。我一般用累积策略这样小输出也能被有效执行不会丢失。2.3 汇川PLC的PID指令能力边界汇川Easy系列和H5U系列都内置了PID指令。以H5U为例PID指令的基本参数包括使能、设定值、反馈值、比例增益、积分时间、微分时间、采样周期、输出上限、输出下限等。这里有个容易混淆的地方PID指令的采样周期和控制周期不是一回事。PID指令的采样周期是指PID运算的间隔比如设100ms那PLC每100ms执行一次PID运算更新一次输出百分比。而控制周期是指时间比例输出的周期比如10秒。这两个参数是独立的。PID采样周期一般设得比较短100ms到500ms都行让PID运算能快速响应温度变化控制周期设得长减少执行机构的动作频率。汇川PLC的PID指令输出是浮点数范围由输出上下限决定。我一般设输出上限100.0、下限0.0这样输出直接就是百分比。然后程序里再用这个百分比去计算导通时间。还有一个细节汇川Easy系列的PID指令和H5U的略有不同Easy系列有些型号的PID参数是整数格式需要做定标转换。比如比例增益在指令里是整数实际值要除以10或100。这个一定要查对应型号的编程手册别想当然。我见过有人把Kp设成100以为很大结果实际是10.0调了半天调不出效果。3. 梯形图程序架构从温度采集到加热器通断的完整链路3.1 程序整体框架设计整个程序我习惯分成四个功能块来写这样逻辑清晰调试时也好定位问题温度采集与标定块读取热电阻或热电偶模块的原始值转换成实际温度值做滤波处理PID运算块调用PID指令输入设定值和反馈值输出控制百分比时间比例转换块把PID输出的百分比转换成导通时间管理控制周期计时输出驱动块根据导通时间控制加热器输出点同时处理最小导通时间和安全联锁这四个块在梯形图里可以用主程序调用子程序的方式组织也可以直接在主程序里顺序排列。我倾向于用子程序因为温控程序往往不止一路多路温控时子程序可以复用改起来也方便。3.2 温度采集与滤波处理温度采集这块汇川的GL20系列扩展模块或者本地模拟量通道都可以接热电阻。以PT100为例模块读回来的原始值一般是0到32000对应某个温度范围具体看模块型号和配置。你需要做两步转换先把原始值转成实际温度再做滤波。转换公式取决于模块的量程配置。比如模块配置为-200到850度对应0到32000那转换就是实际温度 -200.0 (原始值 / 32000.0) * 1050.0这个计算在梯形图里用浮点运算指令实现。汇川PLC支持浮点加减乘除直接写就行。滤波处理我一般用一阶滞后滤波也叫指数滤波。公式是滤波值 滤波系数 * 本次采样值 (1 - 滤波系数) * 上次滤波值滤波系数取0.1到0.3之间。系数越小滤波效果越强但响应越慢。温度信号本身变化就慢所以滤波系数可以取小一点0.1到0.2都行。我一般用0.15兼顾滤波效果和响应速度。注意滤波不是必须的如果你的温度信号本身很干净可以跳过。但如果信号有跳动不滤波直接进PID微分项会把跳动放大输出会剧烈抖动。所以只要信号有噪声滤波这一步不能省。3.3 PID指令的调用与参数配置汇川H5U的PID指令在梯形图里的调用方式是这样的指令块有多个输入引脚包括使能、设定值、反馈值、Kp、Ti、Td、采样周期、输出上限、输出下限输出引脚是PID输出值。设定值我一般用一个寄存器存方便上位机或触摸屏修改。反馈值就是滤波后的温度值。Kp、Ti、Td三个参数存在掉电保持寄存器里这样调好的参数断电不会丢。采样周期设100ms也就是0.1秒。这个值要和你PID指令实际被调用的间隔一致。如果你把PID指令放在100ms的定时中断里执行那采样周期就填0.1如果放在主程序里主程序扫描周期是10ms那PID指令每10ms执行一次采样周期就填0.01。这里必须一致否则PID的积分和微分作用会算错。输出上下限设0.0和100.0。有些同行会把上限设成95或90留一点余量防止积分饱和太严重。我觉得没必要积分饱和用积分分离来处理更直接输出限幅就设0到100。3.4 时间比例转换的梯形图实现这是整个程序的核心部分。思路是用一个定时器做控制周期计时周期开始时根据PID输出计算本次的导通时间然后在这个周期内当计时器当前值小于导通时间时输出ON大于等于导通时间时输出OFF。具体实现步骤控制周期定时器T1设定值比如200对应20秒时基100ms当T1未计时到且T1使能时每个扫描周期计算导通时间导通时间 PID输出 / 100.0 * 控制周期设定值比较T1当前值和导通时间T1当前值小于导通时间时加热输出ONT1计时到复位T1同时把本次周期剩余的欠账时间累加到下个周期关于最小导通时间的处理我一般这样做如果计算出的导通时间小于最小导通时间设定值比如10对应1秒则本次不输出但把这个导通时间累加到一个补偿时间寄存器里。下个周期计算导通时间时把补偿时间加进去。如果补偿时间累加超过了最小导通时间就正常输出同时清零补偿时间。这个逻辑用梯形图写稍微有点绕用ST写会更清晰。汇川PLC支持ST和梯形图混合编程关键的计算部分用ST输出逻辑用梯形图这样既清晰又方便调试。4. PID参数整定从能控住到控得稳的实操路径4.1 先搞懂Kp、Ti、Td各自在温度环里管什么很多新手调PID是三个参数一起瞎试这样效率极低。正确的做法是先理解每个参数的作用然后按顺序逐个调。Kp比例增益决定了对当前误差的响应强度。Kp越大误差出现时输出变化越猛系统响应越快但太大就会振荡。温度控制里Kp一般从较小的值开始试比如2到5然后逐步加大。Ti积分时间决定了消除稳态误差的速度。Ti越小积分作用越强消除静差越快但太小会引起积分振荡。温度控制里Ti一般在几十秒到几百秒的量级。注意汇川PLC的Ti单位是秒有些PLC是分钟一定要确认。Td微分时间决定了对抗温度变化的预判能力。Td越大对温度变化趋势的抑制越强但温度信号有噪声时Td会放大噪声。温度控制里Td一般设得比较小甚至不设。因为温度本身变化慢微分作用带来的收益有限反而容易引入噪声问题。我的整定顺序是先调Kp再调Ti最后看情况加Td。4.2 手动整定的具体步骤和判断标准第一步把Ti设得很大比如9999相当于关闭积分Td设为0Kp设一个较小的值比如2。观察温度曲线。如果温度上升很慢到达设定值后长时间上不去说明Kp太小逐步加大Kp每次加1到2直到温度能在合理时间内到达设定值附近。如果温度到达设定值后开始振荡说明Kp太大了回调10%到20%。第二步Kp确定后逐步减小Ti。每次减小后观察温度是否能稳定在设定值。如果温度在设定值附近缓慢漂移说明积分作用不够继续减小Ti。如果温度开始出现周期性的上下波动说明Ti太小了回调。第三步如果温度超调比较大可以适当加一点Td一般从Ti的1/10开始试。但温度控制里我很少用Td因为滤波后的温度信号虽然干净但微分作用对温度这种慢变量来说意义不大反而增加调参复杂度。整个整定过程可能需要反复几次每次改完参数后至少观察3到5个控制周期再判断。温度系统惯性大参数变化的效果不会立刻显现急着下结论容易误判。4.3 自整定功能能不能用汇川部分型号的PLC和温控模块支持PID自整定。自整定的原理是让系统做一次阶跃响应根据响应曲线自动计算PID参数。听起来很省事但实际用下来有几个限制。自整定需要系统处于稳定状态才能启动如果温度正在大幅波动自整定结果会不准。自整定过程中温度会有比较大的波动对于不能承受温度波动的工艺比如某些食品加工或药品生产自整定可能不适用。自整定算出来的参数是一个折中值不一定是最优的通常还需要手动微调。我的建议是如果工艺允许温度波动可以先用自整定跑一遍得到一个基础参数然后在此基础上手动微调。如果工艺对温度波动敏感还是老老实实手动整定。5. 调试中遇到的真实问题与排查过程5.1 温度超调严重积分饱和的排查与解决第一次调试注塑机料筒温控时遇到的问题是温度从室温升到设定值200度超调到了230度才回落然后慢慢稳定到200度。超调30度对于注塑工艺来说太大了有些材料会分解。排查过程先看PID输出曲线发现温度在150度之前PID输出一直是100%积分项持续累加。温度到180度时PID输出开始下降但下降很慢因为积分项积累的值太大了比例项已经变成负的了但积分项还是正的两者抵消后输出还是正的。等温度冲到230度误差变成负30度积分项才开始往回退。这就是典型的积分饱和。解决办法是加积分分离当误差绝对值大于某个阈值比如20度时把积分项清零或暂停积分累加。这样温度在快速上升阶段不会积累大量积分接近设定值时积分项从零开始不会造成超调。改完之后超调从30度降到了5度以内。如果还想进一步减小超调可以在误差进入正负5度范围时再开启积分这样超调能控制在2度以内。5.2 温度在设定值附近规律振荡控制周期与PID参数的匹配问题另一个项目是烘箱温控温度稳定后在设定值上下波动波动幅度大概正负3度波动周期大约20秒。观察发现波动周期和控制周期一致都是20秒。这说明控制周期太长了。在一个20秒的周期内加热器要么全开要么全关温度自然会在这个周期内上下波动。把控制周期从20秒改成5秒后波动幅度降到了正负1度以内。但控制周期改短后固态继电器的动作频率增加了4倍。好在固态继电器没有机械触点动作寿命几乎无限只是发热会稍微增加。如果是接触器输出就不能这么改了得从PID参数上想办法比如减小Kp、增大Ti让输出变化更平缓。5.3 接触器频繁动作最小导通时间设置不当有个项目用的是接触器输出调试时发现接触器哒哒哒响个不停声音很吵。查程序发现PID输出在5%到10%之间波动控制周期设的10秒导通时间在0.5秒到1秒之间。接触器吸合一次需要0.1秒左右0.5秒的通断就是频繁点动。解决办法是设最小导通时间为2秒。当计算出的导通时间小于2秒时本次不输出把时间累加到补偿寄存器。这样接触器要么不动作要么至少吸合2秒动作频率大幅降低。但这样改的副作用是小输出时加热会变得断续温度波动可能变大。所以最小导通时间不能设得太大一般1到2秒就够了。如果PID输出长期在10%以下说明加热器功率选大了或者保温性能太好这种情况可以考虑用周期跳跃策略即几个控制周期才输出一次。5.4 温度采集值跳动导致输出抖动滤波与微分项的配合有个项目用的是热电偶信号本身有点噪声温度值在小数点后一位跳动。PID输出也跟着跳加热器通断时间忽长忽短。先加了滤波滤波系数0.1温度值稳定了。但PID输出还是有轻微抖动查下来是微分项在起作用。Td设的是10秒微分项对温度的小幅变化很敏感放大后导致输出抖动。把Td改成0输出立刻稳定了。温度控制里微分项确实不是必须的尤其是信号有噪声的情况下关掉微分反而更稳。6. 从单路到多路温控程序的扩展与优化思路6.1 多路温控的程序结构一台注塑机可能有四五段料筒温度一台烘箱可能有多层温度这就需要多路温控。程序结构上我一般把温控逻辑写成一个子程序用参数传递的方式调用。子程序的输入参数包括设定值寄存器地址、反馈值寄存器地址、PID参数寄存器起始地址、输出点地址、控制周期设定值等。汇川PLC的子程序调用支持参数传递但梯形图里的参数传递不如ST灵活。如果路数多我建议用ST写一个温控功能块然后在主程序里实例化多个。汇川H5U支持用户自定义功能块这个功能很实用。多路温控时要注意错开控制周期。如果四路温控的控制周期都是20秒而且同时启动那四路加热器会同时通断造成电网负荷波动。可以把各路的控制周期起始时间错开比如第一路从0秒开始第二路从5秒开始第三路从10秒开始第四路从15秒开始。这样任意时刻最多只有一路在切换状态电网负荷平稳。6.2 与触摸屏和上位机的数据交互温控程序通常需要和触摸屏或上位机通信实现设定值修改、实时温度显示、PID参数修改、报警显示等功能。汇川PLC支持Modbus RTU和Modbus TCP触摸屏一般走Modbus RTU。需要规划好寄存器地址。我一般把设定值、当前温度、PID参数、输出百分比、报警状态这些变量放在连续的寄存器地址里方便触摸屏批量读取。比如从D100开始D100是设定值D101是当前温度D102是PID输出D103到D105是Kp、Ti、TdD106是报警字。PID参数修改后需要做范围限制防止误操作把参数改得离谱。比如Kp限制在0.1到100之间Ti限制在1到9999之间。这个限制在PLC程序里做触摸屏输入后PLC判断是否超限超限则拒绝修改并置报警位。6.3 报警与安全联锁逻辑温控系统必须有完善的报警和安全联锁。基本的报警包括温度超上限报警、温度超下限报警、传感器断线报警、加热器断路报警。传感器断线报警的判断方法是如果温度值低于某个合理下限比如室温以下或者温度值长时间不变化就判断为传感器故障。加热器断路报警可以通过检测加热时的电流来判断如果没有电流检测可以通过温度是否上升来间接判断。安全联锁方面加热输出必须受使能条件控制。比如设备门未关、急停按下、温度超上限时加热输出必须强制关闭。这个逻辑要放在输出驱动的最外层优先级最高。提示报警逻辑里温度超上限的报警值一般设成设定值加10到20度超下限设成设定值减10到20度。不要设得太接近设定值否则正常波动就会触发报警。7. 一些容易被忽略的细节和我的个人习惯7.1 掉电保持与参数恢复PID参数、设定值这些关键数据必须存在掉电保持寄存器里。汇川PLC的D寄存器有一部分是掉电保持的具体范围查手册。如果掉电保持寄存器不够用可以把参数存在EEPROM里但EEPROM写入次数有限不能频繁写。我一般是在参数修改后用一个保存按钮触发写入EEPROM而不是每次修改都写。另外程序里要加参数恢复逻辑。如果掉电保持寄存器的值是0或者超出合理范围比如Kp是0说明是首次上电或者数据丢失程序自动加载一组默认参数。这样即使数据丢了设备也能正常启动。7.2 控制周期定时器的时基选择汇川PLC的定时器有不同时基比如1ms、10ms、100ms。控制周期定时器我一般用100ms时基因为控制周期是秒级的100ms时基的定时器设定值范围更大精度也够用。如果用1ms时基设定值20000对应20秒数值太大容易出错。但PID采样周期的定时器要用10ms或1ms时基因为采样周期是100ms级的100ms时基精度不够。7.3 调试时用数据追踪代替盯着看汇川的编程软件支持数据追踪功能可以把温度值、设定值、PID输出、导通时间这些变量同时记录下来生成曲线。调试时不要只盯着触摸屏上的数字看用数据追踪把曲线拉出来一眼就能看出问题在哪。比如温度超调看曲线就知道是积分饱和还是Kp太大。温度振荡看曲线就知道是控制周期问题还是Ti太小。数据追踪是调PID最有效的工具没有之一。7.4 关于PID最优曲线的理性看待网上经常能看到PID最优曲线的说法展示一条超调极小、稳定极快的温度曲线。我的看法是最优曲线是相对的取决于你的工艺要求。注塑机料筒要求升温快允许一定超调药品烘箱要求不能超调升温慢一点没关系。脱离工艺要求谈最优没有意义。而且仿真环境下的最优曲线和实际系统往往有差距。实际系统的热惯性、环境温度、负载变化都会影响控制效果。与其追求理论最优不如把参数调到满足工艺要求且稳定可靠就行。7.5 一个实用的参数备份方法调好一组PID参数不容易调好后一定要备份。我的习惯是在程序里做一个参数备份功能按下一个按钮把当前所有PID参数复制到另一组寄存器里。如果后续有人误改了参数按参数恢复按钮就能恢复到备份值。这个功能用几行梯形图就能实现但能省去很多重新调参的麻烦。另外在程序注释里记录下每组参数的整定日期和适用工况。比如2024年3月注塑机料筒环境温度25度参数Kp8, Ti120, Td0。这样以后换工况时可以直接调用对应的参数组不用从头调。温控这个事说到底是三分靠算法、七分靠调试。PID理论大家都懂但实际系统里的各种非理想因素才是真正考验人的地方。我踩过的坑包括但不限于积分饱和导致超调、控制周期和PID采样周期搞混、最小导通时间没设导致接触器频繁动作、滤波系数太大导致响应迟钝。每一个坑都对应着一段调试到深夜的经历。希望这篇内容能帮你少走一些弯路把温控调得又快又稳。
返回列表