锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

基于S7-1200 AD采样的高效数字滤波算法的设计与实践

时间:2023-09-20 22:37:01 数字型传感器e3x超小型e2s传感器

在工业控制中,经常伴随着大量的模拟数据采样。在模拟采样过程中,采样值通常包含各种周期性和非周期性噪声和干扰,因为待采样本身、传感器和传输过程中的外部干扰,特别是非稳态干扰信号。为了获得稳定制,必须消除被测信号中的各种噪声和干扰,才能获得稳定准确的测量值。广泛使用的工业控制器S7-1200序列PLC(programmable logic controller)中,可以启用PLC自身AI(analogy input)端口滤波器的功能,再加上单独设计的数字滤波器,也可以利用外部滤波器设备最大限度地去除噪声和干扰。

数字滤波器具有精度和精度高、编程和适应性好、相位和延迟控制精度好、鲁棒性好、与其他数字子系统兼容性好、成本低、功耗低、可靠性好、可重用性好等优点。常用的数字滤波算法有算术平均滤波、加权平均滤波、滑动平均滤波、中值滤波、程序判断滤波等。对于PLC中的AD(analog to digital)采样滤波需要结构简单、高效、可靠的滤波算法,其中可适用算术平均滤波、加权平均滤波、中值滤波。中值滤波算法最简单,但可靠性不如前两种;算术平均滤波比加权平均滤波算法少,但滤波结果不如后者可靠。为了降低成本,提高控制精度,工业应用中需要高效简单的数字滤波器设计。

1 适用于PLC典型的数字滤波器

