I have a ramp function which is using Time data type for calculation , I have converted the time to DINT and divided these values and saved in a variable which is Real - This is accepted by the compiler but the value of the division stays at zero all the time .No error but code does not work
Code:
FUNCTION_BLOCK "RAMP"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_INPUT
RUN : Bool; // 0 - track X0, 1 - ramp to/track X1
X0 : Real;
X1 : Real;
TR : Time; // Ramp duration
CYCLE : Time; // Sampling period
END_VAR
VAR_OUTPUT
BUSY : Bool; // BUSY = 1 during ramping period
XOUT : Real := 0.0;
END_VAR
VAR
XI : Real; // Initial value
T : Time := T#0MS; // Elapsed time of ramp
Change : Real;
END_VAR
BEGIN
#BUSY := #RUN;
IF #RUN THEN
IF #T >= #TR THEN
#BUSY := 0;
#XOUT := #X1;
ELSE
#Change := (TIME_TO_DINT(#T) / TIME_TO_DINT(#TR));
#XOUT := #XI + ((#X1 - #XI) * #Change) ;
#T := #T + #CYCLE;
END_IF;
ELSE
#XOUT := #X0;
#XI := #X0;
#T := t#0s;
END_IF;
END_FUNCTION_BLOCK