设为首页
收藏本站
PLC技术网
开启辅助访问
切换到宽版
登录
注册哦
只需一步,快速开始
微信扫码登录
门户
Portal
论坛
BBS
导读
Guide
排行榜
Ranklist
搜索
搜索
本版
文章
帖子
用户
PLC论坛-全力打造可编程控制器专业技术论坛
»
论坛
›
工控技术交流区
›
『国外:三菱/西门子/欧姆龙/松下』
›
SMART编写制作滑动平均中值滤波库
返回列表
发新帖
[西门子]
SMART编写制作滑动平均中值滤波库
[复制链接]
98
|
0
|
2024-8-25 00:28:31
|
显示全部楼层
|
阅读模式
滑动平均中值滤波的过程描述
滑动中值滤波相当于创造了一个数据池,刚开始时池子为空,随着每次采样,依次将池子填满。池子填满后就可以采取去掉一个最大值,去掉一个最小值,剩下的值取平均得到输出结果。池子填满后,下次采样的值会将数据向前推一个,推掉最前面的那个数据,将最新的数据写在最后面,然后再按刚才的方法计算输出结果。
程序可以分为三个过程
池子填满前
每次采样都是完成向池子中填充数据的工作
池子被填满后
将原池子中的数据都向前移动一个位置,1位置的数据放在0的位置,2位置的数据放在1的位置...7位置的数据放在6的位置,将最新的采样数据放在7的位置。再按照滤波规则将数据求和,剔除最大值和最小值,再求出平均值作为输出。
数值滑动
先滑动数据,再按照滤波规则将数据求和,剔除最大值和最小值,再求出平均值作为输出。
编程实现上述功能
子程序变量定义
以下程序描述均以SampleNum_Set=8为例做解释。
池子填满前
根据实际采样计数来移动数据指针,将采样值填入相应位置。例如当SampleNum_Count=0时,Point_1=0*4+Begin_Point0=Begin_Point0,指向0的位置并将当前采样值填入这个位置,SampleNum_Count=0+1=1;当SampleNum_Count=1时,Point_1=1*4+Begin_Point0=Begin_Point0+4,指向1的位置并将当前采样值填入这个位置,SampleNum_Count=1+1=2;依次类推,当SampleNum_Count=7时,池子已被填满,SampleNum_Count=7+1=8。
池子填满后
处理数据的条件满足,利用循环
找出待处理数据的最大值和最小值,并求出数据总和。
处理完最后一个位置的数据,用求和值减去最大值,再减去最小值,再求出平均值即为输出。
最后一行程序使SampleNum_Count=8+1=9。
数值滑动
池子填刚满的时候不用滑动数据,即当SampleNum_Count=8时,不用做数据滑动处理。当SampleNum_Count=>8时,利用循环滑动数据。具体过程是在写入第8个数据之前,都是将后一个位置的数据填入前一个位置,当需要写入第8个数据时,将最新的采样数值写入位置7即可。
用表格将程序的循环过程展示出来如下:
循环值temp2
Point_1
Point_2
写入数据指令
写入数值
0
&VB100+0*4=&VB100
Point_1+4=&VB104
*Point_1=*Point_2
VD100=VD104
1
&VB100+1*4=&VB104
Point_1+4=&VB108
*Point_1=*Point_2
VD104=VD108
2
&VB100+2*4=&VB108
Point_1+4=&VB112
*Point_1=*Point_2
VD108=VD112
3
&VB100+3*4=&VB112
Point_1+4=&VB116
*Point_1=*Point_2
VD112=VD116
4
&VB100+4*4=&VB116
Point_1+4=&VB120
*Point_1=*Point_2
VD116=VD120
5
&VB100+5*4=&VB120
Point_1+4=&VB124
*Point_1=*Point_2
VD120=VD124
6
&VB100+6*4=&VB124
Point_1+4=&VB128
*Point_1=*Point_2
VD124=VD128
7
&VB100+7*4=&VB128
Point_1+4=&VB132
*Point_1=R_In
VD128=R_In
测试
测试程序
库调用IO参数请参考上文“子程序变量定义”中的说明
在主程序中利用定时器,M0.0位接通后,从VD0开始每3s钟更新一次R_In采样值并调用滑动平均中值滤波子程序处理一次数据。即R_In的值每过3s,依次变更为VD0,VD4,VD6。。。。VD18中的值。
设置对照
先在EXCEL表格中填写待测试的数据,再按照规则利用公式计算正确的滤波结果。公式=(SUM(B2:B9)-MAX(B2:B9)-MIN(B2:B9))/(COUNT(B2:B9)-2)
测试过程
在状态表中从VD0开始创建18个变量
将EXCEL表格中的数据值复制粘贴至变量的新值中
将新值写入变量中
启动测试
可以看到,当采样计数<9时,滤波输出值为0,此过程为填写数据池的过程。
当采样计数>=9时,池子填满后,对这批数值进行滤波处理,滤波输出结果与EXCEL表格中计算结果相同。
用趋势图显示滤波的过程,第一条曲线是未滤波时每次采样的数值,第二条曲线是滤波后的输出值,经过滤波后的数据曲线更加平滑。
总结
实际使用过程中需要为数据处理留出存储空间,采样容量(池子容量)可根据情况设定看哪种效果最好。
库文件及测试程序下载链接
链接:
https://pan.baidu.com/s/1y4RN7iBXIn-shN177pF8VQ
提取码:gwv9
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
注册哦
x
回复
举报
返回列表
发新帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册哦
本版积分规则
发表回复
回帖后跳转到最后一页
yinyin
回复楼主
返回列表
『国外:三菱/西门子/欧姆龙/松下』
『国产:台达/汇川/信捷产品交流区』