发布于 2009-07-01 09:07:47
0楼
FUNCTION_BLOCK FB1
VAR_TEMP
// Temporary Variables
RET_VAL_105: WORD;
LOOP_COUNT: INT;
MAX_DATA: REAL;
MIN_DATA: REAL;
TOTAL: REAL;
TOTAL_FILTERD: REAL;
END_VAR
// Block Parameters
VAR_INPUT
// Input Parameters
PIW_IN: INT;
HI_LIM_IN: REAL :=100.0;
LO_LIM_IN: REAL :=0.0;
BIPOLAR_IN: BOOL :=FALSE;
END_VAR
VAR_IN_OUT
// I/O Parameters
END_VAR
VAR_OUTPUT
// Output Parameters
SCALED_VAL: REAL;
SCALED_FILTED: REAL;
ERR: BOOL;
END_VAR
VAR
// Static Variables
DATA_STORE: ARRAY[0..9] OF REAL;
END_VAR
// Statement Section
RET_VAL_105:=SCALE(IN := PIW_IN // IN: INT
,HI_LIM := HI_LIM_IN // IN: REAL
,LO_LIM := LO_LIM_IN // IN: REAL
,BIPOLAR := BIPOLAR_IN // IN: BOOL
,OUT := SCALED_VAL // OUT: REAL
); // WORD
IF RET_VAL_105<>0 THEN ERR:=TRUE;
ELSE ERR:=FALSE;
END_IF;
//INITILAIZE
MAX_DATA:=DATA_STORE[0];
MIN_DATA:=DATA_STORE[0];
TOTAL:=0.0;
TOTAL_FILTERD:=0.0;
FOR LOOP_COUNT:= 0 TO 8 BY 1 DO
DATA_STORE[LOOP_COUNT]:=DATA_STORE[LOOP_COUNT+1];
END_FOR;
DATA_STORE[9]:=SCALED_VAL;
FOR LOOP_COUNT:=0 TO 9 BY 1 DO
//FIND THE MAX VALUE;
IF MAX_DATA < DATA_STORE[LOOP_COUNT] THEN MAX_DATA:=DATA_STORE[LOOP_COUNT];
END_IF;
//FIND THE MIN VALUE;
IF MIN_DATA > DATA_STORE[LOOP_COUNT] THEN MIN_DATA:=DATA_STORE[LOOP_COUNT];
END_IF;
//CALCULATE THE TOTAL VALUE;
TOTAL:=TOTAL+DATA_STORE[LOOP_COUNT];
END_FOR;
//CALCULATE
TOTAL_FILTERD:=TOTAL-MIN_DATA-MAX_DATA;
SCALED_FILTED:=TOTAL_FILTERD/8.0;
END_FUNCTION_BLOCK
JUST DO IT