Rollläden über xBlind (mal wieder)

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

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 1 Gast betrachten dieses Thema.

mattsches

Ja, genau. Ich hätte den Status eher über eine grafische Verschaltung gelöst, du bewegst dich ja innerhalb eines CFC-Plans. Aber das ist Geschmackssache und macht funktional keinen Unterschied.

Dann kannst du heute Nacht bzw. morgen früh ja mal testen.

NightWatcher

Habe ich gestern bereits (heute morgen) - klappt natürlich.... NICHT  :-\

mattsches

Na dann sag' das doch gleich.

Zwei Vorschläge noch:

1. IN über CFC-Verschaltung, wie oben beschrieben
2. Nach dem F_TRIG noch ein TON, um den Impuls zu verlängern

Ich glaube aber nicht, dass es das ist. Der BLIND_INPUT schaltet PI auf PO durch, sobald IN=TRUE ist, und sei es nur für einen Zyklus. Sorry, aber ich tippe immer noch auf MASTER_MODE=FALSE.

Was passiert denn, wenn du statt BLIND_SHADE.Status eine sonst ungenutzte Variable an den Vergleicher hängst? Dann die auf 141 setzen und zurück auf 0 oder was auch immer. Wenn es dann funktioniert (auch ohne Impulsverlängerung via TON), muss es am BLIND_NIGHT liegen.

Die erste Bedingung im BLIND_NIGHT hast du wie oben beschrieben rausgenommen?

mattsches

Ach, und falls du dich wunderst, warum die Läden so früh herunter gehen: XCAL.SUN_RISE und SUN_SET werden in UTC ausgegeben (die Sonne ging heute nicht schon um kurz vor vier unter). Dem BLIND_NIGHT übergibst du aber die lokale Zeit an DTIN. Mit XCAL.UTC funktioniert es richtig.

NightWatcher

Zitat von: mattsches in 31. Oktober 2014, 22:13:07
Ach, und falls du dich wunderst, warum die Läden so früh herunter gehen: XCAL.SUN_RISE und SUN_SET werden in UTC ausgegeben (die Sonne ging heute nicht schon um kurz vor vier unter). Dem BLIND_NIGHT übergibst du aber die lokale Zeit an DTIN. Mit XCAL.UTC funktioniert es richtig.
Die Bausteine haben bei mir nen Offset von 90min. Die andere Nachricht von dir, werde ich evtl am Montag mal ausgiebig testen. Danke schon mal  8)

erdbeerschaeler

Guten Morgen,

ich muss nochmal wegen meiner Lüftungsfunktion etwas nachhaken.
Die Flanken für die Fensterkontakte sind drin und wenn der Rolladen ganz zu (Pos 0) hat, dann wird auch die eingestellte Position angefahren.

Wenn ich das Fenster wieder schließe sollte der Rolladen wieder zu fahren.
Sollte ich jetzt noch eine weitere Abfrage der Flanke nur andersherum machen in Verbindung mit der eingestellten Position?
Das scheint mir falsch zu sein. Irgendwie sollte ich doch den Blind_Input dazu bewegen können, wieder den Befehl zum zufahren heraus zu geben?!?

IDEEN?

[gelöscht durch Administrator]

mattsches

Hallo Sven,

das stimmt schon so. Das Öffnen über IN und PI ist für den BLIND_INPUT eine einmalige Sache. Er weiß nach der Ausführung schlicht nicht mehr, wie der Laden zuvor gestanden hat. Woher auch?

Den Befehl zum Zufahren kannst du entweder über die von mir ursprünglich vorgeschlagen über IN und PI lösen. Oder du gibst bei der entsprechenden Flanke des Fensterkontakts (wie ist denn dessen Logik? deine zwei Posts widersprechen sich hier) einen Impuls auf S2, der länger als DEBOUNCE_TIME und kürzer als CLICK_TIME ist. Voraussetzung: CLICK_EN=TRUE. Nachteil: Der Rolladen ist danach für die bei MANUAL_TIMEOUT angegebene Zeit auf Handbetrieb - geht in der Zeitspanne die Sonne auf, fährt der Rolladen nicht automatisch hoch.

