BLIND_NIGHT

Begonnen von firsteleven, 03. Januar 2010, 12:37:51

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 1 Gast betrachten dieses Thema.

firsteleven

Erweiterungswunsch:
-> Im Sommer ist der Sonnenaufgang für die meisten Nutzer zu früh.
Ein begrenzen der Zeit wäre hier wünschenswert, beispielsweise frühstens ab "TOD Eingang" hochfahren.

Änderungsvorschlag:
-> Den Offset beim Sonnenaufgang muss immer negativ einegeben werden, da das Sonnenlicht früher als die berechnet Zeit erscheint.
Interne verarbeitung ändern das pos wert eingegeben wird.

P.S. habe den Vorschlag in der falschen Rubrik erstellt, gerade gelöscht und hier nochmal eingestellt, hoffe das ist ok.

hugo

die zeitbegrenzung ist ein guter vorschlag, den werden wir in einer der nächsten releases einbauen.

damit rollo z.b. bei sonnenaufgang aber nicht vor tod#mintime aufgeht.

auch den offset werden wir als integer in minuten ausführen, dann kann man positiven wie auch negativen offset eingeben
dadurch kann der rollo x minuten vor oder nach dem sonnenaufgang geöffnet werden.

bei richtigen längengrad und breitengrad sowie zeit strikt in utc sollte auch der sonnenaufgang richtig berechnet werden.
ein konstanter offset würde hier einen fehler auch nicht beheben, du zu große unterschieden zwischen winter und sommer wären.

firsteleven

schön das ihr das mit einbaut!

Zitat von: hugo in 04. Januar 2010, 12:05:36
bei richtigen längengrad und breitengrad sowie zeit strikt in utc sollte auch der sonnenaufgang richtig berechnet werden.
ein konstanter offset würde hier einen fehler auch nicht beheben, du zu große unterschieden zwischen winter und sommer wären.


der baustein berechnet alles richtig! die zeiten habe ich mit "wetter.de" verglichen.

es ist aber doch so, dass es früher hell wird als die sonne tatsächlich aufgeht (ca. 15-20min)
beim sonnenuntergang das gleiche: erst ist die sonne hinterm hochizont verschwunden und dann wird es dunkel.

Wu Fu

Hallo zusammen,

ich traue es mich fast nicht schreiben aber ich habe ein Problem mit dem Baustein Blind-Night. Ich hänge mein Problem einfach an diesen Beitrag an, damit ich nicht nochmal ein Thema aufmache.

Ich habe mit schon die anderen Beiträge durchgelesen, konnte aber keine Lösung finden.

Ich habe eine 750-841 im Einsatz, der über ein Omnio-Enocean Gateway Jalousieaktoren ansteuert und Funktelegramme von einer Fernbedienung erhält. Das funktioniert soweit auch alles gut (außer, dass der Empfang manchmal etwas schlecht ist).

Die Jalousien fahren abends ordnungsgemäß die Nachtposition an, was auch durch den Statusausgang angezeigt wird.
Nur leider öffnen die Jalousien morgens nicht mehr, dabei ist egal welche Positionen die Jalousien am Abend zuvor hatten (ganz offen oder in Beschattungsportion.) Die Jalousien werden in der Nacht auch nicht über die Fernbedienung betätigt, so dass der Automatikmodus eigentlich nicht verlassen werden kann.
Die Jalousien fahren erst hoch, wenn eine Beschattungsposition angefahren wird.

Weiß jemand Rat, oder hat ein ähnliches Problem schon mal gelöst?

Ich habe eine Screenshot und einen Teil Export des Programmes angehängt.

Die Jalousie wird nur freigegeben, nach einer bestimmten Uhrzeit und wenn die Wetterstation keine Dämmerung mehr anzeigt.

Außerdem habe ich noch ein paar Fragen, zu den Blind-Modulen.

Laut Beschreibung fahren die Jalousien morgens die letze Position des Tages zuvor an, dass würde öfters bedeuten, die Beschattungsposition. Kann dies vermieden werden, so dass die Jalousien morgens ganz öffnen?

