57 lines
1.5 KiB
Markdown
57 lines
1.5 KiB
Markdown
|
```
|
||
|
#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;
|
||
|
|
||
|
|
||
|
|
||
|
```
|