Przewodnik wdrażania generatora dat juliańskich SLC-5/04
Zaimplementuj generator daty juliańskiej w sterowniku SLC-5/04 do wyjścia ASCII dla drukarek etykiet. Logika drabinkowa krok po kroku z instrukcjami obliczen...
Rodzina SLC-5/04, obejmująca procesory takie jak 1747-L542, nie udostępnia wbudowanej instrukcji numeru dnia juliańskiego (JDN). Pakowanie, kodowanie partii i drukarki etykiet często wymagają wartości dnia roku lub kompaktowego ciągu YYYYDDD, dlatego logikę trzeba zbudować z użyciem zwykłych operacji matematycznych i operacji na tabelach danych. Ten poradnik przedstawia łatwe w utrzymaniu podejście wykorzystujące wyrażenia CPT, tabelę skumulowanych liczby dni miesięcy, obsługę lat przestępnych oraz konwersję ASCII na potrzeby danych wysyłanych do drukarki, a także wskazuje ograniczenia obliczeń szesnastobitowych, które często powodują problemy w pierwszych implementacjach.
Procesory SLC-5/04 obliczają dzień roku i kody w stylu daty juliańskiej w logice drabinkowej za pomocą CPT, plików całkowitoliczbowych i starannie dobranych wartości RTC.
Materiały źródłowe czasami wskazują słowa pliku statusowego w obszarze S:50–S:52 jako źródło roku, miesiąca i dnia, podczas gdy inna dokumentacja podkreśla szerszy obszar zegara czasu rzeczywistego wokół S:37, zależnie od procesora i wersji firmware’u. Ostrożnie dobieraj słowa źródłowe RTC: przed przypisaniem aliasów tagów sprawdź dokładną mapę pliku statusowego dla zainstalowanego katalogu i serii. Gdy pola kalendarza są już zweryfikowane, sam algorytm można przenosić między projektami SLC-5/04.
Układ tabeli danych
Przejrzysty układ liczb całkowitych ułatwia późniejszą konserwację procedury. Typowy schemat wykorzystuje rejestry N7 w następujący sposób: N7:0 — rok, N7:1 — miesiąc, N7:2 — dzień miesiąca, N7:3 — wynikowy dzień roku, N7:4 — flaga roku przestępnego, a N7:5 — bufor wartości pośrednich dla wyników CPT. Skumulowane przesunięcia dni dla miesięcy należy przechowywać w stałej tabeli liczb całkowitych — na przykład w zakresie N10:1–N10:12, zawierającym wartości 0, 31, 59, 90, 120, 151, 151, 181, 212, 243, 273, 304 dla nieprzestępnego wariantu bazowego do listopada; obsługę lutego należy realizować za pomocą flagi roku przestępnego, a nie przez modyfikowanie tabeli w czasie wykonywania programu. Dostosuj dokładną tabelę do wybranego indeksowania od zera, ale opisz je bezpośrednio przy szczeblach.
Przykładowe podejście do DOY (koncepcyjne)
Leap = (Y podzielny przez 4) z uwzględnieniem zasad dla lat kończących stulecie
DOY = Day + Cumulative[Month] + (Leap AND Month>2)
Ciąg YYYYDDD za pomocą formatowania w stylu ASC / AIF dla drukarek
W wielu zakładach dzień roku (DOY) w formacie YYYYDDD jest wystarczający i pozwala uniknąć pełnej złożoności astronomicznego JDN. Pełne numery dni juliańskich obejmujące stulecia wymagają większej ostrożności przy doborze typów całkowitych; operacje CPT w sterowniku SLC na liczbach szesnastobitowych powodują przepełnienie, jeśli wartości pośrednie nie są zapisywane etapami. Zaleca się obliczać DOY w przestrzeni szesnastobitowej, a następnie łączyć rok z uzupełnionym zerami DOY w pliku ASCII dla drukarki, zamiast wymuszać zapis całej wartości w jednym zbyt dużym całkowitym słowie.
Rok przestępny i struktura CPT
Logika roku przestępnego musi być zgodna z zasadami kalendarza cywilnego stosowanymi w systemie jakości. Minimalnie lata podzielne przez cztery są latami przestępnymi; jeśli cykl życia produktu obejmuje granice stuleci, należy zastosować pełne wyjątki kalendarza gregoriańskiego (lata kończące stulecie są przestępne tylko wtedy, gdy są podzielne przez 400). Ustaw N7:4 na jeden, gdy rok jest przestępny. Podczas dodawania skumulowanego przesunięcia miesiąca dodaj jeden dzień tylko wtedy, gdy flaga roku przestępnego jest ustawiona, a miesiąc jest późniejszy niż luty. Wykonuj to dodawanie w osobnej instrukcji CPT, zamiast ukrywać zagnieżdżone warunki w nieczytelnym wyrażeniu.
Kopiuj rok, miesiąc i dzień ze zweryfikowanych słów źródłowych RTC do rejestrów roboczych N7 w ramach wolnego zadania okresowego albo przy pierwszym skanowaniu i codziennym zboczu sygnału. Nie odczytuj słów RTC w każdym swobodnie wykonywanym szczeblu, jeśli formatowanie ASC jest kosztowne; odświeżanie raz na minutę zwykle wystarcza do kodowania daty.
Ciągi DOY uzupełnione zerami z lewej strony niezawodniej zasilają drukarki etykiet niż surowe liczby całkowite, gdy długość kodu kreskowego musi pozostać stała.
Formatowanie ASCII dla drukarek etykiet
Większość drukarek przemysłowych oczekuje ciągu o stałej szerokości. Po obliczeniu DOY w N7:3 użyj instrukcji pliku ASCII, aby utworzyć ciąg taki jak YYYYDDD, z zerami z lewej strony pola dnia. Przed wyzwoleniem uzgadniania drukowania sprawdź długość ciągu. Jeśli protokół drukarki wymaga separatorów lub prefiksów charakterystycznych dla zakładu, utwórz je w tym samym buforze ciągu zamiast polegać na automatycznym uzupełnianiu przez drukarkę.
- Potwierdź mapowanie słów RTC dla konkretnego firmware’u 1747-L542 (lub zainstalowanego sterownika SLC-5/04).
- Utwórz robocze tagi N7 oraz tabelę skumulowanych liczby dni miesięcy w pliku liczb całkowitych.
- Napisz logikę CPT roku przestępnego oraz instrukcję CPT DOY, która dodaje dzień, wartość skumulowaną i korektę roku przestępnego.
- Sformatuj YYYYDDD za pomocą ASC i przetestuj wynik względem znanych dat kalendarzowych, w tym 28 lutego i 1 marca w latach przestępnych i nieprzestępnych.
- Zabezpiecz się przed przepełnieniem szesnastobitowym, jeśli którakolwiek procedura próbuje obliczać pełne wielowiekowe JDN; rozdziel obliczenia na etapy lub przenieś je poza sterownik SLC.
Kontrole roku przestępnego i uzupełniania zerami dla drukarki
Daty weryfikacyjne powinny obejmować 2024-02-29, 2024-03-01, 2025-02-28 oraz przejścia na koniec roku 12-31. Porównaj DOY ze sterownika PLC z niezależnym kalendarzem. Do typowych problemów należą zaufanie niewłaściwym adresom pliku statusowego, pominięcie korekty lutowej dla roku przestępnego, drukowanie nieuzupełnionych zerami wartości DOY, które przesuwają pola kodu kreskowego, oraz przepełnienie wartości pośrednich CPT po późniejszym rozszerzeniu procedury w kierunku pełnego JDN. Pozostaw w logice drabinkowej komentarze wskazujące rzeczywiste słowa źródłowe RTC używane w danej maszynie.
Jeśli kod daty jest częścią większej celi pakującej, przechowuj generator jako plik wielokrotnego użytku i ujednolić układy liczb całkowity między liniami. Zapasowe procesory i dokumentacja tych systemów PLC SLC-500 powinny zawierać procedurę kodowania daty, aby wymiana procesora nie powodowała po cichu powrotu do starszej, nieprawidłowej implementacji kalendarza.
O autorze
Mark Townsend | Starszy inżynier automatyki – systemy Allen-Bradley
Mark Townsend jest starszym inżynierem automatyki z ponad 18-letnim doświadczeniem w pracy z platformami Allen-Bradley, obejmującym systemy ControlLogix, CompactLogix oraz starsze sterowniki SLC-500. Na co dzień zajmuje się logiką RSLogix / Studio 5000 oraz uruchamianiem interfejsów HMI FactoryTalk View w starzejących się i mieszanych flotach urządzeń.