Wie lässt sich am besten verwirklichen, dass die Jalousien z.B. am Wochenende morgens zuerst nur die Lamellen öffnen und erst nach der Zeit X hochfahren? Über Zeitschaltprogramme eine definierte Position vorgeben (geschlossen, Lamellen offen und nach der Zeit x die Jalousien einfach ganz hoch fahren)?

Müsste der Baustein Blind-Shade nach beenden der Beschattungsfunktion (Sonnenlicht wird zu schwach, die Jalousien wieder öffnen? Bei mir bleiben die Jalousien in Beschattungsposition, bis der Baustein Blind-Night schießt. Gibt es eine Funktion die Jalousien vorher wieder zu öffnen?

Gibt es eine Möglichkeit die Setupvariablen, die über das anklicken des Bausteines verändert werden nach „außen zu führen“? Hintergrund ist der, dass ich die Jalousiefunktion in einem Funktionsblock erstellt habe um diesen für mehrere Zimmer verwenden zu können.  Nun kann es aber z.B. vorkommen, dass die Zimmer nach verschiedenen Himmelsrichtungen ausgerichtet sind. Damit man nicht für jede Richtung eigene FBs erstellen muss wäre es gut, wenn man diese Parameter nach außen führen kann.

[gelöscht durch Administrator]

D-Platoon

#4
Ich hatte beide Probleme auch, welche ich in den letzten Tagen und Wochen ausgearbeitet habe.
Damit die Rollos am nächsten Tag unabhängig von der letzten Position ganz nach oben fahren (oder von mir aus auch auf eine bestimmt), habe ich einen ähnlichen Programmschnipsel wie beim runterfahren eingefügt.

Dann hab ich noch Deadlines eingefügt, zu welchen die Rollos spätestens runter bzw. hoch fahren sollen. Das wäre natürlich auch für früheste Zeiten möglich.
Edit:
Ich habe gerade bemerkt, dass sich die Deadlines ja eigentlich mit der Sommer- bzw. Winterzeit (da sich die Sonnenauf- und untergangszeitja nach der UTC richtet, aber die Deadlines ja nach der Ortszeit gewünscht sind) ändern müßten, was sie momentan noch nicht machen. Werd mich die Tage nochmal hinsetzen und den Code überarbeiten.
Edit_ende

Hier mal meine Variablen:
FUNCTION_BLOCK ROL_AUTO_NACHT
VAR_INPUT
UP, DN : BOOL;
S_IN : BYTE;
PI : BYTE;
E_NIGHT : BOOL := TRUE;
E_DAY : BOOL := TRUE;
DTIN : DT;
SUNRISE, SUNSET : TOD;
deadline_night, deadline_day : TOD;
sunrise_offset : TIME := T#5ms;
sunset_offset : TIME := T#5ms;
e_deadline_night, e_deadline_day : BOOL;
END_VAR
VAR_INPUT CONSTANT
night_position : BYTE := 0;
day_position : BYTE := 255;
END_VAR
VAR_OUTPUT
QU, QD : BOOL;
STATUS : BYTE;
PO : BYTE;
END_VAR
VAR
night : BOOL;
day : BOOL;
last_night : DATE := D#2010-01-01;
last_day : DATE := D#2010-01-01;
END_VAR


Und hier mein Code:
IF NOT (up AND dn) AND night THEN
(* manual operation at night will cancel operation for one night *)
night := FALSE;
ELSIF NOT (up AND dn) AND day THEN
(* manual operation at day will cancel operation for one day*)
day := FALSE;
ELSIF (((DT_TO_TOD(dtin) > sunset + sunset_offset) AND e_night) OR ((DT_TO_TOD(dtin) > deadline_night) AND e_deadline_night)) AND (last_night < DT_TO_DATE(dtin)) AND NOT night THEN
(* enable night *)
night := TRUE;
day := FALSE;
last_night := DT_TO_DATE(dtin);
ELSIF (((DT_TO_TOD(dtin) > sunrise + sunrise_offset) AND e_day) OR ((DT_TO_TOD(dtin) > deadline_day) AND e_deadline_day)) AND (last_day < DT_TO_DATE(dtin)) AND (last_night < DT_TO_DATE(dtin)) THEN
(* disable night *)
night := FALSE;
day := TRUE;
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;

ELSIF UP AND DN AND day THEN
status := 142;
po := day_position;

ELSE
QU := UP;
QD := DN;
po := pi;
status := s_in;
END_IF;


Vieleicht Könnt ihr Entwickler ja was damit anfangen.
Manches ist auch bewusst von den Constant-Variablen zu den normalen Inputs übernommen worden, da ich im Anschluss 4 Blind-Bausteine zusammengefasst haben und ansonsten wäre es zu umständlich diese wieder zu ändern.
Ach ja: Ich habe nur Rollos, deswegen sind alle Winkelvariablen und -berechnungen entfernt worden.

Gruß
Thomas

McMeta

ZitatIch habe gerade bemerkt, dass sich die Deadlines ja eigentlich mit der Sommer- bzw. Winterzeit (da sich die Sonnenauf- und untergangszeitja nach der UTC richtet, aber die Deadlines ja nach der Ortszeit gewünscht sind) ändern müßten, was sie momentan noch nicht machen. Werd mich die Tage nochmal hinsetzen und den Code überarbeiten.

Wie wäre es denn wenn du den Baustein nur mit Lokalzeiten versorgst? Also Sonnen- auf und untergang und die aktuelle Uhrzeit.

D-Platoon

Nein, ich habe den Baustein einfach mit beiden Zeiten versorgt: UTC und Lokalzeit.
Hab den Code auch schon fertig und er funktioniert auch einwandfrei, aber da ich momentan in Südamerika bin, habe ich keine Möglichkeit den zu posten. Das hole ich nach, wenn ich wieder zu Hause am Programmierrechner bin.

D-Platoon

Hallo allerseits,

jetzt bin ich wieder daheim und kann euch hiermit den Code senden:

Erstmal die Variablen:
FUNCTION_BLOCK ROL_AUTO_NACHT
VAR_INPUT
UP, DN : BOOL;
S_IN : BYTE;
PI : BYTE;
E_NIGHT : BOOL := TRUE;
E_DAY : BOOL := TRUE;
DTIN : DT;
Lokalzeit: DT;
SUNRISE, SUNSET : TOD;
deadline_night, deadline_day : TOD;
sunrise_offset : TIME := T#5ms;
sunset_offset : TIME := T#5ms;
e_deadline_night, e_deadline_day : BOOL;
END_VAR
VAR_INPUT CONSTANT
night_position : BYTE := 0;
day_position : BYTE := 255;
END_VAR
VAR_OUTPUT
QU, QD : BOOL;
STATUS : BYTE;
PO : BYTE;
END_VAR
VAR
night : BOOL;
day : BOOL;
last_night : DATE := D#2010-01-01;
last_day : DATE := D#2010-01-01;
END_VAR


Und hier den Code:
IF NOT (up AND dn) AND night THEN
(* manual operation at night will cancel operation for one night *)
night := FALSE;
ELSIF NOT (up AND dn) AND day THEN
(* manual operation at day will cancel operation for one day*)
day := FALSE;
ELSIF (((DT_TO_TOD(dtin) > sunset + sunset_offset) AND e_night) OR ((DT_TO_TOD(Lokalzeit) > deadline_night) AND e_deadline_night)) AND (last_night < DT_TO_DATE(dtin)) AND NOT night THEN
(* enable night *)
night := TRUE;
day := FALSE;
last_night := DT_TO_DATE(dtin);
ELSIF (((DT_TO_TOD(dtin) > sunrise + sunrise_offset) AND e_day) OR ((DT_TO_TOD(Lokalzeit) > deadline_day) AND e_deadline_day)) AND (last_day < DT_TO_DATE(dtin)) AND (last_night < DT_TO_DATE(dtin)) THEN
(* disable night *)
night := FALSE;
day := TRUE;
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;

ELSIF UP AND DN AND day THEN
status := 142;
po := day_position;

ELSE
QU := UP;
QD := DN;
po := pi;
status := s_in;
END_IF;


Bei Fragen einfach an mich! ;)

