Jak odczytywać dane pomiarowe z czujników BLE ELA Innovation i wykonywać akcje za pomocą sterownika Astraada One Compact i routera Teltonika?
Kontakt w sprawie artykułu: Natalia Kazykalewicz - 2023-01-16

Z tego artykułu dowiesz się:
- jak skonfigurować router Teltonika i sterownika Astraada One do odczytywania danych z czujników BLE ELA Innovation,
- jak skomunikować ze sobą router Teltonika i sterownik Astraada One,
- jak wykonać akcje typu „jeżeli temperatura spadnie poniżej 15 stopni, załącz wyjście 1”.
Sterownik PLC Astraada One możemy zaprogramować tak, aby w połączeniu z routerem Teltonika, który będzie tym przypadku brokerem MQTT, pozwalał na odczytywanie danych z czujników ELA Innovation. Zbierane dane mogą posłużyć do wyzwalania różnych działań wykonywanych warunkowo. Przykładowo sterownik może załączyć odpowiednie wyjście w momencie, gdy temperatura (zmierzona przez czujnik) spadnie poniżej danej wartości.
Konfiguracja czujników BLE ELA Innovation
Aby czujniki zbierały i wysyłały dane pomiarowe, należy jest aktywować, a następnie przejść do ich konfiguracji. Konfiguracje sensorów realizujemy za pomocą aplikacji Device Manager, którą pobieramy na smartfon z obsługą NFC z sklepu Google Play lub Apple App Store. Do naszego przykładu użyliśmy czujnika RHT, który mierzy wilgotność i temperaturę.

Konfiguracja routera Teltonika
Do zaprojektowania systemu na potrzeby tego artykułu wykorzystano router RUTX 11, jednak dla wszystkich routerów rodziny Teltonika konfiguracja jest identyczna.
W pierwszej kolejności należy wykonać podstawową konfigurację routera, która została przedstawiona w artykule „Podstawowa konfiguracja routera dla sieci przemysłowej – dostęp do Internetu, publiczny IP, LAN, WiFi, resetowanie routera, DDNS”.
Następnie należy wykonać trzy kroki z artykułu „Jak zbudować prosty system IIoT z wykorzystaniem czujników ELA, routera Teltonika i panela operatorskiego Astraada HMI?”, w części „Routery Teltonika”, w których ustawiamy router w funkcji brokera, parujemy czujniki z routerem Teltonika oraz wysyłamy zgromadzone dane na broker.
Konfiguracja sterownika Astraada One
Sterownik musi być w tej samej podsieci, co router, aby mogły się „widzieć”. Ponieważ nasz router ma adres IP 192.168.0.1/24, należy w ustawić adres sterownika na 192.168.0.X, gdzie X jest dowolną liczbą od 1 do 254 (ponieważ podsieć ma maskę 255.255.255.0).
W naszym przykładzie sterownik ma adres IP 192.168.0.14.

Teraz przechodzimy do programowania sterownika. Wykorzystujemy do tego celu oprogramowanie Codedys (dostępne bezpłatnie dla wszystkich posiadaczy sterowników Astraada One, można je ściągnąć ze strony: https://www.astor.com.pl/pobierz-codesys.html).
W pierwszym kroku należy dodać bibliotekę MQTT Client, z której będziemy korzystać. Dostępna jest ona pod linkiem: https://forge.codesys.com/forge/product-news/2019/10/release-mqtt-client-1005/
Z tej biblioteki wykorzystamy blok MQTT_Client.FB_MQTTClient, który będzie subskrybował dane z brokera 192.168.0.1:1883, publikowane w temacie AstTest. Wiadomość otrzymaną z brokera będziemy widzieli w zmiennej message.


Wiadomość przychodzi po zmianie stanu z False na True lub odwrotnie, dlatego by nie robić tego ręcznie, przed blokiem MQTT_Cleint.FB_MQTTClient wstawiliśmy poniższe dwie linijki:

W kolejnym kroku wykonujemy 2 pliki DUT:
1) JSONStruct1 – struktura nazwy sensora:

2) sensorType – do zaimplementowania wyliczenia typów czujników

Cała logika do obsługi i porządkowania danych odbywa się w pliku Parser typu POU, napisanym w języku ST.
Załóżmy że otrzymujemy dane z czujnika MOV:
message = '{"Name" : "Czujnik3", "Dane" : { "x-axis": 10, "y-axis" : 20, "z-axis" : 30 } }';
Parsujemy tę wiadomość, usuwając spacje i rozdzielając wiadomość miedzy wierszami i kolumnami na podstawie znaków { }, : ”
Następnie zapisujemy nazwę czujnika w zmiennej nazwa i przechodzimy do rozpoznawania typu czujnika. Jeśli w zmiennej message jest fraza:
- „temperature” – będzie to czujnik typu T
- „humidity” – będzie to czujnik typu RHT
- „x-axis” – będzie to czujnik typu MOV
- „state” – będzie to czujnik typu MAG
Są to frazy charakterystyczne dla danego typu czujnika, występujące stale w formacie wysyłanym przez dany czujnik.
Następnie sprawdzamy, czy nazwa czujnika, z którego odebrano dane, jest już na liście. Jeśli nie ma, to rezerwowane jest miejsce i wpisywane są dane po raz pierwszy w kolejnych wierszach tabeli.
To, ile wierszy w tabeli trzeba zarezerwować, zależy od jego typu:
- Czujnik T ma 1 wartość.
- Czujnik RHT ma 2 wartości.
- Czujnik MOV ma 3 wartości .
- Czujnika MAG ma 2 wartości.
Jeśli natomiast nazwa czujnika jest już na liście, to dane wpisywane są do istniejących już pól w tabeli.
W rezultacie mamy dwie istotne tabele:
- dane – która przechowuje dane wszystkich czujników (kolejne czujniki dodawane są w kolejnych wierszach, a jeżeli odebrane zostaną dane z tego samego czujnika, to odpowiednie wiersze są aktualizowane):

- table1 – przechowuje ostatnio odebrane dane z jednego z czujników:

Zaprogramowanie akcji
Wykonywanie akcji zaprogramujemy w osobny podprogramie logika typu POU w języku LD. Będzie to akcja załączania wyjścia 0, jeżeli temperatura spadnie poniżej 10°C.
Aby tak się stało, tablica dane w programie Parser musi być wyjściem (OUTPUT).
Zakładamy, że zawsze dana z temperaturą będzie w tabeli dane w wierszu dane[0,2]. W takim wypadku parsujemy tę daną na typ INT i porównujemy ją – czy jest mniejsza od 10°C. Jeśli tak jest, otrzymujemy wartość TRUE i załączamy wyjście 0 o nazwie OUT1.

Aby ustawić wyjście 0 na OUT1, musimy dodać w Extension_Slots XBIO urządzenie, a następnie po wejściu w to urządzenie przejść do zakładki BGH Slot BUS I/O Mapping i ustawić tam podaną nazwę dla wyjścia 0.


Zainteresowany szczegółami?
Jeśli chcesz otrzymać cały kod programu realizujący postawione w artykule zadanie – zapraszamy do kontaktu mailowego: amc@astror.com.pl
Bardzo przydatny artykuł