Programmieren mit Variablen

Programmierung der HomeMatic CCU mittels contronics homeputer CL

Moderator: Co-Administratoren

Kellomein
Beiträge: 101
Registriert: 11.08.2009, 19:03

Programmieren mit Variablen

Beitrag von Kellomein » 30.08.2009, 14:01

Hallo (buempi)
Wir hatten schon mal das Verknügen und hast mehr immer sehr weitergeholfen.
Hier nochmal eine Frage für Einsteiger Theama Variablen: Ich habe zwar vertsanden wo für die sind ,aber ich verstehen nicht ganz die zuordnung. Mein Problem : Im Makro unten sind Variablen zu programmieren , zu was gehören die denn ?
Kurze einführung für Anfänger um auf dem weg zu kommen
wie immer danke im vorraus
Gruss Jörg

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

Re: Programmieren mit Variablen

Beitrag von buempi » 30.08.2009, 15:52

Hallo Jörg

Wie soll ich da nur antworten? Ich könnte es mir einfach machen mit einem Link: http://de.wikipedia.org/wiki/Variable_(Programmierung)

Aber der Text dort ist so kompliziert, dass man ihn kaum versteht, wenn man schon längst begriffen hat, worum es geht.

Im andern Thread habe ich dir ja gezeigt, wie man eine Variable dazu benutzen kann, z.B. einen Text für eine Mail zusammenzusetzen.

In Homeputer benötigt man Variablen am häufigsten zum Rechnen und als "Merker" für bestimmte Zustände. Rechnen kann man mit Werten, aber auch mit Zeiten. Ein Anwender im Forum (WAdler 68) arbeitet in Schichten und hat so einen ständig wechselnden Tagesbeginn. Der Aufsteh-Rhythmus ist aber immer der gleiche. Er möchte von Musik geweckt werden, kurze Zeit später soll das Licht angehen, dann möchte er einen Kaffee geniessen usw.

Er könnte nun für jede Schicht ein Makro schreiben und dort die Schaltzeiten für die jeweilige Schicht eintragen. Dann braucht er keine Variablen, aber der Pflegeaufwand bei jeder Anpassung wird gewaltig. Einfacher ist es, wenn er für jeden Schaltpunkt eine Variable vom Typ Uhr definiert und dieser dann - ausgehend von der Weckzeit - den richtigen Wert zuweist. Also:

Code: Alles auswählen

Weckzeit   := "06:00:00"
MusikEin   := Weckzeit + "00:01:00"
LichtEin   := Weckzeit + "00:05:00"
KaffeeEin  := Weckzeit + "00:10:00"
// usw.

// Zum Steuern des ganzen Ablauf braucht er dann nur noch einzutragen:

wenn Uhrzeit = MusikEin dann
   Radio einschalten
endewenn

wenn Uhrzeit = LichtEin dann
   LichtSZ einschalten
endewenn

wenn Uhrzeit = KaffeeEin dann
   KM einschalten
endewenn
Jetzt braucht er beim Schichtwechsel nur noch "06:00:00" gegen die neue Zeit auszutauschen, und alles läuft wie gewünscht (er ist allerdings noch weitergegangen und hat auch das automatisiert). Auch, wenn er mal findet, dass das Licht etwas länger auf sich warten lassen sollte, braucht er nur an einem einzigen Ort eine kleine Änderung vorzunehmen, und nicht in 7 verschiedenen Schichtmakros.

Damit aber diese Variablen "MusikEin", "LichtEin" usw. im Makro verwendet werden können, muss man sie "definieren". Das tut man im Bereich unten. Damit sagt man Homeputer: Reserviere bitte einen Speicherplatz, den ich mit "MusikEin" ansprechen möchte, und wo ich eine Uhrzeit ablegen will. Im gleichen Makro kannst du diesen Speicherplatz dann mit diesem Namen ansprechen. Das heisst, einen Wert in diesen Speicherplatz schreiben oder in einer WENN-Bedingung mit dem dort stehenden Wert vergleichen.

Willst du die Variable auch aus einem anderen Makro ansprechen, musst du den Namen des Makros, in welchem die Variable definiert wurde, voranstellen und mit einem Punkt unterteilen; sonst findet Homeputer die Variable nicht (Wikipedia-Link = private Variable). Also z.B.