DeejayT

@D-Platoon
Kannst du bitte beschreiben was dein Baustein anders macht als der Originale!

D-Platoon

Klar kann ich das! ;)

Da fällt mir wieder ein: Eigentlich wollte ich mal ne Doku zu meinen angepassten Bausteinen machen...  :o

Naja dann halt mal hier im Schnelldurchlauf:

Im Anhang hab ich dir den Baustein, wie er im CFC aussieht.

Bei Lokalzeit wird die Lokalzeit eingegeben. Diese werden nachher für die Deadlines gebraucht, die sich ja nicht nach der UTC, sondern nach der aktuellen Zeit richten soll.
Deadline_Night und Deadline_Day sind die Zeiten, zu denen die Rollos spätestens rauf bzw. runter fahren.
Bsp: Du gibst bei Deadline_Night 20:00 Uhr ein. Jetzt werden die Rollos bis zu dem Datum an der die errechnete Sonnenuntergangszeit früher ist entsprechend runtergefahren. Wenn im Sommer die Zeit später wird, dann sind sie spätestens um 20:00Uhr unten. Ist zum Beispiel sinnvoll bei Kinderzimmern, wo die Kids um acht ins Bett müssen ;) Gleiches gilt natürlich bei Deadline_Day!
E_Deadline_Day und E_Deadline_Night, ist einfach nur dazu da um die Funktion ein bzw. auszuschalten (E = enable).

