Hallo Jörg
Kellomein hat geschrieben:Laufzeit := Laufzeit + "23:59:59" - Startzeit + "00:00:01"
Hier geht es darum, die Laufzeit des Aktors "aufzuteilen" in gestern und heute, falls er um Mitternacht EIN ist.
Grundsätzlich könnte man die gleiche Berechnungsweise wie beim normalen Ausschalten des Aktors verwenden, also
Im Zeitpunkt, wo dieser Teil des Makros abläuft, ist es ja 00:00:00 Uhr. Wurde der Aktor z.B. um 23:50:00 eingeschaltet, müssten also genau 00:10:00 zur Laufzeit des "alten" Tages hinzugerechnet werden. Damit hatte ich aber in Homeputer für die FHZ schon Probleme. Mit 23:59:59 oder 00:00:01 kommt das richtige Ergebnis zurück, mit 00:00:00 aber irgendwas oder gar nichts. Hab das allerdings schon lange nicht mehr ausprobiert! - Vielleicht läuft es jetzt ja richtig?
Um nun aber ganz sicher zu sein, dass es richtig läuft, setze ich statt "Uhrzeit" 23:59:59 ein und addiere am Schluss noch eine Sekunde.
Kellomein hat geschrieben:Ich bin etwas irretiert da bei der Variante (Zähler) es auch ohne diese Zeile geht
Bei der Variante Zähler wird die Variable "Laufzeit" ja jede Sekunde um 1 erhöht; nicht erst beim Ausschalten um die ganze Laufzeit zwischen EIN und AUS. Deshalb genügt es dort, den Tag (gestern/heute) damit abzugrenzen, dass man die aktuelle Laufzeit in "gestern" schreibt und wieder bei NULL für heute anfängt.
Kellomein hat geschrieben:(Datum<> AktuellerTag dann) ?
wenn ich das übersetze heist es ja wenn Ddas Datum ungleich heute dann Makro weiter so das AktuellerTag =heute und somit Makro Stop im nächsten durchlauf.Aber um Mitternacht wechselt doch auch das Datum ? so das heute =heute oder?
"AktuellerTag" ist nur eine Variablen-Bezeichnung. Die könnte auch XYZ heissen. AktuellerTag wird beim Programmstart mit dem gegenwärtigen Datum "gefüllt", und bis um Mitternacht stimmt die Bezeichnung ja auch. Um 00:00:00 Uhr ist aber AktuellerTag nicht mehr identisch mit dem aktuellen Datum, welches ja um einen Tag "höher" ist. Deshalb werden die Anweisungen im WENN-Block ausgeführt und damit auch wieder das aktuelle Datum in die Variable AktuellerTag geschrieben. Wenn das Makro dann eine Sekunde später wieder abläuft, ist zwar UHRZEIT immer noch 00:00:00 (wegen der 5-Sekunden-Rundung), aber AktuellerTag und DATUM sind identisch; also erfolgt keine erneute Ausführung.
Kellomein hat geschrieben:Das mit dem automatischen Startdatum klappt nicht so aktuell auch nicht mit init_Makro , wo bei ich mir nicht sicher bin wo und wie ich es anzulegen habe.
Ich habe ein Objekt init_Datum welches init_Datum :=Datum dieses zeigt mir auch das akt Datum an , aber nur wenn es ein Init ist , ohne halt nicht.
Paraell habe ich mir anzeigen lassen AktuellerTag als Objekt Aktueller Tag :=LaufzeitHeute2_AktuellerTag (Variable im Makro LaufzeitHeute2)
Ergibniss Anzeige 01.01.1970
Die Initialisierung von Datums-, Zeit- und Uhrvariablen haben mich in Homeputer für die FHZ schon viel beschäftigt. Ein Startwert wird oft ignoriert. Und selbst eine Zuweisung im INIT_Makro funktioniert nicht immer richtig. Falls das in Homeputer CL ähnlich ist, schafft folgendes Rezept sicher Abhilfe: Am Anfang des INIT_Makros füge ich ein WARTE() ein. Und erst nachher kommt die eigentliche Zuweisung.
In unserem Fall geht es darum, in die Variable "AktuellerTag" das heutige Datum zu schreiben. Also:
Code: Alles auswählen
warte("00:00:05")
LaufzeitHeute2.AktuellerTag := Datum
Wobei ich annehme, dass dein "Zähler-Makro" den Namen "LaufzeitHeute2" hat.
Ich habe mir aber noch überlegt, dass es grundsätzlich ja gar keine Rolle spielt, was Homeputer da beim Programmstart reinschreibt. Und wenn es eben 01.01.1970 ist: Bis Mitternacht ist es ja nie 00:00:00, also kommt der zweite Teil der Bedingung gar nicht "zur Anwendung". Um Mitternacht aber ist weder 01.01.1970 noch 06.09.2009 identisch mit "Datum", und die Ausführung (sowie die Aktualisierung von "AktuellerTag") erfolgen automatisch. Das ganze INIT_Prozedere kann man deshalb auch weglassen!
Viele Grüsse
Bümpi
Kellomein hat geschrieben:Ach ja das mit der Laufzeitbegrenzung ist eigentlich jetzt für mich ganz einfach gewesen , habe mich halt auf "Zähler-Variante"LaufzeitHeute2 bezogen , somit habe ich immer ein vergleichs-wert . Musste ich mal los werden etwas Stolz ,was selbst hinzubekommen, hat man ja , zu mindestens zum Anfang
Genau so soll es ja auch sein!!