Heinrich was treibst du da?Ja.
Wenn es darum geht, x h + n h auszurechnen, wobei n die Anzahl der zu addierenden Stunden ist, dann
Zeitx := Zeitx + n * 3600000 ;
ggfs
Zeitx := (Zeitx + n * 3600000) MOD 84600000 ;
wenn es darum geht, wieder eine Zahl ohne Überlauf im Bereich 0 .. 84599999 (also 00:00:00,000 .. 23:59:59,999) zu erhalten.
Moin Dieter,Heinrich was treibst du da?
Das Zahlenformat TIME hat erstmal gar nix mit Uhrzeit zu tun.
TIME ist nichts anderes als ein DINT auf Basis von Millisekunden.
Würdest Du das ZahlenFormat TIME denn ignorieren bzw. in den Hintetgrund schieben, wenn man es ausnahmsweise doch mal für das Rechnen mit Uhrzeiten oder das Vergleichen von Uhrzeiten benutzen möchte?
Für das Rechnen mit Zeiten ist das DINT-Format doch optimal qualifiziert, sodass ich es mit aller Gewalt in den Vordergrund ziehen würde, selbst, wenn dadurch zusätzliche Konvertierungen aus anderen Formaten und in andere Formate erforderlich werden.
Aber Uhrzeit ist auch nur eine ZeitDauer, nämlich seit MitterNacht.TIME ist einfach eine Zeitdauer und keine Uhrzeit.
Geschmackssache.Für Uhrzeiten ist der Datentyp Time_of_Day deutlich besser geeignet.
Und ich soll mir merken, welche Funktion mit welchen DatenTypen zurechtkommt? In diesem Leben nicht mehr, Dieter!Bei der 1200 und 1500 Steuerung gibt es mittlerweile auch einige Funktionen für Datum und Uhrzeit.
Die meisten davon kommen mit mehreren Datentypen zurecht.
Nicht mehr nötig, aber weiterhin möglich.Das Wandeln um Rechnen mit Millisekunden ist da nicht mehr notwendig.
Edit:Ein TIME#-Wert kann/darf bis T#24D_20H_31M_23S_647MS groß werden,
Wo, Harald, siehst Du den Zusammenhang zwischen der maximalen Grösse und dem "Müssen" einer Begrenzung auf 24h?der Wert muß also nicht auf 24 Stunden begrenzt werden.
Das habe ich oben doch geschrieben??Ich habe dem aber entnommen, daß der Wert 7200000 = 2 Stunden entsprechen soll, und er fragt, wie groß der Wert für 3 Stunden sein müsste. Das ist einfach zu berechnen: 7200000 / 2 * 3 = 10800000
Trotzdem nochmal nachgerechnet komme ich darauf daß 2 Stunden (T#2H = 7200000 ms) durch 7200000 = 1ms (T#1MS) ergibt. Also wird es doch am Ende irgendwie um den Datentyp TIME gehen.
Darf ich fragen wie du auf den Wert kommst -> rechen WegMit meiner "OchsenKarrenMethode" komme ich auf maximal T#25D_9H_1M_23S_647MS.
Ich denke mal, Heinrich hat sich etwas verrechnet (oder ich verstehe nicht genau was er meint).Darf ich fragen wie du auf den Wert kommst -> rechen Weg
2.160.000.000 ms = 25 Tage
32.400.000 ms = 9 Stunden
60.000 ms = 1 Minute
23.000 ms = 23 Sekunden
647 ms = 647ms
====================
Summe = 2.192.483.647
MaxDINT = 2.147.483.647
Na das wissen wir ja. Interessant wäre, wie @Heinileini auf die 25 Tage kommt.Siemens hat - wie @PN/DP in #7 schon geschrieben hat - für den Datentyp Time einen max. Wert von T#24D_20H_31M_23S_647MS festgelegt.
Siemens hat den Wert nicht "festgelegt", sondern der größtmögliche positive 32-Bit Wert ist 16#7FFF_FFFF = L#2147483647 ms = T#24d20h31m23s647msSo jetzt wurde wunderschön gerechnet, aber leider steckt der Ochsenkarren jetzt im Dreck.
Siemens hat - wie @PN/DP in #7 schon geschrieben hat - für den Datentyp Time einen max. Wert von T#24D_20H_31M_23S_647MS festgelegt.
OK, ich zeige Dir was in Deinem Beitrag falsch ist:Das habe ich oben doch geschrieben??
Hätte vielleicht dazu schreiben sollen Time = Zeitdauer
In dem AWL-Code steht ziemlich sicher nicht T#7200000ms sondern L#7200000. Daß das Millisekunden sind, hast Du irgendwo anders hergeholt. Wir wissen nicht, wie in dem Code die Zeitmessung realisiert wird, und welchen Zeitwert L#7200000 darstellt. Die Zeitmessung könnte auch durch Zählen von OB30-Aufrufen realisiert sein, dann ist der Zeitwert L#7200000 * Aufrufintervall des OB30.Ich habe hier eine AWL programmierung..
dort ist als Time die DInt Zahl 7200000ms hinterlegt
Meinst Du "teile" ("dividiere")?dort ist als Time die DInt Zahl 7200000ms hinterlegt wenn ich diese durch 3600000ms dann ergibt das 2h
Ja ich bin davon ausgegangen das das ms sind bzw. steht L#720000 natürlich....In dem AWL-Code steht ziemlich sicher nicht T#7200000ms sondern L#7200000
Ja sind natürlich 2 aber was sollen es sonst sein als Stunden...Meinst Du "teile" ("dividiere")?
7200000ms / 3600000ms ergibt NICHT 2h (2 Stunden) sondern 2
Meine Aussage bezog sich auf Deine Addition von zwei Zeiten in Beitrag #2 ("Wenn es darum geht, x h + n h auszurechnen"), wo Du den 24-Stunden-Übertrag mit MOD eliminierst. Das braucht man aber nur, wenn man eine Uhrzeit + Zeitdauer addiert und wieder eine Uhrzeit herauskommt.Wo, Harald, siehst Du den Zusammenhang zwischen der maximalen Grösse und dem "Müssen" einer Begrenzung auf 24h?der Wert muß also nicht auf 24 Stunden begrenzt werden.
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?