Du hast die Wahl...

Grüße,
mattsches

NightWatcher

Update, ich vermute, dass der F_TRIG hier bei einer Zyklischen Laufzeit nicht geeignet ist. In meinen ersten Tests läuft es, wenn ich eine Schaltung schreibe, die 1x in der Sekunde aufgerufen wird.

Werde das dann heute nach mal noch unter realen Bedingungen testen.

mattsches

Was meinst du mit "in einer zyklischen Laufzeit"? Der F_TRIG kann schon zyklisch aufgerufen und bearbeitet werden - genau dafür ist er gemacht. Er gibt bei einer positiven Flanke ein Signal heraus, das genau einen Zyklus lang ansteht. Das nennt man dann Impuls. Und der reicht, um den BLIND_INPUT via IN anzutriggern.

Aber ich hatte dich so verstanden, dass dein Beispiel (Screenshot) für die Lüftungsposition zwar funktioniert, das Schließen jedoch nicht. Oder funktioniert schon der Screenshot nicht?

Man kann leider die Konstante nicht erkennen, die an PI angebunden ist. Kannst du die noch so verschieben, dass man sieht, welchen Wert du übergibst?

mattsches

Servus nochmal,

ich war schon dabei, dir ein CFC-Beispiel zu bauen. Da fiel mir auf, dass der Vorschlag eigentlich Schwachsinn ist und die Lösung durch Modifikation des BLIND_NIGHT viel eleganter geht. Du hast den Baustein ja eh schon angepasst, oder? Dann bau doch mal folgendes mit dazu:


FUNCTION_BLOCK BLIND_NIGHT
VAR_INPUT
[...]
WINDOW_SWITCH : BOOL := FALSE;
END_VAR
VAR_INPUT CONSTANT
[...]
ENABLE_VENTINGPOS : BOOL := FALSE;
VENTING_POSITION : BYTE := 0;
VENTING_ANGLE : BYTE := 0;
END_VAR

[...]

(* shade at night only in auto mode and enable = true *)
IF UP AND DN AND night THEN
status := 141;
IF ENABLE_VENTINGPOS AND NOT WINDOW_SWITCH THEN (* open shade slightly if venting position is enabled and window is opened *)
po := venting_position;
ao := venting_angle;
ELSE (* set standard night position when not venting *)
po := night_position;
ao := night_angle;
END_IF
ELSE
[...]
END_IF;


Dem liegt die Annahme zu Grunde, dass der Fensterkontakt mit 1=geschlossen definiert ist. Andernfalls musst du halt die Logik in meinem Code oder an der CFC-Verschaltung negieren. Und via Setup-Variablen die Lüftungsfunktion aktivieren und die Position festlegen.

Sollte eigentlich so funktionieren. Und ist doch deutlich übersichtlicher als die Lösung außen über den CFC.

Gruß,
mattsches

erdbeerschaeler

Mahlzeit,

das sieht seehr gut aus und ich hatte auch schon mit etwas ähnlichem angefangen.

Eins musst Du mir aber bitte noch erklären.

Wieso hat der BNightbaustein in meinen Plänen jetzt die Oberhand?

Ein paar Beispiele:
Gestern Abend habe ich vor der eingestellten Uhrzeit die Rolladen ganz zu gefahren und zur eingestellten Uhrzeit ist der Rolladen auf seine Position gefahren.
Heute Morgen sind wir sehr früh raus und haben die Rolladen zum Lüften im Schlafzimmer von Hand hoch gefahren.
Nach der Manueltimeout Zeit sind die Rolladen dan wieder in die Nachtposition gefahren.

Irgendwie bin ich verwirrt. Liegt das daran, das die oberste Zeile im Nightbaustein raus ist, oder liegt das an Mastermode=1

Gruß
Sven

