Do Projektu iAutomatyka dołączyli:

https://iautomatyka.pl/wp-content/uploads/2019/09/raspberry-pi-revolution-pi-iautomatyka-naprinca.jpg

Własne IIoT z Pythonem i Raspberry (Revolution) Pi – Praca konkursowa

autor: Przemek Czech.

Industry 4.0 – kto z nas nie słyszał tego hasła w ostatnim czasie? Dużo się o nim mówi, ale czy rzeczywiście jest to rewolucja przemysłowa na skalę wprowadzenia maszyny parowej czy mikrokomputerów? Kwestię tą zostawiam do dyskusji. Nie zmienia to jednak faktu, że chcąc być na czasie z nowymi technologiami musimy dostosować się do istniejących trendów na rynku automatyki.

Niezaprzeczalnie jednym z elementów składowych Industry 4.0 jest IIOT. Czym jest za tym to IIOT? Dla nie wtajemniczonych rozwiniemy ten skrót  – Industrial Internet of Things. Jest to technologia, która pozwala na całkowite lub częściowe zdigitalizowanie produkcji oraz prowadzenia obserwacji produkcji przy pomocy narzędzi z branży czysto IT. Czyli prosty przykład mamy jakiś interesujący dla np. technologów parametr produkcji (w naszym przypadku będzie to temperatura) a nie mamy żadnego systemu nadrzędnego typu SCADA. Co można w tym przypadku zrobić? Pierwsza najbardziej oczywista sprawa to wyciągniecie parametru na panel HMI. Tylko jeżeli nie mamy linii wpiętej do sieci to technolog musi obserwować parametr bezpośrednio na panelu. Można też logować dane do pamięci sterownika. Ale i wtedy trzeba mieć dostęp do sieci, żeby przesłać dane. Z tym, że pamięć sterownika też jest ograniczona i nie przechowa bardzo dużej ilości danych. Z pomocą przychodzą nam bazy danych. Jaka jest koncepcja? Trzeba wyprowadzić dane do bazy danych, a stamtąd to już droga otwarta do bardzo szerokiego zastosowania ponieważ języki z branży IT mają tak szerokie zastosowanie, że praktycznie pozwalają z tym danymi robić wszystko (wizualizacja, statystyka czy idąc dalej uczenie maszynowe do efektywnym zarządzaniem produkcji po pracę w siecią neuronowych). Może brzmi to dość abstrakcyjnie jak na nasze polskie procesy produkcyjne, ale świat automatyki idzie w tym kierunku.


Oczywiście można skorzystać z gotowych modułów różnych producentów jednak koszt takiego systemu idzie w tysiące euro. Ja postaram się pokazać jak można samemu zaimplementować takie rozwiązanie przy użyciu przemysłowej wersji popularnego komputerka Raspberry Pi – Revolution Pi.

Koncepcja

System ten pracował będzie na trzech płaszczyznach:

  1. warstwa PLC,
  2. warstwa języka wysokiego poziomu,
  3. warstwa bazy danych.

