Zeiten in der Visu anzeigen

JüKo

Level-1
Beiträge
75
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo an Alle,
ich hab mir in der Codesys 3.5 einen Betriebsstundenzähler gebaut.
Nun möchte ich den Zeitwert in der Visu ausgeben. Dazu hab ich in der Visu verschiedene Formate ausprobiert, bin aber noch nicht zufrieden.
Ich hätte gerne in der Anzeige die Gesamtstunden und Minuten. Wenn ich mir nur die Stunden und Mnuten anzeigen lasse, dann fängt die Anzeige über 24 Stunden wieder bei Null an.
Jetzt könnte ich natürlich noch die Tage hinzufügen, dass finde ich aber unpraktisch. Wie würdet ihr das realisieren.
Danke und freundliche Grüße,
Jürgen
 
Ich würde mich zunächst dafür interessieren, in welcher Form die Informationen vorliegen, die Du anzeigen willst.
Hast Du separate Variablen für die Anzahl Tage, die Anzahl Stunden, die Anzahl Minuten?
Wenn nicht, was dann?
Wie gross darf denn die Anzahl Stunden werden, die Du anzeigen willst, d.h. wie viel stellig sollen die Stunden max. angezeigt werden?
Wenn Überlauf, was dann?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich hab die Daten in Sekunden als UDINT vorliegen und hab diese dann mit mit UDINT_TO_TIME umgewandelt. Max würde ich gerne 100000 Std. anzeigen.
 
Ich habe mal so umgesetzt

Zwei kleine Tipps für einfacheren und besser lesbaren Code:
1. Stunden, Minuten und Sekunden lassen sich sehr einfach mit der Modulo-Funktion mit Modulo=60 extrahieren
2. Um voranstehende Nullen aufzufüllen, kann man so viele Nullen, wie man maximal braucht voransetzen und dann mit der Right-Funktion den String auf die richtige Länge kürzen. Dann brauchst Du nur eine Zeile statt der ganzen "Case Of" Konstruktion.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich hab die Daten in Sekunden als UDINT vorliegen und hab diese dann mit mit UDINT_TO_TIME umgewandelt. Max würde ich gerne 100000 Std. anzeigen.

Wenn Du die Daten in Stunden anzeigen willst, warum geht Du dann den Weg über Time? Hast Du berücksichtigt, dass bei UDINT_IN_TIME der Quellwert als Millisekunden interpretiert wird?
Mein Tipp, wenn Du aus Sekunden Stunden machen willst, dividiere durch 3600. Wenn Du Nachkommastellen willst, wandle vorher in REAL. Minuten und Sekunden interessieren bei Betriebsstundenzählern eh niemanden.
 
Das mit den führenden Nullen hört sich interessant an. Kannst Du anhand meines Codebeispiels aufzeigen, wie das mit der String Funktion zu machen ist, das wäre schön!
 
Hier ist alles, was Du brauschst.

Mein Beispiel für 5 Stellen:

Code:
sNumerischerText := RIGHT(CONCAT('00000',INT_TO_STRING(nNumber)),5);
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ein anderes Beispiel für 2 Stellen:
Code:
sNumerischerText := RIGHT(INT_TO_STRING(nNumber + 100),2) ; // für 'nNumber' >= 0
Hier wird durch Addition von 100 dafür gesorgt, dass der INT_TO_STRING zu viele (= 3 = "genügend") Stellen produziert, um die gewünschte Anzahl Stellen mit RIGHT isolieren zu können, ohne die relevanten Stellen zu verfälschen.
Ergibt sich 'nNumber' aus einer Anwendung von MOD, so muss man ohnehin beachten, dass die zu "zerlegende" Zahl positiv ist.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo ich habe diesen Betriebsstundenzähler ausprobiert und er funktioniert super, nur möchte ich noch Tage anzeigen lassen!
Habe das Programm etwas editiert ,aber nun zeigt meine Visu zum Beispiel folgendes an;
001d37h58m59s
Der Tag hat aber nur 24h
Ich bin schon sämtliche Rechnungen durchgegangen, komme aber nicht auf die Lösung!
Vielleicht kann mir jemand helfen das Programm für max 365 Tage zu erweitern...
 
Kannst du mir das als Beispiel schreiben?
Ich arbeite nie mit ST
Habe den Text von Wollvieh auch nur abgetippt, und da steht nix mit modulo 24 oder so...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Dann zeigt doch mal den angepassten Code. Wie soll man denn helfen? Vorkauen ist es jedenfalls nicht.

Die Modulo-Variante wäre auf jeden Fall einfacher zu verstehen gewesen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Der Code macht, für was der geschrieben wurde. Wenn die Stunden nun nicht mehr weiter zählen sollen, dann muss das den Stunden auch gesagt werden. Wenn die Zeile unverändert ist, warum soll dann plötzlich ein anderes Ergebnis rauskommen? Betrstd kann nicht hellsehen.

Das ist alles nur Mathematik. Vergleiche mal die Zeile, wo Betrstd gebildet wird mit der, wo Betrmin gebildet wird, so in etwa muss diese Zeile aussehen. Das gleiche mit Betrmin, die muss dann so aussehen, wie Betrsec und Betrsec bekommt noch den Faktor von BetrTag zusätzlich abgezogen.

Ganz ehrlich, ich finde diesen Code hässlich. Aber mit Kenntnissen der Mathematik lässt der sich zumindest lesen und anpassen.

Ich werde heute aber keinen Code posten.
 
Nach langem hin undher rechnen denke ich dass ich die betrstd Zeile wie folgt anpassen muss

Betrstd := (BetrsecAbsolut/3600) - (BetrTag*24) ;

Ich werde das mal testen und hier dann rein posten!
 
Zurück
Oben