NightWatcher

Zitat von: mattsches in 03. November 2014, 12:44:11
Was meinst du mit "in einer zyklischen Laufzeit"? Der F_TRIG kann schon zyklisch aufgerufen und bearbeitet werden - genau dafür ist er gemacht. Er gibt bei einer positiven Flanke ein Signal heraus, das genau einen Zyklus lang ansteht. Das nennt man dann Impuls. Und der reicht, um den BLIND_INPUT via IN anzutriggern.

Aber ich hatte dich so verstanden, dass dein Beispiel (Screenshot) für die Lüftungsposition zwar funktioniert, das Schließen jedoch nicht. Oder funktioniert schon der Screenshot nicht?

Man kann leider die Konstante nicht erkennen, die an PI angebunden ist. Kannst du die noch so verschieben, dass man sieht, welchen Wert du übergibst?
Meine Schaltplan funktioniert schon. Der Impuls in dem Zyklus ist leider so kurz, dass der nächste Baustein (TON) und/oder BLIND_INPUT ihn nicht "registriert".

Ist der Zyklus z.b. 1sek. dann scheint es zu klappen. Werde ich morgen früh sehen.  ::)

mattsches

@NightWatcher:
Sorry, jetzt hatte ich euch beide durcheinander gebracht und deinen Post auf den Screenshot von Sven bezogen. Mein Fehler.
Dennoch habe ich Schwierigkeiten mit Deiner Darstellung. Was meinst du mit "Ist der Zyklus z. B. 1 sek."? Verstellst du die Bearbeitungszeit der Task, in der der CFC-Plan aufgerufen wird? Das hat auf die Flankenerkennung grundsätzlich keinen Einfluss. Wichtig ist lediglich, dass der F_TRIG in derselben Task aufgerufen wird wie das Quellsignal aktualisiert wird. In deinem Screenshot hier http://www.oscat.de/community/index.php/topic,2252.msg11798.html#msg11798 ist das aber der Fall. Man sieht allerdings auch, dass die Bearbeitungsreihenfolge nicht stimmt, der F_TRIG wird vor dem Vergleicher aufgerufen. Ich würde mal Extras/Reihenfolge.../Nach Datenfluss anordnen ausführen.
Hast du meine Vorschläge hier http://www.oscat.de/community/index.php/topic,2252.msg11801.html#msg11801 denn schon ausprobiert? Brauchst du überhaupt weitere Unterstützung?

@Sven:
Bezieht sich deine Aussage von wegen Oberhand schon auf den modifizierten BLIND_NIGHT? Kaum, oder? Wichtig dazu noch, die ganze Beschaltung an IN und PI inkl. F_TRIG etc. fliegt dann raus. Nur falls das nicht schon klar war.
Ich schlage vor, du testest damit mal. Um zur vorherigen Variante hier http://www.oscat.de/community/index.php/topic,2252.msg11806.html#msg11806 und deren Verhalten etwas sagen zu können, bräuchte ich noch Infos zu meinen Fragen oben (Logik des Fensterkontaktes, verschaltete Konstante an PI).

Grüße,
mattsches

erdbeerschaeler

hallo mattsches,

meine Erkenntnisse beziehen sich alle nur noch auf die modifizierte Version.
Deinen "Code" hab ich eingebaut, aber irgendwie bewegt sich nichts, wenn ich das Fenster öffne.
Die Vermutung von Dir ist richtig, dass der Kontakt bei geschlossenem Fenster eine "1" bringt.

Vielleicht wirfst Du mal kurz einen Blick drauf, was ich da gebastelt habe.
Hast Du zufällig eine Erklärung für das Verhalten des modifizierten Blind_Night?

Schicken Abend noch...
Sven

[gelöscht durch Administrator]

mattsches

Kannst du noch einen Screenshot machen bei geöffnetem Fenster? Möglichst so, dass man die Ausgänge Status und PO des BLIND_NIGHT_SD erkennen kann. Danke!