'Inteligenty' dom ze sterownikiem PLC

 Language:
Szukanie zaawansowane  

Aktualności:

Powrót do strony głównej: www.edom-plc.pl

Autor Wątek: Harmonogram oświetlenia FbScheduleWeekly + FbCalculateSunriseSunset  (Przeczytany 116 razy)

kluszon

  • Newbie
  • *
  • Wiadomości: 2
    • Zobacz profil

Chciałbym uzyskać scenariusz zapalenie światła na zewnątrz 30 minut po zachodzi słońca i wyłączenia o ustalonej godzinie np. 23:00.

Bez problemu udało mi się zrobić harmonogram czasowy na WagoAppScheduler.FbScheduleWeekly. (Średnio mi pasuje domyślny widget w webvisu, ale nie wiem jak zrobić swój :D) Dodatkowo chciałem, żeby godzina załączenia zmieniała się w zależności od godziny zachodu słońca. Z tego co widzę funkcja FbScheduleWeekly nie ma opcji ustawiania czasu z kodu. Nie da się też tego ustawić w "ustawieniach" widgetu. Opcje jaką widzę to zrobienie własnego widgetu, jedynie co to chyba musi on zapewniać wszystkie parametry zgodnie z WagoAppScheduler.typSingleScheduleWeekly i wtedy miałbym z kodu dostęp do modyfikacji parametrów.

Proszę podpowiedź czy to dobry kierunek.
Zapisane

schuey

  • Jr. Member
  • **
  • Wiadomości: 54
    • Zobacz profil
Odp: Harmonogram oświetlenia FbScheduleWeekly + FbCalculateSunriseSunset
« Odpowiedź #1 dnia: Stycznia 22, 2024, 09:31:56 pm »

Witam,

Odpisuję z pewnym opóźnieniem, może już probem rozwiązany, ale jak nie to podpowiem jak u mnie to rozwiązalem. Mam dosłownie ten sam scenariusz, lampkę przed gankiem zapalam po zachodzie słońca a gaszę o 23:00.

W bloku zmiennych mam:
PROGRAM READ_CLOCK
VAR
CurrentLocal, Sunset_Offset: DATE_AND_TIME;
CurrentTimeInt : INT;
Sun : FbCalculateSunriseSunset := (xDST:= TRUE, rTimeZone := 1, rLatitude := XX.XX, rLongitude := YY.YY);
Switch_Sunset_Offset: F_TRIG;
Switch_11PM: R_TRIG;
END_VAR

a w kodzie programu:
GLOBAL.CURRENT_TIME := SysRtcGetTime(TRUE);
CurrentLocal := UTC_TO_LTIME(
UTC := GLOBAL.CURRENT_TIME,
DST_ENABLE := TRUE,
TIME_ZONE_OFFSET := 60
);

CurrentTimeInt := HOUR_OF_DT(CurrentLocal) * 60 + MINUTE_OF_DT(CurrentLocal);
Switch_11PM(CLK := CurrentTimeInt > 1380);

Sun(dtUTC_Time := GLOBAL.CURRENT_TIME);

Sunset_Offset :=  Sun.dtSunset + T#40M;
Switch_Sunset_Offset(CLK := CurrentLocal < Sunset_Offset);

Potem, w bloku gdzie steruję lampką:
...
Ganek(
xButton := Wiatrolap_Dolny.xShort OR ModbusGanek,
xCentralOn := READ_CLOCK.Switch_Sunset_Offset.Q,
xCentralOff := Wiatrolap_Lewy.xLong OR Schody_Parter.xLong OR READ_CLOCK.Switch_11PM.Q
);
...

"Ganek" to zmienna FbLatchingRelay. Generalnie całe rozwiązanie opiera się na użyciu zbocza opadającego do stwierdzenia czy czas obecny nie jest już mniejszy niż czas zachodu (+offset). Do wyłączenia używamy zbocza rosnącego do sprawdzenia czy obecna godzina dnia ma więcej minut niż 1380 (23 * 60). Oba podpinamy do xCentralOn/Off dla włącznika.

pozdrawiam
Zapisane

kluszon

  • Newbie
  • *
  • Wiadomości: 2
    • Zobacz profil
Odp: Harmonogram oświetlenia FbScheduleWeekly + FbCalculateSunriseSunset
« Odpowiedź #2 dnia: Stycznia 30, 2024, 08:24:56 pm »

@schuey

Dziękuje za podpowiedź :)

Ja rozwiązałem problem budując własny widget bliźniaczy do SchedulerWeekly z bibloteki WagoAppScheduler, następnie użyłem go jako szablon w wizualizacji, co pozwoliło mi na dostęp do poszczególnych pół i ich wartości z kodu. W POU harmonogramu uzupełniam sobie strukturę WagoAppScheduler.typSingleScheduleWeekly wartościami z widgetu, mogę je dowolnie modyfikować i w razie potrzeby użyć czasu wschodu czy zachodu słońca.

Zapisane