最近在论坛看到好多网友寻西门子PLC FB41的SCL源码,现在就将我从网上搜集(因原始出处好像不能访问了,时间久了我也忘记了,)的源码贴出来,此源程序来源于网络,不保证编译后与原版一致,仅供参考.源码我粗略看了一遍,好象是不完全微分PID,但由于使用的是位置式PID,所以里面还做了手自动的无扰动切换,但个人感觉无扰动切换还是增量PID好,无需做任何处理就直接支持.源码可以通过编译,内容如下:
FUNCTION_BLOCK ”CONT_C”
TITLE ='continuous PID controller'
最新论坛网站源码AUTHOR : MT
FAMILY : ICONT
NAME : CONT_C
VERSION : ’1.5'
KNOW_HOW_PROTECT
VAR_INPUT
COM_RST : BOOL := FALSE; //完全重启动
MAN_ON : BOOL := TRUE; //手动值打开
PVPER_ON : BOOL := FALSE; //外设过程变量打开
P_SEL : BOOL := TRUE; //比例作用打开
I_SEL : BOOL := TRUE; //积分作用打开
INT_HOLD : BOOL := FALSE; //积分作用保持
I_ITL_ON : BOOL := FALSE; //积分作用初始化
D_SEL : BOOL := FALSE; //微分作用打开
CYCLE : TIME := T#1S; //采样时间
SP_INT : REAL := 0。0; //内部设定值
PV_IN : REAL := 0.0; //过程变量输入
PV_PER : WORD := W#16#0; //外设过程变量
MAN : REAL := 0.0; //手动值
GAIN : REAL := 2。0; //比例增益
TI : TIME := T#20S; //积分复位时间
TD : TIME := T#10S; //微分时间
TM_LAG : TIME := T#2S; //微分作用时间延时
DEADB_W : REAL := 0.0; //死区带宽
LMN_HLM : REAL := 100。0; //积分值上限
LMN_LLM : REAL := 0.0; //积分值下限
PV_FAC : REAL := 1。0; //过程变量因子
PV_OFF : REAL := 0.0; //过程变量偏移量
LMN_FAC : REAL := 1.0; //调节值因子
LMN_OFF : REAL := 0。0; //调节值偏移量
I_ITLVAL : REAL := 0.0; //积分作用的初始化值
DISV : REAL := 0.0; //干扰变量
END_VAR
VAR_OUTPUT
LMN : REAL := 0.0; //调节值
LMN_PER : WORD := W#16#0; //外设调节值
QLMN_HLM : BOOL := FALSE; //达到调节值上限
QLMN_LLM : BOOL := FALSE; //达到调节值下限
LMN_P : REAL := 0.0; //比例分量
LMN_I : REAL := 0。0; //积分分量
LMN_D : REAL := 0。0; //微分分量
PV : REAL := 0。0; //
ER : REAL := 0.0; //误差信号
END_VAR
VAR
sInvAlt : REAL := 0.0; //上周期比例偏差值
sIanteilAlt : REAL := 0.0; //上周期积分值
sRestInt : REAL := 0。0; //上周期积分偏差量(浮点数计算偏差)
sRestDif : REAL := 0.0; //上周期微分偏差量(浮点数计算偏差)
sRueck : REAL := 0。0; //
sLmn : REAL := 0。0; //上周期调节值
sbArwHLmOn : BOOL := FALSE; //上周期达到调节值上限
sbArwLLmOn : BOOL := FALSE; //上周期达到调节值下限
sbILimOn : BOOL := TRUE; //备用-本程序没有使用该变量
END_VAR
VAR_TEMP
rCycle : REAL ; //采样时间浮点值
Iant : REAL ; //积分增量
Diff : REAL ; //积分量
Istwert : REAL ; //过程变量浮点值
ErKp : REAL ; //偏差比例值
rTi : REAL ; //积分时间浮点值
rTd : REAL ; //微分时间浮点值
rTmLag : REAL ; //微分作用时间延时浮点值
Panteil : REAL ; //比例值
Ianteil : REAL ; //积分值
Danteil : REAL ; //微分值
Verstaerk : REAL ; //
RueckDiff : REAL ; //
RueckAlt : REAL ; //上周期积分量
dLmn : REAL ; //调节量
gf : REAL ; //Hilfwert
rVal : REAL ; //Real Hilfsvariable
END_VAR
IF COM_RST THEN //PID初始化
sIanteilAlt := I_ITLVAL ;
LMN := 0。0 ;
QLMN_HLM := FALSE ;
QLMN_LLM := FALSE ;
LMN_P := 0.0 ;
LMN_I := 0.0 ;
LMN_D := 0.0 ;
LMN_PER := W#16#0 ;
PV := 0.0 ;
ER := 0.0 ;
sInvAlt := 0。0 ;
sRestInt := 0.0 ;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论