Danke für die Hinweise zum besseren Code, also hier nun mit Tagen und modulo ...
FUNCTION_BLOCK OperationDayHour
VAR_INPUT
IN : BOOL; //Betrieb
Takt : BOOL; //1Hz Systemtakt
END_VAR
VAR_OUTPUT
BetrTag : UDINT; //Ausgabe Betriebstage
Betrstd : UDINT; //Ausgabe Betriebsstunden
Betrmin : UDINT; //Ausgabe Betriebsminuten
Betrsec : UDINT; //Ausgabe Betriebsekunden
BetrString : STRING; //Ausgabe als String
END_VAR
VAR
///Erkennung Taktflanke
Flanke: R_TRIG;
END_VAR
VAR_IN_OUT
BetrsecAbsolut: UDINT; //Ein/Ausgangsvariable Betriebssekunden RETAIN !!!
END_VAR
Flanke(CLK:= Takt, Q=> ); (*Erkennung Taktflanke*)
IF (IN AND Flanke.Q) THEN (*Sekunden hochzählen*)
BetrsecAbsolut := BetrsecAbsolut + 1;
END_IF
Betrsec := BetrsecAbsolut MOD 60;
Betrmin := ( BetrsecAbsolut / 60) MOD 60;
Betrstd := ( BetrsecAbsolut / 60 / 60 ) MOD 24;
BetrTag := ( BetrsecAbsolut / 60 / 60 /24 );
BetrString := RIGHT ( UDINT_TO_STRING( BetrTag + 100000),5);
BetrString := CONCAT (BetrString, 'd_');
BetrString := CONCAT (BetrString,RIGHT ( UDINT_TO_STRING( Betrstd + 100000),5));
BetrString := CONCAT (BetrString, 'h_');
BetrString := CONCAT (BetrString, RIGHT ( UDINT_TO_STRING( Betrmin + 100),2));
BetrString := CONCAT (BetrString, 'm_');
BetrString := CONCAT (BetrString, RIGHT ( UDINT_TO_STRING( Betrsec + 100),2));
BetrString := CONCAT (BetrString, 's');
Gruß, Wollvieh.