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 INTEGRAL
VAR_INPUT
RUN : BOOL ; (* 1 = integrate, 0 = hold *)
R1 : BOOL ; (* Overriding reset *)
XIN : REAL ; (* Input variable *)
X0 : REAL ; (* Initial value *)
CYCLE : TIME ; (* Sampling period *)
END_VAR
VAR_OUTPUT
Q : BOOL ; (* NOT R1 *)
XOUT : REAL ; (* Integrated output *)
END_VAR
Q := NOT R1 ;
IF R1 THEN XOUT := X0 ;
ELSIF RUN THEN XOUT := XOUT + XIN * TIME_TO_REAL(CYCLE);
END_IF ;
END_FUNCTION_BLOCK