【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;
没事,别怕,这是签名→→┃ 青山幽谷笛声扬,白鹤振羽任翱翔。往事前尘随风逝,携手云峰隐仙乡。 ┃