Obsidean_VM/04-InLavoro/22 - 9.3841 - Sidel - Tilting/Software/FB622 - FB Offset Pulse.md

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;