Code: Alles auswählen

// jetzt ist er in der Küche, also brauchts kein Licht mehr im Schlafzimmer
wenn LichtKueche eingeschaltet und Uhrzeit > Schichtmakro.LichtEin dann
   LichtSZ ausschalten
endewenn
Und da kommen wir gleich zum nächsten Problem und damit zur "Merker"-Variablen: Die beiden Makros laufen beim Aufstehen am Morgen perfekt. Er braucht sich nicht um das Licht im Schlafzimmer zu kümmern. Aber: Den ganzen Tag über würde nun das Licht im Schlafzimmer ausgeschaltet, sobald jemand in der Küche Licht macht. Das ist wohl kaum im Sinne des Erfinders.

Wir müssen also irgendwie feststellen können, ob das Licht im Schlafzimmer durch das Schichtmakro automatisch eingeschaltet wurde, und dürfen es nur in diesem Fall auch automatisch ausschalten.

Dazu definieren wir im Schichtmakro einen Merker. Also eine Variable vom Typ Schalter. Das Makro dort lautet nun so:

Code: Alles auswählen

wenn Uhrzeit = LichtEin dann
   LichtSZ einschalten
   Automatik einschalten
endewenn
Und das Küchen-Makro ergänzen wir wie folgt:

Code: Alles auswählen

wenn LichtKueche eingeschaltet und Uhrzeit > Schichtmakro.LichtEin dann
   wenn Schichtmakro.Automatik eingeschaltet dann
      LichtSZ ausschalten
      // wir müssen den Merker wieder zurücksetzen
      Schichtmakro.Automatik ausschalten
   endewenn
endewenn
Ich hoffe, das hilft dir, Sinn und Zweck von Variablen besser zu verstehen.

Viele Grüsse
Bümpi

Kellomein
Beiträge: 101
Registriert: 11.08.2009, 19:03

Re: Programmieren mit Variablen

Beitrag von Kellomein » 30.08.2009, 18:59

Hallo Bümpi
Erstmal Danke und OK , die eigentlich Funktion der Variablen hatte ich auch schon verstanden , allerdings nicht in diesem Umfang , um da selbst drauf zu kommen braucht man zeit und erfahrung , allerdings war die Frage auch schlecht gestellt , aber du hast sie mir trotzdem beantwortet. (Danke)
Ich versuch mal kurz in meinen Worten zusammen zufassen:Ist ging eigentlich nur um die Zugehörigkeit der Variablen unten.Also die sind für das Makro in dem sie stehen zu verwenden , aber auch für andere Makro mit Bezeichnung (Makroname.Variablename)in CL anleitung auch kurz angedeutet zu verwenden.Wenn ich da einigermasen richtig bin brauchst du dir auch keine mühe mehr mit mir machen. Ach ja kleine Sache noch zu deinem Beispiel schichtmakro.automatik. Ist das richtig das man auch eine Variable machen kann die man also virtuell einschaltet/ausschaltet kann? und nicht welche die einen wert erstellen/ausgeben? Wenn ja habe ich es auch verstanden.
Also nochmals vielen dank und ich werde mich bestimmt mal wieder melden , aber ich hoffe mit anderen problemen.

Bis da hin , Danke

Jörg

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

Re: Programmieren mit Variablen

Beitrag von buempi » 30.08.2009, 19:12

Hallo Jörg

Beide Punkte, die du zusammengefasst hast, hast du richtig erfasst.

Der virtuelle Schalter ist eigentlich nichts anderes als eine Variable, die in einer "richtigen" Programmiersprache als "Boolesche Variable" bezeichnet werden würde und die Zustände "true" und "false" annehmen kann. In Homeputer heisst das dann eben Schalter und kann eingeschaltet oder ausgeschaltet sein.

Viele Grüsse
Bümpi

Kellomein
Beiträge: 101
Registriert: 11.08.2009, 19:03

Re: Programmieren mit Variablen

Beitrag von Kellomein » 31.08.2009, 19:00

Hallo bümpi
Und nochmal eine frage , ich hoffe ich nerve nicht , und zwar zu den Variable bezüglich des Beispiel Weckzeit. Z.B. die LichtEin Var :=Weckzeit + "zeiT" wird die direkt unten bei Variable eingeben , wenn ja wie bekomme ich die Zeitrechnung (+00:01:00) hin oder wird diese im Makro selbst über Weckzeit-Var difiniert , weil das habe ich hin bekommen :mrgreen:
Gruss Jörg

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