Dann war mit dem Originalbaustein das Problem vorhanden, dass wenn der Rollo nach Zeit runtergegangen ist. Man ihn aber nochmals kurz manuell öffnen wollte (z.B. zum nochmals kurz lüften) und im Anschluss wieder schloss, dann ging er am nächsten Morgen nicht automatisch hoch, da er die letzte Position angefahren hatte, welche vom Eingang (z.B. BLIND_INPUT) gekommen ist. Nun fährt er automatisch die in der Setup_Variable angegebene Position an.

Ich glaube das wäre alles was ich geändert habe. Der Rest ist gleich, wie beim Originalbaustein.
Ach ja: Ich habe die Angle-Berechnung komplett rausgeschmissen, da ich hier bei mir nur Rollos habe. Wenn du diese brauchst müßtest du sie wieder einfügen. Notfalls kann ich dir dabei auch helfen...

Wenn noch Fragen sind, her damit!

Gruß
Thomas

[gelöscht durch Administrator]

DeejayT

Boar Hammer, die Funktion mit den Deadlines hab ich mir schon seit Monaten gewünscht.  ;D ;D ;D

Was ich mir wünschen würde, das man die Funktion mit der Position vom Vortag, Einstellen kann, ob er die Position vom Vortag anfahren soll oder ob er auf die Standardwerte fahren soll. Ich fand das ganz gut. Jetzt im Sommer sind die Rolladen nur ein wenig auf, damit Licht ins Haus kommt, und es kühl bleibt. Abends fahren sie dann ganz nach unten und morgens wieder auf die alte Position.
Auf diese Funktion möchte ich ungern verzichten, wenn du das wieder einbauen könntest oder halt mit einem Parameter das man das Ein oder Ausschalten kann, dann wäre das Ultradeluxe  ;)

D-Platoon

Freut mich, dass meine Mühen anklang finden :)

Wenns weiter nix ist :D

Probier mal folgenden Abänderung des Bausteins:

Die Variablen:

FUNCTION_BLOCK ROL_AUTO_NACHT
VAR_INPUT
UP, DN : BOOL;
S_IN : BYTE;
PI : BYTE;
E_NIGHT : BOOL := TRUE;
E_DAY : BOOL := TRUE;
DTIN : DT;
Lokalzeit: DT;
SUNRISE, SUNSET : TOD;
deadline_night, deadline_day : TOD;
sunrise_offset : TIME := T#5ms;
sunset_offset : TIME := T#5ms;
e_deadline_night, e_deadline_day : BOOL;
POS_Vortag : BOOL;
END_VAR
VAR_INPUT CONSTANT
night_position : BYTE := 0;
day_position : BYTE := 255;
END_VAR
VAR_OUTPUT
QU, QD : BOOL;
STATUS : BYTE;
PO : BYTE;
END_VAR
VAR
night : BOOL;
day : BOOL;
last_night : DATE := D#2010-01-01;
last_day : DATE := D#2010-01-01;
END_VAR

