'Inteligenty' dom ze sterownikiem PLC
Główna => Programowanie => Wątek zaczęty 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.
-
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,
-
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)
-
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
-
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.
-
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.