Hallo Comunity,
ich habe an einer Stelle die Prüfung bis zu knapp 40 Aktorzustände implementiert, keine Funktprotokollabfrage mit ABFRAGE(), um die Anzeige an einem Display zu steuern.
Objektvariable := 0
wenn Aktor1 := aus dann
wenn Aktor2 := aus dann
wenn Aktor3 := aus dann
// usw. bis Anzahl Aktoren knapp 40 also knapp 40 Abfragen dieser Art
Objektvariable := 1
endewenn
endewenn
endewenn
Wenn die Anzahl der Wenn-Abfragen hintereinander 20 (Wert kann abweichen, unter 20 war es ok, irgendwo darüber nichtmehr) übersteigt, crasht die CCU2 und startet neu.
Habe keine Limitierung von Wenn-Bedingungen in der Homeputerbeschreibung gefunden, hat schonmal jemand ein ähnliches Verhalten feststellen können?
Wenn Bedingungen limitiert?
Moderator: Co-Administratoren
-
- Beiträge: 12
- Registriert: 26.02.2018, 21:26
- Kontaktdaten:
Wenn Bedingungen limitiert?
147 Homematic und Homematic IP an CCU2, PhilipsHue, Homeputer CL Studio mit 57200 Lines of Code.
-
- Beiträge: 7151
- Registriert: 31.12.2006, 15:18
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Rhein-Main
- Danksagung erhalten: 34 Mal
Re: Wenn Bedingungen limitiert?
Hi,
Standard-Dummer Spruch:
Auf der CCU läuft kein homeputer Studio, das lief ausschließlich nur auf einem PC... Falsches Forum....
Ich könnte mir vorstellen, das nicht nur die CCU bei einer Schachtelungstiefe von 40 Ebenen mit Wenn-Abfragen platzt, das kann auch anderen Programmiersprachen passieren, weil einfach irgendwelche Register überlaufen.
Ausserdem hast Du evtl. einen "bösen" Schreibfehler, ein := ist eine Zuweisung, keine Prüfung!
Wenn Du wirklich nur überprüfen willst, ob 40 verschiedene Aktoren AUS sind, dann kann man das notfalls auch total "Flach" programmieren, je nach dem, was passieren soll...
Dein Beispiel, mit einer absolut flachen, unverschachtelten Logik:
Der Familienvater
Standard-Dummer Spruch:
Auf der CCU läuft kein homeputer Studio, das lief ausschließlich nur auf einem PC... Falsches Forum....
Ich könnte mir vorstellen, das nicht nur die CCU bei einer Schachtelungstiefe von 40 Ebenen mit Wenn-Abfragen platzt, das kann auch anderen Programmiersprachen passieren, weil einfach irgendwelche Register überlaufen.
Ausserdem hast Du evtl. einen "bösen" Schreibfehler, ein := ist eine Zuweisung, keine Prüfung!
Wenn Du wirklich nur überprüfen willst, ob 40 verschiedene Aktoren AUS sind, dann kann man das notfalls auch total "Flach" programmieren, je nach dem, was passieren soll...
Dein Beispiel, mit einer absolut flachen, unverschachtelten Logik:
Code: Alles auswählen
Objektvariable := 0
wenn Aktor1 angeschaltet dann
verlassen
endewenn
wenn Aktor2 angeschaltet dann
verlassen
endewenn
wenn Aktor3 angeschaltet dann
verlassen
endewenn
// usw. bis Anzahl Aktoren knapp 40 also knapp 40 Abfragen dieser Art
// und wenn keiner "An" war -> negative boolsche Logik -> sind alle aus...
// dann kommen wir an diese Stelle, sonst sind wir bei der ersten nicht zutreffenden Annahme "rausgeflogen" und haben das Makro beendet/verlassen
Objektvariable := 1
-
- Beiträge: 3734
- Registriert: 23.09.2017, 12:04
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 121 Mal
Re: Wenn Bedingungen limitiert?
Hallo
ich sehe das wie Familienvater. Warum verschachteln?
Man kann sogar zählen (angeschaltete Lichter, offene Fenster ...)
ich sehe das wie Familienvater. Warum verschachteln?
Man kann sogar zählen (angeschaltete Lichter, offene Fenster ...)
Code: Alles auswählen
Objektvariable := 0
wenn Aktor1 angeschaltet dann
Objektvariable := Objektvariable + 1
endewenn
wenn Aktor2 angeschaltet dann
Objektvariable := Objektvariable + 1
endewenn