zwischen Schwellwerten entscheiden (>= und <=)

Programmierung der FHZ-Zentralen mit contronics homeputer Standard / homeputer Studio & WEB-Server

Moderator: Co-Administratoren

Antworten
Benutzeravatar
honk0504
Beiträge: 111
Registriert: 09.03.2007, 19:28
Wohnort: Meckenheim | NRW
Hat sich bedankt: 1 Mal

zwischen Schwellwerten entscheiden (>= und <=)

Beitrag von honk0504 » 02.01.2010, 21:09

Ich will abhängig von der Temperatur im Wohnzimmer Aktionen ausführen lassen.

Code: Alles auswählen

wenn Raumregler_Wohnzimmer.Temperatur >= 30,5 dann
 TempWohn := "plusmax"
endewenn
wenn Raumregler_Wohnzimmer.Temperatur <= 30,4 oder
     Raumregler_Wohnzimmer.Temperatur >= 28,5 dann
 TempWohn := "tmp30"
endewenn
wenn Raumregler_Wohnzimmer.Temperatur <= 28,4 oder
     Raumregler_Wohnzimmer.Temperatur >= 26,5 dann
 TempWohn := "tmp28"
endewenn
...
Es wird aber nur "plusmax" geschaltet (nein, die Temperatur ist UNTER 30,5). Ich habe es auch schon mit "und" anstatt "oder" versucht. Nichts. Ich habe auch schon

Code: Alles auswählen

...
wenn Raumregler_Wohnzimmer.Temperatur <= 30,4 und >= 28,5 dann
TempWohn := "tmp30"
...
versucht. Nichts.
Habe ich einen Denkfehler im Quellcode?
There is certainly no intelligent life down here on this planet. Beam me up, Scotty!

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

Re: zwischen Schwellwerten entscheiden (>= und <=)

Beitrag von buempi » 03.01.2010, 13:08

Hallo Honk

Wenn du eine Bedingung für einen bestimmten Temperaturbereich festlegen willst, muss du mit UND verknüpfen. Allerdings so wie im ersten Beispiel, wo du den Namen der Variable wiederholst, nicht wie im zweiten, wo nur noch der Wert nach dem UND steht.

Ist TempWohn ein Objekt vom Typ Zeichen? Dann müsste im ersten Beispiel bei einer IST-Temperatur von z.B. 21,0° "temp28" drin stehen, weil die Bedingung <=28,4 erfüllt ist. <=30,4 ist zwar auch erfüllt, wird aber beim nächsten WENN-Block überschrieben, weil der eben auch zutrifft.

Sobald du mit UND verknüpfst, bleibt TempWohn - bei 21,0° IST - leer (bzw. es bleibt das drin stehen, was vor Ablauf des Makros drin stand). Voraussetzung ist natürlich, dass es nach dem oben gezeigten Teil im Makro nicht weitergeht, wogegen die ... sprechen.

Viele Grüsse
Bümpi

Benutzeravatar
honk0504
Beiträge: 111
Registriert: 09.03.2007, 19:28
Wohnort: Meckenheim | NRW
Hat sich bedankt: 1 Mal

Re: zwischen Schwellwerten entscheiden (>= und <=)

Beitrag von honk0504 » 03.01.2010, 19:48

TempWohn ist ein Objekt vom Typ "Temperatur". Ich habe das als neue Typdefinition eingerichtet mit ca. 35 Zuständen und den jeweiligen Icons. Das Makro ist seeehr lang. Es geht bis minus 22 Grad so weiter.
Es scheint mit "und" ebenfalls _nicht_ zu funktionieren. Immer nur "tempmax", bzw. das Icon dafür.
There is certainly no intelligent life down here on this planet. Beam me up, Scotty!

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

Re: zwischen Schwellwerten entscheiden (>= und <=)

Beitrag von buempi » 04.01.2010, 08:08

Hallo Honk

"plusmax" (nicht "tempmax") ist wohl der erste Wert bzw. der Startwert des Objektes?

Bist du sicher, dass das Makro auch ausgeführt wird? Über Ausführungsintervall, Knopf oder dgl.?

Überprüfe mal, ob die Zuweisung des eigenen Typs an das Objekt TempWohn auch richtig erfolgt ist. Dann müssen im Register "Allgemein" des Objektes unten links die Zustände mit den entsprechenden Bitmaps alle zu sehen sein. Sonst oben im Pull-Down-Menü nochmals den eigenen Typ "Temperatur" zuweisen.

Die Bezeichnungen im Makro müssen genau mit denen in der eigenen Typdefinition übereinstimmen; auch Gross-/Kleinschreibung!

Wenn das alles nicht die Ursache ist, versuch es mal mit folgendem Makro in einem Knopf, den du neu anlegst:

Code: Alles auswählen

** Überprüfe, ob es tmp20 und tmp10 gibt!
*****************************************

wenn Raumregler_Wohnzimmer.Temperatur >= 30,5 dann
   TempWohn := "plusmax"
endewenn
wenn Raumregler_Wohnzimmer.Temperatur  < 30,5 und
     Raumregler_Wohnzimmer.Temperatur >= 20,5 dann
   TempWohn := "tmp20"
endewenn
wenn Raumregler_Wohnzimmer.Temperatur  < 20,5 und
     Raumregler_Wohnzimmer.Temperatur >=  0,5 dann
   TempWohn := "tmp10"
endewenn
Wenn auch das nicht läuft, befürchte ich fast, dass du mit den vielen Zuständen in deiner eigenen Typdefinition "Temperatur" irgend eine Limite überschritten hast. Beende Homeputer, sichere deine HomeputerStudio.GLD (im SPG-Verzeichnis) und lösche nachher die obersten und untersten Definitionen, die ja eh unrealistisch sind (wird wohl selten -22° in deinem Wohnzimmer). Beende Homeputer, starte es erneut und weise dann die Definition dem Objekt erneut zu!

Für Aussentemperaturen müsstest du dann eben einen anderen Typ verwenden mit grösserer Spannweite der einzelnen Teilbereiche.

Gemäss diesem Thema: http://homematic-forum.de/forum/viewtop ... =13&t=1684 gibt es bei den eigenen Typdefinitionen zumindest eine Beschränkung, was die Gesamtlänge aller Bitmap-Bezeichnungen (inkl. Pfad!) je Definition betrifft. Ob sich das auch auf die Zuweisung der Zustände auswirken kann, weiss ich nicht; wurde allerdings bisher nie berichtet.

Viele Grüsse
Bümpi

Antworten

Zurück zu „homeputer Studio / Standard: Programmierbeispiele“