FUNCTION FC 8 : VOID
TITLE =Betriebstundenzähler
//Betriebsstundenzähler // Betriebsstundenzähler mit Meldeausgang
// +———————————————————+
// | FC8 |
// | |
// ——|EN |
// | |
// Bool ——|LAUFMELD ZAEHLSEK|—— Int
// | |
// Bool ——|TAKT ZAEHLSTD|—— DInt
// | |
// Bool ——|RESET MELDUNG|—— Bool
// | |
// DInt ——|GRZ_WERT ENO|——
// +———————————————————+
//
//LAUFMELD = Laufmeldung vom Antrieb ZAEHLSEK = Sekundenzähler
//TAKT = Zyklustaktimpuls (1s) ZAEHLSTD = Stundenzähler
//RESET = Rücksetzeingang für die MELDUNG = Meldeausgang
// Zähler
//GRZ_WERT = Angabe der max. Betriebs-
// stunden eines Intervalls
AUTHOR :
NAME : BSTD_EXT
VERSION : 0.1
VAR_INPUT
LAUFMELD : BOOL ; //Laufmeldung bzw. Antrieb ist ein
TAKT : BOOL ; //Sekundentakt aus dem System
RESET : BOOL ; //Zähler rücksetzen
GRZ_WERT : DINT ; //Grenzwert für den Zähler zur Meldungausgabe (Intervall erreicht)
END_VAR
VAR_OUTPUT
ZAEHLSEK : INT ; //Sekundenanteil Zähler
ZAEHLSTD : DINT ; //Gesamtstunden Zählung
MELDUNG : BOOL ; //Intervallzeit erreicht bzw. überschritten
END_VAR
BEGIN
NETWORK
TITLE =Stundenzähler rücksetzen bei Anforderung
U #RESET;
SPBNB _001;
L 0;
T #ZAEHLSTD;
_001: NOP 0;
NETWORK
TITLE =Sekundenzähler aufaddieren
//Wenn der Antrieb läuft und der Zyklusaktimpuls ansteht, wird der Sekundenzähler
//um 1 erhöht. Wichtig ist, das ausserhalb der FC aus Sekundenzyklustakt eine
//postive Flanke gebildet wird.
U #LAUFMELD;
U #TAKT;
SPBNB _002;
L #ZAEHLSEK;
L 1;
+I ;
T #ZAEHLSEK;
_002: NOP 0;
NETWORK
TITLE =Stundenzähler aufaddieren, Sekundenzähler löschen
//3600 Sekunden = 1 Stunde. Es erfolgt ein Übertrag in den Stundenzähler mit
//anschließender Ablöschung des Sekundenzählers. Der Sekundenzähler wird aber
//auch durch den Reset-Eingang gelöscht.
U( ;
O( ;
U( ;
L #ZAEHLSEK;
L 3600;
==I ;
) ;
SPBNB _003;
L #ZAEHLSTD;
L 1;
+D ;
T #ZAEHLSTD;
UN OV;
SAVE ;
CLR ;
_003: U BIE;
) ;
O #RESET;
) ;
SPBNB _004;
L 0;
T #ZAEHLSEK;
_004: NOP 0;
NETWORK
TITLE =Meldung ausgeben
L #ZAEHLSTD;
L #GRZ_WERT;
>=D ;
= #MELDUNG;
END_FUNCTION