『7x24小时有问必答』
      点击蓝字

PLC自动化汇
关注我们

6. FB_PID自整定 - 自动参数整定模块

功能概述

通过自动测试过程响应特性,智能计算最优PID参数,简化控制系统调试过程,提高控制精度和稳定性。

核心特性

多方法整定:继电器振荡法、阶跃响应法、临界比例度法
安全保护:过程变量安全范围监测,防止整定过程失控
数据分析:自动识别过程特性(增益、时间常数、滞后时间)
智能算法:基于Ziegler-Nichols、Cohen-Coon等经典整定公式
进度监控:实时显示整定进度和状态信息
结果验证:整定后自动验证控制效果
FUNCTION_BLOCK  "FB_PID自整定"VAR_INPUT       // 整定控制      ib_开始整定 : Bool;  // 开始整定(上升沿)      ib_中止整定 : Bool;  // 中止整定      e_整定方法 :        (            方法_继电器振荡法,            方法_阶跃响应法,            方法_临界比例度法      ) := 方法_继电器振荡法;

       // 过程参数      ir_过程变量 : Real;  // 过程变量      ir_输出值 : Real;  // 控制器输出(用于监控)

       // 整定参数      ir_输出阶跃大小 : Real :=  10.0;  // 输出阶跃大小      ir_继电器幅度 : Real :=  5.0;  // 继电器幅度      ir_噪声带宽 : Real :=  0.5;  // 噪声带宽      ir_PV最大值 : Real :=  100.0;  // PV最大值(用于归一化)

       // 安全限制      ir_PV安全下限 : Real :=  0.0;  // PV安全下限      ir_PV安全上限 : Real :=  100.0;  // PV安全上限      ir_输出安全下限 : Real :=  0.0;  // 输出安全下限      ir_输出安全上限 : Real :=  100.0;  // 输出安全上限END_VAR
VAR_OUTPUT       // 整定结果      ob_整定完成 :  Bool;  // 整定完成      ob_整定进行中 :  Bool;  // 整定进行中      or_整定比例增益 :  Real;  // 整定的比例增益      or_整定积分时间 :  Real;  // 整定的积分时间      or_整定微分时间 :  Real;  // 整定的微分时间

       // 过程特性      or_过程增益 :  Real;  // 过程增益      or_时间常数 :  Real;  // 时间常数      or_纯滞后时间 :  Real;  // 纯滞后时间      or_临界增益 :  Real;  // 临界增益      or_临界周期 :  Real;  // 临界周期

       // 状态信息      e_整定状态 :        (            状态_空闲,            状态_阶跃测试,            状态_继电器振荡,            状态_分析中,            状态_完成,            状态_中止,            状态_故障      );      in_进度百分比 :  Int;  // 进度百分比 (0-100)      s_状态信息 :  String[100];END_VAR
VAR      // 内部状态机      mb_开始边缘 : Bool;      mb_中止边缘 : Bool;

      // 数据记录      a_PV数据 : ARRAY[1..1000] OF Real; // PV数据缓冲区      a_输出数据 : ARRAY[1..1000] OF Real; // 输出数据缓冲区      in_数据索引 : Int;      fb_数据采样定时器 : TON;

      // 继电器整定变量      mb_继电器状态 : Bool;      mr_上次PV : Real;      mr_PV最大记录值 : Real;      mr_PV最小记录值 : Real;      fb_振荡定时器 : TON;      in_振荡计数 : Int;

      // 阶跃响应变量      mr_阶跃开始PV : Real;      mr_阶跃开始输出 : Real;      fb_阶跃响应定时器 : TON;      mb_阶跃已应用 : Bool;

      // 分析变量      mr_幅度 : Real;      mr_周期 : Real;      fb_分析定时器 : TON;END_VAR
