Der Baustein mit kontinuierlicher Berechnung in ST
Hinweis: Der FB wurde am 01.09.2015 geändert, da nach einem Kaltstart eines Gerätes, Cy_Timer: TON nicht lief.
FUNCTION_BLOCK Zykluszeit
(*
##################################################################################
Programmbeschreibung:
Berechnung der Zykluszeit in ms und Ausgabe min/max Statistik
kann in Verbindung mit FB Systemzeitgeber verwendet werden
benötigte LIB: util
getestet auf XV100
##################################################################################
Änderungsindex
Name:TL Version:0.1 Datum: 30.12.14 Grund: neu
Name:TL Version:0.2 Datum: 01.09.15 Grund: Änderung Anlaufverhalten
##################################################################################
*)
VAR_INPUT
Tagesbeginn: BOOL; (*Triggersignal Tag beginnt*)
Systemanlauf: BOOL; (*Anlaufmerker (nur im 1.Zykl =1)*)
END_VAR
VAR_OUTPUT
Cyc_min: REAL;
Cyc_max: REAL; (*max Zykluszeit in ms letzte 24h*)
CyZeit: REAL; (*Zykluszeit in ms*)
END_VAR
VAR
MIN_MAX: STATISTICS_REAL; (*Statistik Zykluszeiten*)
Cy_Timer: TON; (*"interne TOD" aus einem Timer erzeugen*)
Cy_Zeit_alt: TIME;
reset: BOOL; (*nur für Testbetrieb*)
END_VAR
##########################################################
(*"interne TOD" aus einem Timer erzeugen*)
Cy_Timer(IN:= NOT (Tagesbeginn OR Systemanlauf OR reset), PT:= t#25h, Q=> , ET=> );
(*Zeitdifferenz berechnen*)
IF(t#0s <> Cy_Timer.ET) AND (t#0s <> Cy_Zeit_alt)
THEN CyZeit:=TIME_TO_REAL(Cy_Timer.ET - Cy_Zeit_alt);
ELSE CyZeit:=15; (*für den 1.Zykl mit 15ms vorbelegen*)
END_IF
Cy_Zeit_alt:=Cy_Timer.ET; (*aktuelle Zeit speichern*)
(*Statistik*)
MIN_MAX(
IN:= CyZeit,
RESET:= Tagesbeginn,
MN=> Cyc_min,
MX=> Cyc_max,
AVG=> );