You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

80 lines
2.4 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<TcPlcObject Version="1.1.0.1" ProductVersion="3.1.4024.12">
<POU Name="fbPulseDelay" Id="{a2eafd9b-e5e8-4663-850a-b038ce6f47d9}" SpecialFunc="None">
<Declaration><![CDATA[FUNCTION_BLOCK fbPulseDelay
VAR_INPUT
PulseIN : BOOL; // Pulse to delay
DelayTime : TIME; // Delay Time in ms
Tx : TIME; // System Time
END_VAR
VAR_OUTPUT
PulseOut : BOOL; // Delayed Pulse
END_VAR
VAR
bPulseRise : BOOL; // PulseIN rising edge
DelaySP : TIME; // Stored DelayTime value to avoide changes during execution
tStart : TIME;
tStop : TIME;
tPulseDuration : TIME; // Measured PulseIN duration
// tPulseDurationLast : TIME; // Measured PulseIN duration
END_VAR
]]></Declaration>
<Implementation>
<ST><![CDATA[// Reset pulse rising edge bit
IF PulseIN AND NOT bPulseRise THEN
tStart := GVL.tx; // On pulse rising edge record the System time
DelaySP := DelayTime; // Write DelayTime value to avoide changes during execution
tPulseDuration := TIME#0MS; // Reset Pulse duration counter
bPulseRise := TRUE;
END_IF
IF PulseIN AND bPulseRise THEN
tPulseDuration := GVL.tx - tStart; // Calculate the time (pulse duration)
END_IF
IF NOT PulseIN AND bPulseRise THEN // The first scan with PulseIN OFF
;
END_IF
IF NOT PulseIn THEN // When PulseIN is OFF, reset pulse rising edge to be ready for the next pulse
bPulseRise := FALSE;
END_IF
// Create the delayed pulse
// Start pulse with delay and stop with delay
//
IF GVL.tx >= (tStart + DelaySP) AND GVL.tx <= (tStart + DelaySP + tPulseDuration) THEN
PulseOut := TRUE;
ELSE
PulseOut := FALSE;
END_IF
]]></ST>
</Implementation>
<LineIds Name="fbPulseDelay">
<LineId Id="29" Count="0" />
<LineId Id="20" Count="1" />
<LineId Id="24" Count="0" />
<LineId Id="74" Count="0" />
<LineId Id="39" Count="0" />
<LineId Id="22" Count="1" />
<LineId Id="25" Count="2" />
<LineId Id="19" Count="0" />
<LineId Id="34" Count="0" />
<LineId Id="36" Count="1" />
<LineId Id="35" Count="0" />
<LineId Id="31" Count="2" />
<LineId Id="30" Count="0" />
<LineId Id="54" Count="0" />
<LineId Id="41" Count="0" />
<LineId Id="55" Count="1" />
<LineId Id="40" Count="0" />
<LineId Id="42" Count="0" />
<LineId Id="51" Count="1" />
<LineId Id="43" Count="0" />
<LineId Id="48" Count="0" />
<LineId Id="50" Count="0" />
</LineIds>
</POU>
</TcPlcObject>