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
![](https://www.astor.com.pl/poradnikautomatyka/wp-content/uploads/2023/01/image10.png)
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ę.
![](https://www.astor.com.pl/poradnikautomatyka/wp-content/uploads/2023/01/image1-372x734.jpg)
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.
![](https://www.astor.com.pl/poradnikautomatyka/wp-content/uploads/2023/01/image2.jpg)
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.
![](https://www.astor.com.pl/poradnikautomatyka/wp-content/uploads/2023/01/image3.png)
![](https://www.astor.com.pl/poradnikautomatyka/wp-content/uploads/2023/01/image4.png)
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:
![](https://www.astor.com.pl/poradnikautomatyka/wp-content/uploads/2023/01/image5-1.png)
W kolejnym kroku wykonujemy 2 pliki DUT:
1) JSONStruct1 – struktura nazwy sensora:
![](https://www.astor.com.pl/poradnikautomatyka/wp-content/uploads/2023/01/image6-1.png)
2) sensorType – do zaimplementowania wyliczenia typów czujników
![](https://www.astor.com.pl/poradnikautomatyka/wp-content/uploads/2023/01/image7.png)
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):
![](https://www.astor.com.pl/poradnikautomatyka/wp-content/uploads/2023/01/image8-840x252.png)
- table1 – przechowuje ostatnio odebrane dane z jednego z czujników:
![](https://www.astor.com.pl/poradnikautomatyka/wp-content/uploads/2023/01/image9-840x105.png)
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.
![](https://www.astor.com.pl/poradnikautomatyka/wp-content/uploads/2023/01/image10-840x330.png)
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.
![](https://www.astor.com.pl/poradnikautomatyka/wp-content/uploads/2023/01/image11.png)
![](https://www.astor.com.pl/poradnikautomatyka/wp-content/uploads/2023/01/image12.png)
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ł