自己写的一个AI输入滤波函数

由于在实际的AI数据采集中,数据波动较大,自己写了一个滤波FUN,保持输入最近的10个值,

然后去掉最小和最大值 后,取平均值。

调用:AI地址,个数,数据临时保存地址,输出数据地址

LD     Clock_1s:SM0.5
A      M4.4
CALL   AIWNFlter:SBR10, &VB100, 31, &VB1000, &VB516

自己写的一个AI输入滤波函数_第1张图片

函数内容(STL):

Network 1 
LD     SM0.0
-I     1, LW4
Network 2 
LD     SM0.0
FOR    LW14, 0, LW4
Network 3 
// 输入地址 换算
LD     SM0.0
LPS
MOVW   LW14, LW24
AENO
*I     +2, LW24
AENO
ITD    LW24, LD26
AENO
MOVD   LD26, LD48
+D     LD10, LD48
LRD
MOVD   LD26, LD30
AENO
+D     LD0, LD30
AENO
MOVW   *LD30, LW24
AENO
MOVW   LW24, LW18
/I     +100, LW18
LPP
MOVW   LW14, LW24
AENO
*I     +20, LW24
AENO
ITD    LW24, LD26
AENO
MOVD   LD6, LD34
+D     LD26, LD34
Network 4 
// 初始值
LD     SM0.0
LPS
MOVW   *LD34, LW24
AENO
MOVW   0, LW42
LPP
MOVW   LW24, LW38
AENO
MOVW   LW24, LW40
Network 5 
LD     SM0.0
FOR    LW16, 1, 9
Network 6 
LD     SM0.0
MOVD   LD34, LD44
Network 7 
// 移动地址,并取出值
LD     SM0.0
+D     2, LD34
AENO
MOVW   *LD34, LW24
Network 8 
// 数据累加和
LD     SM0.0
+I     LW24, LW42
Network 9 
// 比较大小,找出最大和最小值
LD     SM0.0
LPS
AW>    LW24, LW40
MOVW   LW24, LW40
LPP
AW<    LW24, LW38
MOVW   LW24, LW38
Network 10 
// 将数值 向前移动一位
LD     SM0.0
MOVW   *LD34, *LD44
Network 11 
NEXT
Network 12 
// 写入最末一一个数据,,计算合计
LD     SM0.0
MOVW   LW18, *LD34
AENO
+I     LW18, LW42
Network 13 
// 最后一个数据比较
LD     SM0.0
LPS
AW>    LW18, LW40
MOVW   LW18, LW40
LPP
AW<    LW18, LW38
MOVW   LW18, LW38
Network 14 
// 计算平均值,再输出
LD     SM0.0
-I     LW38, LW42
AENO
-I     LW40, LW42
AENO
/I     8, LW42
Network 15 
// 输出计算结果
LD     SM0.0
*I     100, LW42
AENO
MOVW   LW42, *LD48
Network 16 
NEXT
 

LAD图如下:

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(PLC)