Einschaltzeit bzw. Laufzeit

Programmierung der HomeMatic CCU mittels contronics homeputer CL

Moderator: Co-Administratoren

gerald_d
Beiträge: 132
Registriert: 13.07.2008, 13:06

Einschaltzeit bzw. Laufzeit

Beitrag von gerald_d » 23.09.2009, 16:13

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

buempi
Ehrenmitglied
Beiträge: 12194
Registriert: 29.07.2006, 15:58
Wohnort: Schweiz
Danksagung erhalten: 5 Mal

Re: Einschaltzeit bzw. Laufzeit

Beitrag von buempi » 23.09.2009, 17:03

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:

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
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

gerald_d
Beiträge: 132
Registriert: 13.07.2008, 13:06

Re: Einschaltzeit bzw. Laufzeit

Beitrag von gerald_d » 23.09.2009, 21:14

hallo bümpi!

ich hab das jetzt umgesetzt, bekomme jedoch einen syntaxfehler:
Ausdruck : STOPPZEIT
mein verwendetes Makro:

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
danke und gruss
gerald

gerald_d
Beiträge: 132
Registriert: 13.07.2008, 13:06

Re: Einschaltzeit bzw. Laufzeit

Beitrag von gerald_d » 23.09.2009, 22:21

hallo bümpi!

ich habs gefunden es muss "stoppuhr" heissen.

es funktioniert alles!

danke
gerald

gerald_d
Beiträge: 132
Registriert: 13.07.2008, 13:06

Re: Einschaltzeit bzw. Laufzeit

Beitrag von gerald_d » 24.09.2009, 11:25

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 :) )

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
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

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
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

buempi
Ehrenmitglied
Beiträge: 12194
Registriert: 29.07.2006, 15:58
Wohnort: Schweiz
Danksagung erhalten: 5 Mal

Re: Einschaltzeit bzw. Laufzeit

Beitrag von buempi » 24.09.2009, 13:04

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:

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
Im Objekt "Anz_Restlaufzeit_Licht_Lukas" steht dann folgendes Makro (das SONST ist nicht mehr nötig, weil ja im Aktor erledigt):

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
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

gerald_d
Beiträge: 132
Registriert: 13.07.2008, 13:06

Re: Einschaltzeit bzw. Laufzeit

Beitrag von gerald_d » 24.09.2009, 13:17

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

gerald_d
Beiträge: 132
Registriert: 13.07.2008, 13:06

Re: Einschaltzeit bzw. Laufzeit

Beitrag von gerald_d » 24.09.2009, 21:01

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

buempi
Ehrenmitglied
Beiträge: 12194
Registriert: 29.07.2006, 15:58
Wohnort: Schweiz
Danksagung erhalten: 5 Mal

Re: Einschaltzeit bzw. Laufzeit

Beitrag von buempi » 25.09.2009, 05:49

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:

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
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

gerald_d
Beiträge: 132
Registriert: 13.07.2008, 13:06

Re: Einschaltzeit bzw. Laufzeit

Beitrag von gerald_d » 25.09.2009, 09:33

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.

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
gruß
gerald

Antworten

Zurück zu „homeputer CL“