Tym postem chciałbym dać początek krótkiej serii opisującej biblioteki .Net do komunikacji ze sterownikami PLC Siemens.
Tematyka jest co prawda trochę niszowa, ale skutkuje to również brakiem szerszej informacji na ten temat w sieci. Ponieważ mam sporo doświadczenia w realizacji tego typu komunikacji w .Net chciałem się nim nieco podzielić zarówno w kwestii doboru biblioteki komunikacyjnej jak i dobrych praktyk, które udało mi się wypracować zajmując się tą tematyką.
Sterowniki PLC Siemens Simatic są jednymi z najczęściej spotykanych w przemyśle nie tylko w Polsce ale i w Europie. Bardzo często są również wykorzystywane na zajęciach akademickich do nauki programowania – szczególnie najprostsza i najbardziej atrakcyjna cenowo seria LOGO.
W wielu układach automatyki, zarówno tej domowej jak i tej przemysłowej, sam sterownik wystarcza do realizacji wszystkich zadań. Często jednak pojawia się potrzeba wizualizacji danych, parametryzacji i sterowań na żądanie. Te zadania możemy zrealizować za pomocą dedykowanego, łatwo konfigurowalnego panela operatorskiego, jednak koszt jego zakupu jest zwykle dość spory, i szczególnie w małych układach, może przekroczyć koszt zakupu samego sterownika.
W dzisiejszych czasach, gdy mamy do czynienia z coraz większym wzrostem popularności tzw. Internet Of Things, chcemy często też dane ze sterownika rejestrować np. w chmurze by potem je prezentować w sieci i tutaj panel operatorski już nam nie pomoże. Idealne jest w takim układzie wykorzystanie komputera i oprogramowania, które pomoże nam te dane ze sterownika wyciągnąć (jednocześnie pozwalając na ich wizualizację, parametryzację procesu czy też sterowanie nim na żądanie) i następnie w dowolny sposób zarejestrować czy też obrobić.
Bardzo popularną metodą wymiany danych ze sterownikami jest wykorzystanie protokołu Modbus. Jest to standard funkcjonujący od wielu lat w automatyce, wspierany w lepszym lub gorszym stopniu przez praktycznie wszystkich producentów sterowników. Minusem wykorzystania protokołu Modbus jest jednak konieczność przeprowadzenia odpowiedniej konfiguracji lub wręcz oprogramowania jej po stronie sterownika. W tym cyklu postów nie będziemy się zajmować tym protokołem.
Proponowanym przez wielu producentów sterowników, w tym przez Siemens-a, mechanizmem wymiany danych jest standard OPC. W chwili obecnej w coraz większej ilości przypadków mamy do czynienia ze standardem OPC UA. Serwer OPC jest niejako pośrednikiem pomiędzy urządzeniem (w tym przypadku sterownikiem) a systemami odczytującymi i zapisującymi dane do sterownika. Już wkrótce w najnowszej wersji sterownika Siemens S7-1500 serwer OPC UA ma być zaimplementowany w samym sterowniku – jest to bardzo obiecujące rozwiązanie i być może przyszłość realizacji komunikacji pomiędzy sterownikiem a światem zewnętrznym.
Z moich doświadczeń z OPC wynika jednak, że taka wymiana danych jest stosunkowo mało efektywna. Wykorzystanie dodatkowej aplikacji serwera OPC powoduje ograniczenia w czasowej wydajności komunikacji przez co nie do końca nadaje się np. do realizacji sterowań na żądanie, gdzie wymagana jest natychmiastowa odpowiedź systemu na zadane sterowanie. Spokojnie jednak serwer OPC można wykorzystać np. do cyklicznej rejestracji danych.
Ostatnią z metod komunikacji jest komunikacja bezpośrednia. Protokół komunikacyjny implementowany przez sterowniki Siemens jest dość złożony, trudno więc się porywać na własną jego implementację (aczkolwiek jest to oczywiście przy odrobinie wysiłku możliwe). Istnieje natomiast szereg bibliotek Open Source o mniej lub bardziej restrykcyjnych licencjach, które znacznie ułatwiają zarówno wymianę danych jak i konwersję formatów. Z kilkoma z tych bibliotek miałem do czynienia i stosowałem je w środowisku produkcyjnym. Postaram się je w kolejnych postach przedstawić wskazując na ich zalety i wady. Przygotuję też proste projekty do ich testowania (ich uruchomienie będzie jednak oczywiście wymagało posiadania fizycznego sterownika, z którym będzie można wymieniać dane).
Sterowniki S7-1200 i S7-1500 przyniosły pewną rewolucję w warstwie komunikacji. Ze względu na wprowadzenia różnego rodzaju zabezpieczeń (których genezą jest prawdopodobnie zagrożenie wywołane kilka lat temu przez wirusa Stuxnet) protokół komunikacyjny, w momencie włączenia w/w funkcji bezpieczeństwa, uległ zmianie i wtedy nie jest możliwe wykorzystanie opisywanych tu bibliotek. W takiej sytuacji konieczna jest odpowiednia parametryzacja samego sterownika, aby umożliwić odczyt i zapis danych przez aplikację zewnętrzną. Sposobem konfiguracji sterownika, pozwalającym na dostęp do niego z aplikacji .Net korzystających z opisywanych bibliotek zajmę się w kolejnym poście.
Warto mieć na uwadze, że jedną z lepszych metod zapewnienia bezpieczeństwa jest zastosowanie separacji sieci chociażby przez wykorzystanie w komputerze dodatkowej karty sieciowej dedykowanej jedynie do komunikacji ze sterownikiem.
Wszystkie posty w tym cyklu:
Biblioteki .Net do komunikacji ze sterownikami PLC Siemens – wstęp
Biblioteki .Net do komunikacji ze sterownikami PLC Siemens – protokół S7 i konfiguracja sterownika
Biblioteki .Net do komunikacji ze sterownikami PLC Siemens – projekty testowe
Biblioteki .Net do komunikacji ze sterownikami PLC Siemens – biblioteka s7netplus
Biblioteki .Net do komunikacji ze sterownikami PLC Siemens – biblioteka Sharp7 (Snap7)
Biblioteki .Net do komunikacji ze sterownikami PLC Siemens – biblioteka DotNetSiemensPlcToolboxLibrary
Fajny temat, czekam na kolejne posty.
Modbus (lub inny otwarty protokół) też byłby fajnym tematem, umożliwiło by to realizacje aplikacji dla różnych sterowników 🙂
Pozdrawiam
Cieszę się, że się podoba 🙂 Kolejny post będzie w poniedziałek. Nad modbusem też się zastanawiałem. Modbus jest materiałem max. na 2-3 posty. Jak skończę tę serię o bibliotekach to postaram się przygotować podobną krótką o modbusie z przykładami kodu.