Do Projektu iAutomatyka dołączyli:

Publikacja zgłoszona do 🎁 Konkursu iAutomatyka
https://iautomatyka.pl/wp-content/uploads/2018/05/IMG_20180529_180755.jpg

IIoT z Raspberry – bramka do świata IT

autor: dawleg.

Autor przybliżył nam w tym artykule ideę IIoT oraz w przystępny sposób przedstawił możliwości Raspberry Pi. Postanowiłem podzielić się z Wami moim projektem oraz przedstawić praktyczne wykorzystanie tej koncepcji w połączeniu z sterownikiem firmy Beckhoff i systemem Twincat 2. Zachęcam gorąco do przeczytania wspomnianego wcześniej artykułu, a następnie do zapoznania się z poniższym tekstem opisującym zbliżony projekt.

Zobacz artykuł… Raspberry Pi w warunkach przemysłowych?

Koncepcja:

  1.  Warstwa PLC.
  2.  Raspberry Pi jako bramka IIoT.
  3.  Prywatny serwer do gromadzenia oraz wizualizacji danych.

O możliwościach sterowników PLC zapewne większość z czytelników miała okazję przekonać się lub wykorzystywać je w praktyce. Na potrzeby projektu wykonano prosty program z licznikiem inkrementującym swoją wartość co sekundę.

Następnie, wartość tę odczytano przy pomocy skryptu działającego na Raspberry oraz zapisano wartość na prywatnym wirtualnym serwerze w bazie danych MySQL. Komunikacja pomiędzy Raspberry Pi a sterownikiem PLC odbywa się w ramach lokalnej sieci.

Na serwerze uruchomiono aplikację z poziomu której możliwe jest wyświetlanie oraz resetowanie wartości licznika.

Raspberry oraz VPS (Virtual Private Server) komunikują się w ramach sieci VPN (Virtual Private Network). Aplikacja wizualizacyjna dostępna jest z poziomu dowolnego urządzenia obsługującego przeglądarkę internetową oraz z dostępem do Internetu.


Koncepcję przedstawiono na poniższej grafice:

Założenia projektowe:

  1.  Inkrementacja wartości INT w sterowniku PLC.
  2.  Odczyt aktualnej wartości i zapis do bazy danych MySQL.
  3.  Podgląd aktualnej wartości licznika z poziomu przeglądarki internetowej.
  4.  Możliwość resetowania licznika z poziomu przeglądarki internetowej.

Warstwa PLC

Pracę nad projektem rozpoczęto od napisania programu. Na poniższych zrzutach ekranu przedstawiono funkcję MAIN oraz wykorzystane zmienne globalne.

W pierwszym Networku przygotowano wyjście Timera do inkrementacji licznika. W drugim Networku przygotowano resetowanie licznika w oparciu o wartość licznika (100), a także zmianę stanu flagi F_0_1. W Networku 3 przygotowano licznik i przepisano wartość aktualną do zmiennej globalnej.

Następnie przystąpiono do przygotowania konfiguracji w Twincat System Manager oraz załadowania programu do sterownika. Warto w tym miejscu wspomnieć, że w celu wykorzystania interfejsu ADS do komunikacji Raspberry<->PLC należy dodać trasę komunikacyjną dla sterownika. Przykładową konfigurację pokazano na poniższym zrzucie ekranu.

W pole AmsNetId należy wpisać adres IP Raspberry rozszerzony o .1.1

Konfiguracja VPS

Przed przystąpieniem do konfiguracji Raspberry należało przygotować konfigurację oraz oprogramowanie wirtualnego serwera.

Do uruchomienia aplikacji wykorzystano Apache HTTP serwer oraz MySQL jako serwer baz danych. Osoby zainteresowane materiałami pomocnymi w zainstalowaniu zestawu LAMP (Linux, Apache, MySQL, PHP) mogą zajrzeć pod linki: ang, pl.

Na serwerze uruchomiono aplikację do wizualizacji danych napisaną z wykorzystaniem micro framework’a Slim

Poniżej przedstawiono kilka zrzutów ekranu z telefonu, gdzie otworzono aplikację:


Następnie przygotowano dwie tablice dla zmiennych. Jedna dla zmiennych typu Bool, druga dla wartości liczbowych. W tym celu wykorzystano narzędzie phpmyadmin, a przykładowe wypełnienie pól dla zmiennych logicznych pokazano na poniższym zrzucie ekranu.

W podobny sposób przygotowano drugą tablicę gdzie zapisywano wartości licznika.

Konfiguracja Raspberry Pi

Mając przygotowaną warstwę sprzętową (PLC), oraz warstwę „Internetową” (VPS) przystąpiono do przygotowania „łącznika” obu warstw – do programowania Raspberry Pi.

Do zrealizowania programowego były trzy zadania:

  •  odczyt danych ze sterownika,
  •  zapis odczytanych danych w tablicy MySQL,
  •  Sprawdzenie wartości przycisku resetującego i wykonanie określonych działań w zależności od wartości.

Zadania należy wykonywać cyklicznie. W tym celu wykorzystano program napisany w języku Python.

