【Codesys】两种滤波的实现,那种更快?

方法1
(* 方法1 *)
(*---------------声明部分----------------------*)
FUNCTION_BLOCK Filter_ActLoad
VAR_INPUT
Act_B:REAL;
END_VAR
VAR_OUTPUT
Act_F:REAL;
END_VAR
VAR
arr:ARRAY[0..6] OF REAL := 7(0);
MaxValue,MinValue:REAL := 0;
i:INT;
END_VAR

(*---------------实现部分----------------------*)

Arr[6] := Arr[5];
Arr[5] := Arr[4];
Arr[4] := Arr[3];
Arr[3] := Arr[2];
Arr[2] := Arr[1];
Arr[1] := Arr[0];
Arr[0] := Act_B;

MaxValue :=Arr[0];
MinValue :=Arr[0];

FOR i:=0 TO 6 DO
IF arr[i] > MaxValue THEN
MaxValue := arr[i];
END_IF

IF arr[i] < MinValue THEN
MinValue := arr[i];
END_IF
END_FOR

Act_F := (Arr[0]+Arr[1]+Arr[2]+Arr[3]+Arr[4]+Arr[5]+Arr[6]-MaxValue-MinValue)/5.0;

 

方法2
(* 方法2 *)
(*---------------声明部分----------------------*)
FUNCTION_BLOCK Filter_ActLoad_
VAR_INPUT
Act_B:REAL;
END_VAR
VAR_OUTPUT
Act_F:REAL;
END_VAR
VAR
A1,A2,A3,A4,A5,A6,A7:REAL := 0;
MaxValue,MinValue:REAL;
END_VAR

(*---------------实现部分----------------------*)

Arr[6] := Arr[5];
Arr[5] := Arr[4];
Arr[4] := Arr[3];
Arr[3] := Arr[2];
Arr[2] := Arr[1];
Arr[1] := Arr[0];
Arr[0] := Act_B;

MaxValue :=Arr[0];
MinValue :=Arr[0];

FOR i:=0 TO 6 DO
IF arr[i] > MaxValue THEN
MaxValue := arr[i];
END_IF

IF arr[i] < MinValue THEN
MinValue := arr[i];
END_IF
END_FOR

Act_F := (Arr[0]+Arr[1]+Arr[2]+Arr[3]+Arr[4]+Arr[5]+Arr[6]-MaxValue-MinValue)/5.0;



posted @ 2012-03-11 11:51  Delcpp  阅读(1184)  评论(0编辑  收藏  举报