Re: Programmieren mit Variablen

Beitrag von buempi » 31.08.2009, 19:32

Hallo Jörg

Nerven tust du mich gar nicht. - Ich helfe gern. - Auch ich war mal Anfänger! Und bin es in vielen Belangen immer noch...

Damit man mit Uhrzeiten auch rechnen kann, muss die Variable "LichtEin" unten vom Typ Uhr definiert werden. Den Startwert kannst du leer lassen. Wenn du nicht Schicht arbeitest, könntest du die Variable WeckZeit ebenfalls als Uhr mit Startwert 06:00:00 eintragen. Dann wirst du 365 Tage im Jahr zu dieser Zeit geweckt.

Die Berechnung erfolgt dann im Makro durch:

Code: Alles auswählen

LichtEin := Weckzeit + "00:05:00"
Danach steht in LichtEin "06:05:00". Wenn du nun das Makro jede Minute ausführen lässt und weiter unten drin steht

Code: Alles auswählen

wenn Uhrzeit = LichtEin dann
   LichtSZ einschalten
endewenn
Wird das Licht um 06:05 Uhr eingeschaltet.

Jetzt kann man das Ganze noch etwas komfortabler machen, damit man am Wochenende nicht so früh aufstehen muss:

Code: Alles auswählen

wenn Wochentag = "Samstag" oder Wochentag = "Sonntag" dann
   Weckzeit := "09:00:00"
sonst
   Weckzeit := "06:00:00"
endewenn
Die ganzen Zeiten weiter unten verschieben sich dann entsprechend.

Viele Grüsse
Bümpi

Kleine Anmerkung noch: Mit Uhrzeiten kann man maximal bis +/- 23:59:59 rechnen. Es funktioniert aber - jedenfalls in Homeputer für die FHZ - auch über den Tageswechsel hinaus richtig.

Kellomein
Beiträge: 101
Registriert: 11.08.2009, 19:03

Re: Programmieren mit Variablen

Beitrag von Kellomein » 04.09.2009, 14:44

Ja Hallo mal wieder
Und danke natürlich. Das habe ich soweit auch verstanden,dazu noch mal eine Frage:Also die Zeitrechnung für diverse Variablen aufgebaut auf wie Beispiel weckzeit erfolgt im Makro selbst. Frage dazu: wird dieses im selben Makro wie die Schaltfunktionen geschrieben?oder wie wird es am besten gehandhabt , möchtes es ja gleich richtig lernen.In welchen Zeit Zyklen wird so ein Makro normaler weise ausgübt bzw wie macht es am meisten sinn?
Eines noch wenn ich das richtig sehe , könnte ich doch auf die (Werte Variablen) wieder z.B. (LichtEin :=Weckzeit + "00:01:00") auch für anderen Makro benutzen und auf diese zurück greifen!?
Ich denke es wird langsam bin aber noch viel am testen und möchte natürlich es auch gleich richtig machen befor es in den Endzustand kommt.
Erstmal Gruss Jörg

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

Re: Programmieren mit Variablen

Beitrag von buempi » 04.09.2009, 15:15

Hallo Jörg

Gute Frage! Grundsätzlich kannst du die Berechnungen und die Schaltungen im gleichen Makro machen. Ich habe es auf diese Art dargestellt, um das Ganze nicht noch komplexer werden zu lassen.

Nachdem wir nun aber einen Schritt weiter sind: Sind nur zwei, drei Berechnungen zu machen, kann man es so lassen. Auch bei mehreren wird das die CCU nicht gleich zum Abstürzen bringen. Aber: Wozu die CCU mit viel Leerlauf beschäftigen, der gar nicht nötig ist?

Also verschieben wir die Zeitberechnungen in ein Makro, dessen Bezeichnung z.B. "INIT_Schaltzeiten" heisst und wählen dort als Ausführungsintervall "bei Tageswechsel". Alle "INIT_"-Makros werden beim Programmstart automatisch ausgeführt. So stehen die Schaltzeiten beim Start sofort zur Verfügung und werden täglich um Mitternacht aktualisiert. Die CCU braucht so nicht täglich x-mal das Gleiche zu berechnen.

