'Inteligenty' dom ze sterownikiem PLC

Główna => Programowanie => Wątek zaczęty przez: rafkar w Grudnia 06, 2013, 12:47:51 pm

Tytuł: Aktualny czas w sterowniku
Wiadomość wysłana przez: rafkar w Grudnia 06, 2013, 12:47:51 pm
Witam mam taki problem . Potrzebuję odczyać jaki jest aktualny czas w sterowniku chodzi data oraz godzina . Próbowałem korzystać z funkcji TIME() ale wyniki są jakieś dziwne DT#1970-02-08-18:13:25 . Dodam ze w sterowniku jest ustawiony prawidłowy czas . Z góry dzięki za pomoc.
Tytuł: Odp: Aktualny czas w sterowniku
Wiadomość wysłana przez: admin w Grudnia 06, 2013, 06:19:38 pm
Cześć,

czas z zegara trzeba odczytywać funkcją SysRtcGetTime z biblioteki SysLibRtc.lib.  W praktyce wygląda to tak:

CURRENT_TIME:=SysRtcGetTime(TRUE);

A w szczegółach proponuję:

1. W Resrouces, Global Variables zdefiniować zmienną globalną:

VAR_GLOBAL
   CURRENT_TIME            :DATE_AND_TIME;
END_VAR

2. Utworzyć oddzielny proces np. ReadCLock(); W Resources, Task Configuration utworzyć dodatkowy Task typu cyclic uruchamiany co T#1s0ms i wywołać w tym tasku program ReadClock();

3.  W programie ReadClock() zamieścić 1 linię:
CURRENT_TIME:=SysRtcGetTime(TRUE);

W efekcie w całej strukturze programu będzie dostępna zmienna CURRENT_TIME typu DATE_AND_TIME, odświeżana co 1sek.

Pozdrawiam,
Tytuł: Odp: Aktualny czas w sterowniku
Wiadomość wysłana przez: mordorr w Stycznia 23, 2015, 12:22:31 am
Wątek antyczny, ale może komuś się przyda, albo ktoś wyprowadzi mnie z błędu.

SysRtcGetTime ma jedną wadę jak dla mnie - nie wiem jak przerobić DT na DayOfWeek (1 - poniedzialek, 2 - wtorek....)

więc odczyt czasu zrobiłem ciut inaczej:
Biblioteka SysLibTime - i funkcja CurrTimeEx
produktem wyjsciowym jest tablica w której czas jest już ładnie "rozsplitowany" i mozna go wykorzystać np w FbTimeSwitch z Building_Common.lib (nie potrzebuję scheduler_03.lib)



Tytuł: Odp: Aktualny czas w sterowniku
Wiadomość wysłana przez: hexal w Lutego 18, 2016, 02:16:16 am
witam,
może to trochę zawiłe ale działa (841): DAY_OF_WEEK(SDT_TO_DATE(DT_TO_SDT(CURRENT_TIME))) mi w bWEEK_DAY z FbTimeSwitch;
tj podaje jako 1 - poniedziałek, 2 - wtorek itd.

Ja zrobiłem sito czasowe do uruchamiania oświetlenia przez czujkę na schodach z wykorzystaniem TIMECHECK:

czy_noc : BOOL;

czy_noc:=TIMECHECK(SDT_TO_TOD(DT_TO_SDT(CURRENT_TIME)), TOD#19:00:00, TOD#6:30:00); (*aktualna godzina, poczatek nocy, koniec nocy*)

po dodaniu do zmiennych:
zegar_astronomiczny :SUN_TIME;

i w programie:
zegar_astronomiczny(
LATITUDE:=51,
LONGITUDE:=22,
UTC:=SDT_TO_DATE(DT_TO_SDT(CURRENT_TIME)));

zmieniłem
czy_noc:=TIMECHECK(SDT_TO_TOD(DT_TO_SDT(CURRENT_TIME)), zegar_astronomiczny.SUN_SET, zegar_astronomiczny.SUN_RISE);

w planach optymalizacja żeby tylko raz albo dwa dla fasonu przeliczał wschód i zachód słońca żeby się sterownik nie męczył ;)

pozdrawiam,
piotrek
Tytuł: Odp: Aktualny czas w sterowniku
Wiadomość wysłana przez: Gradek w Czerwca 17, 2021, 11:32:40 pm
Moje pytanie dotyczy tego samego tematu, więc się tutaj przykleję...czy PLC Wago 750-880 jest w stanie sam zmieniać czas letni na zimowy i z powrotem? W ustawieniach przez webserver można ręcznie zmienić czas, datę, strefę czasową i jest też checkbox od DST (daylight saving time = czas letni). Chciałbym aby PLC dawał prawidłową godzinę. Aktualnie w Codesys korzystam z funkcji DST z Oscata, ale może jest prostszy sposób.
Tytuł: Odp: Aktualny czas w sterowniku
Wiadomość wysłana przez: nadol w Lipca 29, 2021, 09:59:34 am
Cześć,
Możliwe jest wykorzystanie biblioteki "WagoLibDaylightSaving". Jeżeli dobrze pamiętam firmware w wersji 14 umożliwia ustawienie tych opcji z poziomu webserwera bez konieczności stosowania biblioteki.