Die Zweite Variante mit einem Timer:
FUNCTION_BLOCK EntprellungT
(*
##############################################################
Programmbeschreibung:
Entprellung von dig Eingangssignalen über einen Timer
ein- und ausschaltverzögert
Lib: standard
##############################################################
					Änderungsindex
Name:TL		Version:0.1		Datum: 20.12.2015		Grund: neu, Test OK
##############################################################
*)
VAR_INPUT
	Geber: BOOL;		(*Eingang*)
	Ev_Wert: TIME := t#100ms;	(*Einschaltverzögerung*)
	Av_Wert: TIME := t#100ms;	(*Ausschaltverzögerung*)
END_VAR
VAR_OUTPUT
	out: BOOL;	(*entprellter Ausgang*)
END_VAR
VAR
	Zeit: TON;		(*Timer*)
END_VAR
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
(*Einschaltverzögerung*)
IF NOT out AND Geber
	THEN Zeit(IN:= TRUE, PT:= Ev_Wert, Q=> , ET=> );
	IF Zeit.Q		(*Verzögerungswert erreicht*)
		THEN out:= TRUE;
				Zeit(IN:= FALSE, PT:= Ev_Wert, Q=> , ET=> );(*Timer auf Null, wenn geschaltet*)
	END_IF
ELSIF NOT out AND NOT Geber	(*reset bei Verzögerungswert nicht erreicht*)
	THEN Zeit(IN:= FALSE, PT:= Ev_Wert, Q=> , ET=> );
END_IF
(*Ausschaltverzögerung*)
IF out AND NOT Geber
	THEN Zeit(IN:= TRUE, PT:= Av_Wert, Q=> , ET=> );
	IF Zeit.Q		(*Verzögerungswert erreicht*)
		THEN out:= FALSE;
				Zeit(IN:= FALSE, PT:= Av_Wert, Q=> , ET=> );(*Timer auf Null, wenn geschaltet*)
	END_IF
ELSIF out AND Geber	(*reset bei Verzögerungswert nicht erreicht*)
	THEN Zeit(IN:= FALSE, PT:= Av_Wert, Q=> , ET=> );
END_IF
Im Anhang noch ein Bild der Aussenschnittstellen
Gruß Thomas