(*
version 1.2 6 oct 2007
programmer hugo
tested by tobias

version 1.5 10 jun 2010
programmer d-platoon
tested by d-platoon

version 1.6 30 jun 2010
programmer d-platoon
tested by ---

*)


Und den Code:

IF NOT (up AND dn) AND night THEN
(* manual operation at night will cancel operation for one night *)
night := FALSE;
ELSIF NOT (up AND dn) AND day THEN
(* manual operation at day will cancel operation for one day*)
day := FALSE;
ELSIF (((DT_TO_TOD(dtin) > sunset + sunset_offset) AND e_night) OR ((DT_TO_TOD(Lokalzeit) > deadline_night) AND e_deadline_night)) AND (last_night < DT_TO_DATE(dtin)) AND NOT night THEN
(* enable night *)
night := TRUE;
day := FALSE;
last_night := DT_TO_DATE(dtin);
ELSIF (((DT_TO_TOD(dtin) > sunrise + sunrise_offset) AND e_day) OR ((DT_TO_TOD(Lokalzeit) > deadline_day) AND e_deadline_day)) AND (last_day < DT_TO_DATE(dtin)) AND (last_night < DT_TO_DATE(dtin)) THEN
(* disable night *)
night := FALSE;
day := TRUE;
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;

ELSIF UP AND DN AND day AND NOT POS_Vortag THEN
status := 142;
po := day_position;

ELSIF UP AND DN AND day AND POS_Vortag THEN
status := 143;
po := pi;

ELSE
QU := UP;
QD := DN;
po := pi;
status := s_in;
END_IF;


(* revision history
hm 29. sep 2007 rev 1.0
original version

hm 5. oct 2007 rev 1.1
added enable input

hm 6. oct 2007 rev 1.2
added pos and angle inputs and outputs
night position and angle can now be configured
any manual operation at night will cancel night operation

ts 10. jun 2010 rev 1.5
disabled angle inputs and outputs
deadlines added, dayposition added

ts 30. jun 2010 rev 1.6
POS_Vortag added

*)


Das ist aber ohne Gewähr! Ich hab das gerade kurz zusammengestupft und rein Gedanklich sollte es auch funktionieren. Probieren konnte ich es noch nicht. Teste es einfach mal und berichte mir dann.
Ach ja: Einschalten kannst du das per TRUE auf die Variable POS_Vortag.
Ansonsten kannst du ja mit der Setup-Variable day_position (voreingestellt auf 255, also ganz oben) eine beliebige Position vorgeben, auf die er bei Tagesanbruch fahren soll.

Gruß
Thomas

tomrey

Zitat von: Wu Fu in 02. Februar 2010, 21:29:01
Gibt es eine Möglichkeit die Setupvariablen, die über das anklicken des Bausteines verändert werden nach „außen zu führen“? Hintergrund ist der, dass ich die Jalousiefunktion in einem Funktionsblock erstellt habe um diesen für mehrere Zimmer verwenden zu können.  Nun kann es aber z.B. vorkommen, dass die Zimmer nach verschiedenen Himmelsrichtungen ausgerichtet sind. Damit man nicht für jede Richtung eigene FBs erstellen muss wäre es gut, wenn man diese Parameter nach außen führen kann.
Bei mir sind es FB wegen unterschiedlich langer Rollos und Raffstores.
Die Frage ist zwar uralt aber ich habe keine Antwort gefunden...
Gruß

peewit

hallo

bibliothek als projekt öffnen und den jeweiligen baustein editieren

also bei blind_set machst du aus
VAR_INPUT CONSTANT

einfach VAR_INPUT

dann hast du deine eingangsparameter klassisch zur verfügung