Hallo,
heute möchte ich euch einen Betriebsstundenzähler vorstellen.
Er zählt sekundengenau auf über 127Jahre hoch
und gibt Stunden aus.
Einfach einen neuen FB in ST erstellen, Deklarations- und Programmteil hineinkopieren, E/A Variable erstellen, fertig. Die E/A Variable muss zB in der global_var persistent remanent deklariert werden.
Getestet auf einer XV100.
FUNCTION_BLOCK FB_C_Bh
(*
##################################################################################
Programmbeschreibung:
instanzierbarer Betriebsstundenzähler, Sekundengenau, Ausgabe in Stunden
Die E/A Variable Betrsec ist extern remanent persistent zu deklarieren
##################################################################################
Änderungsindex
Name:TL Datum: 30.11.14 Grund: neu
##################################################################################
*)
VAR_INPUT
IN: BOOL; (*Betrieb*)
Takt: BOOL; (*1Hz Systemtakt*)
END_VAR
VAR_OUTPUT
Betrstd: UINT; (*Ausgabe Betriebsstunden*)
END_VAR
VAR
Flanke: R_TRIG; (*Erkennung Taktflanke*)
END_VAR
VAR_IN_OUT
Betrsec: UDINT; (*Ein/Ausgangsvariable Betriebssekunden*)
END_VAR
############################################
Flanke(CLK:= Takt, Q=> ); (*Erkennung Taktflanke*)
IF (IN AND Flanke.Q) THEN (*Sekunden hochzählen*)
Betrsec:= Betrsec + 1;
Betrstd:= (Betrsec / 3600);
END_IF;
have a lot of fun