Reklama: Chcesz umieścić tutaj reklamę? Zapraszamy do kontaktu »
Powrót do listy artykułów Aktualizowany: 2021-05-31
Komunikacja MQTT w panelach Astraada HMI

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.

1_Broker_i_podłączone_klienty.jpg

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.

2_opcja_links_główne_drzewko_MQTT.jpg

Po wybraniu powyższej opcji, uruchomi się okno konfiguracji komunikacji MQTT, w której zaznaczamy opcję Enable i uzupełniamy informacje dotyczące brokera.

 

3_okno_konfiguracji_komunikacji_MQTT.png

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.

 

4_przygotowanie_tematu_publikacji.png

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.

5_opcja_language.png

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:

6_language_2.png

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).

7_przycisk_property.png

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ę:

8_,,,.png

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.

9_.png

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ć:

10_definiowanie_zmiennej_cechy.png

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:

11_makra_MQTT.png

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:

12_.png

 

 

13_.png

 

 

14_.png

 

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

Zobacz pełną wersję artykułu na Poradniku Automatyka >>>  

Autor:
Rafał Pilch
Źródło:
Poradnik Automatyka
Dodał:
ASTOR Sp. z o.o.