KEEPFlip-flop
Mit dem KEEP-Befehl wird ein Flip-flop realisiert.
Wenn der Setzeingang SetTrigger auf TRUE gesetzt ist, wird der Status des angegebenen Merkers auf TRUE gesetzt. Der Merker wird auf FALSE gesetzt, wenn der Rücksetzeingang ResetTrigger auf TRUE gesetzt wird. Der Status des Merkers wird behalten, bis ResetTrigger auf TRUE gesetzt ist. Signalwechsel TRUE oder FALSE am Setzeingang SetTrigger wirken sich nicht mehr auf den Zustand des Flip-flops aus. Wenn beide Eingänge SetTrigger und ResetTrigger gleichzeitig auf TRUE gesetzt werden, hat der Rücksetzeingang ResetTrigger Vorrang und das Flip-flop wird zurückgesetzt.

Eingang
Setzt Address auf TRUE
Setzt Address auf FALSE
Ausgang
Der Status dieses Merkers (TRUE oder FALSE) wird behalten.

Im POE-Kopf werden alle Ein- und Ausgangsvariablen deklariert, die für die Programmierung dieser Funktion verwendet werden.Für alle Programmiersprachen wird der gleiche POE-Kopf verwendet.

	VAR
		SetTrigger1: BOOL:=FALSE;
			(*if SetTrigger1 is ON, the output  Address1 will turn ON*)
		ResetTrigger1: BOOL:=FALSE;
			(*if reset_trigger is ON, the
Address1 will turn OFF*)
		Address1: BOOL:=FALSE;
	END_VAR

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 5 ;
        NETWORK_BODY
B(B_F,KEEP!,Instance,13,1,23,5,,?DSetTrigger?DResetTrigger?CAddress);
B(B_VAROUT,,Address1,23,2,25,4,);
B(B_CONTACT,,ResetTrigger1,5,3,7,5,);
B(B_CONTACT,,SetTrigger1,5,1,7,3,);
L(1,4,5,4);
L(1,2,5,2);
L(7,2,12,2);
L(12,2,12,3);
L(7,4,13,4);
L(12,3,13,3);
L(1,0,1,5);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY
Address1:=KEEP(SetTrigger1, ResetTrigger1);LD  | 
SetTrigger1  | 
(* load the value for the SetTrigger-Input *)  | 
KEEP  | 
ResetTrigger1  | 
(* load the value for the ResetTrigger-Input and execute KEEP *)  | 
ST  | 
Address1  | 
(* store the Address-Output value *)  |