Jak udostępnić dane ze sterownika PLC do systemu SCADA korzystając z protokołu MQTT?
Kontakt w sprawie artykułu: Marcin Woźniczka - 2020-02-27
Z tego artykułu dowiesz się:
- Co będzie potrzebne do udostępniania danych za pomocą protokołu MQTT
- Jak udostępniać dane z programu komunikacyjnego i sterownika PLC
- Jak udostępniać dane z aplikacji Wonderware InTouch
W poprzedniej części „Jak wykorzystać protokół MQTT w systemach telemetrii opartych o aplikacje SCADA?” dowiedziałeś/aś się, jak – wykorzystując przemysłowy protokół Internetu rzeczy IIoT czyli MQTT – pobierać dane z rozproszonego systemu telemetrycznego SCADA na przykładzie oprogramowania Wonderware InTouch.
Co będzie potrzebne, aby udostępnić dane za pomocą protokołu MQTT?
1. Dostęp do Internetu
Architektura komunikacji bazuje na sieci Internet. W komunikacji wykorzystującej protokół MQTT istnieje nadawca (producent danych), odbiorca (konsument lub subskrybent danych) oraz pośrednik – MQTT Broker.
Konsument z producentem danych nie komunikują się bezpośrednio między sobą, dzięki temu w rozproszonym układzie telemetrycznym nie muszą one posiadać statycznego i publicznego adresu w Internecie.
To pośrednik, czyli MQTT Broker musi posiadać publiczny adres, a nadawca i odbiorca danych mogę korzystać z współdzielonego dostępu do Internetu (urządzenia zlokalizowane za routerami, np. w sieci typu NAT). Więcej informacji na temat, czym jest Broker, można znaleźć we wspomnianym poradniku.
2. Oprogramowanie SCADA – Wonderware InTouch
Oprogramowanie do wizualizacji Wonderware InTouch podobnie jak programy komunikacyjne będzie źródłem danych, które uzyskane ze sterownika PLC będą przetwarzane i następnie udostępniane do odbiorcy za pomocą protokołu MQTT.
3. Programy komunikacyjne i konwerter protokołów
Programy komunikacyjne będą potrafiły pobrać dane generowane przez sterowniki PLC i udostępnić je za pomocą protokołu MQTT do urządzeń odbiorczych. W przypadku oprogramowania Wonderware będzie to OI Gateway – program komunikacyjny pozwalający konwertować protokoły Suitelink, OPC, OPC UA i MQTT oraz program komunikacyjny GESRTP do sterowników Emerson (dawniej GE).
Na potrzeby testów i tylko testów, w ASTOR uruchomiony został broker w wersji otwartej, nieszyfrowanej, bez uwzględnienia użytkowników. Oznacza to, ze każdy może być publisherem danych, każdy te dane może odczytać, każdy te dane może zmienić, a sama transmisja danych odbywa się w sposób jawny i nieszyfrowany.
W jaki sposób udostępniać dane bezpośrednio z programu komunikacyjnego i sterownika PLC?
W celu pokazania sposobu udostępniania danych zastosujemy kontroler Emerson PACSystems RX3i, z którym będzie się komunikował program komunikacyjny do obsługi protokołu SRTP – OI Server GESRTP. Zakładamy, że program komunikacyjny GESRTP łączący się ze sterownikiem jest już skonfigurowany prawidłowo i pobiera dane ze sterownika dla programu wizualizacyjnego InTouch, a jego konfiguracja wygląda następująco (pole Host Name to adres sterownika źródłowego):
Z punktu widzenia dalszej konfiguracji ważne jest, jak skonfigurowany jest temat komunikacji na zakładce Device Groups – jego nazwa i interwał odpytywania sterownika.
W konsoli SMC, gdzie zainstalowany jest program komunikacyjny OI GESRTP oraz OI Gateway, rozwiń gałąź programów komunikacyjnych OI Servers i na poziomie OI.GATEWAY.2 / Configuration z menu kontekstowego wybierz Add MQTT_Broker Connection, aby utworzyć połączenie MQTT i nadaj temu połączeniu nazwę – przykładowo BrokerASTOR.
W oknie konfiguracyjnym połączenia wskaż adres brokera MQTT oraz port TCP, na którym nasłuchuje ta usługa. Na potrzeby testów skorzystaj z otwartego, testowego brokera ASTOR, podając jego adres mqtt.astor.com.pl oraz domyślny port 1883, a następnie sprawdź jego dostępność przyciskiem Validate Address and Port. Testowy broker ASTOR nie wymaga szyfrowania komunikacji, więc pozostaw tę opcję wyłączoną.
Następnie w drzewie na poziomie utworzonego wcześniej połączenia utwórz grupę MQTT wybierając z menu kontekstowego Add MQTTGroup Connection i nadaj jej nazwę, przykładowo MQTTGroup.
Domyślne ustawienia grupy połączeń są wystarczające. W zależności od wymagań i konfiguracji samego brokera, w tym miejscu można skonfigurować użytkownika i hasło w celu zapewnienia wyższego bezpieczeństwa. Do testów opcje te pozostaw wyłączone.
Aby wysyłać dane do Brokera, należy skonfigurować jeszcze połączenie pomiędzy konwerterem protokołów OI Gateway a programem komunikacyjnym GESRTP oraz wskazać, które dane wysyłasz i pod jakimi adresami będą one dostępne. W tym celu w drzewie, na poziomie OI.GATEWAY.2 / Configuration, z menu kontekstowego wybierz Add SuiteLink Connection, aby utworzyć połączenie między tymi programami za pomocą wewnętrznego protokołu Wonderware Suitelink i nazwij je, przykładowo SLGESRTP.
W konfiguracji połączenia Suitelink w polu Server Name określ nazwę programu komunikacyjnego, z którego będziesz korzystać (w naszym przypadku GESRTP), a w polu Server Node wskaż nazwę lub adres IP komputera, gdzie ten program pracuje. Gdy oba są na tym samym komputerze, pozostaw localhost.
Na poziomie utworzonego połączenia Suitelink, z menu kontekstowego wybierz Add Topic Connection, aby utworzyć obiekt reprezentujący temat komunikacji, skonfigurowany w programie komunikacyjnym GESRTP i nazwij go np.: TopicSterownik.
W jego konfiguracji, na pierwszej zakładce zaznacz Change Topic Name (aby móc zmienić domyślną nazwę tematu) i w polu Topic Name wprowadź nazwę zdefiniowanego tematu komunikacyjnego, na taką, jaką nadałeś/aś w programie OI GESRTP, w tym przypadku będzie to Sterownik (zgodnie z Rysunkiem 2 tego poradnika). Jeżeli parametry mają być tylko do odczytu, można dodatkowo zaznaczyć opcję Read Only.
Na zakładce Device Items należy przygotować listę adresów, które chcesz pobierać z programu komunikacyjnego (tu: OI GESRTP) i przekazać do konwertera protokołów. W tym miejscu nadaj im symboliczne nazwy. W kolumnie Name wprowadź nazwę symboliczną, a w polu Item Reference adres w sterowniku PLC. W tym przypadku adres R19 F będziesz publikować pod nazwą symboliczną TemperaturaZbiornika.
Na zakładce MQTT Publish Items, z listy Publish User Group wybierz zdefiniowaną wcześniej grupę połączeń MQTT (w tym przypadku będzie to BrokerASTOR.GrupaMQTT). Zawartość pola Unique Item ID jest generowana losowo w momencie tworzenia obiektu tematu komunikacji i jest identyfikatorem typu GUID. Musi to być unikalna fraza dla Brokera MQTT, gdyż będzie częścią adresu zmiennej protokołu MQTT.
W przypadku korzystania z publicznych brokerów MQTT warto używać tych generowanych losowo identyfikatorów, aby mieć pewność, że odczytujesz te dane, które chcesz. W przypadku posiadania własnego brokera MQTT (utrzymywanego w firmie lub zakupionej usługi w chmurze), w celu skrócenia adresu poszczególnych pomiarów, można ten identyfikator zmienić na bardziej przyjazny wskaźnik.
Na potrzeby tego poradnika, nadamy mu nazwę PoradnikAutomatykaASTOR. Na liście Reference Items / MQTT Syntax dodajemy te aliasy symboliczne zdefiniowane na zakładce Device Items, które chcesz publikować do brokera (na zakładce Device Items możemy wskazać i przygotować mapę aliasów dla pomiarów, które chcesz wykorzystać nie tylko do komunikacji po MQTT).
W tym poradniku, z dwóch zdefiniowanych poprzednio adresów, tylko jeden chcemy publikować do Brokera – TemperaturaZbiornika. Z menu kontekstowego na liście Reference Items / MQTT Syntax wybierz Add i wprowadź symboliczną nazwę, pod którą kryje się zawartość adresu R19 F (symbol zdefiniowany poprzednio) czyli TemperaturaZbiornika.
Zawartość pola MQTT Syntax to adres, pod którym będzie dostępna TemperaturaZbiornika i jest generowany automatycznie, jak widać z prefiksem unikalnego identyfikatora PoradnikAutomatykaASTOR i znakiem ukośnika.
Odpytując broker MQTT klientem MQTT o taki adres, uzyskasz dane pobierane z PLC i wysyłane za pomocą protokołu MQTT. Po uruchomieniu obu programów – komunikacyjnego OI GESRTP oraz konwertera OI Gateway, konwerter automatycznie zacznie pobierać dane i je publikować. Można to zweryfikować, rozwijając w konsoli SMC diagnostykę programu OI Gateway w gałęzi OI.GATEWAY.2 / Diagnostics / Client Groups / MQTTPlugIn
Dane z OI Gateway’a są wysyłane przez MQTT, przy wykorzystaniu formatu JSON, oznacza to, że oprócz samej wartości (znacznik d) wysyłany do brokera jest także typ danych (znacznik dt), stempel czasowy danej próbki (znacznik ts) oraz jakość próbki – znacznik (q).
W jaki sposób udostępniać dane z aplikacji Wonderware InTouch?
Jeżeli źródłem danych miałby być Wonderware InTouch, konfiguracja różniłaby się od poprzedniej jedynie w punkcie dotyczącym konfiguracji połączenia Suitelink oraz tematu komunikacji.
Podczas konfiguracji połączenia Suitelink (Rysunek 8), w polu Server Name wpisz nazwę procesu InTouch WindowViewer’a czyli view z odpowiednim adresem komputera, a konfigurując obiekt tematu komunikacji (Rysunek 10), w polu Topic Name wpisz predefiniowaną nazwę Tagname.
Zawartość zakładki Device Items mogłaby być pusta, jeżeli adresy dla wartości zmiennych InTouch byłyby takie same jak nazwy, które chcesz publikować. Na zakładce MQTTSyntax należy dodać nazwy zmiennych, które chcesz publikować. Jak widać programy komunikacyjne firmy Wonderware posiadają wbudowaną funkcję dwukierunkowej komunikacji, przy wykorzystaniu protokołu przemysłowego Internetu rzeczy IIoT czyli MQTT. Za ich pomocą w łatwy sposób i bez dodatkowych kosztów możesz odczytywać dane, jak i udostępniać je do rozproszonego systemu telemetrycznego.