Komputery jednopłytkowe (SBC) stają się coraz popularniejsze – duża w tym zasługa kultowego Raspberry Pi. Warto jednak wiedzieć, jak wygląda praca z przemysłowymi komputerami SBC.
Jakie mają parametry? Jakie wsparcie otrzymamy od producenta? Gdzie się przydają? Sprawdźmy to na przykładzie komputerów MOXA.
Na naszym blogu najczęściej koncentrujemy się na projektach, które bazują na popularnych w gronie hobbystów platformach, takich jak Raspberry Pi czy Arduino. Sporo osób zastanawia się jednak nad możliwością użycia takich płytek w bardziej profesjonalnych, wręcz przemysłowych rozwiązaniach.
Dlatego tym razem, dzięki współpracy z Elmark Automatyka SA, postanowiliśmy sprawdzić, czym są jednopłytkowe komputery przemysłowe firmy MOXA i co odróżnia je od rozwiązań amatorskich – od wyciągnięcia z pudełka, przez zapoznanie się z modułem i realizację przykładowego projektu, aż do przytoczenia prawdziwych przykładów zastosowań dla tego typu układów.
System wbudowany (ang.embedded system) różni się od typowego PC tym, że ma dokładnie określone zastosowanie oraz zakres funkcjonalności. Na naszym domowym komputerze możemy napisać dokument tekstowy, zagrać w grę, poczytać ciekawostki na Forbocie lub robić jeszcze setki, tysiące innych rzeczy.
Natomiast system wbudowany ma ściśle określone zastosowanie – np. komputer znajdujący się w ekspresie do kawy ma nadzorować zaparzanie kawy i nic więcej.
Oczywiście w dzisiejszych czasach systemy wbudowane potrafią mieć bardzo rozbudowane funkcje i nikogo nie zaskoczy ekspres do kawy z graficznym, dotykowym interfejsem czy też kamerą rozpoznającą użytkownika. Jednak nadal w takim rozbudowanym ekspresie będzie widoczne jedno konkretne zadanie dla wbudowanego tam komputera.
Rozwiązania amatorskie vs. profesjonalne
Następne ważne rozróżnienie to podział na systemy amatorskie oraz profesjonalne. Pierwsze bardzo dobrze znamy i łatwo jest nam szybko wymienić ich cechy: po pierwsze muszą być tanie, bo jako uczniowie, studenci albo po prostu entuzjaści elektroniki mamy ograniczone zasoby finansowe. Po drugie mają być możliwie uniwersalne – bo chcielibyśmy móc zbudować z ich pomocą właściwie dowolne urządzenie. Ich obsługa nie może być zbyt trudna, a do tego przynajmniej podstawowa dokumentacja powinna być dostępna bez np. dodatkowych umów o poufności (NDA).
Zastosowania komputerów przemysłowych w nowoczesnych fabrykach
Zastosowania przemysłowe dla SBC to przede wszystkim sterowanie procesami oraz zbieranie danych. W obu przypadkach awaria takiego systemu związana jest ze znacznymi kosztami, a czasem nawet zagrożeniem dla życia lub zdrowia. Cena systemu ma oczywiście znaczenie, ale często ważniejsza jest bezawaryjność. Tutaj istotny jest też dostęp do dokumentacji, jednak duże znaczenie ma dodatkowe wsparcie producenta, np. pomoc w tworzeniu oprogramowania, doradztwo techniczne czy pomoc w przypadku awarii systemu lub w naprawie urządzeń.
Konkretne przykłady zastosowań dla tego typu komputerów opisaliśmy na końcu artykułu.
Komputery przemysłowe firmy MOXA
Firma MOXA specjalizuje się w produkcji przemysłowych urządzeń komunikacyjnych. W jej ofercie znajdziemy routery, switche ethernetowe, serwery portów szeregowych, komputery jednopłytkowe oraz mnóstwo innych urządzeń używanych w takich sektorach jak energetyka, kolej czy inteligentne miasta.
Producent komputerów przemysłowych
Nas interesowały komputery wbudowane, a dokładnie komputery z procesorami ARM (dostępne są też wersje wyposażone w procesory firmy Intel). Liczba dostępnych modeli może być dla niektórych wręcz przytłaczająca, ale dzięki temu można znaleźć urządzenie, które oferuje zestaw interfejsów niezbędnych podczas praktycznie każdego zastosowania.
Więcej informacji na temat dostępnych rozwiązań znaleźć można na stronie produktowej polskiego dystrybutora oraz na blogu, który w całości został poświęcony rozwiązaniom firmy MOXA.
Testowane komputery MOXA
Do testów otrzymaliśmy dwa urządzenia firmy MOXA: UC-2101-LX oraz UC-2104-LX. W materiałach producenta urządzenia te określane są jako IIoT-Gateway. Termin IoT, czyli popularny internet rzeczy (ang. internet of things), jest chyba wszystkim znany. Ta dodatkowa litera I na początku pochodzi od słowa industrial. W tym przypadku mamy więc do czynienia z czymś jeszcze bardziej rozbudowanym –mowa bowiem o IIoT, czyli industrial internet of things.
Testowane komputery UC-2101-LX oraz UC-2104-LX
Testowane komputery UC-2101-LX oraz UC-2104-LX
Pewnie trochę „mniej marketingową” nazwą takiego urządzenia byłby po prostu „router”. Warto jednak zwrócić uwagę na dodatkowe funkcjonalności wymienione po prawej stronie poniższej ilustracji. Jak widać, nasz gateway jest jednak pełnoprawnym komputerem wbudowanym, więc poza funkcją routera może oferować wiele dodatków, jak chociażby zbieranie danych w lokalnej bazie czy też ich przetwarzanie.
Przykładowe zastosowania dla IIoT
Co w pudełku z komputerem MOXA?
Po otwarciu pudełka pierwsze wrażenie jest bardzo pozytywne. Urządzenia są solidnie zapakowane. Poza samymi modułami w opakowaniu znajdziemy krótką informację o gwarancji oraz spełnianych normach, przewód do połączenia z konsolą systemową za pomocą interfejsu RS-232, a także przejściówkę pozwalającą na użycie zasilacza wtyczkowego. Jeden z komputerów posiadał od razu zainstalowany modem LTE, który można dokupić jako dodatkowe akcesorium.
Zawartość opakowania na przykładzie komputera UC-2101-LX
Po wyjęciu modułów z pudełka pojawia się pierwsze zaskoczenie – są bardzo, bardzo małe. Szczególnie UC-2101 wydaje się wręcz mikroskopijny. Gdy w sprzedaży pojawiało się pierwsze Raspberry Pi, to wszyscy byli zachwyceni jego wymiarami odpowiadającymi wielkością karcie kredytowej. Okazuje się jednak, że profesjonalne urządzenie może być nawet mniejsze.
Porównanie rozmiarów: UC-2101-LX vs. Raspberry Pi 4
Podstawowe parametry testowanych komputerów:
Procesor ARMv7 Cortex-A8 600 MHz
256 MB pamięci DDR3 SDRAM
8 GB eMMC flash z zainstalowanym systemem operacyjnym
Pełna lista spełnianych norm jest o wiele dłuższa, więcej informacji na ten temat można znaleźć w dokumentacji. Powyżej przytoczyliśmy tylko część z nich, aby pokazać wyraźnie jedną z różnic między rozwiązaniami profesjonalnymi a amatorskimi. Na forum toczyliśmy długą dyskusję o konieczności oznaczania budowanych przez siebie urządzeń znakiem CE – w przypadku urządzeń profesjonalnych jest to oczywiste, a lista zastosowanych norm jest tutaj wręcz imponująca.
Oba testowane urządzenia bazują na AM3358, są więc nieco podobne do BeagleBone Black, pozostaniemy jednak przy porównywaniu z Raspberry Pi, z którym styczność miało więcej osób.
Jak wyglądają komputery MOXA od środka?
Zanim przystąpimy do opisu działania płytek, zajrzyjmy do środka. Obudowa urządzenia jest solidna, ale po odkręceniu 4 śrubek możemy zobaczyć, co kryje się w jej wnętrzu. Co ważne, te komputery nie posiadają plomb gwarancyjnych, więc zaglądając do środka, nie traci się wsparcia ze strony producenta. W tym miejscu warto też wspomnieć, że komputery MOXA są objęte 5-letnią gwarancją, która w tym przypadku jest realizowana w Polsce (w autoryzowanym serwisie Elmark Automatyka w Warszawie).
Wnętrze komputera MOXA UC-2101-LX
Co ciekawe, szybko okazuje się, że nie jest to do końca SBC, czyli komputer jednopłytkowy, bo składa się z dwóch płytek… Oczywiście wszystko podyktowane jest chęcią miniaturyzacji. Do tego w naszym przypadku UC-2104 ma jeszcze wpiętą kartę rozszerzeń, czyli modem podłączony do gniazda PCI-e.
To tylko kwestia nazewnictwa, ale jak widać, nie każdy mały komputer wbudowany jest jednopłytkowy, nawet jeśli z zewnątrz na taki wygląda.
Na tym etapie warto optycznie porównać rozwiązania przemysłowe z RPi. Już sama liczba użytych komponentów jest imponująco większa. Na wstępie napisaliśmy, że w przypadku płytek amatorskich najważniejszym parametrem jest niska cena, a mniejsza liczba elementów pozwala na jej obniżenie.
Porównanie Raspberry Pi do MOXA UC-2101-LX
UC-2101-LX jest zdecydowanie bardziej rozbudowany
Możemy się tylko domyślać, na czym dokładnie polegają oszczędności w przypadku RPi, ale już samo porównanie układu zasilania chyba jest dobrym punktem wyjścia – to, co najłatwiej usunąć z projektu, to zabezpieczenia. W tym przypadku sama sekcja zasilania MOXA bije na głowę to, co jest na malince.
Pierwsze uruchomienie modułu UC-2104-LX
Czas podłączyć opisywane urządzenia. Na pierwszy ogień wybraliśmy moduł UC-2104-LX, czyli większy – ten z modemem komórkowym. Zanim cokolwiek zrobimy, warto zapoznać się z dokumentacją, która jest publicznie dostępna na stronie producenta, z kolei w osobnym pliku znajdziemy opis instalacji oraz podstawowego podłączenia układu.
Instrukcja opisująca samą część sprzętową jest dość obszerna – ma 21 stron. Znajdziemy w niej opis gniazd, sposób podłączania zasilania, wymiary urządzeń, sposób mocowania oraz kody sygnalizowane za pomocą diod świecących. Wszystko zostało dokładnie i przystępnie opisane, nie zabrakło również rysunków i schematów. Takie materiały na pewno doceni każdy, kto np. próbował zrobić coś większego na bazie „potężnych SBC” od chińskich producentów, którzy chcieli podbić ten rynek, ale niestety jakoś „zapominali” o przygotowaniu sensownej dokumentacji.
UC-2104-LX (widok od złącz antenowych)
UC-2104-LX (widok od drugiej strony)
Pierwsze podłączenie urządzenia to nic skomplikowanego. Przykręcamy dwie anteny, szykujemy kartę SIM, podłączamy przewody (zasilający i komunikacyjny) i gotowe. Najbardziej zaskakują jednak anteny – nie dość, że dwie, to jeszcze ogromne (miały po 30 cm – nie zmieściły się nawet w całości na zdjęciu). Do podłączenia zasilania użyliśmy wspomnianej wcześniej przejściówki oraz standardowego zasilacza 12 V (którego nie ma w zestawie).
Podstawowe podłączenie UC-2104-LX
Klapka w obudowie umożliwia dostęp do modułu LTE
Podczas pierwszego uruchomienia oraz do rozwiązywania ewentualnych problemów bardzo przydaje się dostęp do konsoli systemowej. Do urządzeń dołączone są przejściówki do standardu RS-232, jednak ten interfejs jest coraz rzadziej obecny we współczesnych komputerach PC. Musimy więc podłączyć przejściówkę, tym razem z RS-232 na USB.
Tutaj ciekawostka: zarówno gniazdo karty SIM, jak i złącze UART są osłonięte bardzo solidną klapką. Co więcej, gdy odkręcimy śrubkę mocującą, szybko zobaczymy, jak producent zadbał o to, abyśmy nie podłączyli odwrotnie wtyczki. Złącze UART nie ma jednego pinu, a wtyczka ma w tym miejscu zaślepkę, więc odwrotnie wtyczki mechanicznie nie da się włożyć. Proste i skuteczne, a ile nerwów mogłoby oszczędzić w płytkach DIY…
Proste, ale skuteczne zabezpieczenie przed odwrotnym podłączeniem przewodu
Dedykowany system operacyjny
Czas uruchomić nasze urządzenie. Na stronie producenta znajdziemy jeszcze jeden ważny plik PDF – tym razem jest to dokumentacja do oprogramowania, która jest nawet dłuższa od dokumentacji sprzętu! Aktualnie dostępna wersja ma 74 strony i można śmiało potraktować ją jako kurs obsługi Linuksa. Postępując zgodnie z instrukcją, po chwili łączymy się z systemem.
Okno powitalne po połączeniu z komputerem MOXA
Bazą zainstalowanego systemu operacyjnego jest Debian 9, warto jednak zwrócić uwagę, że dostajemy go od razu ze wszystkimi sterownikami, odpowiednio skonfigurowany i gotowy do pracy. Do instalacji dodatkowego oprogramowania wykorzystujemy polecenie apt oraz pakiety znane z innych platform.
Oprócz tego producent dostarcza pakiety, które są przeznaczone konkretnie do komputerów MOXA – wszystkie znajdziemy w osobnym repozytorium. Taki Debian, który dozbrojono sterownikami i pomocniczymi programami, nazywa się Moxa Industrial Linux.
(Bez)awaryjność pamięci?
W przypadku rozwiązań amatorskich wiele osób narzeka na awaryjność kart microSD, na których jest zainstalowany system operacyjny. W rozwiązaniach przemysłowych coś takiego byłoby zbyt ryzykowne, więc producent wyposażył testowane moduły w pamięć eMMC o pojemności 8 GB.
Jednak nie chodzi tylko o zastosowany sprzęt. Pierwsza bardzo ważna różnica to brak partycji lub pliku wymiany (tzw. swap). Dzięki temu „system nie psuje pamięci flash” ciągłym zapisywaniem do niej tymczasowych danych.
Druga różnica to użycie systemu overlay-fs. Jest to bardzo interesujące rozwiązanie, często używane w urządzeniach przemysłowych. Mamy tu bazowy system plików zapisany w trybie „tylko do odczytu”, możemy jednak dokonywać zmian w plikach. Podczas modyfikacji system w tle kopiuje wersję tylko do odczytu do nowego miejsca, gdzie możemy modyfikować pliki. Oryginalny, bazowy obraz pozostaje więc niezmienny, a zmiany lub nowe pliki niejako nadpisują dane w wyższej warstwie.
Główna zaleta takiego podejścia to możliwość powrotu to fabrycznych ustawień. Wystarczy, że przytrzymamy przycisk reset przez 8 sekund, i wszystkie zmiany zostaną usunięte.
Istnieje również możliwość tworzenia kilku warstw bazowych. A zatem moglibyśmy mieć czystego Debiana, na nim warstwę z własną, domyślną konfiguracją i oprogramowaniem, a dopiero w najwyższej warstwie moglibyśmy trzymać zmiany wprowadzone w konkretnym urządzeniu (np. logi lub aktualnie zebrane dane z czujników).
Połączenie z Internetem
Tak jak wspomnieliśmy wcześniej, jedną z dużych zalet komputerów MOXA jest to, że producent wraz z systemem operacyjnym dostarcza komplet sterowników i przydatnych programów (a wiadomo, że w przypadku Linuksa brak sterowników może być czasami dużą przeszkodą).
Jako przykład niezwykle przydatnego skryptu dostarczanego z płytką możemy wypróbować program cell_mgmt (dokładnie opisany w instrukcji). Wystarczy, że wydamy polecenie:
Shell
1
sudo cell_mgmt start APN=internet
I po chwili mamy już działające połączenie z Internetem przez modem komórkowy.
Dostęp do Internetu przez wbudowany modem
Jak widać, ustawienie połączenia z Internetem przez modem to banał. Jeśli nie chcemy, to nie musimy się przejmować warstwą sprzętową, konkretnym modelem modemu itd. Chcąc wykorzystać moduł jak prawdziwy gateway, powinniśmy teraz podłączyć do niego za pomocą Ethernetu lokalne urządzenia, skonfigurować połączenie i ewentualnie uruchomić własną aplikację.
Przykładowy projekt na UC-2101-LX
W ramach kolejnego testu postanowiliśmy wykorzystać mniejszy z komputerków do budowy prostego projektu. UC-2101, poza interfejsem UART, służącym do konfiguracji urządzenia, oferuje dwa interfejsy:
Ethernet do połączenia z siecią lokalną lub Internetem,
RS-232/422/485 do połączenia z czujnikami lub innymi urządzeniami.
W ofercie MOXA znaleźć można również komputery, który są wyposażone w inne interfejsy komunikacyjne (np. CAN, USB) oraz takie z wbudowanymi cyfrowymi wejściami/wyjściami.
Takie rozwiązanie wydało nam się bardzo interesujące, szczególnie że wiele projektów opisywanych na naszym forum wykorzystuje komunikację przez port szeregowy.
Komputer MOXA UC-2101-LX
Widok na gniazdo Ethernet
W dolnej części modułu znajdziemy typowe złącze DB9, dawniej obecne w każdym komputerze PC, teraz niemal zupełnie zastąpione przez USB. Jednak w zastosowaniach przemysłowych jest ono nadal popularne.
W ramach ciekawostki warto wiedzieć, że standard RS-232C ma już prawie 60 lat.
Trzeba jednak pamiętać, że moduł firmy MOXA obsługuje nie tylko RS-232, ale też RS-422 i RS-485. Zanim przejdziemy dalej, warto wrócić do dokumentacji i przyjrzeć się wyprowadzeniom interfejsu:
Fragment dokumentacji na temat łączenia przez port szeregowy
Często używamy „uproszczonej” wersji RS-232, która przestaje wówczas być już zgodna ze standardem. Po pierwsze zamiast napięć wymaganych standardem (czyli +11 V/11 V) używamy napięć używanych przez nasz układ (czyli 3,3 V lub 5 V), po drugie wykorzystujemy tylko linie RX, TX oraz GND.
Moduł firmy MOXA umożliwia jednak również użycie dodatkowych linii, które pozwalają np. na kontrolę transmisji (mając tylko RX/TX, możemy gubić dane, jeśli nadajnik będzie je wysyłał szybciej, niż może przyjmować odbiornik).
RS-232, RS-422, RS-485 – co wybrać?
W zastosowaniach przemysłowych RS-232 jest używany głównie do komunikacji na małe odległości, np. do konfiguracji lub testowania urządzeń. Ma on kilka poważnych ograniczeń. Po pierwsze pozwala na podłączenie tylko dwóch urządzeń ze sobą, po drugie jest mało odporny na zakłócenia.
Wad tych pozbawione są pozostałe dostępne interfejsy, czyli RS-422 oraz RS-485. Do komunikacji wykorzystywane są w nich sygnały różnicowe, co bardzo poprawia odporność na zakłócenia, można też łączyć więcej niż dwa urządzenia ze sobą.
Zapewne nie wszyscy czytelnicy znają RS-485, więc dla formalności kilka najważniejszych informacji:
prędkość transmisji do 35 Mbit/s na odległość 10 m,
przy prędkości 100 kbit/s zasięg aż do 1200 m,
wysoka odporność na zakłócenia elektromagnetyczne,
możliwość pracy w trybie half-duplex (dwuprzewodowa) lub full-duplex (czteroprzewodowa),
obsługa do 32 urządzeń na jednej magistrali,
najczęściej stosowany interfejs w przewodowych sieciach przemysłowych.
Tym razem jako przykład wybraliśmy RS-485 w konfiguracji dwuprzewodowej (tzw. half-duplex). Zakończenia par przewodów interfejsu powinny być połączone rezystorem o typowej wartości 120 Ω. W przypadku modułu UC-2101 odpowiedni rezystor jest już zamontowany, wystarczy odkręcić dwie śrubki w spodniej części urządzenia i ustawić odpowiednio mikroprzełączniki.
Dostęp do przełącznika konfiguracyjnego ułatwia odkręcana klapka
Większym problemem okazało się znalezienie urządzenia, które będzie miało interfejs RS-485 i posłuży nam do testów. W przemysłowych zastosowaniach jest to bardzo popularny interfejs, ale w przypadku hobbystów już niekoniecznie. Na szczęście z pomocą przyszło nam małe Arduino oraz shield MKR 485. Do tego podłączyliśmy czujnik temperatury z serii Grove (znanej np. z kursu micro:bita).
Główny bohater testu, czyli UC-2101-LX, oraz Arduino z niezbędnymi shieldami i moduł czujnika temperatury
Obsługa RS-485 przez Arduino jest oczywiście bardzo łatwa – wszystko dzięki gotowej bibliotece. Taki zestaw pozwolił nam na bardzo szybkie zbudowanie czujnika temperatury, który komunikuje się przez potrzebny do dalszych testów interfejs RS-485.
Do sprawdzenia komunikacji musimy jeszcze skonfigurować port szeregowy w module UC-2101. Na szczęście producent ułatwia nam to zadanie, dostarczając program o nazwie mx-uart-ctl. Pozwala on na odczyt oraz ustawienie trybu pracy portu szeregowego:
Program do konfiguracji pracy portu szeregowego
Aplikacja testowa dla czujnika
Mając możliwość przesyłania danych przez RS-485, możemy przystąpić do pisania testowej aplikacji. Moglibyśmy opracować własny protokół komunikacyjny, jednak skoro testujemy moduły przemysłowe, warto użyć protokołu popularnego w przemysłowych zastosowaniach. Nasz wybór padł na protokół Modbus (więcej informacji znajdziemy np. na angielskiej wersji Wikipedii).
Jest to otwarty standard, dość już dojrzały, bo ponad 40-letni. Można go jednak spotkać bardzo często w zastosowaniach przemysłowych. Dla Arduino znajdziemy gotową bibliotekę, która implementuje protokół Modbus i – co więcej – działa z RS-485, czyli mamy praktycznie gotowca.
Modbus – co warto wiedzieć?
Urządzenia podłączone za pomocą Modbusa mają przypisane adresy, dzięki czemu moglibyśmy podłączyć więcej czujników jednocześnie. Protokół pozwala na reprezentowanie 4 typów danych:
coil – 1 bit, do odczytu i zapisu,
discrete input – 1 bit, tylko do odczytu,
input register – 16 bitów, tylko do odczytu,
holding register – 16 bitów, do odczytu i zapisu.
Dla każdego typu można utworzyć do 10 000 rejestrów, które są również adresowane. W związku z tym, że mamy jeden moduł, przypiszemy mu po prostu adres 1. Chcemy odczytywać temperaturę, więc 16-bitowy typ input register idealnie do tego pasuje. Każdy rejestr ma także swój adres – tutaj wybieramy znowu wartość 1.
Arduino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <ArduinoRS485.h>
#include <ArduinoModbus.h>
constintB=4275;// B value of the thermistor
constintR0=100000;// R0 = 100k
constintpinTempSensor=A0;// Grove - Temperature Sensor connect to A0
voidsetup()
{
Serial.begin(9600);
ModbusRTUServer.begin(1,9600);
ModbusRTUServer.configureInputRegisters(0x01,1);
}
voidloop()
{
ModbusRTUServer.poll();
inta=analogRead(pinTempSensor);
floatR=1023.0/a-1.0;
R=R0*R;
floattemperature=1.0/(log(R/R0)/B+1/298.15)-273.15;// convert to temperature via datasheet
uint16_ttemp=100.0f*temperature;
ModbusRTUServer.inputRegisterWrite(1,temp);
Serial.println(temp);
}
Jak widać, do uruchomienia komunikacji po stronie Arduino wystarczy kilka linijek kodu. Omówimy je krótko, bo dla wielu osób użycie RS-485 oraz Modbusa może być pewną nowością.
C
1
2
3
4
5
6
7
8
#include <ArduinoRS485.h>·
#include <ArduinoModbus.h>
voidsetup()
{
ModbusRTUServer.begin(1,9600);
ModbusRTUServer.configureInputRegisters(0x01,1);
}
Na samym początku funkcji setup() uruchamiamy serwer pracujący z protokołem Modbus. Jej pierwszy parametr to adres urządzenia, a drugi to wybrana prędkość transmisji. Z kolei druga linijka tworzy tzw. input-register – jej pierwszym parametrem jest numer rejestru, a drugim liczba tworzonych rejestrów.
W pętli głównej odczytujemy dane z czujnika, przeliczamy na stopnie Celsjusza (na bazie przykładów Grove), a następnie wynik umieszczamy w rejestrze. Skrócona wersja kodu wygląda następująco:
C
1
2
3
4
5
6
voidloop()
{
ModbusRTUServer.poll();
// odczyt temperatury do zmiennej temp
ModbusRTUServer.inputRegisterWrite(1,temp);
}
Wywołanie funkcji poll() odpowiada za całą komunikację za pomocą protokołu Modbus. Jedyne, co musimy zrobić, to zapisać aktualny wynik pomiaru do rejestru, czyli wywołać inputRegisterWrite(). Parametry tej funkcji to numer rejestru i wartość (którą przekazujemy w setnych stopnia Celsjusza).
Jak pamiętamy, rejestr jest tylko do odczytu, co oznacza, że moduł zbierający dane, czyli UC-2101, będzie tylko odczytywał wartości z rejestru. Jednak wartość trzeba jakoś uzyskać, dlatego kod naszego czujnika zapisuje wartość, chociaż rejestr jest niby tylko do odczytu.
Program na komputer przemysłowy
Teraz, gdy mamy gotowy czujnik temperatury z interfejsem RS-485 i protokołem Modbus, czas wrócić do naszego modułu głównego i odczytać zmierzoną wartość. Moduł UC-2101 działa pod kontrolą pełnego systemu operacyjnego, więc możemy zainstalować potrzebne nam biblioteki, a program sterujący napisać, używając właściwie dowolnego języka programowania.
Gotowy układ testowy, w którym Arduino symuluje przemysłowy czujnik korzystający z Modbusa
Program na potrzeby tego przykładu powstał w Pythonie, a do nawiązania komunikacji użyta została popularna biblioteka PyModbus. Wcześniej widzieliśmy, jak zmienić tryb pracy portu szeregowego na RS-485 za pomocą programu mx-uart-ctl. Teraz wystarczy więc uruchomić interpreter Pythona i wykonać instrukcje widoczne na poniższym zrzucie ekranu.
Komunikacja z czujnikiem przez Modbusa
W pierwszej kolejności importujemy moduł ModbusSerialClient. Następnie tworzymy klienta, bo na Arduino pisaliśmy program serwera. Całość wygląda więc następująco:
Port szeregowy jest dostępny jako urządzenie /dev/ttyM0, prędkość poprzednio ustawiliśmy na 9600, więc teraz musimy wybrać taką samą wartość.
Na koniec możemy odczytać wartość, wywołując client.read_input_registers(1, unit=1). Pierwszy parametr to numer rejestru, a jako unit podajemy adres urządzenia. W wyniku otrzymujemy obiekt typu ReadInputRegistersResponse, z którego odczytujemy wartość odczytaną z rejestru metodą getRegister(0). Potem dzielimy wynik przez 100, aby otrzymać wartość w stopniach Celsjusza.
Opisywany projekt jest bardzo prosty, ale chcieliśmy pokazać, jak można komunikować się z czujnikami lub układami wykonawczymi, wykorzystując interfejs RS-485 oraz protokół Modbus. Oczywiście w profesjonalnym zastosowaniu małe Arduino zostałoby zastąpione czujnikiem przemysłowym.
Inne języki programowania?
Aplikacje działające na komputerze przemysłowym nie muszą być oczywiście tworzone w Pythonie. Zainstalowany na urządzeniu Debian pozwala na użycie praktycznie dowolnego języka programowania, możemy np. wykorzystać C/C++, Javę, Rust czy JS.
W przypadku języków kompilowanych możemy zainstalować kompilator na urządzeniu. Nie jest to jednak zalecane rozwiązanie w warunkach produkcyjnych.
Zamiast tego lepiej kompilować aplikację na komputerze PC, a gotowy program instalować prosto na urządzeniu. W instrukcji użytkownika znajdziemy dokładny opis całego procesu, warto wspomnieć też o możliwości użycia Dockera.
W repozytorium MOXA na GitHubie znajdziemy plik konfiguracyjny dla Dockera, dzięki któremu łatwo przygotujemy obraz zawierający kompilator (gcc) oraz niezbędne biblioteki, czyli wszystko, co jest nam niezbędne do tworzenia programów w C lub C++.
MOXA w praktyce? Przykładowe zastosowania
Różnicę między urządzeniami profesjonalnymi a amatorskimi najłatwiej zauważyć podczas analizy przykładowych zastosowań – oto kilka z miejsc, w których faktycznie można spotkać tego typu układy.
Monitorowanie instalacji fotowoltaicznej
Komputery przemysłowe odpowiadają np. za monitorowanie instalacji fotowoltaicznych. Ten przykład może być dyskusyjny, ponieważ wielu hobbystów może uznać, że tutaj spokojnie wystarczy np. tanie RPi z Domoticzem. Jeśli mamy jedną instalację i sami potrafimy zadbać o nasz system monitorowania, to możemy robić, co nam się podoba.
Jednak dla firmy, która ma setki lub tysiące klientów, byłoby to ryzykowne. Opieranie działania drogich instalacji fotowoltaicznych na amatorskich rozwiązaniach, które nie były tworzone z myślą o pracy w takich warunkach, może przysporzyć instalatorowi dużych kłopotów. Klienci nie byliby zachwyceni, jeśli np. trzeba byłoby ręcznie restartować system po każdej burzy albo wymieniać kartę microSD co kilka miesięcy (bo poprzednia „uległa zużyciu”).
Przykład infrastruktury systemu fotowoltaicznego
Warto również pamiętać o aspekcie „formalnym”. Dopóki instalujemy system we własnym domu i sami za niego odpowiadamy, to nasza sprawa i odpowiedzialność, jakie normy urządzenia spełniają. Jednak jeśli zdarzy się jakiś wypadek, np. wybuchnie pożar, zastosowanie urządzeń niespełniających wymaganych norm może być podstawą do niewypłacenia odszkodowania przez firmę ubezpieczającą. I znowu – jeśli to nasz dom, to nasza sprawa… ale instalując system u innych osób, czasem lepiej nie oszczędzać i nie narażać się na ewentualne koszty procesów o odszkodowania.
Stacje ładowania pojazdów elektrycznych
Inny przykład zastosowania tego typu komputerów to np. stacje do ładowania pojazdów elektrycznych. Kilka stacji może łączyć się z jedną MOXA, która steruje procesem i komunikuje się z resztą systemu, który jest rozproszony np. po całym mieście lub kraju. Mniej rozbudowanym, ale równie kluczowym zastosowaniem tego typu jest sterowanie siecią parkometrów. W obu przypadkach uszkodzenie SBC, który steruje ładowarkami lub (nielubianymi) parkometrami, paraliżowałoby część miasta.
Infrastruktura sieci ładowarek samochodowych
Monitorowanie instalacji przemysłowych
Ostatni przykład to wszelkie instalacje przemysłowe, gdzie nie ma miejsca na oszczędności – tutaj liczy się tylko i wyłącznie niezawodność. Na wypadek gdyby ktoś uważał, że to tylko system monitorowania i jego awaria nie niesie przecież negatywnych następstw, warto sobie na przykład uświadomić, jaki byłby koszt, jeśli konieczne byłoby zresetowanie systemu, który monitoruje pracą farmy turbin wiatrowych ustawionej gdzieś na morzu.
Monitorowanie instalacji przemysłowych
Odszukanie prawdziwych zastosowań MOXA?
Na koniec jeszcze jeden ważny przykład, albo raczej sposób na znalezienie innych przykładów miejsc, w których znajdują zastosowanie komputery tego typu. Praktycznie każde urządzenie widoczne w sieci możemy odszukać za pomocą specjalnej wyszukiwarki – jedną z popularniejszych jest Shodan.io. Jeśli wyszukamy urządzenia firmy MOXA, to znajdziemy 8654 wyników (w tym 425 w Polsce).
Przykładowe wyniki wyszukiwania komputerów MOXA
Większość urządzeń to serwery portów szeregowych, bo wyszukiwarce najłatwiej rozpoznać je jako urządzenia MOXA. Pokazuje to jednak, jak wiele urządzeń jest używanych w różnych firmach i branżach. Tyle wyników dla samych serwerów portów szeregowych powinno również uzmysłowić nam, jak ważne jest zabezpieczenie urządzeń przed nieuprawnionym dostępem. Wcześniej lub później nasz prywatny system może trafić do wyszukiwarki i stać się potencjalnym celem ataku.
Na koniec warto dodać, że komputery firmy MOXA są wyposażone w aplikację moxa-security-utils, która pozwala na zwiększenie poziomu bezpieczeństwa systemu zgodnie z normą IEC62443-4-2. Oczywiście nie zabezpieczy nas to przed wszystkimi błędami, a w szczególności przed podatnościami w pisanej przez nas aplikacji, ale daje szansę, by chociaż trochę podnieść poziom bezpieczeństwa.
Ile to kosztuje? Rabat dla czytelników FORBOT-a
Wiele razy w artykule porównywaliśmy MOXA do tańszego Raspberry Pi. Podaliśmy przykłady dużych, przemysłowych instalacji, w których znaleźć można takie komputery. Pozostaje więc pytanie: ile kosztuje taki komputer przemysłowy? Oczywiście wszystko zależy od konkretnej konfiguracji, ale ogólnie jest taniej, niż mogłoby się wydawać! Na przykład testowane SBC kosztują odpowiednio: 1092 zł netto za UC-2101-LX oraz 1165 zł netto za UC-2104-LX (opcjonalny modem LTE to +717 zł).
Biorąc pod uwagę, że są to układy do profesjonalnych, komercyjnych projektów, to taka cena wydaje się rozsądna – szczególnie jeśli pamiętamy o liście spełnianych norm oraz o wsparciu producenta. Do tego, dzięki uprzejmości firmy Elmark Automatyka SA, mamy dla Was kod rabatowy!
Kod rabatowy forbot2020 ważny jest do końca 2021 roku i uprawnia do 20% rabatu podczas zamawiania dowolnych komputerów z całej serii UC-2100 oraz UC-2100-W.
Podsumowanie
Za nami omówienie najważniejszych informacji na temat komputerów przemysłowych, które sprawdzą się wszędzie tam, gdzie popularne, hobbystyczne rozwiązania nie mogą być używane. Mamy jednak nadzieję, że ten wpis pokazał, że rozwiązania przemysłowe nie są takie straszne. Nawet hobbysta, który chce pójść krok dalej, jest w stanie wykorzystać w swoim projekcie np. komputer firmy MOXA.
Czy wpis był pomocny? Oceń go:
Średnia ocena 4.7 / 5. Głosów łącznie: 50
Nikt jeszcze nie głosował, bądź pierwszy!
Artykuł nie był pomocny? Jak możemy go poprawić? Wpisz swoje sugestie poniżej. Jeśli masz pytanie to zadaj je w komentarzu - ten formularz jest anonimowy, nie będziemy mogli Ci odpowiedzieć!
Autor: Piotr Bugalski
Zdjęcia Piotr Adamczyk
Redakcja techniczna: Damian Szymański
Artykuł sponsorowany dla Elmark Automatyka SA (polskiego dystrybutora komputerów MOXA). Firma zaproponowała tematykę wpisu i dostarczyła niezbędny sprzęt (nie miała jednak wpływu na treść).
Dołącz do 20 tysięcy osób, które otrzymują powiadomienia o nowych artykułach! Zapisz się, a otrzymasz PDF-y ze ściągami (m.in. na temat mocy, tranzystorów, diod i schematów) oraz listę inspirujących DIY na bazie Arduino i Raspberry Pi.
To nie koniec, sprawdź również
Przeczytaj powiązane artykuły oraz aktualnie popularne wpisy lub losuj inny artykuł »
Dołącz do 20 tysięcy osób, które otrzymują powiadomienia o nowych artykułach! Zapisz się, a otrzymasz PDF-y ze ściągami (m.in. na temat mocy, tranzystorów, diod i schematów) oraz listę inspirujących DIY z Arduino i RPi.
Trwa ładowanie komentarzy...