Komentarz do zamieszczonego powyżej kodu (pogrubionym tekstem opisano numery linii kodu):

  • 1-5 – import modułów,
  •  8 oraz 43 – fragment pozwalający wykonywać program w ciągłem pętli z interwałem czasowym 500ms,
  •  9, 35, 37 – obsługa błędów i wyjątków. W pierwszej kolejności wykonywany jest program w ramach klauzuli try. W przypadku gdy nie udało wykonać się kodu zawartego w try program przerywa wykonanie klauzuli, a następnie wykonywana jest obsługa błędów zawarta w except. W except zwracany jest komunikat o nieudanej próbie odczytu danych z bazy danych oraz komunikat błędu. Klauzula finally wykonywana jest niezależnie od tego, czy udało się wykonać klauzulę try czy została ona przerwana w jakiś sposób,
  •  10-13 – zdefiniowano parametry połączenia oraz połączono się z bazą danych podając adres IP hosta, nazwę bazy danych oraz dane autoryzacyjne,
  •  17-18 – odczytano i wykonano formatowanie odczytanych danych ze sterownika przez przesunięcie bitowe. Dane odczytano przy pomocy skompilowanego programu C++ readValueInt.bin. W celu nawiązania połączenia ze sterownikiem i odczytania danych wykorzystano biblioteki udostępnione przez firmę Beckhoff z tego repozytorium,
  •  19-21 – wykonano zapis wartości licznika do tablicy,
  •  22-28 – odczytano wartość przycisku. W tym celu wykorzystano przygotowaną w linijce 15 instrukcję MySQL,
  •  30-33 – wykonano zmianę wartości zmiennej typu Bool poprzez wywołanie wcześniej skompilowanego programu oraz zmieniono wartość przycisku na 0.

Poniżej zamieszczono wykorzystany kod do zbudowania plików readValueInt.bin oraz writeValueBool.bin.

1. Zrzut pierwszy przedstawia główną funkcję, w której wywołano funkcję zamieszczoną na drugim zrzucie oraz w której uwzględniono obsługę wyjątków.

2. Zrzut drugi przedstawia funkcję runExample, w której wykonano pożądane instrukcje:

  •  40-41 – zdefiniowano adres AmsNetID oraz adres IP sterownika PLC,
  •  44 – zdefiniowano adres AmsNetID dla lokalnej maszyny – Raspberry,
  •  47-50 – dodano połączenie do sterownika,
  •  53-57 – otwarto połączenie ze sterownikiem,
  •  59 – zdefiniowano handler dla połączenia,
  •  61 – wywołano polecenie zmiany wartości bitowej pod wskazanym adresem,
  •  63-67 – zamknięto połączenie.

3. Zrzut trzeci oraz zrzut czwarty przedstawia wykorzystane funkcje odczytu oraz zapisu zmiennych w sterowniku PLC.

Rezultat

Uruchomieniu skryptu napisanego w pythonie pozwala na przetestowanie działania wizualizacji oraz możliwości resetowania licznika.

Postarałem się pokazać to na poniższych zrzutach ekranu gdzie w prawym dolnym rogu pokazałem podgląd online wartości licznika:

Podsumowanie

Mam nadzieję, że opisując powyższy projekt udało mi się pokazać, jak świat automatyki może stopniowo zmierzać w kierunku świata IT. Być może, w niedalekiej przyszłości, będziemy w sytuacji gdzie do standardu należeć będzie programowanie sterowników PLC w języku wysokiego poziomu? Być może producenci popularnych sterowników PLC pójdą w kierunku integracji swoich urządzeń z bramkami IIoT, a typowym zadaniem inżyniera automatyki będzie integrowanie urządzeń z systemami uruchomionymi w chmurach obliczeniowych?

Artykuł został nagrodzony w Konkursie iAutomatyka – edycja Listopad 2019

Nagrodę Stripax + zestaw gadżetów dostarcza ambasador konkursu, firma Weidmüller

.



Utworzono: / Kategoria: , , ,

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
  • 1,000 PLN
    Zdobądź wiedzę i bądź pewny, że nic Cię nie zaskoczy. Nie musisz przekopywać się przez tony katalogów i instrukcji. Oferujemy Ci kompleksowy system szkoleń, który sprawi, że najpierw zbudujesz fundamenty swojej wiedzy, a później pod okiem n...
    Czas trwania: 7h - 14 h
    Link: Terminy
  • Urządzenia firmy FATEK istnieją na rynku polskim od 2004 roku i stały się alternatywą dla już istniejących rozwiązań i urządzeń. Niezawodność, korzystna cena i możliwości sterowników PLC sprawiły, że zyskały one ogromne zainteresowanie prog...
  • Przeznaczony do pracy na wolnym powietrzu EMC / ekranowany Zakres zastosowania Budowa instalacji przemysłowychBudowa maszynTechnika grzewcza i klimatyzacyjnaElektrownie Dla przemiennika częstotliwości zasilającego 3 – fazowe silniki A...
  • RPC-2A-UNI  przekaźnik czasowy – Działający po zaniku napięcia zasiania, przy załączonym przekaźniku wykonawczym.   Przekaźnik przeznaczony do stosowania w instalacjach niskiego napięcia w automatyce przemysłowej, w automatyce budynko...
  • EPSITRON®ECO & COMPACT Power OSZCZĘDNOŚĆ KOSZTÓW Zasilacze EPSITRON® ECO i COMPACT Power to nie tylko oszczędność przy zakupie, ale również niższe koszty dzięki łatwej obsłudze oraz braku konieczności serwisowania. Są one doskonałym roz...
  • Rozwiązania wizyjne nadają się idealnie do zautomatyzowanych zadań kontrolnych i pomiarowych. Kamery wizyjne 2D i 3D firmy SICK sprawdzają się w ogromnej ilości aplikacji, polegających na pomiarze, lokalizacji, kontroli i identyfikacji. Nas...