Data i Czas
Logika Czasowa
Opanuj zegar swojego PLC. Od precyzyjnego oznaczania zdarzeń czasem po złożone obliczenia czasu i konwersje formatów, kontroluj każdą milisekundę.
Po co zarządzać czasem w PLC?
Zarządzanie czasem jest kluczowe dla automatyki przemysłowej. Pozwala na precyzyjne rejestrowanie zdarzeń produkcyjnych, wyzwalanie zaplanowanych zadań konserwacyjnych, obliczanie czasów cyklu maszyn i synchronizację systemów rozproszonych za pomocą protokołów NTP.
Nowoczesne sterowniki Siemens PLC oferują zaawansowane typy danych, takie jak DTL (Date and Time Long), który zapewnia bezpośredni dostęp do poszczególnych komponentów (Rok, Miesiąc, Dzień, Godzina) bez skomplikowanych operacji bitowych, co znacznie upraszcza programowanie w porównaniu do starszych formatów DT.
Odczyt Czasu
Dostęp do zegarów systemowych i lokalnych
T_CONV — Wyodrębnianie czasu systemowego
T_CONVCo robi
Wyodrębnia określone komponenty z wartości data/czas lub konwertuje między formatami. Jest niezbędny do uzyskania czytelnych godzin/minut z surowego znacznika czasu.
Kiedy używać
Gdy potrzebujesz wyświetlić tylko czas na HMI z kompletnego tagu Date_And_Time.
Pro Porady
Użyj T_CONV do konwersji TOD (Time_Of_Day) na String w celu łatwego logowania.
Upewnij się, że typy wejściowe i wyjściowe są kompatybilne, aby uniknąć błędów przepełnienia.
W SCL instrukcja ta jest często obsługiwana niejawnie poprzez proste przypisania.
RD_SYS_T — Odczyt czasu systemowego
RD_SYS_TCo robi
Odczytuje aktualny czas systemowy CPU (UTC). W przeciwieństwie do RD_LOC_T, nie uwzględnia czasu letniego ani przesunięć strefy czasowej.
Kiedy używać
Idealny do wewnętrznego logowania, gdzie wymagany jest ciągły, nieskokowy punkt odniesienia czasu (pozwala uniknąć problemów podczas zmian czasu letniego/zimowego).
Pro Porady
Zawsze używaj UTC do przechowywania w bazie danych, aby zapewnić globalną spójność.
Wyjście RET_VAL dostarcza informacji o statusie (np. czy zegar jest zsynchronizowany).
Połącz z RD_LOC_T, jeśli chcesz wyświetlić zarówno czas „techniczny”, jak i „ludzki”.
Arytmetyka
Obliczenia na czasach trwania i znacznikach czasu
T_ADD — Dodaj czas
T_ADDCo robi
Dodaje czas trwania (Time lub LTime) do określonego punktu data/czas. Prawidłowo obsługuje przepełnienia minut, godzin i dni.
Kiedy używać
Obliczanie czasu wygaśnięcia lub zaplanowanego punktu ponownego uruchomienia (np. aktualny czas + 24 godziny).
Pro Porady
Bardzo przydatne do implementacji niestandardowych watchdogów o dynamicznym czasie trwania.
Używaj typów LTime dla precyzji nanosekundowej na procesorach S7-1500.
Jeśli wynik przekroczy maksymalną datę (Rok 2262), CPU ustawia status błędu.
T_DIFF — Różnica czasu
T_DIFFCo robi
Oblicza różnicę między dwoma znacznikami czasu i zwraca wynik jako czas trwania (Time lub LTime).
Kiedy używać
Pomiar dokładnego czasu trwania kroku procesu lub obliczanie czasu pracy maszyny.
Pro Porady
Idealne do obliczeń OEE (Overall Equipment Effectiveness).
Odjęcie późniejszej daty od wcześniejszej zwraca ujemną wartość Time.
Na S7-1200/1500 używaj tagów DTL dla łatwiejszego dostępu do komponentów różnicy.
Konwersja
Zmiany formatu i obsługa String
T_CONV — Konwersja DT na DTL
T_CONVCo robi
Konwertuje starszy format DATE_AND_TIME (8 bajtów) na nowoczesny format DTL lub odwrotnie.
Kiedy używać
Przy łączeniu starszego kodu lub bloków komunikacyjnych z nową logiką zoptymalizowaną dla S7-1500.
Pro Porady
Preferuj DTL we wszystkich nowych projektach, aby uniknąć złożoności BCD (Binary Coded Decimal).
Konwersja na DTL pozwala na pisanie „Tag.MONTH” bezpośrednio w kodzie.
Uważaj na precyzję milisekundową, która może zostać ucięta w niektórych formatach.
DT_TO_STRING — Serializacja czasu
DT_TO_STRCo robi
Konwertuje wartość data/czas na czytelny format String. STRING_TO_DT wykonuje operację odwrotną.
Kiedy używać
Wysyłanie znaczników czasu do pliku CSV na karcie pamięci lub komunikacja z web API.
Pro Porady
Wyjściowy ciąg znaków jest zgodny z formatem ISO 8601 (RRRR-MM-DD-GG:MM:SS.ms).
Użyj STRING_TO_DT do parsowania dat otrzymanych z zewnętrznej bazy danych SQL.
Pamiętaj, że operacje na String bardziej obciążają CPU; używaj ich oszczędnie w szybkich pętlach.
DATE_AND_TIME kontra DTL
Wybór odpowiedniej struktury czasowej
| Cecha | DATE_AND_TIME (Starszy) | DTL (Nowoczesny) |
|---|---|---|
| Rozmiar | 8 bajtów | 12 bajtów |
| Kodowanie | BCD (Trudne do odczytania) | Liczby całkowite (Bezpośrednio czytelne) |
| Dostęp do komponentów | Wymaga maskowania bitów | Strukturalny (Tag.Month) |
| Zakres | 1990 do 2089 | 1970 do 2262 |
| Wsparcie S7-1200/1500 | Tylko kompatybilność | Natywne i zalecane |
| Precyzja | 10 ms | 1 nanosekunda |
Często zadawane pytania
Jaka jest różnica między czasem systemowym a czasem lokalnym?
Czas systemowy (RD_SYS_T) to zawsze UTC, zapewniający stabilny punkt odniesienia. Czas lokalny (RD_LOC_T) dostosowuje się do Twojej strefy czasowej i reguł czasu letniego (DST) skonfigurowanych we właściwościach CPU.
Jak zsynchronizować zegar PLC z serwerem?
Włącz NTP (Network Time Protocol) w konfiguracji sprzętowej CPU. Podaj adres IP swojego serwera czasu, a PLC automatycznie dostosuje swój wewnętrzny zegar.
Dlaczego moje DATE_AND_TIME pokazuje dziwne wartości w Hex?
Starszy format DT używa kodowania BCD. Wartość 25 dziesiętnie jest przechowywana jako 16#25 w BCD. Zawsze używaj instrukcji konwersji lub DTL, aby poprawnie odczytywać wartości.
Czy mogę obliczyć różnicę między dwoma tagami DTL bezpośrednio?
W SCL możesz po prostu użyć operatora „-” między dwoma tagami DTL. TIA Portal automatycznie wywoła dla Ciebie instrukcję T_DIFF.