Prawie wszystkie projekty z jakimi się spotykamy w automatyce wymagają interfejsu człowiek-maszyna (ang. HMI), jednakże czasami napotykamy na projekt gdzie zamontowanie takiego panelu wiąże się przekroczeniem budżetu – co wtedy? Wtedy możemy sięgnąć po rozwiązania open-source! Informatycy dawno zrozumieli, że lenistwo to pierwszorzędna cecha rozwoju i zamiast konkurować ze sobą w narzędziach zaczęli konkurować w produktach – większość aplikacji web’owych opiera się o rozwiązania typu FOSS – free open source software (darmowe otwarte oprogramowanie). Wspólnie rozwijają i wspólnie wykorzystują dostępne biblioteki i inne tego typu rozwiązania – i tak docieramy do Node-RED.
Node-RED
Node-RED to środowisko oparte o zrozumiały przez przeglądarki język – javascript oraz środowisko node.js (js = skrót od javascript), które odpowiada za obsługę ze strony serwera. Node-RED można uruchomić na Windowsie, Linuxie, Raspberry PI, a także w chmurze – dodatkowa zaleta to możliwość uruchomienia w kontenerze, tzn. w niezależnym wirtualnym środowisku, dzięki czemu na jednym systemie równolegle może pracować wiele procesów NodeRED, a więc i wiele wizualizacji.
Wyobraźmy sobie! Jeden komputer, a do tego kilkanaście wyświetlaczy dotykowych zamiast wielu drogich paneli HMI, bajka.
Do czego można wykorzystać Node-RED?
- Urządzenia typu IoT;
- Inteligentne domy;
- Wizualizacja procesów / stanu maszyn;
Wielu z Was może zastanawiać się nad stabilnością Node-RED, jednakże nie ma się o co martwić. Node.js to silnik przetestowany w bojach aplikacji internetowych, a sam Node-RED to interfejs który generuje kod w javascript. Cytując wikipedie:
Wiele firm i korporacji aktywnie korzysta z Node.js. Są to m.in. Groupon, IBM, LinkedIn, Microsoft, Netflix, PayPal, Walmart, Uber, czy Yahoo!.
Jak możemy to wykorzystać? Pokażę przykład sterowania falownikiem przez sterownik S7-1200. Zanim rozpoczniemy pracę nad wizualizacją przygotujmy sobie program w TIA Portal.
S7-1200 PLCSIM
Aby każdy, mając w domu komputer, mógł przetestować prezentowane rozwiązanie – napisałem program symulujący pracę falownika, dzięki czemu wystarczy uruchomić symulator PLCSIM w TIA Portal. Po kolei – tworzymy nowy projekt, dodajemy sterownik z rodziny S7-1200 (tutaj 1214C DC/DC/DC), przechodzimy do konfiguracji i zaznaczamy opcję:
Uruchamiamy symulator PLCSIM, wgrywamy program oraz konfigurację sprzętową, łączymy się z symulatorem i resztę zmian będziemy wgrywać „online”. Teraz tworzymy Datablock do wymiany danych z wizualizacją, po raz kolejny musimy zaznaczyć ważną opcję:
Ostatnim krokiem jest dodanie Function Block’a odpowiadającego za symulację pracy falownika:
Program widoczny powyżej obserwuje również LifeBit, czyli cyklicznie przełączany bit, który przesyła do sterownika wizualizacja, jeżeli nie zmienia się przez zbyt długi czas to praca naszego falownika zostanie zatrzymana – nie będą spełnione zezwolenia pracy.
TIA Portal na ten moment możemy zminimalizować, ostatnim krokiem związanym z PLC jest jeszcze uruchomienie programu NetToPLCsim, który pozwala na łączenie się symulatora ze światem zewnętrznym. Program należy po uruchomieniu skonfigurować jak niżej, uwaga: adres ip 192.168.8.163 to był adres mojego komputera więc może się różnić, natomiast adres 192.168.0.1 to adres symulatora PLCSIM. Ostatnią opcją jest Rack/Slot które dla sterowników z rodziny S7-1200/1500 jest 0/1:
Po co właściwie NetToPLCsim? Uruchamiałem TIA Portal oraz Node-RED na osobnych systemach, co wymagało otwarcia symulatora PLC na świat.
Projekt w Node-RED
Po zainstalowaniu Node-RED zgodnie z instrukcją na stronie nodered.org należy dodać bibliotekę s7comm (node-red-contrib-s7comm), biblioteka ta jest niezbędna do komunikacji pomiędzy Node-RED, a sterownikiem. Kolejną biblioteką którą należy dodać jest dashboard (node-red-dashboard), dzięki której łatwo opracujemy ładny interfejs, taki jak poniżej:
Jak to osiągnąć? Należy uruchomić proces Node-RED, a następnie w przeglądarce wpisać localhost:1880. Znajdziemy się na stronie naszego serwera Node-RED, gdzie możemy edytować i wdrażać program (nazywany tutaj flow). Program znajdujący się poniżej działa w następujący sposób:
- Cyklicznie odczytuje dane ze sterownika – memory_clock oraz statusy z DB_NodeRED. W przypadku wykrycia błędu połączenia lub nawiązania połączenia ze sterownikiem, informuje nas monitem w prawym górnym rogu ekranu.
- Cyklicznie wysyła LifeBit ciągle zmieniając stan z 0 na 1 i z 1 na 0.
- Jednorazowo po starcie odczytuje aktualne dane rozkazów z DB_NodeRED i zapisuje ich stan do kontrolek wizualizacji.
- Po każdej zmianie stanu kontrolek (rozkazów) wysyłane są dane do sterownika, jest to komunikacja acykliczna.
Widać również bloki funkcyjne, są niezbędne, ponieważ Node-RED operuje na obiektach, gdzie podstawowym obiektem jest msg, który zawiera payload z danymi, a dane pobierane przez s7comm zawierają payload który sam jest obiektem! Więc musimy z niego wyciągnąć interesujące nas dane, a dokładnie wartość zmiennej, która kryje się w msg.payload.value[0]. Czyli! Po odczycie przepisujemy msg.payload = msg.payload.value[0], natomiast przed zapisem w sterowniku odwracamy ten proces. Uwaga! Funkcje zawierają opisy – int/float/bool ponieważ po odczycie oprócz przepisania w odpowiednie miejsce musimy również ustalić typ zmiennej.
Tak przygotowaną wizualizację możemy uruchomić również na smartfonie! Automatycznie jest ona przekształcana w wersję mobile:
Kod powyższego flow, a także kod na sterownik Siemensa znajdziecie w Klubie Automatyka.
Skorzystanie z Node-RED może być dla automatyków zderzeniem z całkowicie inną filozofią programowania, sam się z tym spotkałem. Przede wszystkim program nie wykonuje się cyklicznie dopóki mu tego nie wskażemy, wszystko co się dzieje poza tym jest oparte o reakcje na zdarzenie, a więc wciśnięcie przycisku, czy przesunięcie suwaka. Jakie jeszcze są możliwości Node-RED? Ogromne. Łączenie z bazami danych SQL, komunikacja po protokołach jak MQTT czy OPC UA, zapis/odczyt plików, właściwie wszystko do czego zdolny jest Node.js, a tego jest sporo. Osobiście nie wróżę powodzenia tego w „poważnym przemyśle”, ale w aplikacjach domowych lub prostych urządzeniach, gdzie przestoje nie kosztują więcej niż maszyna – jak najbardziej! Otwiera to wiele możliwości stworzenia inteligentnej maszyny w oparciu o tani i prosty sterownik oraz Node-RED.
Poniżej załączam również filmik, będący nagraniem z ekranu smartfona podczas zabawy z gotową wizualizacjo-symulacją!
![]() ![]() Nagrodę Voucher na szkolenie + kubek termiczny + zestaw gadżetów dostarcza ambasador konkursu, firma Mitsubishi Electric. |