Do Projektu iAutomatyka dołączyli:

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
  • Obsługa za pomocą urządzeń mobilnych zapewnia wygodę i ciągłość pracy Operatorzy maszyn mogą teraz płynnie przełączać kontrolę nad maszyną między głównym interfejsem HMI a urządzeniami mobilnymi. Nowa funkcja systemu mapp View firmy B&R...
  • Przy użyciu flexROOM® można szybko i łatwo realizować automatykę budynkową na potrzeby biur i budynków administracyjnych, zgodną z obowiązującymi normami i efektywną energetycznie. flexROOM® to szeroki wachlarz rozwiązań dla automatyki budy...
  • Sterowniki  z serii SIMATIC S7-1200 oferują szeroki zakres funkcjonalności i zintegrowane wejścia/wyjścia zamknięte w kompaktowej obudowie. Są doskonałym narzędziem do realizacji standardowych projektów i zadań automatyki, a jednostki S7-12...
  • RPI-1ZI-U24A, to przekaźnik  instalacyjny wytrzymujący maksymalny prąd załączania 120A w czasie 20ms. Przekaźnik ten dedykowany jest do załączania obwodów o wysokim prądzie początkowym, w szczególności do obwodów oświetleniowych, potwierdzo...
  • Systemy RFID są ekonomiczne, uniwersalne i zapewniają niezawodność procesów, np. w intralogistyce. Zadania związane z identyfikacją stały się teraz łatwiejsze, szczególnie gdy potrzebna jest duża liczba punktów identyfikacji, dzięki  głowic...
  • W trybie refleksyjnym sygnał ultradźwiękowy jest nieustannie odbijany przez zamontowany na stałe element odbijający wiązkę, tzw. element odniesienia. Jako elementu odbijającego wiązkę można używać odpowiednio ustawionego panelu z plastiku l...