Ne, n Relais brauchst du dazu nicht. Die Dimmerklemme regelt einfach komplett auf 0V runter und somit ist die Sache gegessen.
Funktioniert so einwandfrei!
Funktioniert so einwandfrei!
Dieser Abschnitt erlaubt es Ihnen, alle Beiträge anzusehen, die von diesem Mitglied geschrieben wurden. Beachten Sie, dass Sie nur Beiträge sehen können, die in Teilen des Forums geschrieben wurden, auf die Sie aktuell Zugriff haben.
Beiträge anzeigen-Menü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
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;
VAR
night : BOOL;
day : BOOL;
last_night : DATE := D#2010-01-01;
last_day : DATE := D#2010-01-01;
END_VAR
tmp := time_zone_offset * 60 + BOOL_TO_INT(DST)*3600;
Seite erstellt in 0.029 Sekunden mit 17 Abfragen.