Impuls-Zeitgeber
Mit dem Funktionsbaustein TP können Sie einen Impulsgeber mit einer definierten Impulsdauer programmieren.
Eingang
Impulsgeber
bei einer steigenden Flanke an IN wird ein Impuls von der Dauer erzeugt, die in PT definiert worden ist
Impulsdauer
16 Bit: 0–327.27s
32 Bit: 0–21,474,836.47s (32 Bit nicht verfügbar für FP3, FPC, FP5, FP10/10S)
Auflösung jeweils 10ms
bei jeder steigenden Flanke an IN wird ein Impuls von der Dauer PT ausgelöst. Während der Impulsdauer löst auch eine neue steigende Flanke an IN keinen neuen Impuls aus.
Ausgang
Signalausgang
wird für die Dauer von PT gesetzt, sobald eine steigende Flanke an IN anliegt
Istwert
enthält die abgelaufene Impulsdauer. Wenn PT = ET ist, wird Q zurückgesetzt.
Der Wert kann während des Zählens geändert werden, indem aus dem Programmiereditor heraus in die Variable geschrieben wird.
FP2, FP2SH und FP10SH benötigen für PT den 32-Bit Wert.
Unabhängig von der Einschaltdauer des IN-Signals, wird am Ausgang Q ein Impuls von der Länge erzeugt, der in PT definiert worden ist Der Funktionsbaustein TP wird gestartet (getriggert), wenn am Eingang IN eine steigende Flanke anliegt.
Während PT abgearbeitet wird, hat eine steigende Flanke am Eingang IN keinen Einfluss.
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
copy_name: TP;
start: BOOL:=FALSE;
set_value: TIME:=T#0s;
signal_output: BOOL:=FALSE;
current_value: TIME:=T#0s;
END_VAR
Wenn start gesetzt ist (Status = TRUE), wird der Impuls an signal_output so lange ausgegeben, bis set_value für die Impulsdauer erreicht worden ist.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 6 ;
NETWORK_BODY
B(B_CONTACT,,start,3,2,5,4,);
B(B_VARIN,,set_value,7,3,9,5,);
B(B_VAROUT,,current_value,14,3,16,5,);
B(B_COIL,,signal_output,21,2,23,4,);
B(B_FB,TP!,copy_name,9,1,14,5,,?BIN?BPT?AQ?AET);
L(1,3,3,3);
L(1,0,1,6);
L(5,3,9,3);
L(14,3,21,3);
END_NETWORK_BODY
END_NET_WORK
END_BODY
copy_name( IN:= start ,
PT:= set_value ,
Q=> signal_output ,
ET=> current_value );
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
TP1: TP;
bIN: BOOL:=FALSE;
tPT: TIME:=T#30s;
tET: TIME:=T#0s;
bQ: BOOL:=FALSE;
bEmergencyStop: BOOL:=FALSE;
END_VAR
Nach einer steigenden Flanke an IN beginnt der Zeitgeber mit dem Zählen und Q wird auf TRUE gesetzt. Wenn bEmergencyStop auf TRUE gesetzt wird, bevor die Impulsdauer abgelaufen ist, wird der Zählvorgang gestoppt und der Ausgang Q sofort zurückgesetzt. Der Zeitgeber wird in diesem Beispiel mit der Impulsdauer PT von 30s initialisiert.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 4 ;
NETWORK_BODY
B(B_F,E_MOVE!,,16,0,22,4,,?DEN?D?AENO?C);
B(B_VARIN,,tPT,14,2,16,4,);
B(B_VAROUT,,TP1.ET,22,2,24,4,);
B(B_CONTACT,,TP1.Q,12,1,14,3,);
B(B_CONTACT,,bEmergencyStop,7,1,9,3,);
L(14,2,16,2);
L(1,2,7,2);
L(9,2,12,2);
L(1,0,1,4);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_VARIN,,tPT,14,3,16,5,);
B(B_VAROUT,,tET,21,3,23,5,);
B(B_CONTACT,,bIN,7,2,9,4,);
B(B_COIL,,bQ,33,2,35,4,);
B(B_FB,TP!,TP1,16,1,21,5,,?BIN?BPT?AQ?AET);
B(B_CONTACT,,bEmergencyStop,27,2,29,4,N);
L(1,3,7,3);
L(9,3,16,3);
L(29,3,33,3);
L(21,3,27,3);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
END_BODY
if (bEmergencyStop AND TP1.Q) then
TP1.ET:=tPT;
end_if;
TP1(IN := bIN, PT := tPT, ET => tET);
bQ := NOT bEmergencyStop AND TP1.Q;