108 lines
2.2 KiB
Plaintext
108 lines
2.2 KiB
Plaintext
|
|
(* @PATH := '\/Functions_Collection' *)
|
|
(* @SYMFILEFLAGS := '0' *)
|
|
FUNCTION_BLOCK StatisticalAnalisys
|
|
VAR_INPUT
|
|
i_Value : REAL ;
|
|
i_Cols : UINT ;
|
|
i_Rows : UINT ;
|
|
END_VAR
|
|
VAR_OUTPUT
|
|
MeanValue : REAL ;
|
|
Variance : REAL ;
|
|
Std_Deviation : REAL ;
|
|
END_VAR
|
|
VAR
|
|
mData : ARRAY [1..4, 1..40] OF REAL ;
|
|
mMeanValue : ARRAY [1..40] OF REAL ;
|
|
mVariance : ARRAY [1..40] OF REAL ;
|
|
mDimArray : INT := 40 ;
|
|
mDataX : INT := 1 ;
|
|
mDataY : INT := 1 ;
|
|
mCycle : INT ;
|
|
i : INT ;
|
|
mTemp : REAL ;
|
|
mTemp1 : REAL ;
|
|
mTemp2 : REAL ;
|
|
mCalcMean : BOOL ;
|
|
mHold : BOOL ;
|
|
mHold3 : BOOL ;
|
|
mHold7 : BOOL ;
|
|
END_VAR
|
|
(* @END_DECLARATION := '0' *)
|
|
(*IF NOT mHold AND mDataX<=4 AND mDataY<=40 THEN*)
|
|
IF i_Cols>mDimArray THEN
|
|
i_Cols := mDimArray ;
|
|
END_IF
|
|
IF i_Rows>4 THEN
|
|
i_Rows := 4 ;
|
|
ELSIF i_Rows<1THEN
|
|
i_Rows := 1 ;
|
|
END_IF
|
|
IF mDataX<=i_Rows AND mDataY<=i_Cols THEN
|
|
mData[mDataX, mDataY] := i_Value ;
|
|
mDataX := mDataX + 1 ;
|
|
END_IF
|
|
IF mDataX>i_Rows THEN
|
|
mDataX := 1 ;
|
|
mHold := TRUE ;
|
|
mCalcMean := TRUE ;
|
|
END_IF
|
|
IF mDataY>i_Cols THEN
|
|
mDataY := 1 ;
|
|
mHold := TRUE ;
|
|
END_IF
|
|
|
|
IF mCalcMean THEN
|
|
mCalcMean := FALSE ;
|
|
mMeanValue[mDataY] := 0 ;
|
|
FOR i:=1 TO i_Rows DO
|
|
mMeanValue[mDataY] := mMeanValue[mDataY] + mData[i, mDataY] ;
|
|
END_FOR
|
|
mMeanValue[mDataY] := mMeanValue[mDataY] / i_Rows ;
|
|
MeanValue := 0 ;
|
|
FOR i:=1 TO i_Cols DO
|
|
MeanValue := MeanValue + mMeanValue[i] ;
|
|
END_FOR
|
|
MeanValue := MeanValue / i_Cols ;
|
|
mVariance[mDataY] := 0 ;
|
|
FOR i:=1 TO i_Rows DO
|
|
mTemp := mData[i, mDataY] - MeanValue ;
|
|
mTemp1 := EXPT(mTemp, 2) ;
|
|
mVariance[mDataY] := mVariance[mDataY] + EXPT(mTemp, 2) ;
|
|
END_FOR
|
|
mVariance[mDataY] := mVariance[mDataY] / i_Rows ;
|
|
Variance := 0 ;
|
|
FOR i:=1 TO i_Cols DO
|
|
Variance := Variance + mVariance[i] ;
|
|
END_FOR
|
|
Variance := Variance / i_Cols ;
|
|
IF Variance>0 THEN
|
|
Std_Deviation := SQRT(Variance) ;
|
|
END_IF
|
|
mDataY := mDataY + 1 ;
|
|
END_IF
|
|
|
|
IF mHold THEN
|
|
mCycle := mCycle + 1 ;
|
|
ELSE
|
|
mCycle := 0 ;
|
|
END_IF
|
|
|
|
IF mHold AND NOT mHold3 AND mCycle>=2 THEN
|
|
mHold3 := TRUE ;
|
|
mHold := FALSE ;
|
|
END_IF
|
|
|
|
IF mHold AND mHold3 AND mCycle>=6 THEN
|
|
mHold7 := TRUE ;
|
|
mHold := FALSE ;
|
|
END_IF
|
|
|
|
IF mHold3 AND mHold7 THEN
|
|
mHold3 := FALSE ;
|
|
mHold7 := FALSE ;
|
|
END_IF
|
|
|
|
END_FUNCTION_BLOCK
|