数字滤波器主要有两类:一类是有限的冲击响应(FIR, finite impulse response)另一种是无限冲击响应(IIR, infinite impulse response)滤波器[。其中,FIR在许多情况下,滤波器结构简单,是最重要的数字滤波器。常见的FIR滤波器的设计方法包括窗函数[(LMS, least mean square)法

S7-1200属于小型PLC,它是一种广泛使用的工业控制器,其编程语言包括梯形图(LAD, ladderlogic programming language)、函数块图(FBD, function block diagram)、语言的结构化控制(SCL, structured control language)3种。其中,LAD它是一种性语言,形象直观,类似于继电器控制原理,易于掌握和开发[;函数块图FBD很少有人使用类似数字电路的图形逻辑符号来表示控制逻辑;结构化控制语言SCL是一种基于Pascal高级编程语言,特别适用于数据管理、过程优化配方管理、数学计算等。

本文需要在一定时间内连续采样,不应使用梯形图编程。Siemens STEP 在7编程软件中SCL西门子12000语言PLC编程可在一定时间内连续采样,滤波计算后输出,使用更加灵活方便。

对于模拟信号,采样和A/D变换后获得的数字序列要求数据处理速率高,因此需要结构简单高效的数字滤波器。

适用于以下数字滤波器设计方法PLC。

1.1 窗函数设计方法

窗函数法又称傅里叶级数法,属于时域设计FIR数字滤波器的方法,是最简单最普遍使用的方法。

对于理想的低通滤波器具有非因果脉冲响应,即:

$

h(t) = \sin \left( {\frac{ { {\rm{ \mathsf{ π} }}t}}{2}} \right)/{\rm{ \mathsf{ π} }}t。$

(1)

式中:h(t)这是脉冲响应函数。该滤波器在时域内持续时间无限长,物理上无法实现。类型(1)中显示的理想脉冲响应可在有限范围内相似。N点采样矩形窗或采样函数ωN(t)近似脉冲响应可从理想的脉冲响应中提取并获得有限的N点采样。

$

{\omega _N}(t) = \left\{ \begin{array}{l}

1, |t| \le \frac{ {(N - 1)}}{2}, \\

0, 其他。\end{array} \right.

$

(2)

式中,ωN(t)可应用于定义矩形窗的时间序列hN(t)=ω(t)×h(t)。由于hN(t)因此,hN(t)非因果窗滤波器不能应用于实时领域。非因果型有限FIR转换为因果型FIR,在时间轴上右移取样窗口中的脉冲响应曲线L=(N-由此产生的因果脉冲响应为1)/2个采样周期

$

{h_c}(t) = \frac{ {\sin \left( {\left( {\frac{ {\rm{ \mathsf{ π} }}}{2}} \right)\left( {t - \frac{ {N - 1}}{2}} \right)} \right)}}{ { {\rm{ \mathsf{ π} }}\left( {t - \frac{ {N - 1}}{2}} \right)}}, t = 0, 1, 2, \cdots , (N - 1)。$

(3)

式中,hc(t)因果脉冲响应函数。因为是对的hN(t)打开窗口,所以这种设计方法被称为窗口函数法。所谓打开窗口,就是将信号的观察时间限制在一定的时间间隔内,分析并获取有限的数据。信号数据截断的过程相当于添加窗口函数。窗口函数不仅会影响时域中原始信号的波形,还会影响频域中的形状。

常用的窗函数很多,如矩形窗、三角窗、Hanning窗、Poisson窗,等等。窗函数广泛应用于光谱分析、滤波器设计和音频数据压缩。窗函数滤波器的设计方法可分析等信号处理。有时变性AD采样数据显示,滤波器结构过于复杂,计算量大,输出信号滞后明显,因此不使用。

1.2 最小均方设计法

最小均方(LMS)设计标准是最小化误差平方,通过最小化误差信号的平均值来修正滤波器系数,模拟所需的理想滤波器,是一种简单、应用广泛的自适应滤波算法。

在解决超定方程组时,每个方程的误差可以通过最小的二乘法平方和最小化。经典的最小二乘估计方法可用于解决FIR滤波器的设计。根据加权最小平方误差的要求,需要设计线性相位FIR:

$

\sigma = \sum\limits_{i = 1}^K { { {\left\{ {W\left( { {\omega _i}} \right)\left[ {e\left( {\overline { {\omega _l}} } \right)} \right]} \right\}}^2}} = \sum\limits_{i = 1}^K { { {\left\{ {W\left( {\overline { {\omega _l}} } \right)\left[ {H\left( {\overline { {\omega _l}} } \right) - {H_d}\left( {\overline { {\omega _l}} } \right)} \right]} \right\}}^2}} ,

$

(4)

式中:H($ \overline { {\omega _l}} $)为FIR滤波器的复频响应;Hd($ \overline { {\omega _l}} $)为期望FIR滤波器的复频响应;W(ωi)为第一频率点ω=$ \overline { {\omega _l}} $误差权重,W(ωi)≥0。

误差权值W(ωi)是LMS法律不同于窗函数的特征之一。与窗函数相比,权值可以提高重要频段的比例,减少非重要频段的影响。

1.3 滑动平均滤波器

滑动平均FIR滤波器是无乘法器FIR一种滤波器是在时域输出N个连续采样的平均值。其传输函数为

$

\begin{array}{l}

{H_{MA}}(z) = \frac{1}{N}\sum\limits_{m = 0}^{N - 1} { {z^{ - m}}} = \frac{1}{N}\sum\limits_{m = 0}^\infty { {z^m}} = - \frac{1}{N}\sum\limits_{m = 0}^{ - \infty } { {z^m}} = \\

\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\frac{1}{N}\frac{1}{ {1 - {Z^{ - 1}}}} - \frac{1}{N}\frac{ { {Z^{ - N}}}}{ {1 - {Z^{ - 1}}}} = \frac{1}{N}\frac{ { {Z^{ - N}}}}{ {1 - {Z^{ - 1}}}} = \frac{1}{N}\frac{ {\left( { {Z^{ - N}} - 1} \right)}}{ { {Z^{N - 1}}(Z - 1)}}。\end{array}

$

(5)

滑动平均值法将N点采样数据视为队列,队列长度固定为N,每次采样,将其放在队尾,同时放弃队首数据,使队列中始终有N个最新数据。计算滤波值时,平均队列中的N个数据,获得新的滤波值。

滑动平均值法具有良好的抑制周期性干扰、高平滑度和低灵敏度,但对非周期性冲击干扰(如电路中磁性负载的启停)和随机干扰抑制作用较差。

文中的A/D采样时,如果采用这种方法,输出曲线可以更加光滑。但本文旨在在一段时间内获得稳定准确的输出值,以便正确读取和模拟量转换。因此,不建议使用此方法。

1.4 改进型加权平均法

基于MS法,提出一种改进型加权平均滤波算法,相对算术平均滤波算法,该方法增加采样值在平均值中的比重,并且去掉若干疑似超调峰值(即将峰值权重配置为0),使输出有效值更接近实际值。

对于一个N项加权平均式为

$

Y = \sum\limits_{K = 1}^N { {C_K}} X(K),

$

(6)

其中加权系数CK应满足:

$

\sum\limits_{K = 1}^N { {C_K}} = 1。$

(7)

加权平均法适用于包含随机干扰信号的滤波,这种信号有平均值,对于温度、压力、液位等缓变量,可通过该方法快速获得稳定、准确的测量值。

文中对该算法加以改进,将在一定时间ST内采得的N个值存于数组Y1中,对采样值进行排序,去除N'个最大值与最小值(即去掉了疑似超调的峰值),将余下采样值存储到一个新的数组X1中,并计算加权系数CK,计算加权平均值输出,实现在此段时间内模拟量采样值的数字滤波。依此类推进入下一次滤波循环,其滤波流程如

图 1(Fig. 1)

8707097e866d57e5a3685bbe429be00d.png

图 1 采样滤波流程

Fig. 1 Theprocess of sampling and filtering

改进后的算法整理为

$

Y = \sum\limits_{K = 1}^{N - 2N'} { {C_K}} {X_1}(K),

$

(8)

式中:

$

{C_k} = \frac{ {I(k)}}{ {\sum I (k)}},

$

(9)

其中,I(k)为数据X1(K)在采样组中出现次数。需注意,采样个数N应为偶数。

2 改进型加权平均滤波算法的可靠性分析

对于S7-1200等小型工业控制器,考虑到内存局限性及AD采样的时变性,所用滤波算法不宜过于复杂。可用算法有算术平均值滤波算法、加权平均值滤波算法、中值滤波算法。其中,中值滤波(即取采样值的中间值)结构最简单,但所得结果的可靠性相对较差。

2.1 各算法可靠性比较

为验证算法的有效性与可靠性,比较几种滤波算法的优劣,在Matlab中模拟各算法滤波效果。分别计算各算法滤波值,并根据LMS设计准则,计算各算法滤波值的误差平方和。

S7-1200PLC采样模拟量为无符号型0~27 648的整数。在Matlab中随机生成元素个数为500、范围为[11 000, 12 000]的数组,模拟一个采样周期内模拟量的连续采样值。在实际AD采样中,往往会有较大的随机干扰,即在采样值中会产生突变值。因此,在生成的数组中随机替代插入若干突变值。为了更清晰地比较改进型算法与未改进型原始算法、加权平均值算法与算术平均值滤波算法,另外加入一种去掉峰值的算术平均值滤波算法(改进型算术平均值滤波算法)。下面将算术平均值、加权平均值、改进型算术平均值以及文中所提出的改进型加权平均值4种滤波算法进行比较。

为了考虑权重因素,分别计算剔除峰值与未剔除峰值2组数据的加权系数,如

图 2(Fig. 2)

图 2 权重计算

Fig. 2 Weight calculation

图 3(Fig. 3)

图 3 各算法计算值

Fig. 3 Calculated value of each algorithm

图 4(Fig. 4)

图 4 滤波值线图

Fig. 4 Filtered value curve

基于LMS准则,需计算各滤波值误差平方和,考虑加权最小平方误差的要求,计算结果如

图 5(Fig. 5)

图 5 各算法误差平方和

Fig. 5 Error sum of squares for each algorithm

经验证e1 < e3 < e2 < e4,改进型算法优于未改进型原始算法,加权平均值算法优于算术平均值算法,即改进型加权平均算法误差平方和最小。但由于加权平均值算法需要计算每个变量的权值,故算术平均值算法较加权平均值算法结构更为简单。在存储器空间允许的条件下,选择加权平均值更为理想,且改进后的算法去除了疑似超调的峰值,结果更为合理。

2.2 采样时间与采样个数对结果的影响

采样后对数据进行了大量运算,为验证4种算法的运算效率,将计算过程写成FC(Function)块,并调用RUNTIME指令分别检查不同采样个数时的运算时间。4种算法在不同采样个数时的运算时间为

表 1(Table 1)

表 1 运算时间对比

Table 1 Operation time comparisonms

采样个数

改进型加权平均值运行时间/ms

加权平均值运行时间/ms

改进型算术平均值运行时间/ms

算术平均值运行时间/ms

50

15

3.5

12

0.9

60

24

10

17

1.0

70

40

20

23

1.1

80

58

33

29

1.3

90

80

48

35

1.5

100

110

69

41

1.8

110

130

93

49

2.0

120

180

117

56

2.3

130

210

147

67

2.4

表 1 运算时间对比

Table 1 Operation time comparisonms

S7-1200CPU最大程序循环时间为150 ms,超过其最大程序循环时间的2倍,即300 ms时,CPU会停止运行。由于运算时间有一定范围的波动,为保证CPU正常运行,改进型加权平均值算法采样个数应保持在130个以内;加权平均值算法采样个数应保持在160个以内;改进型算术平均值算法采样个数应保持在260个以内;由于算术平均值算法无排序及计算权值过程,所用时间最少,采样个数可达2 000以上。

文中设计的数字滤波器在一个采样周期内其采样个数与采样周期时间均可自由设定。为比较一个周期内不同采样个数对滤波结果的影响,将3.1节方法中元素个数改为300和100,并分别计算其滤波值以及各滤波值误差平方和,如

图 6(Fig. 6)

图 6 不同元素误差平方和

Fig. 6 Error sum of squares of different element

经验证e1 < e20 < e30,即元素个数越多滤波值误差平方和越小,在一个周期内滤波采样值越多所求滤波结果越准确。

综上所述,文中所提出的方法适用于存储空间足够,且模拟量变化率不是很快的时变系统。滤波周期与采样个数可根据实际情况进行设定。

3 S7-1200 PLC中数字滤波器的设计

在程序块中建立一个SCL语言的FC块,在此FC块中编写滤波程序,供main主程序块中调用。另外,需要为其添加一个全局DB(datablock)块,用于数据存储。

3.1 变量定义与功能分配

数字滤波器的变量定义如

表 2(Table 2)

表 2 变量定义表

Table 2 Variable definition

变量名

变量类型

数据格式

功能说明

in

Input

Int

输入点,与模拟量输入地址连接

N

Input

Int

模拟量采样点数

N′

Input

Int

待去除的峰值点数

ST

Input

Time

采样周期,即每次滤波的时间段

avg

Output

Int

输出点,滤波后输出的模拟量

I

InOut

Real

将采样数据转换为实数型

array1

InOut

Array of Real

存储采样数据

array2

InOut

Array of Real

存储采样去除峰值后的数据

I1

InOut

Array of Real

计算各项权重分子

I2

InOut

Array of Real

计算各项权重分母

C

InOut

Array of Real

用于计算各项权值

A

InOut

Array of Real

所求加权平均值

S

InOut

Array of Real

用于计算加权平均值

at0

Temp

Time

采样起始时间

at1

Temp

Time

采样结束时间

B

Temp

Int

排序用中间变量

n0~n9

Temp

Int

求和等循环语句用中间变量

K

Temp

Array of Real

计算变量重复次数用中间变量

表 2 变量定义表

Table 2 Variable definition

加权平均值的计算过程可理解为一个求和过程,定义数组S[#n9]最后一个元素为所求加权平均值。此程序中数组限值均设置为0~199,即该数组元素个数为200个,若采样个数N≤200,多余的元素可不计入运算;若采样个数N>200,需要在编程时将此函数块对应数组限值扩大到需要值,如

图 7(Fig. 7)

图 7 数组限值修改

Fig. 7 Array limit modification

3.2 基于PLC数字滤波器的关键环节

在编写程序前需在main主程序中调用定时器,供滤波程序使用,否则滤波程序中的定时器无法识别。此程序不可编写为FB(function block)函数块,在编写多个滤波程序时,需编写另一个FC块,并调用不同的定时器。

本程序中求和程序如下:

#S[0] := 0;

FOR #n9 := 1TO #N-2*#"N′"-1 DO

#S[#n9] := #S[#n9-1] + #C[#n9];

END_FOR;

本语句采用数组求和,而非实数型变量直接累加求和,若采用累加求和语句应为:

FOR #n9 := 0 TO #N-2*#"N′"-1 DO

#S := #S + #C[#n9];

END_FOR;

此程序更简洁,但PLC中执行的求和结果数据变大,并不准确。原因在于PLC在执行“#S := #S + #C[#n9]”时,会重复扫描执行多次,造成数值过大。若在指定时间段内执行该语句,所求值S将远超出实际所求值。文中所用数组求和的方法可避免该问题。

4 S7-1200 AD采样实验与结果验证

4.1 程序可行性初步检验

通过S7-12001214C DC/DC/DC PLC自带AI接口接收电压信号,用直流稳压电源作为模拟量输入,手动调节来模拟采样时模拟量的变化。为方便观察,分别取N=10,N′=2,ST=5 s,即在5 s内采样10个数据,分别剔除最大、最小值各2个,剩余6个数据求平均值输出。滤波程序设计流程如

图 8(Fig. 8)

图 8 滤波流程

Fig. 8 Filtering process

为检验采样数据是否排序以及选取情况,在该函数块TEMP变量中添加REAL实数型变量“1~10”“11~16”“21~26”。“1~10”记录与显示所采样数据排序后情况;“11~16”记录与显示排除疑似超调值后所选取数据情况;“21~26”记录与显示各项加权系数计算情况。

PLC在线状态下,监视变量的赋值情况。

表 3(Table 3)

表 3 排序检查

Table 3 Sorting check

变量名

数组名

变量值

1

array1[0]

5 618.0

2

array1[1]

5 627.0

3

array1[2]

5 900.0

4

array1[3]

5 972.0

5

array1[4]

5 972.0

6

array1[5]

6 403.0

7

array1[6]

6 485.0

8

array1[7]

6 924.0

9

array1[8]

7 218.0

10

array1[9]

7 235.0

表 3 排序检查

Table 3 Sorting check

表 4(Table 4)

表 4 数据选取检查

Table 4 Data selection check

变量名

数组名

变量值

11

array2[0]

5 900.0

12

array2[1]

5 972.0

13

array2[2]

5 972.0

14

array2[3]

6 403.0

15

array2[4]

6 485.0

16

array2[5]

6 924.0

表 4 数据选取检查

Table 4 Data selection check

表 5(Table 5)

表 5 权重计算

Table 5 Weight calculation

变量名

数组名

变量值

21

C1[0]

0.125

22

C1[1]

0.25

23

C1[2]

0.25

24

C1[3]

0.125

25

C1[4]

0.125

26

C1[5]

0.125

表 5 权重计算

Table 5 Weight calculation

经验证,此程序对采样数据排序情况正常,去除峰值结果正常,权重计算正常。达到此程序对计算上的要求。

4.2 AD采样实验与结果验证

课题组研制的一套温度调控装置,装置中含压缩机、变频器等强干扰负载,如N=100,N′=20,ST=2 s,将20 s所采样数据与滤波值导入到Matlab中,生成图像便于观察与比较。如

图 9(Fig. 9)

图 9 温控设备

Fig. 9 Temperature control device

图 10(Fig. 10)

图 10 模拟量滤波曲线

Fig. 10 Analog filter curve

在实际工程应用中,为使传感器所测工程量在上位机中准确显示,需要对传感器进行标定。标定过程中读取模拟量时,数据抖动会给操作人员带来很大不便。一些环境下干扰较大,而通过自身AI端口滤波一般仅能滤除周期性的高频信号干扰,显然无法满足其稳定性要求。如果回路中存在大功率三相异步电机或伺服电机时,以及开关电源、电机启停等随机干扰情况下,仅靠PLC自身端口滤波器均无法滤除全部干扰信号。

分别将滤波前后的模拟量计算为实际温度后导入到Matlab中,并生成实际温度滤波线图,如

图 11(Fig. 11)

图 11 实际温度曲线

Fig. 11 Actual temperature curve

在实际工程应用中所测工程量一般在上位机显示,或程序内进行逻辑判断。以文中温度为例,抖动过大不宜操作人员读取,而在比较精准的控制程序中,亦不利于程序判断,特别在临界温度判断有可能造成程序判断上的错误。经滤波后曲线更为平稳,从读取上更直观,也可避免程序判断上的错误。

5 结束语

针对西门子1200序列等工业控制器PLC,在模拟量AD采样与数据处理过程中,针对外界干扰所引起的扰动,设计了一种新型数字滤波器。由于控制器自身AI端口滤波无法确保采样数据平稳的要求,增加外部滤波器时又提高了设备的成本、电路变得复杂。采用的滤波算法使用SCL语言编程,解决了常用梯形图方法采样与处理多个模拟量过于繁琐的问题;使用数组求和方法,解决了累加求和由于程序重复扫描无法求出正确值的问题。该方法中数据采样点数与滤波周期可调,为工业上模拟量的采样提供了一种简单、可靠、高效、实用而灵活的方法,又无需增加外部设备,节约了成本。由于剔除了若干最大与最小值,对于干扰多、波动大的模拟量提供了更为稳定可靠的数据。

但文中的算法有以下几点不足:

1) 滤波周期内采样数据量不宜过大,否则在周期时间内PLC无法完成数据运算,会发生运行错误;

2) 因算法采用数组存储采样和运算数据,考虑PLC存储空间限制,所以总体数据量不宜过大。

3) 因算法程序调用了定时器,故而无法编写为FB块,在多路AD采样时需编写多个FC块并调用不同的定时器。

4) 由于该算法需连续采样多个值后进行加权运算,有一定滞后,在实时性要求较高的场合不宜使用,比如振动、速度、加速度信号的采样等。

因此,下一步研究工作重点在于寻求一种更为简便的方法,以节省更多的存储空间;为统一滤波时间的程序寻求一种可以编写为FB块的方法,应用将会更为简便;寻求一种新的采样与计算方法,以便适于变化频率较快的数据采样。

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章