Przekaźnik programowalny Finder Opta dzięki swojej unikatowej budowie, umożliwiającej precyzyjne zarządzanie i kontrolę nad różnorodnymi procesami produkcyjnymi może odegrać kluczową rolę w dzisiejszej automatyce przemysłowej. Jest to nowoczesne rozwiązanie, które łączy w sobie zaawansowaną funkcjonalność, niezawodność oraz elastyczność, co sprawia, iż jest to idealny wybór dla szerokiej gamy zastosowań – od prostych aplikacji po skomplikowane systemy sterowania. W artykule przedstawimy szczegółowe możliwości i zalety sterownika OPTA, pokażemy, dlaczego tak chętnie stosowany jest w różnych branżach oraz jak jego innowacyjne funkcje mogą przyczynić się do optymalizacji procesów i zwiększenia efektywności operacyjnej.
Chmura Arduino i Over-The-Air (OTA)
Jak wiadomo w sprzedaży dostępne są 3 wersje omawianego urządzenia: LITE, PLUS oraz ADVANCED -wszystkie zasilane są napięciem 12-24VDC, jednak różnią się interfejsami. Najwyższa wersja Advanced wzbudza największe zainteresowanie na rynku i pozwala w pełni wykorzystać potencjał zawarty w sterowniku. Posiada ona możliwość stworzenia protokołów takich jak ModbusTCP, ModbusRTU oraz umożliwia komunikację poprzez WiFi i Bluetooth. Wykorzystany protokół WiFi znacząco usprawnia modernizację istniejącego kodu poprzez zdalną aktualizację (OTA), a także umożliwia podłączenie do chmury i zdalne monitorowanie i kontrolowanie procesów produkcyjnych.
Jak wygląda konfiguracja Chmury i zdalnej aktualizacji?
Jeżeli w stworzonym projekcie w chmurze widzimy znaczek jak na rysunku poniżej oznacza to, iż wykorzystana w projekcie Opta jest zasilana 12..24V DC i podłączona do WiFi oraz komunikuje się z chmurą. Wówczas strzałka jest zielona, a jej wciśnięcie pozwala na uruchomienie wgrywania programu na sterownik.
Po wciśnięciu strzałki w konsoli widzimy, iż procedura Over-The-Air jest dostępna i rozpoczyna się jej inicjalizacja.
Następnie jest tworzone żądanie przesłania napisanego kodu.
Natomiast na końcu widzimy, iż aktualizacja przebiegła pomyślnie, a nasze urządzenie zostało odpowiednio przeprogramowane.
Cała ta procedura jest możliwa po wcześniejszym dodaniu sterownika do Chmury Arduino i wcześniejszej konfiguracji dzięki przewodu USB-C. Dostępność tej funkcji mocno usprawnia ewentualne modernizacje istniejących instalacji i pozwala uniknąć zbędnych i kosztownych wyjazdów serwisowych do zakładów produkcyjnych oddalonych o setki czy choćby tysiące kilometrów. Ogranicza to koszty wyjazdu oraz czas poświęcony na dotarcie do celu, ale też, co kluczowe, zmniejsza czas przestoju produkcji.
Na stronie startowej chmury widzimy w lewej części wszystkie dostępne funkcje takie jak dodane urządzenia, wizualizacje czy też tak zwane „Things”, gdzie tworzymy odpowiednie zmienne reprezentujące wartości pobierane z urządzeń poprzez Optę. W prawej części natomiast znajdziemy ostatnio używane i modernizowane funkcje z nazwą i datą modyfikacji oraz utworzenia w kolejności chronologicznej. Dostępna jest również informacja o tym, kto utworzył dany projekt, o ile był on udostępniony przez kogoś innego. Na górze widzimy przycisk do tworzenia nowych funkcji oraz informację, ile urządzeń jest podłączonych do chmury oraz ile „Things” można jeszcze utworzyć.
Po wciśnięciu przycisku „Create New” i wybraniu „Things” otwiera nam się okno z możliwością tworzenia nowych zmiennych, przypisania danego urządzenia do wykonywania programu, konfiguracji z siecią poprzez WiFi lub Ethernet oraz integracji z inteligentnym domem czy z przesyłaniem danych do innych serwisów. W tym oknie możemy też przejść do zakładki Sketch, w której możemy rozwijać nasz program, a utworzone zmienne automatycznie inicjalizują się w kodzie.
Po skonfigurowaniu i dodaniu wszystkich interesujących nas funkcji okno wygląda jak poniżej.
Kontrola alarmów
Jednym z najważniejszych mechanizmów, które umożliwiają osiągnięcie niezawodności i precyzji systemów sterowania, są alarmy i przerwania w sterownikach programowalnych. Dzięki nim systemy są w stanie natychmiast reagować na nieprzewidziane zdarzenia, minimalizując ryzyko awarii oraz optymalizując procesy produkcyjne. Przerwania to mechanizm, który umożliwia natychmiastową reakcję na zdarzenia zewnętrzne lub wewnętrzne, bez konieczności ciągłego sprawdzania stanu określonych sygnałów. Służą one do przerywania normalnego wykonywania programu w odpowiedzi na sygnał (przerwanie), aby wykonać określone zadanie, takie jak obsługa naciśnięcia przycisku, odbiór danych z interfejsu komunikacyjnego czy obsługa błędów.
Poniżej znajduje się szczegółowy opis działania programu napisanego w środowisku Arduino IDE, który używa przerwań do zarządzania dynamicznymi zmianami stanu przycisku i symulacji różnych wartości napięcia. Głównym celem programu jest monitorowanie napięcia: gdy jego wartość jest równa lub mniejsza niż 24V, dioda LED oraz przekaźnik są załączone, co sygnalizuje poprawny stan. Natomiast, gdy napięcie przekroczy 24V, dioda LED sygnalizuje błąd, a program uruchamia przerwanie, które pozwala na chwilowe zatrzymanie działania, aby obsłużyć sytuację błędu.
Na początku definiujemy zmienne, których będziemy używać w programie. Zmienna errorVoltage to stała wartość napięcia, która sygnalizuje błąd. Voltage jest zmienną przechowującą aktualne napięcie. Relay to pin D0, czyli wyjście przekaźnikowe Opty, do którego może być podłączone jakieś urządzenie, natomiast led1 i led4 to wewnętrzne lampki Opty, które pokazują nam działanie przerwań. ButtonPressed jest zmienną flagową, która jest ustawiana na true w funkcji obsługi przerwania, sygnalizując naciśnięcie przycisku. Zmienna status to zmienna typu bool przechowująca stan przycisku, początkowo ustawiona na false.
W funkcji setup() następuje konfiguracja pinów wyjściowych dla przekaźnika oraz diod LED. Dodatkowo pin przycisku użytkownika BTN_USER jest ustawiony jako wejście, a pin LED_USER, służący do wizualizacji stanu przycisku, jest ustawiony jako wyjście. Funkcja Serial.begin() inicjalizuje komunikację szeregową z prędkością 9600 bps do monitorowania stanu. Natomiast funkcja attachInterrupt konfiguruje przerwanie dla przycisku BTN_USER na zmianę stanu (CHANGE), co oznacza, iż przerwanie będzie wywoływane przy każdym naciśnięciu i zwolnieniu przycisku.
Funkcja loop() to głównafunkcja programu, w którym wykonują się dwa ify. W pierwszym warunku if sprawdzana jest flaga buttonPressed. Gdy flaga ustawiona jest na true, oznacza to, iż zostało wywołane przerwanie. Flagę resetuje się następnie do false. Stan zmiennej status jest przełączany (odwracany), co skutkuje aktualizacją stanu LED_USER, który sygnalizuje wciśnięcie przycisku. Funkcja digitalRead(BTN_USER) sprawdza, czy przycisk jest aktualnie naciśnięty. jeżeli tak, wartość napięcia ustawiana jest na errorVoltage. W przeciwnym razie napięcie ustawiane jest na standardową wartość, czyli 24V. Krótkie opóźnienie zostało dodane, aby zapobiec szybkim zmianom stanu.
W drugim warunku if, na podstawie wartości voltage, odpowiednie komunikaty są wysyłane do portu szeregowego, a diody LED są włączane lub wyłączane. jeżeli wartość voltage jest prawidłowa, czyli mniejsza lub równa 24V, to led1 i wyjście przekaźnikowe są załączone. Gdy jednak voltage przekroczy wartość 24V, wówczas led4 sygnalizuje błąd i dodatkowo jest wysyłana informacja o wystąpieniu błędu, co sygnalizuje nam iż zostało wywołane przerwanie.
Funkcja handleButtonPress() jest odpowiedzialna za obsługę przerwania związanego z naciśnięciem przycisku. Zmienna lastInterruptTime jest używana do przechowywania czasu ostatniego wystąpienia przerwania, aby zapobiec wielokrotnym odbiciom przycisku (debouncing). Wewnątrz funkcji, dzięki funkcji millis(), pobierany jest aktualny czas interruptTime. Warunek if (interruptTime – lastInterruptTime > 10) sprawdza, czy czas od ostatniego przerwania jest większy niż 10 milisekund, co oznacza stabilne naciśnięcie przycisku. jeżeli warunek jest spełniony, flaga buttonPressed jest ustawiana na true, sygnalizując głównej pętli programu, iż nastąpiło przerwanie. Na koniec aktualizowany jest lastInterruptTime na wartość interruptTime, aby przygotować się do obsługi kolejnego przerwania. Ta funkcja zapewnia niezawodne działanie obsługi przycisku poprzez eliminację przypadkowych odbić sygnału.
Zapis danych do pliku i komunikacja Modbus RS-485
W dobie Przemysłu 4.0 i rosnącej roli automatyzacji, gromadzenie i analiza danych stają się fundamentem efektywnego zarządzania procesami przemysłowymi. Sterowniki programowalne, będące sercem nowoczesnych systemów automatyki, nie tylko sterują maszynami i urządzeniami, ale także zbierają ogromne ilości danych operacyjnych. Analiza tych danych umożliwia głębokie zrozumienie funkcjonowania procesów, identyfikację potencjalnych problemów oraz optymalizację wydajności. W tym przypadku można użyć Opty jako narzędzia do zbierania danych np. z licznika energii, a następnie zapisywanie ich do pliku, który będziemy mogli otworzyć w bardziej zaawansowanych programach do weryfikacji i zestawiania danych.
Kod należy rozpocząć od załączenia odpowiednich bibliotek do komunikacji po RS485 oraz od ustawienia odpowiednich parametrów konfiguracji. Te parametry transmisji, zastosowane podczas inicjalizacji Opta, są najważniejsze dla stabilnej transmisji danych RS-485, ponieważ definiują taktowanie komunikacji, aby upewnić się, iż linie RS-485 są już w stabilnym stanie. Należy pamiętać, iż aby zapewnić stabilną pracę, konieczne jest dopasowanie odpowiedniej szybkości transmisji pomiędzy urządzeniami nadawczymi i odbiorczymi.
Kolejnym krokiem jest zainicjalizowanie wszystkich używanych wejść, wyjść oraz lamp LED.
Następnie należy utworzyć funkcję odczytującą dane z licznika energii. Odbywa się to dzięki odpowiednich rejestrów. W instrukcji do ModbusRTU – licznika energii Finder 7M, możemy znaleźć informację, iż dla wszystkich parametru, czyli napięcia, prądu, itd. należy odczytać dwa rejestry. Dlatego w funkcji odczytu najpierw sprawdzamy, czy jest ustanowiona komunikacja po RS485, o ile nie -wystawiamy błąd komunikacji, natomiast jeżeli jest ona poprawna odczytujemy najpierw pierwszy rejestr(word1), potem drugi (word2) i scalamy je ze sobą z odpowiednim przesunięciem bitowym. W kolejnym kroku należy odczytane wartości przekonwertować na odpowiednią wartość.
Kolejnym krokiem jest przypisanie odczytywanych wartości mocy, napięcia czy prądu odpowiednim zmiennym w głównej funkcji wykonującej program, a następnie wyświetlenie ich w oknie Serial Monitor.
W omawianym przykładzie wszystkie odczytywane wartości wyświetlamy z czasem odstępu 3 sekund. Czas odstępu, a także forma wyświetlania wartości może być jednak dowolnie zaprogramowana – w zależności od potrzeb użytkownika. Wyświetlone poniżej dane to tylko wybrane wartości spośród wielu, które oferuje licznik energii, a wszystkie możliwe do odczytania wartości znajdują się w instrukcji protokołu Modbus dla licznika 7M.
Do zapisania wyświetlanych danych można skorzystać z darmowego systemu CoolTerm i ustawić w nim odpowiednie parametry do komunikacji takie same jak w Arduino IDE.
W ostatnim korku w zakładce Options należy wybrać File Capture i zaznaczyć odpowiednie opcje tzn.: Add timestamps to captured data – dodanie daty do odczytu, Autostart on open – w celu zapisu danych do pliku automatycznie po rozpoczęciu połączenia oraz wybranie lokalizacji tworzenia się nowych plików z odczytanymi danymi.
Po przejściu całej tej konfiguracji możemy zauważyć, jak program odbiera dane z Serial Monitora i zapisuje je do pliku .txt w wybranej lokalizacji. Program dodatkowo można skonfigurować tak, aby podawał dokładną datę i czas odczytu danych, co pozwoli na dokładniejszą późniejszą analizę.
Jak widać rozwiązanie oferowane przez Finder ma ogromny potencjał. Sterownik może służyć nie tylko do zarządzania automatyką zarówno domową jak i w przemyśle, ale również świetnie sprawdzi się przy dogłębnej analizie pracy maszyn czy procesów przemysłowych.
Co ważne – decydując się na pracę z przekaźnikiem programowalnym OPTA możemy skorzystać z darmowego systemu oraz z bogatych bibliotek rozwiązań i gotowych kodów przygotowanych przez użytkowników platformy Arduino. Więcej informacji znajdziecie na stronie: https://opta.findernet.com/.