电工学习网

 找回密码
 立即注册
查看: 1617|回复: 0
打印 上一主题 下一主题

PID的无扰动切换

[复制链接]
跳转到指定楼层
楼主
发表于 2020-6-28 20:45:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
PID的无扰动切换,简而言之就是手动调节切换到自动调节时,自动调节积分项从当前手动输出开始,就是将当前输出给积分初始化。
手上有个倍福plc项目,用变频风机调节管道气体温度,我在调用系统PID库指令时,发现积分项被定义成静态变量,从库指令外部根本没法对积分项操作,如此简单的需求,居然不能实现,只好用自己动手写一段PID程序:
1,先定义PID接口
FUNCTION_BLOCK PID
VAR_INPUT
Man_Auto:BOOL;
Man_Value:REAL;
         PVn : REAL;
SPn :REAL;
Kc :REAL;
Ts :REAL;
Ti :REAL;
Td :REAL;
END_VAR
VAR_OUTPUT
Mn :REAL;
END_VAR
VAR
         ManAutoLast:BOOL;
         AutoEdge:BOOL;
         Mx:REAL;
EVn:REAL;
EVn0:REAL;
MPn:REAL;
MDn:REAL;
END_VAR
(********)
2,PID程序:
AutoEdge:= ManAutoLast  AND (NOT Man_Auto ); (***手动转自动上升沿**)
ManAutoLast:=Man_Auto;
IF AutoEdge THEN
    Mx:= LIMIT(20.0,Man_Value,60.0);  (*自动调节时,积分初始化*)  
END_IF
IF Man_Auto THEN
     Mn:= LIMIT(20.0,Man_Value, 60.0);   (*手动调节时给定值*)
ELSE
     EVn:=(SPn - PVn ) ;                         (*自动调节PID计算*)
     MPn  := LIMIT(-60.0,(Kc * EVn),60.0) ;
            IF Mn>0.0 AND  Mn<100.0 THEN
                       Mx:=LIMIT(18.0,( Kc*Ts/Ti*EVn+Mx), 100.0);
             END_IF
     MDn := Kc * Td / Ts * (EVn  -  EVn0);
     Mn:=LIMIT(18.0,(MPn+Mx+MDn),60.0);
     EVn0:=EVn;
END_IF

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

电工学习网 ( )

GMT+8, 2024-8-29 12:02

Powered by © 2011-2022 www.shop-samurai.com 版权所有 免责声明 不良信息举报

技术驱动未来! 电工学习网—专业电工基础知识电工技术学习网站。

栏目导航: 工控家园 | 三菱plc | 西门子plc | 欧姆龙plc | plc视频教程

快速回复 返回顶部 返回列表