Einschaltzeit bzw. Laufzeit
Moderator: Co-Administratoren
Einschaltzeit bzw. Laufzeit
hallo,
ich hab wieder mal ein problem.
ich hab einen aktor den schalte ich für 30 minuten ein, ich möchte jetzt eine anzeige in der visu wo ich sehen kann wie lange der "countdown" noch läuft.
hab das schon mit aktor.ct gemacht, da wird zwar gezählt aber immer rauf und nicht runter und mir kommt vor das der zähler die ganze zeit läuft.
danke und grüsse
gerald
ich hab wieder mal ein problem.
ich hab einen aktor den schalte ich für 30 minuten ein, ich möchte jetzt eine anzeige in der visu wo ich sehen kann wie lange der "countdown" noch läuft.
hab das schon mit aktor.ct gemacht, da wird zwar gezählt aber immer rauf und nicht runter und mir kommt vor das der zähler die ganze zeit läuft.
danke und grüsse
gerald
-
- Ehrenmitglied
- Beiträge: 12194
- Registriert: 29.07.2006, 15:58
- Wohnort: Schweiz
- Danksagung erhalten: 5 Mal
Re: Einschaltzeit bzw. Laufzeit
Hallo Gerald
Zunächst musst du ein Objekt vom Typ Zeichen anlegen. Wir nennen es mal "Restlaufzeit". Dort wählst du als Ausführungsintervall "jede Sekunde", definierst eine Variable "Rest" vom Typ Uhr und trägst folgendes Makro ein:
Der Umweg über die Variable "Rest" ist notwendig, weil es in Homeputer keine OBJEKTE vom Typ Uhr gibt, mit denen man rechnen kann. Mit Zeichenobjekten kann man ja nicht rechnen. Der "eingeschachtelte" WENN-Block nach dem SONST bezweckt, dass die Anzeige nicht jede Sekunde erneuert wird, was zu Flimmern führen könnte.
Das Makro wird rund um die Uhr jede Sekunde ausgeführt, also 86'400 mal am Tag. Mit AKTIVIEREN() und DEAKTIVIEREN() könnte man es auch so einrichten, dass es nur läuft, wenn der Aktor eingeschaltet ist. - Das Auswerten der beiden WENN jede Sekunde wird die CCU aber nicht gross ins Schwitzen bringen. Du kannst natürlich auch den Intervall auf 5 Sekunden erhöhen, dann wird einfach in 5-Sekunden-Schritten runtergezählt.
Viele Grüsse
Bümpi
Zunächst musst du ein Objekt vom Typ Zeichen anlegen. Wir nennen es mal "Restlaufzeit". Dort wählst du als Ausführungsintervall "jede Sekunde", definierst eine Variable "Rest" vom Typ Uhr und trägst folgendes Makro ein:
Code: Alles auswählen
wenn Aktor eingeschaltet dann
Rest := "00:30:00" - Stoppzeit(Aktor.CT)
Restlaufzeit := Rest
sonst
wenn Restlaufzeit <> "00:00:00" dann
Restlaufzeit := "00:00:00"
endewenn
endewenn
Das Makro wird rund um die Uhr jede Sekunde ausgeführt, also 86'400 mal am Tag. Mit AKTIVIEREN() und DEAKTIVIEREN() könnte man es auch so einrichten, dass es nur läuft, wenn der Aktor eingeschaltet ist. - Das Auswerten der beiden WENN jede Sekunde wird die CCU aber nicht gross ins Schwitzen bringen. Du kannst natürlich auch den Intervall auf 5 Sekunden erhöhen, dann wird einfach in 5-Sekunden-Schritten runtergezählt.
Viele Grüsse
Bümpi
Re: Einschaltzeit bzw. Laufzeit
hallo bümpi!
ich hab das jetzt umgesetzt, bekomme jedoch einen syntaxfehler:
danke und gruss
gerald
ich hab das jetzt umgesetzt, bekomme jedoch einen syntaxfehler:
mein verwendetes Makro:Ausdruck : STOPPZEIT
Code: Alles auswählen
wenn WR_Lueftung_Alt eingeschaltet dann
Rest := "00:30:00" - Stoppzeit(WR_Lueftung_Alt.CT)
Restlaufzeit := Rest
sonst
wenn Restlaufzeit <> "00:00:00" dann
Restlaufzeit := "00:00:00"
endewenn
endewenn
gerald
Re: Einschaltzeit bzw. Laufzeit
hallo bümpi!
ich habs gefunden es muss "stoppuhr" heissen.
es funktioniert alles!
danke
gerald
ich habs gefunden es muss "stoppuhr" heissen.
es funktioniert alles!
danke
gerald
Re: Einschaltzeit bzw. Laufzeit
hallo bümpi!
ich hätte noch eine verständnisfrage.
das makro ist jetzt wie folgt angelegt: (über die benennung meiner objekte usw. sollte ich mal nachdenken, sonst geht mir irgendwann der platz aus )
wenn ich jetzt anstelle der "00:30:00" dies variabel haben möchte und noch dazu in meiner visu ändern möchte,
dann lege ich ein objekt vom typ zeichen an und wieder eine variable vom typ uhr?? ist das so richtig?
das makro würde dann so aussehen:
//neues objekt "Anz_Restzeit_Licht_Lukas" typ zeichen
//variable "Anz_Rest" typ Uhr
die frage ist jetzt nur ob ich dann in das objekt in der visu die zeit eintragen kann, oder ob ich dann in der variabel die 30 eintragen muss?
gruss
gerald
ich hätte noch eine verständnisfrage.
das makro ist jetzt wie folgt angelegt: (über die benennung meiner objekte usw. sollte ich mal nachdenken, sonst geht mir irgendwann der platz aus )
Code: Alles auswählen
wenn LichtLukas eingeschaltet dann
Rest := "00:30:00" - Stoppuhr(WR_Lueftung_Alt.CT)
Restlaufzeit_Licht_Lukas := Rest
sonst
wenn Restlaufzeit_Licht_Lukas <> "00:00:00" dann
Restlaufzeit_Licht_Lukas := "00:00:00"
endewenn
endewenn
dann lege ich ein objekt vom typ zeichen an und wieder eine variable vom typ uhr?? ist das so richtig?
das makro würde dann so aussehen:
//neues objekt "Anz_Restzeit_Licht_Lukas" typ zeichen
//variable "Anz_Rest" typ Uhr
Code: Alles auswählen
wenn LichtLukas eingeschaltet dann
Rest := Anz_Restzeit_Licht_Lukas.Anz_Rest - Stoppuhr(WR_Lueftung_Alt.CT)
Restlaufzeit_Licht_Lukas := Rest
sonst
wenn Restlaufzeit_Licht_Lukas <> "00:00:00" dann
Restlaufzeit_Licht_Lukas := "00:00:00"
endewenn
endewenn
gruss
gerald
-
- Ehrenmitglied
- Beiträge: 12194
- Registriert: 29.07.2006, 15:58
- Wohnort: Schweiz
- Danksagung erhalten: 5 Mal
Re: Einschaltzeit bzw. Laufzeit
Hallo Gerald
Das mit STOPPZEIT() bzw. STOPPUHR() ist übrigens ein kleiner Unterschied in der Syntax Homeputer FHZ/CL. Hatte nicht erst in der Hilfe nachgeschaut, weil ich fälschlicherweise annahm, dass das sicher identisch sei.
Bei deinem erweiterten Vorhaben soll die Anzeige "Anz_Restlaufzeit_Licht_Lukas" ja zwei Aufgaben nebeneinander erfüllen: Du möchtest dort die Laufzeit vorgeben und - bei eingeschaltetem Aktor - soll dort der Countdown angezeigt werden.
Das führt nun dazu, dass Homeputer, sobald der Countdown läuft, den Wert dort ja verändert. Den Ursprungswert hätten wir schon nach einer Sekunde "verloren". Am Ende der Laufzeit soll ausserdem der ursprüngliche Wert für das nächste Einschalten wieder drin stehen. Wir müssen ihn also zwischenspeichern und benötigen dazu eine weitere Variable vom Typ Zeichen oder Uhr. Nennen wir sie mal "Gesamtlaufzeit"
Ferner ist es in diesem Fall wichtig, dass du bei "Anz_Restlaufzeit_Licht_Lukas" einen Startwert vorgibst. Wäre das Objekt beim Programmstart leer, und du vergisst, etwas einzutragen, würde das Licht (oder die Lüftung) immer sofort wieder ausgeschaltet, weil ein WARTE("") keine Auswirkungen hat.
Warum du "Stoppuhr(WR_Lueftung_Alt.CT)" verwendest, ist mir unklar. - Vermutlich hast du da mit Copy and Paste was zu viel übernommen?
Das Makro im Aktor "LichtLukas" (Ausführen bei Änderung aktiviert) lautet nun wie folgt:
Im Objekt "Anz_Restlaufzeit_Licht_Lukas" steht dann folgendes Makro (das SONST ist nicht mehr nötig, weil ja im Aktor erledigt):
ACHTUNG: Das Ganze funktioniert nur, wenn die Laufzeit im Aktor mit WARTE() bestimmt wird. Wird das Licht über eine Fernbedienung, einen Taster oder dgl. eingeschaltet, und soll die Laufzeit von xx Minuten bei jedem Tastendruck (auch bei schon brennendem Licht) erneuert werden, wird's noch etwas komplizierter! - Stelle in diesem Fall bitte das Makro, welches du jetzt im Taster hast, mal hier ein.
Ferner: Während des Countdowns kann keine neue Vorgabe-Laufzeit im Objekt eingetragen werden!
Viele Grüsse
Bümpi
Das mit STOPPZEIT() bzw. STOPPUHR() ist übrigens ein kleiner Unterschied in der Syntax Homeputer FHZ/CL. Hatte nicht erst in der Hilfe nachgeschaut, weil ich fälschlicherweise annahm, dass das sicher identisch sei.
Bei deinem erweiterten Vorhaben soll die Anzeige "Anz_Restlaufzeit_Licht_Lukas" ja zwei Aufgaben nebeneinander erfüllen: Du möchtest dort die Laufzeit vorgeben und - bei eingeschaltetem Aktor - soll dort der Countdown angezeigt werden.
Das führt nun dazu, dass Homeputer, sobald der Countdown läuft, den Wert dort ja verändert. Den Ursprungswert hätten wir schon nach einer Sekunde "verloren". Am Ende der Laufzeit soll ausserdem der ursprüngliche Wert für das nächste Einschalten wieder drin stehen. Wir müssen ihn also zwischenspeichern und benötigen dazu eine weitere Variable vom Typ Zeichen oder Uhr. Nennen wir sie mal "Gesamtlaufzeit"
Ferner ist es in diesem Fall wichtig, dass du bei "Anz_Restlaufzeit_Licht_Lukas" einen Startwert vorgibst. Wäre das Objekt beim Programmstart leer, und du vergisst, etwas einzutragen, würde das Licht (oder die Lüftung) immer sofort wieder ausgeschaltet, weil ein WARTE("") keine Auswirkungen hat.
Warum du "Stoppuhr(WR_Lueftung_Alt.CT)" verwendest, ist mir unklar. - Vermutlich hast du da mit Copy and Paste was zu viel übernommen?
Das Makro im Aktor "LichtLukas" (Ausführen bei Änderung aktiviert) lautet nun wie folgt:
Code: Alles auswählen
wenn LichtLukas eingeschaltet dann
Anz_Restlaufzeit_Licht_Lukas.Gesamtlaufzeit := Anz_Restlaufzeit_Licht_Lukas
warte(Anz_Restlaufzeit_Licht_Lukas)
LichtLukas ausschalten
sonst
Anz_Restlaufzeit_Licht_Lukas := Anz_Restlaufzeit_Licht_Lukas.Gesamtlaufzeit
endewenn
Code: Alles auswählen
// Variablen: Gesamtlaufzeit Typ Uhr oder Zeichen
// Rest Typ Uhr
wenn LichtLukas eingeschaltet dann
Rest := Anz_Restlaufzeit_Licht_Lukas.Gesamtlaufzeit - Stoppuhr(LichtLukas.CT)
Anz_Restlaufzeit_Licht_Lukas := Rest
endewenn
Ferner: Während des Countdowns kann keine neue Vorgabe-Laufzeit im Objekt eingetragen werden!
Viele Grüsse
Bümpi
Re: Einschaltzeit bzw. Laufzeit
hallo bümpi!
danke für die schnelle antwort!
du hast recht, ich hab das "Stoppuhr(WR_Lueftung_Alt.CT)" beim copy and paste zuviel übernommen.
ich hätte die variable "Anz_Restzeit_Licht_Lukas" zusätzlich angelegt, und das bestehende makro so gelassen
gruß
gerald
danke für die schnelle antwort!
du hast recht, ich hab das "Stoppuhr(WR_Lueftung_Alt.CT)" beim copy and paste zuviel übernommen.
ich hätte die variable "Anz_Restzeit_Licht_Lukas" zusätzlich angelegt, und das bestehende makro so gelassen
gruß
gerald
Re: Einschaltzeit bzw. Laufzeit
hallo bümpi!
ich hab das jetzt so wie von dir vorgeschlagen gemacht, wenn ich in der visu meine laufzeit eingebe und das licht einschalte läuft es wie gewünscht ab, wenn der zähler auf null ist wird die lampe ausgeschalten, jedoch bleibt der zähler auf
"00:00:00" stehen.
mir ist auch noch nicht ganz klar, wo ich den startwert eintragen muss damit er dann auch immer wenn die ccu neu gestartet wurde in der Anz_Restlaufzeit_Licht_Lukas steht?
danke und schöne grüsse
gerald
ich hab das jetzt so wie von dir vorgeschlagen gemacht, wenn ich in der visu meine laufzeit eingebe und das licht einschalte läuft es wie gewünscht ab, wenn der zähler auf null ist wird die lampe ausgeschalten, jedoch bleibt der zähler auf
"00:00:00" stehen.
mir ist auch noch nicht ganz klar, wo ich den startwert eintragen muss damit er dann auch immer wenn die ccu neu gestartet wurde in der Anz_Restlaufzeit_Licht_Lukas steht?
danke und schöne grüsse
gerald
-
- Ehrenmitglied
- Beiträge: 12194
- Registriert: 29.07.2006, 15:58
- Wohnort: Schweiz
- Danksagung erhalten: 5 Mal
Re: Einschaltzeit bzw. Laufzeit
Hallo Gerald
Steht das erste in meinem letzten Beitrag aufgeführt Makro wirklich im Aktor "LichtLukas" und "Ausführen bei Änderung" ist aktiviert? - Dann MUSS (nach der Theorie) beim Ausschalten des Aktors die Anzeige wieder auf 00:30:00 bzw. das, was am Anfang drin stand, springen. Durch das Ausschalten des Aktors ist ja eine Änderung eingetreten, sodass das Makro gleich wieder ausgeführt und der SONST-Teil abgewickelt wird. Deshalb weist ja Contronics in der Hilfe ausdrücklich darauf hin, dass so Endlosschleifen entstehen können...
Wir können das Ganze aber auch etwas umstellen, so dass wir gar kein SONST brauchen:
Oder hast du etwa im zweiten Makro das SONST von der früheren Version drin gelassen? - Nein halt, dann könntest du ja gar keine neue Vorgabezeit eintragen, würde immer gleich wieder mit 00:00:00 überschrieben. Darum habe ich es ja in der Aktor verschoben...
Den Startwert kannst du im Zeichenobjekt Anz_Restlaufzeit_Licht_Lukas beim Register "Allgemein" im Format 00:30:00 eintragen.
Viele Grüsse
Bümpi
Steht das erste in meinem letzten Beitrag aufgeführt Makro wirklich im Aktor "LichtLukas" und "Ausführen bei Änderung" ist aktiviert? - Dann MUSS (nach der Theorie) beim Ausschalten des Aktors die Anzeige wieder auf 00:30:00 bzw. das, was am Anfang drin stand, springen. Durch das Ausschalten des Aktors ist ja eine Änderung eingetreten, sodass das Makro gleich wieder ausgeführt und der SONST-Teil abgewickelt wird. Deshalb weist ja Contronics in der Hilfe ausdrücklich darauf hin, dass so Endlosschleifen entstehen können...
Wir können das Ganze aber auch etwas umstellen, so dass wir gar kein SONST brauchen:
Code: Alles auswählen
wenn LichtLukas eingeschaltet dann
Anz_Restlaufzeit_Licht_Lukas.Gesamtlaufzeit := Anz_Restlaufzeit_Licht_Lukas
warte(Anz_Restlaufzeit_Licht_Lukas)
Anz_Restlaufzeit_Licht_Lukas := Anz_Restlaufzeit_Licht_Lukas.Gesamtlaufzeit
LichtLukas ausschalten
endewenn
Den Startwert kannst du im Zeichenobjekt Anz_Restlaufzeit_Licht_Lukas beim Register "Allgemein" im Format 00:30:00 eintragen.
Viele Grüsse
Bümpi
Re: Einschaltzeit bzw. Laufzeit
hallo bümpi,
danke mal für die antwort, ich werde deinen neuen vorschlage testen wenn ich heute abend zu hause bin,
kopiere dir mal meine aktuellen makros rein.
gruß
gerald
danke mal für die antwort, ich werde deinen neuen vorschlage testen wenn ich heute abend zu hause bin,
kopiere dir mal meine aktuellen makros rein.
Code: Alles auswählen
//LichtLukas
//ausführen bei änderung
Prot_Aktion:= Datum + " " + Uhrzeit + " Licht Lukas "+LichtLukas + "<<" + Prot_Aktion
wenn LichtLukas eingeschaltet dann
Anz_Restlaufzeit_Licht_Lukas.Gesamtlaufzeit := Anz_Restlaufzeit_Licht_Lukas
warte(Anz_Restlaufzeit_Licht_Lukas)
LichtLukas ausschalten
sonst
Anz_Restlaufzeit_Licht_Lukas := Anz_Restlaufzeit_Licht_Lukas.Gesamtlaufzeit
endewenn
Code: Alles auswählen
//Anz_Restlaufzeit_Licht_Lukas
//ausführen jede sekunde
wenn LichtLukas eingeschaltet dann
Rest := Anz_Restlaufzeit_Licht_Lukas.Gesamtlaufzeit - Stoppuhr(LichtLukas.CT)
Anz_Restlaufzeit_Licht_Lukas := Rest
endewenn
gerald