```pascal FUNCTION_BLOCK "MSE Slope" { S7_Optimized_Access := 'FALSE' } AUTHOR : 'Author' FAMILY : 'Function' NAME : 'Name' VERSION : 1.0 VAR_INPUT i_Value : Real; // Istant Value TO compute i_Num : Int; // Number OF sample used TO compute slope i_Cycle : Real; // Cycle TIME i_Enable : Bool; // Enable the block END_VAR VAR_OUTPUT o_MSESlope : Real; END_VAR VAR mSumX2 : Real; // Sum OF square mX2Sum : Real; // Square OF sum mSumX : Real; mSumY : Real; mSumXY : Real; mPtr : Int; END_VAR BEGIN IF #i_Enable THEN IF #i_Num > 0 THEN IF #i_Num > 30 THEN #i_Num := 30 ; // LIMIT the number OF samples END_IF; IF #mPtr <= #i_Num THEN #mPtr := #mPtr + 1 ; #mSumY := #mSumY + #i_Value ; #mSumX2 := #mSumX2 + (#i_Cycle * #mPtr)*(#i_Cycle * #mPtr); #mSumXY := #mSumXY + (#i_Cycle * #mPtr * #i_Value) ; #mSumX := #mSumX + #mPtr * #i_Cycle ; IF #mPtr = #i_Num THEN #mX2Sum := (#mSumX * #mSumX) ; IF (#mPtr * #mSumX2 - #mX2Sum) <> 0 THEN #o_MSESlope := (#mPtr * #mSumXY - #mSumX * #mSumY) / (#mPtr * #mSumX2 - #mX2Sum) ; END_IF; #mPtr := 0 ; #mSumX2 := 0 ; #mX2Sum := 0 ; #mSumXY := 0 ; #mSumX := 0 ; #mSumY := 0 ; END_IF; END_IF; ELSE (* classic code: #o_MSESlope := 0.0 ;*) #o_MSESlope := REAL#0.0 ; END_IF; ELSE #mPtr := 0 ; #mSumY := 0 ; #mSumX2 := 0 ; #mX2Sum := 0 ; #mSumXY := 0 ; #mSumX := 0 ; (* classic code: #o_MSESlope := 0.0 ;*) #o_MSESlope := REAL#0.0 ; END_IF; END_FUNCTION_BLOCK ```