由于在实际的AI数据采集中,数据波动较大,自己写了一个滤波FUN,保持输入最近的10个值,
然后去掉最小和最大值 后,取平均值。
调用:AI地址,个数,数据临时保存地址,输出数据地址
LD Clock_1s:SM0.5
A M4.4
CALL AIWNFlter:SBR10, &VB100, 31, &VB1000, &VB516
函数内容(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图如下: