plc怎么编滤波程序

时间:2025-01-17 18:02:03 游戏攻略

在PLC中编写滤波程序,可以根据不同的滤波需求和系统特性选择合适的滤波方法。以下是几种常见的滤波方法及其在PLC程序中的实现步骤:

滑动平均滤波器

实现步骤

定义一个数组来存储输入信号的历史数据。

使用循环不断更新数组中的数据,保持数组中的数据与输入信号的最近一段时间内的观测值一致。

在每次循环迭代中,将最新的输入值添加到数组中,并删除数组中最旧的数据,以保持数组长度不变。

使用数组中的数据计算平均值作为输出值。

示例代码(以5次采样平均值为例):

```PLC

; 初始化

D0: 0

D100: 0

D2: 0

; 1秒时钟脉冲

; 每秒产生一个脉冲

; 将每次的采样值D100累加到累加器D0中

; 采样次数计数器D2加1

; 计算平均值

; 每5次采样后计算平均值

IF D2 == 5 THEN

; 计算平均值

LOUT = (D0 / 5)

; 重置累加器和计数器

D0: 0

D2: 0

END_IF

```

限幅滤波法

实现步骤

设定两次采样允许的最大偏差值。

每次检测到新值时,判断本次值与上次值之差是否超过允许的最大偏差值。

如果超过,则本次值无效,用上次值代替;否则,本次值有效。

示例代码

```PLC

; 设定最大偏差值

A: 10

; 采样值存储在D100

; 每次采样

IF NOT (D100 > (last_value + A) OR D100 < (last_value - A)) THEN

; 本次值有效,更新last_value

last_value: D100

ELSE

; 本次值无效,用上次值代替

D100: last_value

END_IF

```

中位值滤波法

实现步骤

连续采样N次(N取奇数)。

将N次采样值按大小排列。

取中间值为本次有效值。

示例代码

```PLC

; 采样值存储在D100

; 连续采样5次

FOR i = 1 TO 5 DO

; 采样

; 将采样值存储在数组中

array[i]: D100

END_FOR

; 对数组进行排序

SORT array

; 取中间值作为有效值

median_value: array[(5 + 1) / 2]

```

算术平均滤波法

实现步骤

连续取N个采样值进行算术平均运算。

N值较大时,信号平滑度较高,但灵敏度较低;N值较小时,信号平滑度较低,但灵敏度较高。

示例代码

```PLC

; 采样值存储在D100

; 连续采样N个值

FOR i = 1 TO N DO

; 采样

; 将采样值累加到sum中

sum: sum + D100

END_FOR

; 计算平均值

average_value: sum / N

```

递推平均滤波法

实现步骤

把连续取N个采样值看成一个队列。

队列的长度固定为N。

每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据(先进先出原则)。

把队列中的N个数据进行算术平均运算,获得新的滤波结果。

示例代码