```pascal FUNCTION_BLOCK "Statistical_Analisys" { S7_Optimized_Access := 'FALSE' } AUTHOR : 'Author' FAMILY : 'Function' NAME : 'Name' VERSION : 1.0 VAR_INPUT i_Value : Real; i_Cols : Int; i_Rows : Int; 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 BEGIN IF #i_Cols>#mDimArray THEN #i_Cols := #mDimArray ; END_IF; IF #i_Rows > 4 THEN #i_Rows := 4 ; ELSIF #i_Rows <1 THEN #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 :=(#mTemp * #mTemp) ; #mVariance[#mDataY] := #mVariance[#mDataY] + (#mTemp * #mTemp) ; 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 ```