在上面看到很多热爱PLC人们对虑波发表了很好的看法,也使我学习了不少。我个人认为,硬件虑波是根本,数字虑波不得已而为之!但数字虑波也有其本身独特的魅力!!是硬件虑波之外的一个补充。
quote:以下是引用yhgcqzd在2008-12-31 07:49:58的发言:
采用RC滤波(一阶惯性滤波)
Out=A×in+(1-A)×in_1
A:滤波系数,取值0-1,1表示不滤波。
in_1:前一个周期的in值。
yhgcqzd同志提供了经典RC虑波电路的数学模型。作为补充,在下用STL语言将其数学模型表达出来,写成一个FC(能n次调用),适用于S7-300、S7-400 PLC。我将代码提供给大家参考、分享;我希望我能对大家有一点帮助。
我将数学模型变换为: Out=A×(in-in_1)+in_1
我以前程序的数学模型为:XA=FAC×(XE-AUX)+AUX
STL语言的FC变量声明如下:
IN Name Data Tpye Comment
-------XE Real 数字虑波器的输入(工程量值)
-------FAC Real 虑波系数(范围0.0~100.0)
-------INIT Bool 程序初始化位,获取前一个周期的输入值
OUT
-------XA Real 数字虑波器的输出值
-------AUX Real 前一个周期的输入值
程序代码如下:
L #XE // read XE input
T LD 32
//;
AN #INIT // initialized Filter-FC
JC POS1
POS2: L #XE // load input value to output value
T #XA
L LD 32
T #AUX
JU ENDE
//;
POS1: L LD 32
L #AUX
==R // not used if
BEC // XE=XA
L #FAC
L 0.000000e+000 // XE=XA if FAC%<0
JC POS2
L #FAC
L 1.000000e+002 // FAC%>100
>R
JC POS2
//;
L LD 32 // (XE-AUX)=B
L #AUX
-R
T LD 04
L #FAC
T LD 12
//;
L LD 12
L LD 04
*R
T LD 16 // B*FAC%
//;
L LD 16
L 1.000000e+002
/R
T LD 20
L #AUX // B*FAC%/100
L LD 20 // AUX+(B*FAC%/100)=XAnew
+R
T #AUX
//; // AUXnew=XAnew
L #AUX
T #XA
ENDE: NOP 0