Remove RETAIN qualifier for F_TRIG and R_TRIG 'M' variable. This is not following standard, and implicitely consumes a lot of RETAIN memory. User can explicitely qualify R_TRIG of F_TRIG instance as RETAIN if needed.
FUNCTION_BLOCK HYSTERESIS
(* Boolean hysteresis on difference *)
(* of REAL inputs, XIN1 - XIN2 *)
VAR_INPUT XIN1, XIN2, EPS : REAL; END_VAR
VAR_OUTPUT Q : BOOL := 0; END_VAR
IF Q THEN IF XIN1 < (XIN2 - EPS) THEN Q := 0; END_IF ;
ELSIF XIN1 > (XIN2 + EPS) THEN Q := 1 ;
END_IF ;
END_FUNCTION_BLOCK