Code cleanup: get the datatype of each entity off symbol->datatype (set in stage3 datatype checking), instead of determining it again in stage4. (NOTE: handling of IL parenthesized expressions is not working! Will be fixed later.)
FUNCTION_BLOCK DERIVATIVE
VAR_INPUT
RUN : BOOL ; (* 0 = reset *)
XIN : REAL ; (* Input to be differentiated *)
CYCLE : TIME ; (* Sampling period *)
END_VAR
VAR_OUTPUT
XOUT : REAL ; (* Differentiated output *)
END_VAR
VAR X1, X2, X3 : REAL ; END_VAR
IF RUN THEN
XOUT := (3.0 * (XIN - X3) + X1 - X2)
/ (10.0 * TIME_TO_REAL(CYCLE)) ;
X3 := X2 ; X2 := X1 ; X1 := XIN ;
ELSE XOUT := 0.0; X1 := XIN ; X2 := XIN ; X3 := XIN ;
END_IF ;
END_FUNCTION_BLOCK