Rollläden über xBlind (mal wieder)

Begonnen von erdbeerschaeler, 13. Oktober 2014, 15:33:02

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 2 Gäste betrachten dieses Thema.

NightWatcher

Zitat von: mattsches in 17. Oktober 2014, 08:28:21
Das sollte relativ einfach zu ändern sein. Schaut mal in den Quellcode des BLIND_NIGHT, gleich die ersten Zeilen bewirken, dass ein manueller Eingriff bei Nacht das automatische Öffnen deaktiviert:

IF NOT (up AND dn) AND night THEN
(* manual operation at night will cancel operation for one night *)
night := FALSE;
ELSIF [...]


Wenn ihr diese erste IF-Abfrage rauslöscht (und aus dem ELSIF natürlich ein IF macht), sollte es so funktionieren, wie ihr euch das wünscht.

Ich würde dazu ganz pragmatisch den Baustein aus der Bibliothek ins eigene Projekt kopieren, dort modifizieren und z. B. als BLIND_NIGHT2 speichern und aufrufen. Sache gegessen.

Merci, das werde ich mal 3-4 Tage zum test so laufen lassen.

NightWatcher

Moin,

das ist es leider nicht.

Ich vermute das Problem dabei, dass man über Blind_INPUT den PO ja auf 0 setzt. Die weiteren Blind Bausteine schleifen das ja nur durch und ändern nichts am Status PO. Daher gibt der BLIND_NIGHT am Morgen nur den Befehlt, den PO wieder freizugeben. Da er aber bereits bei 0 ist (unten), passiert am Morgen nichts.

Demzufloge müsste eigentlich der BLIND_INPUT Baustein nach einer Zeit wieder den Wert 255 annehmen.

mattsches

@NightWatcher:
Hast du am BLIND_INPUT Master_Mode auf True gesetzt?

@erdbeerschäler:
Ja, das würde ich über eine Erkennung der negativen Flanke lösen. F_TRIG auf den Fensterkontakt, den Ausgang zum einen verodert mit dem, was bisher auf BLIND_INPUT/IN geht.

Zum anderen muss ja noch der Sollwert umgeschaltet werden, der auf BLIND_INPUT/AI geht. Dazu würde ich dem F_TRIG zur Sicherheit einen TOF nachschalten, z. b. mit t#1s. Von dort dann auf den eigentlichen Sollwertumschalter. Der ginge z. B. mit MUX_R2 und nachgeschaltetem Konverter von Real auf Byte (nötigenfalls Real -> Int -> Byte). Etwas umständlich, eleganter wäre ein MUX_B2 für die Umschaltung zweier Byte-Werte. Leicht herzustellen als abgewandelte Kopie des MUX_R2.

Gruß,
m.

NightWatcher


erdbeerschaeler

Hast Du die Reihenfolge des Plans nochmal kontrolliert?
Das ist bei mir meistens ein Problem, wenn ich gebastelt habe.

NightWatcher


mattsches

Sven, bei dir tut es nun ja, oder? Soll heißen, wenn du nachts manuell eingreifst, fährt der Rolladen morgens trotzdem automatisch hoch? Poste doch mal deinen Code.

NightWatcher, dann muss es an deinem Programm liegen. Du schreibst, der BLIND_INPUT gibt PO=0 aus. Das geht m. E. nur, wenn entweder MASTER_MODE=FALSE ist (musst du ausdrücklich setzen, leider hat der Autor der Variablen keinen Initialwert verpasst). Oder wenn vor dem automatischen Schließvorgang der Laden schon manuell geschlossen wurde.

Wenn Master Mode = True ist und der Laden manuell geöffnet ist, bleibt PO=255 bestehen - egal was die nachgeschalteten Bausteine bei aktivem Automatikbetrieb so anstellen, inklusive BLIND_NIGHT.

Ich hatte seinerzeit im BLIND_NIGHT noch einen Bug gefunden, die Ausgänge QU und QD werden nur im Automatikmodus durchgeschleift, was ich für falsch halte:

Original:
(* shade at night only in auto mode and enable = true *)
IF UP AND DN AND night THEN
status := 141;
po := night_position;
ao := night_angle;
ELSE
QU := UP;
QD := DN;
po := pi;
ao := ai;
status := s_in;
END_IF;


Meine Version:
(* shade at night only in auto mode and enable = true *)
IF UP AND DN AND night THEN
status := 141;
po := night_position;
ao := night_angle;
ELSE
po := pi;
ao := ai;
status := s_in;
END_IF;

QU := UP;
QD := DN;


Glaube aber nicht unbedingt, dass dein Problem damit zusammenhängt.

erdbeerschaeler

Nabend,
das ist mein aktueller Code:


IF (DT_TO_TOD(dtin) > sunset + sunset_offset) AND (last_night < DT_TO_DATE(dtin)) AND NOT night AND e_night AND DN AND (DT_TO_TOD(dtin)>=EARLIEST_CLOSING_TIME OR NOT ENABLE_MINMAXTIMES) THEN
(* enable night *)
night := TRUE;
last_night := DT_TO_DATE(dtin);
ELSIF (DT_TO_TOD(dtin) > sunrise + sunrise_offset) AND (last_day < DT_TO_DATE(dtin)) AND night AND e_day AND (last_night < DT_TO_DATE(dtin)) AND (DT_TO_TOD(dtin)>=EARLIEST_OPENING_TIME OR NOT ENABLE_MINMAXTIMES) THEN
(* disable night *)
night := FALSE;
last_day := DT_TO_DATE(dtin);
END_IF;

(* shade at night only in auto mode and enable = true *)
IF UP AND DN AND night THEN
status := 141;
po := night_position;
ao := night_angle;
ELSE
QU := UP;
QD := DN;
po := pi;
ao := ai;
status := s_in;
END_IF;


Ich hab Abends mal ein wenig an dem ein oder anderen Rolladen herumgefahren und morgen fahren alle so wie sie sollen.
Einen CFC-Plan von einem Fenster hab ich auch mal mit dran gehangen.

Gruß
Sven

[gelöscht durch Administrator]

mattsches

Danke, genau wie ich das vermutet habe, die erste IF-Abfrage ("IF NOT (up AND dn) AND night...") entfernt.

NightWatcher, ich kann keinen Fehler darin erkennen. Muss bei dir genauso funktionieren. Wenn nein, müsstest du dein Programm mal hier posten. Sonst wird es schwierig, weitere Aussagen zu machen.

NightWatcher

#24
Nun, folgendes Szenario, rolladen fährt nachts automatisch runter.

blind_input po = 255
blind_night po = 0

Ich fahren den rolladen in der Nacht hoch und dann wieder runter, weil ich zb mal auf die Terrasse muss.

blind_input po = 0
blind_night po = 0

Morgens schleift das modul blind_night den pi an po durch. Da er aber noch auf 0 steht, passiert natürlich nichts.

[gelöscht durch Administrator]

mattsches

Jetzt verstehe ich, wo der Hase im Pfeffer liegt. Klar, wenn der Laden nachts manuell geschlossen wird, bleibt er morgens zu.

Die Abhilfe kann nun allerdings nicht im BLIND_NIGHT geschehen, Ursache ist ja der PO=0 des BLIND_INPUT. Lösen würde ich das folgendermaßen:

- 255 (konstant) auf BLIND_INPUT/PI
- BLIND_NIGHT/STATUS abgreifen und auf <> 141 vergleichen (Achtung, die Doku stimmt hier nicht, Status 142 wird nicht ausgegeben)
- das (boolesche) Ergebnis über einen F_TRIG ziehen und dessen Ausgang auf BLIND_INPUT/IN

Ergebnis: Wenn der BLIND_NIGHT aus dem Nachtbetrieb geht, wird dem BLIND_INPUT kurzzeitig befohlen, auf Position 255 zu fahren. Dazu reicht der kurze Impuls, der Baustein fährt danach selbständig die definierte Position an.

NightWatcher

Zitat von: mattsches in 29. Oktober 2014, 12:29:07
Die Abhilfe kann nun allerdings nicht im BLIND_NIGHT geschehen, Ursache ist ja der PO=0 des BLIND_INPUT. Lösen würde ich das folgendermaßen:
Das habe ich mir auch gedacht. Aber probieren wollte ich es natürlich trotzdem mal.

Zitat von: mattsches in 29. Oktober 2014, 12:29:07
- 255 (konstant) auf BLIND_INPUT/PI
Sowas ind er Art habe ich mir heute morgen auch gedacht, nachdem ich mit den Quellcode des Bausteins mal angesehen habe.

Ich kann kaum glauben, dass das Problem nur mich betrifft und man dies nicht Werkseitig in den Baustein irgendwie integriert hat. Oder bauen sich alle Ihr eigenes Süppchen? Habe immer möglichst versucht, die Bausteine nicht zu bearbeiten.

mattsches

Nochmal, du musst keinen Baustein bearbeiten. Das würde überhaupt nichts bringen. Du müsstest lediglich die Verschaltungen im CFC-Plan zufügen, dessen Screenshot du oben angehängt hattest. Und würdest die "werksseitig" (es gibt hier keinen Hersteller, lediglich eine Community) vorgesehenen Funktionen der Bausteine nutzen. Wenn ich schreibe "255 auf BLIND_INPUT/PI", dann heißt das nicht, du sollst den PI des BLIND_INPUT im Baustein selbst verbiegen. Sondern eine Konstante mit Wert 255 an den Bausteineingang übergeben. Nur falls das vielleicht missverständlich war.

NightWatcher

Schon klar, das alles.  ;)

Ich denke, ich habe mich falsch ausgedrückt...

NightWatcher

Habe mal was gebastelt, so meinst du es, oder?



[gelöscht durch Administrator]