Sterownik PLC pełni funkcję najniższego hardwarowego poziomu czyli ma odczytać temperaturę z czujnika i tu się tak naprawdę kończy jego praca (dzięki temu nie obciążamy dodatkowo sterownika dodatkowymi operacjami. Następnie musimy odczytać jakimś sposobem te dane do komputera. Tu z pomocą przychodzi nam Python czyli jądro całego rozwiązania (równie dobrze możemy użyć C++, C# czy JAVY ważne jest aby dany język miał obsługę komunikacji ze sterownikami PLC). Tak odczytane dane wysyłamy do serwera bazy danych. My użyjemy chyba na tę chwilę najpopularniejszego SQL.

Python pozwala na wysyłanie i odbieranie danych z bazy poprzez wysyłanie komend bezpośrednio do interpretera serwera SQL’a, wiec znając składnie SQL’a obsługa bazy z poziomu programu Pythona jest banalnie prosta.

Do realizacji tego zadania będziemy potrzebować 3 rzeczy:

  1. Sterownika PLC S7-1200 wraz z TIA Portal do napisania banalnie prostego programu.
  2. Komputera z interpreterem Python’a oraz stosownymi bibliotekami (w tym przypadku będzie to wersja 3 z obsługą systemów 64-bitowych). Oczywiście sam interpreter jako środowisko developerskie dla Pythona jest darmowe, osobiście polecam PyCharm’a od JetBrains ale co programista to środowisko.
  3. Serwera bazy danych SQL – można go pobrać za darmo w wersji Community z Internetu.

Schemat wymiany informacji przedstawia rysunek poniżej:

Założenia projektowe

Do zrealizowania zadania trzeba wykonać następujące zadania:

  1. Sprawdź czy załączone jest wejście %I0.0.
  2. Jeżeli tak odczytaj temperaturę z rejestru %MD0 w formacie REAL z dokładnością do jednego miejsca po przecinku.
  3. Wyświetl temperaturę w terminalu (aplikacja konsolowa).
  4. Zapisz temperaturę do bazy danych z unikalnym identyfikatorem oraz dokładną aktualną datą.

TIA PORTAL

Z racji, że przy pracy korzystać będziemy z sterownika S7-1200 (dokładnie 1214C) bez modułu RTD trzeba zasymulować sobie odczyt temperatury, ale to później. Na początek zajmijmy się konfiguracją sprzętową.

Przechodzimy przez kolejne kroki. Nie będę się bardzo nad tym rozwodził gdyż są to proste sprawy.

  1. Zakładamy nowy projekt.
  2. Dodajemy sterownik do projektu.
  3. Ustawiamy mu adres IP: 192.168.0.1 (warto zapamiętać ten adres gdyż będzie on potrzebny podczas tworzenia komunikacji między sterownikiem PLC oraz programem napisanym w Python’ie).

I to wszystko ze strony konfiguracji sprzętowej. Dodajmy sobie zmienną, która będzie nam służyć jako wartość przechowywanej temperatury.

Przechodzimy do PLC Tags -> Default tag table.  I tworzymy zmienną o nazwie „zmienna” typu REAL o adresie %MD0. 

Wypadało by jeszcze napisać jakiś kod który będzie zmieniał tą wartość. Do tego celu tworzymy przerwanie cykliczne w którym będziemy dodawać do naszej zmiennej jakąś losową wartość, dzięki czemu zasymulujemy odczyt temperatury. Kod przedstawia poniższy rysunek.

Pozostaje tylko teraz wgrać konfigurację wraz z programem do sterownika PLC i przetestować działanie. To wszystko jeżeli chodzi o przygotowanie od strony sterownika PLC.

SQL

SQL jest językiem do pracy z relacyjnymi bazami danych. Wszakże my przy tak prostym projekcie nie będziemy korzystać z relacyjności (jest to możliwość tworzenia powiązań między tabelami w bazie danych). Niezbędną jednak rzeczą do realizacji będzie serwer SQL. Można go bezpłatnie pobrać z internetu w wersji Community. Nie będę tutaj omawiał procesu instalacji oraz konfiguracji całego systemu. Zainteresowanie bez najmniejszego problemu odnajdą takie materiały w internecie.

Po prawidłowej instalacji oraz stworzeniu konta można zalogować do graficznego interfejsu, który ma nazwę MYSQL Workbench. Okno powinno wyglądać jak poniżej.

Budowa okna jest dość intuicyjna. W sekcji [1] mamy zgrupowane wszystkie bazy danych na serwerze, sekcja druga [2] służy do wpisywania kodu SQL, zaś miejscu [3] klikamy aby wykonać polecenie (odpowiednik kompilacji w TIA Portal). Skoro znamy już interfejs można przejść do przygotowania bazy danych do naszego projektu.

1. Aby móc pracować z bazą danych trzeba sobie ją najpierw stworzyć.

To polecenie tworzy nową pustą bazę danych o nazwie „logowanie”. Każde polecenie potwierdzamy „piorunem” na pasku powyżej.

Dużym ułatwieniem podczas pracy z SQL jest ustawienie domyślnej bazy danych. Nie musimy wtedy podczas odwoływania się do tabeli tejże bazy używać jej nazwy przed nazwą tabeli.

2. Jednak aby móc umieszczać jakiekolwiek dane w bazie nie można ich wrzucać bezpośrednio do bazy. Jezyk SQL umieszcza wszystkie informacje w tabelach. Nie chce się bardzo rozwodzić nad tematyką baz danych, ale wystarczy nam wiedzieć, że jeden rekord w tabeli powinien zawierać komplet informacji na temat danego obiektu. W naszych założeniach mamy, że komplet informacji powinien mieć informację:

  • unikalny identyfikator pomiaru,
  • informacje o temperaturze,
  • dokładną datę zapisanej informacji.

Więc nasza tabela powinna zawierać trzy kolumny. Polecenie do stworzenia takiej tabeli przedstawia rysunek poniżej.

Składnia nie jest jakoś specjalnie skomplikowana.

  1. create table dane – tworzy tabele o nazwie dane.
  2. ID int primary key auto_increment,temperatura float not null,data_i_czas datetime) – jest informacja ile i jakie kolumny mają się pojawić w tabeli np. temperatura float not null – mówi, że stwórz kolumnę o nazwie temperatura typu float (zmiennoprzecinkowego) oraz, że pole to nie może być puste.

Aby nie być gołosłownym wpiszmy sobie polecenie, które wyciągnie wszystkie dane z tabeli „dane”:

Polecenie select * from dane wyciąga wszystkie informacje z tabeli dane. Jak widać poniżej tabela jest pusta.

To wszystko, ze strony SQL baza oraz tabela jest przygotowana. Pozostaję crème de la crème, czyli program w Pythonie.

Python

Python jest językiem skryptowym ogólnego przeznaczenia. Bardzo szybko zdobywa on dużą popularność właśnie przez to, że można go stosować w każdej dziedzinie. Ma naprawdę wiele bibliotek miedzy innymi do obsługi komunikacji z sterownikami z serii S7 jak i pracy z relacyjnymi bazami danych SQL. Ogólnym założeniem Pythona jest programowanie obiektowe, więc postaramy się w mniejszym lub większym stopniu trzymać się paradygmatów programowania obiektowego.

Nasz program składał się będzie z trzech modułów:

  1. Moduł główny – tutaj będzie znajdował się pogram główny.
  2. Moduł komunikacji PLC.
  3. Moduł pracy z bazami SQL.

Moduł komunikacji PLC

Python do komunikacji z sterownikami Siemensa używa biblioteki snap7.  Jak doinstalować sobie takową bibliotekę – odsyłam do Internetu. Przedstawmy sobie kod klasy:

Nie będę tutaj wchodził w tajniki programowania, jednak pokrótce przedstawię co robią poszczególne fragment kodu;

Linijki:

  • 1 – 4 – import zewnętrznych bibliotek do obsługi komunikacji z sterownikami z serii S7,
  • 7 – 33 – ciało naszej klasy o nazwie PLC,
  • 9 – 19 – konstruktor klasy (funkcja/metoda która jest zawsze wykonywana kiedy powstaję instancja – obiekt klasy). W konstruktorze zaimplementowałem procedurę połączenia się z sterownikiem. Jako parametr nasz konstruktor przyjmuję adres IP sterownika PLC,
  • 21 – 22 – de konstruktor – działanie identyczne jak konstruktor z tym, że wywoływany jest kiedy zostaję zwolniona pamieć zaimplementowana dla obiektu. W naszym przypadku bezpiecznie kończy pracę z sterownikiem PLC,
  • 25 – 27 – metoda klasy która pozwala odczytywać zmienna typu REAL z sterownika PLC. Jako parametr wejściowy przyjmuje adres pamieci M (przypominam, że w tym przypadku jest to adres %MD0 więc jako parametr wejściowy ta metoda przyjmie 0) oraz zwraca wartość odczytanej temperatury.
  • 30 – 32 – podobnie jak wyżej z tym, że podajemy adres wejścia cyfrowego (u nas jest to %I0.1 więc kolejne parametry będą to 0 i 1) a zwraca wartość TRUE jeżeli wejście ma stan wysoki lub FALSE jeżeli ma stan niski.

Moduł pracy z  baza SQL

Podobnie jak w przypadku biblioteki związanej z komunikacja z PLC tak w przypadku SQL’a dostajemy gotową bibliotekę o nazwie mysql.connector. Warto jeszcze zaznaczyć dla osób zainteresowanych tematem, że w tym przypadku korzystam z 64-bitowego interpretera Python w wersji 3. Jednym z nielicznych wad tego języka jest to, że nie do końca jest on kompatybilny między wersjami 32-bitowymi oraz 64-bitowymi. A największy problem już powstaje gdy chcemy migrować z Python 2.+ do Python 3.0 więc warto to wziąć pod uwagę podczas pracy z tym językiem.

Obsługę wymiany danych z baza danych SQL przedstawia rysunek poniżej.

Podobnie jak w module do pracy z PLC przeprowadzimy szybką analizę kodu:

  • – import zewnętrznej biblioteki do pracy z bazami danych,
  • 4 – 36 – implementacja klasy do pracy z naszą bazą danych,
  • 6 – 24 – konstruktor klasy –  w tym miejscu klasy przeprowadzamy rozpoczęcie komunikacji z systemem bazodanowym. Jak parametry podajemy adres naszego serwera, nazwę użytkownika oraz hasło. Warto zwrócić uwagę również na 3 zmienne prywatne klasy db (jest to uchwyt do naszej bazy danych), cursor (dzięki tej zmiennej możemy wysyłać zapytania do SQL’a – najprościej mówiąc jest to odpowiednik pola do wpisywania komend w MYSQL  Benchmark oraz formula – w tej zmiennej konstruować będziemy zapytania.
  • 26 – 36 – metoda klasy, która wysyłać będzie naszą temperaturę do tabeli. Warto zwrócić uwagę tutaj na funkcje SQL’a – now() – dzięki niej od razu mamy gotową datę rejestracji nie musimy pisać osobnego kodu do obsługi daty.

Moduł główny

Skoro wszystkie potrzebnie klasy mamy przygotowane to pozostaje najprostsza i zarazem najprzyjemniejsza część pisania programu, czyli stworzenie obiektów klas (instancji) oraz wywołanie stosownych metod. Przeanalizujmy kod poniżej:

  • 1 – 3 – import wczesnej przygotowanych modułów klas oraz klasy time potrzebnej do opóźnienia działania programu,
  • 6 -7 – stworzenie obiektów odpowiedzialnych za komunikację z sterownikiem PLC oraz bazą SQL,
  • 10 – 18 – pętla główna programu,
  • 12 – 15 – instrukcja warunkowa IF. Jeżeli stan wyjścia %I0.1  ma stan wysoki to odczytaj temperaturę zapisaną w pamięci o adresie %MD0, wypisz odczytaną wartość w konsoli oraz dodaj temperaturę do bazy danych.

I to wszystko od strony programistycznej pozostaje tylko sprawdzenie pracy systemu.

Testy

Uruchamiamy sterownik PLC , program napisany w Pythonie oraz serwer bazodanowy SQL. Wysterowujemy wejście %I0.1  i obserwujemy.

TIA Portal

Python

SQL

Implementacja w szafie automatyki

Jak widać powyżej wszystko działa poprawnie. Jednak mało który system automatyki posiada komputer przemysłowy. Z pomocą przychodzi nam Rasppbery PI. Jest to miniaturowy komputer pracujący pod system linux (dystrybucje debiana). Dzięki temu rozwiązaniu możemy przenieść nasz system logowania do tego mini komputera. Ciekawostką jest to, że ma od razu wbudowany interpreter Pythona więc pozostaje nam tylko doinstalować serwer SQL.

Zapewne zaraz rozlegną się wołania, że jak to Rasppbery PI nie jest urządzeniem przemysłowym, więc co ono robi w szafie. OK zgadza się, jednak z pomocą przychodzi nam firma KUNBUS i Pilz ze swoją implementacją Rasppbery PI  o nazwie Revolution PI.

Jest to pełni funkcjonalny komputer przemysłowy z możliwością pracy z I/O cyfrowymi jak i analogowymi. W naszym jednakże przypadku najważniejsze jest to, że pracuje on na identycznym systemie co normalne Raspberry PI. Koszt takiego urządzenia waha się w granicach od 600 zł do 2000 zł w zależności od wersji.

Dowiedz się więcej o Revolution Pi:
http://bit.ly/2nNWfn5

W odróżnieniu od klasycznej wersji ma on napięcie zasilania 24 VDC oraz przystosowany jest on do montażu na szynie DIN więc idealnie nadaję się do montażu w szafie.

Podsumowanie

Jak widać wielki świat Industry 4.0 nie jest taki straszny jak go malują, wystarczy znajomość paru narzędzi i można skonstruować solidnie pracujący system logowania. Warto również przemyśleć kwestie czy nowoczesny automatyk może zamknąć się wyłącznie na języki programowania sterowników PLC. Coraz więcej producentów automatyki przemysłowej pozwala na programowanie swoich sterowników w językach wysokiego poziomu z branży IT (C++, C#) wizualizację tworzone mogą być przy pomocy narzędzi webmasterskich coraz więcej HMI/SCAD wspiera takie technologie HTML, CSS czy bardzo popularny ostatnio JavaScript (spotkałem się raz z możliwością programowania robotów przemysłowych w tym własnie języku).

Nie wątpliwie najbliższy czas przyniesie pewną rewolucję, ale czy ona wyjdzie nam na plus? To pytanie zostawiam już bez odpowiedzi.

Artykuł został nagrodzony w Konkursie iAutomatyka – edycja Wrzesień 2019

Nagrodę Voucher na szkolenie + kubek termiczny + zestaw gadżetów

dostarcza ambasador konkursu, firma Mitsubishi Electric.



Utworzono: / Kategoria: , , , , ,
  • Autor: Przemek Czech
  • Automatyk, absolwent mechatroniki interesujący się sterownikami PLC oraz systemami nadrzędnymi a zwłaszcza tymi które przenoszą klasyczna automatykę w świat IT
  • Profil Autora

Reklama

Newsletter

Zapisz się i jako pierwszy otrzymuj nowości!



PRZECZYTAJ RÓWNIEŻ



NAJNOWSZE PUBLIKACJE OD UŻYTKOWNIKÓW I FIRM

Reklama



POLECANE FIRMY I PRODUKTY