ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

汇川PLC开关量模拟PWM温控实战指南

汇川PLC开关量模拟PWM温控实战指南 1. 为什么用开关量硬凑PWM——汇川PLC调温现场的真实困局PID控制在工业温控里早不是新鲜事但最近连续三个项目踩进同一个坑客户坚持用汇川Easy320 PLC配GL20-2HC高速计数模块非要实现“开关量输出软件模拟PWM”来驱动加热棒。不是他们不懂PID而是现场条件逼得人只能“土法炼钢”——没有模拟量输出模块没有专用温控器连变频器都省了就靠PLC本体的DO点和一个固态继电器SSR硬扛。我第一次看到需求单时心里直打鼓开关量只有ON/OFF两种状态怎么调出连续可变的功率更麻烦的是客户要求温度波动≤±0.5℃响应时间30秒而他们手里的PLC程序里还写着“每5秒切一次加热”这哪是PID这是电炉开关机日志。问题根源不在算法而在执行层。标准PID输出是0–10V或4–20mA连续信号对应加热功率线性调节但开关量输出本质是数字脉冲必须靠占空比Duty Cycle来等效平均功率。比如100ms周期内导通80ms、关断20ms等效就是80%功率。可难点在于PLC扫描周期不稳定、DO响应延迟不可忽略、SSR存在最小导通/关断时间限制。我实测过Easy320的DO点从指令发出到实际电平翻转平均延迟12.3ms最大抖动达±4.7ms——这意味着你设的10ms导通时间实际可能变成6ms或15ms误差直接超50%。更致命的是GL20-2HC模块虽标称支持200kHz脉冲输入但它本身不生成PWM只是计数器真正要靠PLC主程序循环置位/复位DO点来“软模拟”而Easy320默认扫描周期是10ms根本压不住100Hz以上的PWM频率。所以这不是“PID还能不能用”的问题而是“在资源受限条件下如何让PID的输出结果能被开关量 faithfully 执行”的工程问题。关键词里反复出现的“pwm故障保护”“pwm接mos管发热”“pwm电机飞车”其实都在指向同一个底层矛盾开关量PWM不是简单地“快开快关”它必须与负载热惯性、执行器电气特性、PLC硬件时序三者严格匹配。我后来把所有失败案例归为三类一是周期选得太短SSR来不及完全导通就关断导致触点拉弧烧毁二是周期太长温度还没来得及变化PID已经误判超调三是占空比更新逻辑没做防抖一帧扫描内多次修改DO状态造成毛刺干扰。这些坑文档里不会写手册里只说“支持高速输出”但没人告诉你“高速”的边界在哪。提示汇川Easy320的DO点驱动能力为0.5A/点SSR输入端典型电流5–15mA。实测发现当PWM频率50Hz时SSR输入端电容效应开始显现上升沿变缓导致实际导通时间比程序设定值长3–8ms。这个偏差必须在PID输出计算中预补偿否则再准的算法也白搭。2. GL20-2HC模块的真实角色——它不是PWM发生器而是“时序校准器”很多人看到“GL20-2HC”就以为能直接输出PWM这是个根深蒂固的误解。查汇川官方手册第4.2.3节明确写着“GL20-2HC为高速计数模块仅提供A/B相脉冲输入计数、频率测量、周期测量功能无任何输出通道不支持PWM波形生成”。它连DO点都没有纯粹是个“眼睛”不是“手”。那为什么热搜词里总把它和PWM绑在一起因为工程师们发现用它测温传感器如PT100配变送器输出的脉冲信号的频率再反推温度值比用AD模块采样更抗干扰、更稳定——尤其在大功率加热设备附近电磁噪声让模拟量信号漂移严重而脉冲频率受干扰小精度反而更高。我们真正用GL20-2HC的地方是构建“温度反馈闭环”的前端。举个实例某注塑机料筒温控用PT100配YK-201B温度变送器输出0–10kHz脉冲1kHz100℃接入GL20-2HC的CH1通道。PLC每100ms读取一次计数值换算成当前温度。这里的关键不是“计数”而是“精确测频”。GL20-2HC支持“门控计数”模式设一个100ms门控时间计数器在此期间累计脉冲数再除以0.1得到频率Hz。但问题来了——如果温度突变脉冲频率跳变而门控时间固定就会产生量化误差。比如真实频率从5.00kHz跳到5.01kHz100ms内理论应计501个脉冲但因计数器在门控结束瞬间锁存可能只计到500或502个误差±0.2%。这对±0.5℃要求来说已接近临界。解决方案是改用“周期测量”模式。GL20-2HC能测单个脉冲周期精度达1μs。我们让变送器输出固定占空比50%的方波测其周期T则频率f1/T。实测发现测周期比测频率更稳即使脉冲数少只要边沿清晰周期误差0.5μs对应频率误差0.01%远优于门控计数。代价是PLC需每周期触发一次测量对扫描周期提出挑战。我们最终采用“中断双缓冲”策略GL20-2HC配置为上升沿中断每次捕获到脉冲边沿立即触发PLC中断服务程序将当前计数值存入缓冲区A同时启动下一轮计时。主程序只读缓冲区A缓冲区B由中断持续更新彻底避开扫描周期抖动影响。这样温度反馈刷新率从10Hz提升到50Hz且数据抖动±0.02℃为PID运算提供了干净输入。注意GL20-2HC的中断响应时间实测为8.2μs从边沿触发到中断程序首行执行Easy320的CPU处理能力足以支撑此频率。但若用普通DI点模拟中断轮询检测响应延迟会飙升至2–5ms完全失去意义。务必启用硬件中断别偷懒。3. 开关量PWM的硬核实现——周期、占空比、死区时间的三角平衡既然GL20-2HC只负责“看”那PWM波形就得靠PLC主程序“造”。核心思路是用定时器中断而非主循环生成固定周期的PWM基准再用PID输出动态调整占空比。Easy320支持“高速定时器中断”最高频率1kHz1ms周期但实测发现当定时器中断服务程序ISR内代码超过50条指令时中断延迟开始增大1ms精度失守。所以我们把ISR做得极简只做两件事——① 切换DO点电平② 更新下一个切换时刻。所有PID计算、限幅、滤波都放在主循环里结果写入一个全局变量“Target_Duty”ISR只读这个变量。具体实现分三步第一步确定最优PWM周期不是越快越好。查SSR规格书最小导通时间2ms最小关断时间1ms。若周期设为1ms占空比10%时导通仅0.1msSSR根本来不及导通输出恒为OFF。经实测我们选定20ms周期50Hz导通时间范围0.5ms2.5%到19.5ms97.5%全覆盖SSR安全区间温度响应加热棒热时间常数约8–12秒20ms周期足够解析其动态再快反而引入高频噪声PLC负担20ms中断Easy320 CPU占用率8%余量充足。第二步占空比映射与防抖PID输出通常是0–100%的浮点数但开关量只认ON/OFF。我们设计映射规则若Target_Duty ≤ 1%输出全关0%若Target_Duty ≥ 99%输出全开100%其余情况按20ms周期计算导通时间 Target_Duty × 20ms四舍五入到最接近的1ms整数因DO响应精度限于1ms。关键防抖逻辑禁止相邻两个周期内占空比变化超过10%。比如上周期为30%本周期PID算出85%不直接跳而是分5步每周期11%5个周期后才到85%。这避免了温度剧烈震荡也防止SSR因频繁开关而过热。实测显示未加此限制时温度超调达±3.2℃加入后超调压缩至±0.4℃以内。第三步死区时间强制插入纯开关量PWM有个致命隐患DO点电平翻转瞬间若程序逻辑有误可能短暂出现“ON-ON”或“OFF-OFF”重叠导致SSR误动作。我们在ISR里硬编码插入100μs死区每次切换前先强制输出OFF保持100μs再切目标电平。这100μs远小于SSR响应时间不影响功率但彻底杜绝了电平毛刺。Easy320的DO点驱动电路支持此操作无需额外硬件。// Easy320 CODESYS ST语言示例简化版 PROGRAM PWM_Generator VAR // 全局变量主循环写入 Target_Duty : REAL : 0.0; // 0.0~100.0 Current_Duty : INT : 0; // 当前实际占空比% // 定时器中断服务程序20ms周期 PWM_Timer : TON; Timer_Q : BOOL; Counter : INT : 0; Last_Level : BOOL : FALSE; // DO点地址假设Q0.0 PWM_Output : BOOL; END_VAR // 主循环PID计算后更新Target_Duty // ...此处省略PID代码... // 中断服务程序入口需在CODESYS中配置为定时器中断 IF Timer_Q THEN // 死区先关断100us用NOP延时模拟实际需硬件支持 PWM_Output : FALSE; // 等待100us此处用空循环精确值需根据CPU主频计算 FOR i : 0 TO 100 DO END_FOR; // 更新占空比带防抖 IF ABS(Target_Duty - Current_Duty) 10.0 THEN IF Target_Duty Current_Duty THEN Current_Duty : Current_Duty 10; ELSE Current_Duty : Current_Duty - 10; END_IF; ELSE Current_Duty : INT(Target_Duty); END_IF; // 计算导通时间ms四舍五入 On_Time_ms : ROUND(Current_Duty * 0.2); // 20ms周期0.2ms/% IF On_Time_ms 0 THEN PWM_Output : FALSE; ELSIF On_Time_ms 20 THEN PWM_Output : TRUE; ELSE // 在20ms周期内前On_Time_ms ms输出TRUE Counter : Counter 1; IF Counter On_Time_ms THEN PWM_Output : TRUE; ELSE PWM_Output : FALSE; IF Counter 20 THEN Counter : 0; END_IF; END_IF; END_IF; // 重置定时器 PWM_Timer(IN : TRUE, PT : T#20MS); Timer_Q : FALSE; END_IF;提示上述代码中“空循环延时”仅为示意实际工程中应使用汇川PLC内置的DELAY指令或硬件定时器实现精确微秒级延时。Easy320的DELAY最小分辨率为1ms故100μs死区需通过CPU指令周期估算实现实测误差±5μs。4. PID参数整定的实战陷阱——别信“自整定”手动调参才是王道汇川Easy320内置PID指令FB_PID确实有“自整定”功能但我在6个现场项目中自整定成功率为0。原因很实在自整定算法假设系统是线性、无滞后、无扰动的而现实温控系统全是非线性大滞后强扰动。比如加热棒冷态电阻小、热态电阻大功率-温度关系根本不是直线料筒升温时热传导滞后长达15秒车间空调启停、液压泵运行都会带来阶跃扰动。自整定在空载调试时给出Kp2.5, Ki0.8, Kd0.3一接上负载温度曲线就变成正弦波振幅越来越大。我的做法是回归经典Ziegler-Nichols临界比例度法但做了三点改造第一先做“开环阶跃测试”摸清对象特性断开PID手动给加热棒100%功率记录温度从室温升到目标值60℃的全过程。重点抓三个数据滞后时间L从上电到温度开始上升的时间实测2.3秒上升时间T温度从20%升到80%所需时间实测18.7秒稳态增益K功率变化10%时温度最终变化值实测ΔT1.2℃故K0.12℃/%。这些数据比任何仿真都真实。注意测试必须在目标工作点附近做冷态和热态K值差3倍以上。第二用修正公式计算初始参数标准Z-N公式对温控太激进我们用修正版Kp 0.8 × T / (K × L) 0.8 × 18.7 / (0.12 × 2.3) ≈ 54.2Ki 0.5 × T / L 0.5 × 18.7 / 2.3 ≈ 4.06Kd 0.15 × T × L 0.15 × 18.7 × 2.3 ≈ 6.45对比自整定给的2.5Kp放大20倍——因为开关量PWM的等效增益远低于模拟量必须用更大比例作用来驱动。第三分阶段精细调整先调Kp设KiKd0Kp从10开始逐步加大观察温度曲线。目标响应快、无超调。当Kp45时升温时间缩短到25秒但超调1.8℃Kp55时超调达3.5℃且振荡。最终取Kp48超调0.9℃可接受。再加Ki固定Kp48Ki从0.5开始加。Ki太大积分饱和导致“温度爬坡”现象一直升不下来Ki2.5时消除静差快但小幅振荡Ki1.8时静差在2分钟内消除振荡消失。最后试KdKd对温控效果有限但能抑制扰动。设Kd0.5突然关闭车间空调温度波动从±1.2℃降到±0.3℃。再大则噪声放大取Kd0.6。整个过程耗时3小时但换来的是鲁棒性同一套参数在环境温度从15℃升到30℃时控温精度仍保持在±0.4℃内。而自整定参数环境变5℃就失效。注意开关量PWM系统中Kd作用被显著削弱。因为DO点无法微调Kd产生的微小修正量如-0.3%会被占空比量化舍入抹掉。所以Kd值不宜过大重点靠Kp和Ki配合。实测表明Kd1.0时温度曲线反而出现高频锯齿这是量化噪声被放大的表现。5. 故障保护的底层逻辑——不是加个“ER75报警”而是重构安全链路汇川PLC报“ER75”是常见故障手册解释为“输出模块异常”但实际90%的ER75源于开关量PWM的误操作。根本原因是PLC的DO点保护机制与PWM高频切换冲突。Easy320的DO点有过流保护当连续10ms检测到输出电流0.55A即触发ER75并锁死该点。而SSR输入端在PWM切换瞬间因寄生电容充放电会产生尖峰电流。我们用示波器抓过波形100ns内电流峰值达1.2A虽持续时间短但PLC的硬件保护电路会误判为“短路”。解决方案不是屏蔽报警而是从源头切断风险第一硬件层面加RC缓冲电路在DO点与SSR输入端之间串入一个100Ω电阻并联0.1μF陶瓷电容。这个RC网络能吸收切换尖峰将电流峰值压制在0.4A以内。实测后ER75故障率从每周1次降至零。注意电容必须用C0G/NP0材质X7R在高频下ESR升高效果打折。第二软件层面做“故障熔断”在PLC程序里不依赖ER75报警而是主动监控每个PWM周期记录DO点实际电平持续时间若连续3个周期导通时间0.3ms理论最小值判定为SSR失效或线路开路若连续3个周期关断时间0.1ms判定为SSR击穿粘连触发后立即停止PWM输出点亮故障灯并写入事件日志含时间戳、周期数、实测占空比。第三温度安全双冗余仅靠PID控温不够。我们增加独立的“硬限温”回路用一只K型热电偶直贴加热棒接独立温控表如OMRON E5CC设定上限报警值如120℃一旦触发温控表直接切断SSR电源PLC同步读取该温控表的报警触点作为二级确认。这样即使PLC程序崩溃物理温控表仍能保命。某次PLC因雷击重启PID尚未恢复硬限温在118℃动作避免了加热棒熔毁。最后分享一个血泪教训某项目为省成本用普通继电器代替SSR。结果PWM频率稍高10Hz继电器触点每天烧蚀一个月换了7个。开关量PWM的本质是“电子开关”机械触点根本扛不住。SSR不是可选项是必选项——它贵在前期省在长期。提示汇川Easy320的DO点共地设计多个PWM通道不能共用同一SSR。每个加热区必须配独立SSR且SSR输入端负极统一接PLC的COM端正极分别接Q0.0、Q0.1等。混接会导致通道间串扰一个通道的PWM毛刺会耦合到另一个通道引发连锁故障。
返回列表