``` #Pulse := #"Pulse In" AND NOT #Aux.ONs; #Aux.ONs := #"Pulse In"; #ElapsedRuntime_s := RUNTIME(#Aux.TimeRecorded); #"Delta Time" := LREAL_TO_REAL(#ElapsedRuntime_s); IF #"Delta Time" = 0 OR #"Delta Time" > 1 THEN RETURN; END_IF; #Aux."Time Average Step" := #Aux."Time Average Step" + #"Delta Time"; IF #Aux.FIFO[0] > #"Delta Time" THEN #Aux.FIFO[0] := #Aux.FIFO[0] - #"Delta Time"; END_IF; IF #Aux.FIFO[1] > #"Delta Time" THEN #Aux.FIFO[1] := #Aux.FIFO[1] - #"Delta Time"; END_IF; #"Pulse Out" := FALSE; IF #Aux.FIFO[0] <> 0 AND #Aux.FIFO[0] <= #"Delta Time" THEN #"Pulse Out" := TRUE; #Aux.FIFO[0] := 0; END_IF; IF #Aux.FIFO[1] <> 0 AND #Aux.FIFO[1] <= #"Delta Time" THEN #"Pulse Out" := TRUE; #Aux.FIFO[1] := 0; END_IF; IF #Pulse THEN // Load the FIFO with pulses #"Offset time" := FRAC(#"Ofsset in mm" / #"Step mm") * #"Average Step time"; IF #"Offset time" < #"Delta Time" THEN #"Pulse Out" := TRUE; ELSE #Aux.FIFO[#Aux."Pos on FIFO"] := #"Offset time"; #Aux."Pos on FIFO" := (#Aux."Pos on FIFO" + 1) MOD 2; END_IF; IF #"Auto Calc Step Time" OR #"Fix Step Time" = 0 THEN // Calculate the #"Average Step time" #Aux.Count := #Aux.Count + 1; IF #Aux.Count >= #"Num Pulses" THEN #Aux.Count := 0; #"Average Step time" := (#Aux."Time Average Step" / #"Num Pulses") * 0.5 + #"Average Step time" * 0.5; #Aux."Time Average Step" := 0; END_IF; ELSE #"Average Step time" := #"Fix Step Time"; END_IF; END_IF; ```