1.5 KiB
1.5 KiB
#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;