FUNCTION_BLOCK FB1000
CONST
Length :=21; //数据记录宽度(为奇数)
END_CONST
VAR_INPUT //定义输入参数
Realtime_Value :REAL; //实时采样值
END_VAR
VAR_OUTPUT //定义输出参数
Filted_Value :REAL; //滤波后采样值
END_VAR
VAR_TEMP //定义临时变量
Loop_Count :INT; //循环计数
Squence_Count :INT; //排序计数
Temp_Data :REAL; //临时数据
END_VAR
VAR //定义静态变量
Data_Store :ARRAY[1..Length] OF REAL; //数据记录区
END_VAR
BEGIN
FOR Loop_Count := 1 TO (Length - 1) BY 1 DO
Data_Store[Loop_Count] := Realtime_Value;
FOR Squence_Count := 1 TO (Length - Loop_Count) BY 1 DO
IF Data_Store[Squence_Count] > Data_Store[Squence_Count + 1] THEN
Temp_Data := Data_Store[Squence_Count];
Data_Store[Squence_Count] := Data_Store[Squence_Count + 1];
Data_Store[Squence_Count + 1] := Temp_Data;
END_IF;
END_FOR;
END_FOR;
Filted_Value := Data_Store[(Length - 1) / 2];
END_FUNCTION_BLOCK