Wenn Bedingungen limitiert?

Bugreports und Updatewünsche an die Firma contronics
Keine allgemeinen Fragen!

Moderator: Co-Administratoren

Antworten
Mathias@Home
Beiträge: 12
Registriert: 26.02.2018, 21:26
Kontaktdaten:

Wenn Bedingungen limitiert?

Beitrag von Mathias@Home » 19.12.2020, 10:32

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?
147 Homematic und Homematic IP an CCU2, PhilipsHue, Homeputer CL Studio mit 57200 Lines of Code.

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

Beitrag von Familienvater » 29.12.2020, 23:39

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:

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

NickHM
Beiträge: 3729
Registriert: 23.09.2017, 12:04
Hat sich bedankt: 65 Mal
Danksagung erhalten: 119 Mal

Re: Wenn Bedingungen limitiert?

Beitrag von NickHM » 30.12.2020, 07:53

Hallo

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

Antworten

Zurück zu „homeputer Studio / Standard: Bugs & Updatewünsche“