回复:用SCL写了一个中位值滤波的功能块

tangying

  • 帖子

    81
  • 精华

    1
  • 被关注

    19

论坛等级:侠士

注册时间:2010-10-29

普通 普通 如何晋级?

发布于 2012-09-13 18:28:31

1楼

中位值平均滤波(这个功能块纯粹抄的西门子文档A0224中的例子程序)
FUNCTION_BLOCK FB1001

CONST
Length :=20; //数据记录宽度
END_CONST

VAR_INPUT //定义输入参数
Realtime_Value :REAL; //实时采样值
END_VAR

VAR_OUTPUT //定义输出参数
Filted_Value :REAL; //滤波后采样值
END_VAR

VAR_TEMP //定义临时变量
Loop_Count :INT; //循环计数
Max_Data :REAL; //最大值
Min_Data :REAL; //最小值
Total :REAL; //累加和
Total_Filted :REAL; //滤波后累加和
END_VAR

VAR //定义静态变量
Data_Store :ARRAY[1..Length] OF REAL; //数据记录区
END_VAR

BEGIN

(* 数据初始化 *)
Max_Data:=Data_Store[1];
Min_Data:=Data_Store[1];
Total:=0.0;
Total_Filted:=0.0;

(* 先入先出堆栈 *)
FOR Loop_Count := 1 TO (Length - 1) BY 1 DO
Data_Store[Loop_Count] := Data_Store[Loop_Count + 1];
END_FOR;
Data_Store[Length] := Realtime_Value;

(* 计算累加值 *)
FOR Loop_Count := 1 TO (Length - 1) BY 1 DO
IF Max_Data < Data_Store[Loop_Count] THEN
Max_Data := Data_Store[Loop_Count];
END_IF;
IF Min_Data > Data_Store[Loop_Count] THEN
Min_Data := Data_Store[Loop_Count];
END_IF;
Total := Total + Data_Store[Loop_Count];
END_FOR;
Total_Filted := Total - Max_Data - Min_Data;
Filted_Value := Total_Filted / (Length - 2);

END_FUNCTION_BLOCK
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54616条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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