【SCL编程案例】自己写的平均值滤波程序分享大家

已锁定

凹凸曼打小怪兽

  • 帖子

    234
  • 精华

    3
  • 被关注

    42

论坛等级:侠圣

注册时间:2016-11-11

钻石 钻石 如何晋级?

【SCL编程案例】自己写的平均值滤波程序分享大家

8516

15

2025-05-22 09:11:15

由于客户要求输出曲线比较平滑避免过多波动,同时输出值要实时响应也够快,试了一堆感觉都不是自己想要的,于是自己写了个简单的,封装成FB块方便大家使用

第一次写的不好大家见谅
1.程序运行后滤波效果

2.变量表

3.程序

4.程序总览

5.FB调用及参数说明

6.FB引脚参数说明

7.源程序

//*******************************************************************************************

//限制采样周期最小时间

IF #In_采样周期 <= 0 THEN

    #In_采样周期 := 100;

END_IF;

//限制次数最小值

IF #In_采样次数 <= 0.0 THEN

    #In_采样次数 := 10.0;

END_IF;

//*******************************************************************************************

//*******************************************************************************************

//采样次数转换数据类型,用于后面数据处理

#T_采样次数 := REAL_TO_DINT(#In_采样次数);

//*******************************************************************************************

//求出周期内采样次数

#T_采样时间 := #In_采样周期 / #T_采样次数;

//*******************************************************************************************

//采样时间周期触发

#T_采样定时器(IN := NOT #T_采样输出1,

         PT := #T_采样时间,

         Q => #T_采样输出1);

//每个采样周期+1


IF #T_采样输出1 AND NOT #T_采样输出2 THEN

    #i := #i + 1;

END_IF;


#T_采样输出2 := #T_采样输出1;

//采样周期值进行传递到数组

#T_采样数组[#i] := #In_输入值;


//采样周期超过采样次数重新计数

IF #i >= #T_采样次数 THEN

    #i := 0;

END_IF;

//*******************************************************************************************

//求采样数组总和

#T_输出值 := 0;

FOR #J := 1 TO #T_采样次数 DO

    #T_输出值 := #T_输出值 + #T_采样数组[#J - 1];

END_FOR;

//初始化最大最小值赋值

#T_max := #T_采样数组[0];

#T_min := #T_采样数组[0];

//求取最大最小值

FOR #K := 1 TO #T_采样次数 DO

    IF #T_采样数组[#K - 1] > #T_max THEN

        #T_max := #T_采样数组[#K];

    END_IF;

    IF #T_采样数组[#K - 1] < #T_min THEN

        #T_min := #T_采样数组[#K];

    END_IF;

END_FOR;

//最大最小值赋值

#Out_max值 := #T_max;

#Out_min值:=  #T_min;

//输出值是否过滤最大最小值

//

IF #In_滤波开关 THEN

    IF #"In_Max/Min屏蔽" THEN

        #Out_输出值 := (#T_输出值 - #T_max - #T_min) / (#In_采样次数 - 2);

    ELSE

        #Out_输出值 := (#T_输出值 / #In_采样次数);

    END_IF;

ELSE

    #Out_输出值 := #In_输入值;

END_IF;


8.FB块附件

滤波FB块.7z

9.曲线图采集的软
PLC-Recorder 大家可以自行网络搜索

【SCL编程案例】自己写的平均值滤波程序分享大家 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

谈天说地

共有14414条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。