Z tego artykułu dowiesz się:
- czym jest MQTT i jakie ma zastosowanie,
- jak przygotować brokera do konfiguracji komunikacji w protokole MQTT,
- jak monitorować informacje pojawiające się na serwerze,
MQTT – Czym jest? Do czego służy?
Message Queue Telemetry Transport, w skrócie MQTT, to protokół komunikacyjny stworzony w oparciu o wzorzec publikacja/subskrypcja. Charakteryzuje się on dużą prostotą, niewielkim obciążeniem urządzeń uczestniczących w komunikacji, a także wysoką niezawodnością. Dodatkowo protokół ten świetnie wpisuje się w nowoczesną technologię IoT (Internet of Things).
Komunikacja w protokole MQTT oparta jest o broker (serwer), a także podłączonych do niego klientów. Klienci mogą realizować w obrębie serwera dwie opcje: publikować wiadomość na dany temat (topic) lub odbierać wiadomość z subskrybowanych tematów. Jeden klient może jednocześnie realizować obie te opcje.
Całość komunikacji przebiega w następujących krokach:
1. Klienci wysyłają na serwer listę subskrybowanych tematów komunikacji.
2. Jeden z klientów publikuje nowe dane w konkretnym temacie.
3. Broker MQTT rozsyła informację o temacie, w którym pojawiły się nowe dane, do klientów subskrybujących dany temat
4. Klient subskrybujący temat pobiera nową informację.
Z powyższego schematu łatwo wywnioskować, że większość działań wykonywana jest przez broker MQTT. Nie ma potrzeby stałego odpytywania poszczególnych urządzeń o konkretne wartości, przez co protokół MQTT nie obciąża znacząco mocy obliczeniowej urządzenia. Rola klienta/subskrybenta jest tutaj znacząco bierna, serwer sam wyśle do niego informacje.
Tematy publikacji można bardzo intuicyjne grupować w kategorie i podkategorie. Odbywa się to na wzór schematu drzewka folderów w Microsoft Windows. Dla przykładu:
Maszyna1/ParametryPodstawowe/CzasPracy
W przypadku powyższej ścieżki sterownik będzie otrzymywał informację na temat zmian wartości czasu pracy w pierwszej maszynie.
Przy definiowaniu ścieżki do tematu, który ma być nasłuchiwany można skorzystać z dwóch operatorów: „+" i „#".
- + – dopasowuje się do dowolnej nazwy na danym poziomie. Przykładowo, w momencie użycia ścieżki: Urządzenie/ID1/StanAkumulatora, klient/subskrybent będzie otrzymywał informację o aktualnym stan naładowania akumulatora tylko w pierwszym urządzeniu, gdy natomiast skorzystamy z operatora „+" w następujący sposób: Urządzenie/+/StanAkumulatora, klient/subskrybent będzie otrzymywał informację o aktualnym stanie naładowania akumulatora na wszystkich urządzeniach podłączonych do wątku.
- # – dopasowuje się do wszystkich zagłębień danego poziomu. Wykorzystując przykład powyższy, używając operatora „#" w następujący sposób: Urządzenie/ID1/# umożliwi klientowi/subskrybentowi otrzymywanie informacji na temat wszystkich dostępnych parametrów urządzenia o ID1.
Komunikacja w protokole MQTT cechuje się wysokim bezpieczeństwem. Informacje przesyłane do serwera kodowane są w oparciu o protokół SSL. Dodatkowo broker może zostać skonfigurowany w taki sposób, aby weryfikował każdego klienta przed podłączeniem do serwera, poprzez podanie loginu i hasła.
Przygotowanie brokera
Konfigurowanie komunikacji w protokole MQTT należy rozpocząć od przygotowania brokera.
Broker może być:
- Wewnętrzny – niektóre urządzenia posiadają wbudowany serwer, który może pełnić taką funkcjonalność.
- Zewnętrzny – specjalne moduły IoT podłączane do urządzenia.
- Zdalny – usługodawcy, którzy za pośrednictwem stron internetowych udostępniają możliwość stworzenia własnego brokera.
Niezależnie jaki rodzaj brokera posiadamy, koniecznie należy znać jego adres IP (lub html jeżeli jest taka możliwość), a także port, na którym serwer nasłuchuje informacji. Opcjonalnie: login i hasło dostępu.
Na potrzeby niniejszej instrukcji wykorzystany zostanie broker firmy ASTOR o następujących parametrach:
- Adres: mqtt.astor.com.pl
- Port: 1883
Po aktywowaniu brokera i odczytaniu niezbędnych parametrów można przystąpić do konfiguracji panelu Astraada HMI.
Konfigurowanie połączenia z brokerem
Aby skonfigurować połączenie pomiędzy brokerem, a panelem Astraada HMI, należy rozwinąć opcję Links z głównego drzewka projektowego i wybrać opcję MQTT Client.
Po wybraniu powyższej opcji, uruchomi się okno konfiguracji komunikacji MQTT, w której zaznaczamy opcję Enable i uzupełniamy informacje dotyczące brokera.
W przypadku, gdy posiadamy jedynie adres IP brokera, a nie HTML, należy zaznaczyć okienko przy pozycji IP Address. Konfigurator umożliwi nam wtedy wprowadzenie adresu IP.
Jeżeli broker jest zabezpieczony loginem i hasłem, należy tutaj wpisać te dane odpowiednio: Login w pole User Name, a hasło w pole Password. W pole Client ID opcjonalnie, możemy wpisać dowolny identyfikator aktualnie programowanego urządzenia.
Konfigurowanie trybu publikacji panelu Astraada HMI w protokole MQTT
Konfigurowanie trybu należy rozpocząć od przygotowania tematu publikacji, a także jej treści. W przypadku panelu Astraada HMI i oprogramowania Astraada HMI CFG, dokonuje się tego w pozycji Text Format Table znajdującej się w głównym drzewku projektowym.
Po wybraniu powyższej opcji pojawi się tabela z trzema kolumnami: ID, Name oraz Language 1. Jeżeli ta ostatnia kolumna nie jest widoczna, należy kliknąć w dowolnym miejscu w obszarze tabeli, prawym przyciskiem myszy i zaznaczyć opcję Language 1.
Kolumna ID informuje o unikalnym identyfikatorze do przygotowanego tekstu – informacje z tej kolumny wykorzystywane są przy tworzeniu funkcji w makrach. Kolumna Name będzie zawierać dowolną, zdefiniowaną przez nas nazwę, dzięki której będziemy mogli wyszukać odpowiedni tekst w momencie potrzeby jego wyboru. Właściwy tekst, którym będzie operował program Astraada HMI CFG, jak i sam panel, znajduje się w kolumnie Language 1.
Zacznijmy zatem od przygotowaniu tekstu pod temat – klikamy ikonkę NEW, a w tabeli powinien pokazać się pusty wiersz o ID 00001. W kolumnie Name wpisujemy dowolną nazwę tekstu, najlepiej w taki sposób, aby łatwo można było go odróżnić od innych, np.: Temat1. W polu Language 1 wpisujemy właściwą formę tematu, w którym chcemy publikować. W naszym przykładzie, będziemy publikować pod tematem „Publish", więc właśnie to słowo zostaje tutaj wpisane.
Poprawnie uzupełniona tabela powinna wyglądać w następujący sposób:
Przygotowany tekst w chwili obecnej nie posiada żadnych cech. Środowisko Astraada HMI CFG wymaga, aby powyższym tekstom nadać w pierwszej kolejności odpowiednie cechy, aby można było ich używać do odpowiednich celów.
W celu nadania cech danemu tekstowi, zaznaczamy żądany tekst i klikamy przycisk Property ( piąty od prawej w panelu Text Format Table).
Po kliknięciu powinno pojawić się powyższe okno. Możliwe cechy tekstu zawarte są w Specific Purposes. Tekst może pełnić rolę: tematu publikacji (Composing MQTT Publish Topic), tematu subskrypcji (Composing Subscription Message), treści wiadomości publikacji (Composing MQTT Publish Message), a także wysyłać i odczytywać zmienne (Sending/Reciving Data Values). W aktualnym przypadku interesuje nas opcja pierwsza, dlatego zaznaczamy ją i potwierdzamy przyciskiem OK.
Następnie przechodzimy do przygotowania tekstu dla wiadomości, która będzie publikowana. Ponownie wciskamy przycisk NEW. W nowopowstałym wierszu, w kolumnie Name wpisujemy dowolną nazwę np.: Wiadomosc1. W kolumnie Language 1 wpisujemy treść wiadomości jaką chcemy przesłać. Treść może być dowolna. Protokół MQTT nie narzuca żadnej formy pisania wiadomości, programista może zatem w bardzo czytelny sposób publikować informacje na brokerze.
Na potrzeby niniejszego przykładu, prześlemy informacje o jednej zmiennej w postaci: „Aktualna wartość zmiennej:". W związku z tym wpisujemy podany tekst w kolumnę Language 1. Tabela powinna aktualnie posiadać następującą formę:
Następnie, tak jak w przypadku tematu publikacji, należy nadać nowemu tekstowi odpowiednie cechy. Dodatkowo, z racji, że tekst będzie przesyłał zmienną, powinna zostać ona odpowiednio zdefiniowana. Dlatego też zaznaczamy nowy tekst i klikamy przycisk Property.
W pierwszej kolejności przystępujemy do definicji zmiennej. Klikamy przycisk NEW znajdujący się w lewym górnym rogu. W tabeli Embedded Variables powinna pojawić się nowa pozycja: %1. Po utworzeniu nowej zmiennej, należy określić jej parametry. Najważniejsze z nich to:
- Data Type – typ zmiennej, w naszym przykładzie będzie to 16-Bit Unsigned Integer
- Display Type – sposób wyświetlania zmiennej, w naszym przykładzie: 16-Bit Unsigned Decimal
- Address – adres w pamięci panelu, w którym będzie przechowywana wartość zmiennej, w naszym przykładzie: $U100.
- Total Digits – liczba znaków, które ma przechowywać zmienna – dowolna wartość
- Fractional Digits – liczba znaków po przecinku, które ma przechowywać zmienna – dowolna wartość
Gdy cechy zmiennej zostały zdefiniowane, należy przydzielić odpowiednie cechy dla całego tekstu. Nasz tekst ma być wiadomością publikacji, a także przekazywać informacje o zmiennej, dlatego też należy zaznaczyć opcje Composing MQTT Publish Message, a także Sending/Receiving Data Values. Odpowiednie wypełnione okno Property powinno mieć następującą postać:
Zatwierdzamy przyciskiem OK. Ostatnim krokiem w definiowaniu tekstu wiadomości, jest wpisanie zdefiniowanej zmiennej do kolumny Language 1. Nasza zmienna została oznaczona znakiem %1, dlatego też ten znak należy wpisać w treść wiadomości, która finalnie powinna mieć postać: „Aktualna wartosc zmiennej: %1".
Powracamy następnie do MQTT Client. W oknie tym, należy przeprowadzić ostatnie elementy konfiguracji. Pierwszym z nich jest nadanie naszemu tematowi odpowiedniego ID. Zaznaczamy w Publish Topics (gdyż przeprowadzamy procedurę konfiguracji publikacji) okienko przy Topic ID 1. Czynność ta powinna odblokować listę wyboru, z której wybieramy nasz zdefiniowany temat – Temat1.
Komunikacja MQTT odbywa się za pośrednictwem specjalnych makr. Dlatego też w lewym dolnym roku zaznaczamy opcję MQTT Message Receiving Macro. Co powinno odblokować nową zakładkę o tej samej nazwie. Poprawnie skonfigurowane okno MQTT Client powinno wyglądać następująco:
Ostatnim krokiem jest napisanie makra, które umożliwi nam publikacje naszej wiadomości. W związku z tym przechodzimy do zakładki MQTT Message Receiving Macro. Klikamy przycisk New... i nadajemy dowolną nazwę, w naszym przykładzie, będzie to: Macro1.
Aby opublikować wiadomość, należy skorzystać z komendy: A = MqttP_IF(B,C,D), gdzie:
- A – adres, pod którym program będzie zapisywał kod operacji (informował o jej poprawności)
- B – ID tematu, w którym ma zostać opublikowana wiadomość
- C – ID tekstu, który ma zostać użyty do publikacji wiadomości
- D – Poziom zabezpieczeń. Może on przybrać trzy wartości: 0 – wiadomość zostaje wysłana bez żadnych potwierdzeń dostarczenia. 1 – pierwsza wiadomość zostaje wysłana z potrzebą potwierdzenia dostarczenia, jeżeli potwierdzenie zostanie odesłane przez serwer, komunikacja będzie kontynuowana. 2 – wszystkie wiadomości zostają wysłane z potrzebą potwierdzenia dostarczenia.
W związku z powyższym Macro1, w przypadku naszego przykładu, będzie mieć postać:
$U1= MqttP_IF(1, 2, 0)
Ponieważ: nasz temat Publish został zaznaczony przy Topic ID 1, więc posiada ID 1, tekst naszej wiadomości jest zapisany w Text Format Table z ID równym 00002, a także nie potrzebujemy żadnych potwierdzeń dostarczenia.
W ten sposób przygotowana została komunikacja w protokole MQTT. W związku z tym, opublikujemy w najprostszy sposób wiadomość na serwerze. Do tego będziemy potrzebować elementu Numeric Entry, który należy przypisać pod adres naszej zmiennej, a więc $U100, a także przycisku. Bit Button, w którym należy zawrzeć stworzone wcześniej makro.
Ustawienie powyższych elementów:
Tak przygotowany program wgrywamy na panel HMI. Na panelu należy wprowadzić liczbę w elemencie Numeric Entry, a następnie kliknąć przycisk Bit Button. W momencie kliknięcia przycisku wiadomość zostanie opublikowana na serwerze.
UWAGA!
Należy pamiętać, aby urządzenie było podłączone do brokera, jeżeli korzystamy z zewnętrznego, lub do sieci internetowej – jeżeli korzystamy z brokera zdalnego (funkcja DHCP musi być aktywna)!
Konfigurowanie trybu subskrypcji panelu Astraada HMI w protokole MQTT
- Autor:
- Rafał Pilch
- Źródło:
- Poradnik Automatyka
- Dodał:
- ASTOR Sp. z o.o.
Czytaj także
-
Jak utworzyć i modyfikować receptury? | Kurs programowania paneli HMI odc. 8
Chcesz nauczyć się programować panele HMI? Weź udział w bezpłatnym kursie. Wszystkie odcinki i materiały dodatkowe znajdziesz na stronie: ...
-
Kluczowa rola wycinarek laserowych w obróbce metali
Wycinarki laserowe zrewolucjonizowały przemysł obróbki metali, oferując niezwykłą precyzję i efektywność. Dowiedz się, dlaczego są one...
-
-
-
-
-
-