// 边缘检测mb_开始边缘 := ib_开始整定 AND NOT mb_开始边缘;mb_中止边缘 := ib_中止整定 AND NOT mb_中止边缘;// 安全检查IF (ir_过程变量 < ir_PV安全下限) OR (ir_过程变量 > ir_PV安全上限) THEN      e_整定状态 := 状态_故障;      s_状态信息 :=  '过程变量超出安全限制';      RETURN;END_IF;
// 主状态机CASE e_整定状态 OF      状态_空闲:            ob_整定进行中 := FALSE;            ob_整定完成 := FALSE;            in_进度百分比 :=  0;            s_状态信息 :=  '准备自整定';

            IF mb_开始边缘 THEN                  e_整定状态 := 状态_阶跃测试;                  ob_整定进行中 := TRUE;                  in_数据索引 :=  1;                  s_状态信息 :=  '开始自整定过程';            END_IF;

            IF mb_中止边缘 THEN                  e_整定状态 := 状态_中止;                  s_状态信息 :=  '操作员中止整定';            END_IF;
      状态_阶跃测试:            in_进度百分比 :=  20;            s_状态信息 :=  '执行阶跃响应测试';

             // 应用输出阶跃            IF NOT mb_阶跃已应用 THEN                  mr_阶跃开始PV := ir_过程变量;                  mr_阶跃开始输出 := ir_输出值;                  mb_阶跃已应用 := TRUE;                  fb_阶跃响应定时器(IN := TRUE, PT := T#30S);            END_IF;

             // 数据采样(10Hz)            fb_数据采样定时器(IN := TRUE, PT := T#100MS);            IF fb_数据采样定时器.Q AND (in_数据索引 <=  1000) THEN                  a_PV数据[in_数据索引] := ir_过程变量;                  a_输出数据[in_数据索引] := ir_输出值;                  in_数据索引 := in_数据索引 +  1;            END_IF;

             // 阶跃响应完成或超时            IF fb_阶跃响应定时器.Q OR (in_数据索引 >  1000) THEN                  e_整定状态 := 状态_分析中;                  s_状态信息 :=  '阶跃测试完成 - 分析数据';            END_IF;

            IF mb_中止边缘 THEN                  e_整定状态 := 状态_中止;                  s_状态信息 :=  '阶跃测试中止';            END_IF;
      状态_继电器振荡:            in_进度百分比 :=  50;            s_状态信息 :=  '继电器振荡法激活';

             // 继电器控制逻辑            IF ir_过程变量 > (mr_上次PV + ir_噪声带宽) THEN                  mb_继电器状态 := FALSE;            ELSIF ir_过程变量 < (mr_上次PV - ir_噪声带宽) THEN                  mb_继电器状态 := TRUE;            END_IF;

             // 记录振荡幅度            IF ir_过程变量 > mr_PV最大记录值 THEN                  mr_PV最大记录值 := ir_过程变量;            END_IF;            IF ir_过程变量 < mr_PV最小记录值 THEN                  mr_PV最小记录值 := ir_过程变量;            END_IF;

            mr_上次PV := ir_过程变量;

             // 数据采样            fb_数据采样定时器(IN := TRUE, PT := T#100MS);            IF fb_数据采样定时器.Q AND (in_数据索引 <=  1000) THEN                  a_PV数据[in_数据索引] := ir_过程变量;                  a_输出数据[in_数据索引] := ir_输出值;                  in_数据索引 := in_数据索引 +  1;            END_IF;

             // 振荡周期计数            IF (ir_过程变量 > (mr_PV最大记录值 + mr_PV最小记录值)/2) AND                   (mr_上次PV <= (mr_PV最大记录值 + mr_PV最小记录值)/2) THEN                  in_振荡计数 := in_振荡计数 +  1;            END_IF;

             // 完成条件:至少2个完整周期            fb_振荡定时器(IN := TRUE, PT := T#60S);            IF (in_振荡计数 >=  3) OR fb_振荡定时器.Q THEN                  e_整定状态 := 状态_分析中;                  s_状态信息 :=  '振荡数据收集完成 - 分析中';            END_IF;

            IF mb_中止边缘 THEN                  e_整定状态 := 状态_中止;                  s_状态信息 :=  '振荡测试中止';            END_IF;
      状态_分析中:            in_进度百分比 :=  80;            s_状态信息 :=  '分析过程特性';

            fb_分析定时器(IN := TRUE, PT := T#5S);            IF fb_分析定时器.Q THEN                   // 分析方法根据整定方法选择                  CASE e_整定方法 OF                        方法_继电器振荡法:                               // 继电器振荡法分析                              mr_幅度 := (mr_PV最大记录值 - mr_PV最小记录值) /  2;                              mr_周期 := TIME_TO_REAL(fb_振荡定时器.ET) / in_振荡计数;

                               // Ziegler-Nichols 整定公式                              or_临界增益 := (4  * ir_继电器幅度) / (3.1416  * mr_幅度);                              or_临界周期 := mr_周期;

                              or_整定比例增益 :=  0.6  * or_临界增益;                              or_整定积分时间 :=  0.5  * or_临界周期;                              or_整定微分时间 :=  0.125  * or_临界周期;

                        方法_阶跃响应法:                               // 阶跃响应法分析(切线法)                               // 这里需要更复杂的数据分析算法                               // 简化实现:使用固定的经验值                              or_过程增益 := (a_PV数据[1000] - a_PV数据[1]) / ir_输出阶跃大小;                              or_时间常数 :=  10.0;  // 简化估计                              or_纯滞后时间 :=  2.0;  // 简化估计

                               // Cohen-Coon 整定公式                              or_整定比例增益 := (1.35  / or_过程增益) * (or_时间常数 / or_纯滞后时间) +  0.27;                              or_整定积分时间 :=  2.5  * or_纯滞后时间 * (or_时间常数 +  0.185  * or_纯滞后时间) /                                                  (or_时间常数 +  0.611  * or_纯滞后时间);                              or_整定微分时间 :=  0.37  * or_纯滞后时间 * or_时间常数 / (or_时间常数 +  0.185  * or_纯滞后时间);                  END_CASE;

                  e_整定状态 := 状态_完成;            END_IF;
      状态_完成:            in_进度百分比 :=  100;            ob_整定进行中 := FALSE;            ob_整定完成 := TRUE;            s_状态信息 :=  '自整定完成 - Kp: '  +  REAL_TO_STRING(or_整定比例增益) +                                      ' Ti: '  +  REAL_TO_STRING(or_整定积分时间) +                                      ' Td: '  +  REAL_TO_STRING(or_整定微分时间);

            IF mb_开始边缘 THEN                  // 准备下一次整定                  e_整定状态 := 状态_空闲;                  ob_整定完成 := FALSE;            END_IF;

      状态_中止:            ob_整定进行中 := FALSE;            s_状态信息 :=  '自整定中止';

            IF mb_开始边缘 THEN                  e_整定状态 := 状态_空闲;            END_IF;

      状态_故障:            ob_整定进行中 := FALSE;            s_状态信息 :=  '自整定故障 - 检查过程条件';

            IF mb_中止边缘 THEN                  e_整定状态 := 状态_空闲;            END_IF;END_CASE;
// 方法选择路由IF mb_开始边缘 THEN      CASE e_整定方法 OF            方法_继电器振荡法:                  e_整定状态 := 状态_继电器振荡;                   // 初始化继电器整定变量                  mb_继电器状态 := TRUE;                  mr_上次PV := ir_过程变量;                  mr_PV最大记录值 := ir_过程变量;                  mr_PV最小记录值 := ir_过程变量;                  in_振荡计数 :=  0;

            方法_阶跃响应法, 方法_临界比例度法:                  e_整定状态 := 状态_阶跃测试;                  mb_阶跃已应用 := FALSE;      END_CASE;END_IF;END_FUNCTION_BLOCK

应用场景

新设备调试生产线首次调试时的PID参数优化
工艺变更原材料、配方、负载变化后的参数重调
季节性调整环境温度变化时的控制系统自适应
维护后校准设备大修或更换元件后的参数恢复
多设备同步多台相同设备的参数快速复制和优化
性能优化定期优化控制系统性能,提高产品质量

注意事项

安全第一整定前必须设置合理的安全上下限,全程监控
过程稳定整定开始前需确保过程处于稳定状态
干扰避免整定期间避免外部干扰,如手动操作、负载突变
参数验证自动整定结果需手动验证和微调
记录保存保存整定前后的参数和过程曲线,便于追溯
条件限制非线性、大滞后、不稳定过程不适合自动整定

调试指南

准备阶段设置安全参数,确认过程处于稳定工作点
方法选择根据过程特性选择合适的整定方法
参数设置设置输出阶跃幅度、继电器幅度等整定参数
执行整定启动整定程序,监控过程变化确保安全
结果评估评估整定结果的控制效果,必要时手动微调
文档记录记录整定参数、过程曲线、最终效果
定期复检每季度或工艺变更时重新整定验证
这篇干货文章花了大量时间整理,如果对你有帮助或启发,请一定:
  「评论区」  留下你的想法

  遇到了类似问题?有更好的方法?期待你分享见解!
  「转发」  给更多需要的人

  也许你身边的朋友,正被同样的问题困扰!
  「收藏」  随时回看复习

  知识点需要反复消化,码住不迷路!
每一次互动都是我们继续创作优质内容的动力!

感谢有你,一起进步!

---

---

推荐阅读:
分享让更多人看看
点赞
收藏
分享

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码