FUNCTION_BLOCK FB300
TITLE = 'Betriebsstundenzaehler'
//Betriebsstundenzähler zum Aufruf in einem Weckalarm - Organisationsbaustein
//Bei S7-400 OB 30 bis 38
//Bei S7-300 OB 35
//
//Der Speicherbereich der an Stunden angeschrieben wird muss remanent sein sonst gehen die Betriebsstunden nach einen CPU - Stop verloren!
//Der Instanzdatenbaustein des Betriebsstundenzählers sollte auch remanent sein. Bei nicht remanent des InstanzDB gehen aber nur die Minuten und Sekunden verloren
//
//
//Schnittstelle:
//
//Input
//Aufrufzeit_OB : Aufrufzeit des Weckalarm OB's. Ist in der Schnittstelle des OB's zu finden. Bei OB35 #OB35_EXC_FREQ
//Ein : Wenn Ein auf True gesetzt ist dann zählt der Betriebsstundenzähler. Bei False stoppt er beim vorhanden Wert. Bei weiteren wechsel in True zählt er vom vorhandenen Wert weiter
//Reset : Zum zurücksetzen des Betriebsstundenzählers
//
//Output
//Sekunden : Sekunden des Betriebsstundenzählers
//Minuten : Minuten des Betriebsstundenzählers
//
//In_Output
//Stunden : Betriebsstunden ist eine IN_OUT Variable damit auch von aussen Stunden vorgegeben werden können
VERSION : '1.0'
AUTHOR :godi
NAME :Stunden
FAMILY :SCL
KNOW_HOW_PROTECT
VAR_INPUT
Aufrufzeit_OB : INT; //Aufrufzeit des Weckalarm OB's (zb: #OB35_EXC_FREQ)
Ein : BOOL; //Wenn ein auf True gesetzt ist dann zählt der Betriebsstundenzähler
Reset : BOOL; //Zum zurücksetzen des Betriebsstundenzählers
END_VAR
VAR_IN_OUT
Stunden : DINT; //Betriebsstunden (IN_OUT Variable damit auch von aussen Stunden vorgegeben werden können)
END_VAR
VAR_OUTPUT
Sekunden : INT; //Sekunden des Betriebsstundenzählers
Minuten : INT; //Minuten des Betriebsstundenzählers
END_VAR
VAR
Impulse_pro_Sekunde : INT;
Impulszaehler : INT;
END_VAR
BEGIN
(*Impulsanzahl pro Sekunde ausrechnen*)
Impulse_pro_Sekunde := 1000 / Aufrufzeit_OB;
(*Impulszähler bei jedem Programmaufruf wo EIN True ist um den Faktor 1 erhöhen*)
IF Ein THEN
Impulszaehler := Impulszaehler + 1;
END_IF;
(*Berechne Sekunden*)
IF Impulszaehler >= Impulse_pro_Sekunde THEN
Sekunden := Sekunden +1; //Wenn Impulszähler den Wert von Impulse pro Sekunde erreicht hat dann Zähle eine Sekunde dazu und
Impulszaehler := 0; //setze Impulszähler auf Null
END_IF;
(*Berechne Minuten*)
IF Sekunden >= 60 THEN
Minuten := Minuten + 1;
Sekunden := 0;
END_IF;
(*Berechne Stunden*)
IF Minuten >= 60 THEN
Stunden := Stunden + 1;
Minuten := 0;
END_IF;
(*Bei Reset setze alles auf Null*)
IF Reset THEN
Stunden := 0;
Minuten := 0;
Sekunden := 0;
Impulszaehler := 0;
END_IF;
END_FUNCTION_BLOCK