Im Schalt-Makro müssen dann natürlich die Variablen mit "INIT_Schaltzeiten.Variablenname" angesprochen werden.

Der Ausführungsintervall im Schaltmakro entspricht - wie hiess das beim Bruchrechnen in der Schule schon wieder? - "dem grössten gemeinsamen Teiler". Das heisst: Wenn bei den Schaltzeiten z.B. 06:00:05 vorkommen kann, muss das Makro im 5-Sekunden-Rhythmus ablaufen. Sind nur gerade Minuten möglich, jede Minute usw. Einfach der längste Intervall, der sich noch mit allen möglichen Uhrzeitvergleichen deckt.

Viele Grüsse
Bümpi

PS: Selbstverständlich kann man die einmal berechneten Variablen in jedem beliebigen anderen Makro auch benutzen bzw. abfragen oder sogar - weniger zu empfehlen wegen dem Pflegeaufwand - verändern.

Kellomein
Beiträge: 101
Registriert: 11.08.2009, 19:03

Re: Programmieren mit Variablen

Beitrag von Kellomein » 04.09.2009, 16:38

Hallo buempi
Du bist ja immer ganz schnell bei der Sache , danke. Ok hab ich soweit verarbeitet dazu eine Frage: wo her weiss man das die init_Makro bei jeden programmstart bzw Tageswechsel aktuellisiert werden,habe davon noch nichts gelesen glaube ich.wie habe ich das vom Ablauf zusehen= Tageswechsel.Bedeutet nach jedem Tageswechsel das das Makro einmal ausgeführt wird und die Zeiten dort errechnet und dann immer weiss? was sollte sich über nacht ändern ausser man ändernt manuell aber dann ist ja eh ein neuer Programmstart oder ?

Und mal ganz was anderes auch wenn ich noch nicht so weit bin: da ich sehr neugierig bin , ich habe was von deinen MINI-Browser gelesen ! Ist das was nur FHZ oder auch was die HM? nur mal so aus neugierde
OK erstmal danke vorweg , wie gehabt

Gruss Jörg

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

Re: Programmieren mit Variablen

Beitrag von buempi » 04.09.2009, 17:47

Hallo Jörg
Kellomein hat geschrieben:wo her weiss man das die init_Makro bei jeden programmstart bzw Tageswechsel aktuellisiert werden
... das weiss "man" eben! - Nein; im Ernst: In der Hilfe steht es - glaube ich - noch nicht. Das hat Contronics bei einem Update mal hier im Forum angekündigt. - Betrifft allerdings nur den Programmstart; "Bei Tageswechsel" muss man unter Ausführungsintervall im Makro selbst auswählen.
Kellomein hat geschrieben:was sollte sich über nacht ändern ausser man ändernt manuell aber dann ist ja eh ein neuer Programmstart
Bei mir wechselt der Wochentag alle 24 Stunden. Und wenn du am Wochenende andere Schaltzeiten hast als werktags...?
Kellomein hat geschrieben:ich habe was von deinen MINI-Browser gelesen ! Ist das was nur FHZ oder auch was die HM
Auch in HomeMatic (bzw. am Visualisierungs-PC) solltest du damit auf bestimmten Ansichten z.B. den Wetterbericht, das TV-Programm, die Börsenkurse oder eine schöne Uhr wie diese hier einblenden können:
Uhren.JPG
(ein Bisschen Reklame "off topic" sei mir hier gestattet) Da ich keine HomeMatic habe, konnte ich das allerdings bisher nicht testen. Voraussetzung ist, dass Homeputer CL den Namen der verschiedenen Ansichten auch als gewöhnlichen Fenster-Titel einblendet; was anzunehmen ist, aber nicht unbedingt der Fall sein muss.

Da es in Homeputer CL aber noch kein ExecStudioCo.exe gibt, ist es nicht möglich, über den MiniBrowser auch Objekte in Homeputer zu schalten. Mit STARTWIN() kannst du aber auch aus Homeputer CL die MiniBrowser steuern. Fragen, die sich in diesem Zusammenhang ergeben sollten, dann bitte in jenem Thread stellen....

Viele Grüsse
Bümpi

Antworten

Zurück zu „homeputer CL“