西门子PLC1200内使用SCL实现简化版PID算法

西门⼦PLC1200内使⽤SCL实现简化版PID算法
西门⼦⾃带的PID效果很好,但是会⽐较吃性能,使⽤次数有限,很多地⽅需要PID但不需要这么精准的PID,所以⽹上个简单的算法⾃⼰调⽤。
新建数据类型
前三个就是PID三个参数
新建FC块:
#PIDInfo.Step += 1;
IF #PIDInfo.Step >= #PIDInfo.MaxStep-1 THEN
#PIDInfo.Step := 0;
#PIDInfo.Ek := #SetValue - #ActualValue;
#PIDInfo.LocSum += #PIDInfo.Ek;          //累计误差
#PIDResult := #PIDInfo.Kp * #PIDInfo.Ek + (#PIDInfo.Ki * #PIDInfo.LocSum) + #PIDInfo.Kd * (#PIDInfo.Ek1 - #PIDInfo.Ek);
#PIDInfo.Ek1 := #PIDInfo.Ek;
END_IF;
调⽤:
DB块内增加变量
Step和MaxStep⽤于控制扫描多少次调⽤⼀次,以及可以错开调⽤
左边填⼊设置值,实际值,和刚才添加的变量,右边输出PID,PID输出值没有明确的范围,⾃⼰⽤Limite限制范围,调整P值让输出值在范围内浮动
附C#实现
class PID_Info
{maxstep
float Kp = 1;                      //⽐例系数Proportional
float Ki = 0.2f;                      //积分系数Integral
float Kd = 0.1f;                      //微分系数Derivative
float Ek;                      //当前误差
float Ek1;                      //前⼀次误差 e(k-1)
float Ek2;                      //再前⼀次误差 e(k-2)
float LocSum;                  //累计积分位置
public static float PID_Calc1(float SetValue, float ActualValue, PID_Info PID)
{
float PIDLoc;                                  //位置
PID.Ek = SetValue - ActualValue;
PID.LocSum += PID.Ek;                        //累计误差
PIDLoc = PID.Kp * PID.Ek + (PID.Ki * PID.LocSum) + PID.Kd * (PID.Ek1 - PID.Ek);
PID.Ek1 = PID.Ek;
return PIDLoc;
}
public float Calc1(float SetValue, float ActualValue)
{
return PID_Calc1(SetValue, ActualValue, this);
}
public static float PID_Inc(float SetValue, float ActualValue, PID_Info PID)
{
float PIDInc;                                  //增量
PID.Ek = SetValue - ActualValue;
PIDInc = (PID.Kp * PID.Ek) - (PID.Ki * PID.Ek1) + (PID.Kd * PID.Ek2);
PID.Ek2 = PID.Ek1;
PID.Ek1 = PID.Ek;
return PIDInc;
}
public float Inc(float SetValue, float ActualValue)
{
return PID_Inc(SetValue, ActualValue, this);
}
}
算法来⾃
blog。csdn。net/weibo1230123/article/details/80812211

本文发布于:2024-09-23 19:19:10,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/350508.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:输出   范围   累计   需要   变量   调整
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议