Biblioteki .Net do komunikacji ze sterownikami PLC Siemens – biblioteka DotNetSiemensPlcToolboxLibrary

0
121

Dzisiaj zajmiemy się trzecią, i jednocześnie ostatnią, z bibliotek które planowałem opisać w tej krótkiej serii. Będzie to DotNetSiemensPlcToolboxLibrary (uff – długa nazwa).

Dla mnie jest to tak naprawdę pierwsza .Net-owa biblioteka do komunikacji ze sterownikami Siemens-a, z którą się zetknąłem po klasycznym libnodave. Pełny kod źródłowy biblioteki znajdziemy tym razem również na github.

Mamu tutaj do czynienia, tak naprawdę, z bardzo rozbudowanym wrapperem na libnodave (w skompilowanym projekcie zawsze znajdziemy dll-kę lekko zmodyfikowanego libnodave).

DotNetSiemensPlcToolbox prezentuje nieco wyższy poziom abstrakcji, niż pozostałe biblioteki, gdzie operowaliśmy zakresami adresów w blokach, a następnie wyłuskiwaliśmy dane z odczytanej tablicy bajtów. Ewentualnie, jak w przypadku s7netplus, odczytywaliśmy pojedynczą zmienną podając jej adres w notacji sterownikowej. W tym przypadku mamy do czynienia z podejściem opartym o tzw. Tag-i. Pojęcie jest to z pewnością doskonale znane każdemu, kto miał do czynienia z systemami SCADA. Tag to nic innego jak po prostu pewna reprezentacja zmiennej, opisana jej adresem, nazwą i czasami różnymi innymi właściwościami.

Operujemy tutaj właśnie na pojedynczych tag-ach, lub na listach tagów. Wykonanie na takiej liście operacji odczytu zwróci nam wartość, wykonanie zaś zapisu ustawi odpowiednią wartość w sterowniku. Służy nam do tego obiekt klasy PLCTag.

W przypadku rzeczonej biblioteki nie jesteśmy niestety rozpieszczani dokumentacją, jak to miało miejsce w przypadku poprzednio opisywanych bibliotek. Za dokumentację musi nam w tym przypadku posłużyć duża liczba różnego rodzaju przykładów, które znajdziemy w repozytorium github.

Bibliotekę zainstalujemy do naszego projektu za pomocą Nuget-a:

Przy nawiązywaniu połączenia musimy ustawić tym razem więcej parametrów, podobnie jak robilibyśmy to w klasycznym libnodave. Na początek musimy utworzyć obiekt klasy PLCConnectionConfiguration i wypełnić odpowiednie parametry. Nazwy parametrów są bardzo intuicyjne, więc nie będę ich tutaj szczegółowo opisywał:

Następnie należy wywołać metodę SaveConfiguration obiektu klasy PLCConnectionConfiguration:


Do realizacji połączenia wykorzystamy obiekt klasy PLCConnection, któremu jako parametr przekażemy referencję do obiektu zawierającego konfigurację:

Połączenie nawiążemy za pomocą metody Connect, a o statusie połączenia poinformuje nas parametr Connected:


Operacje zapisu i odczytu wykonamy wkorzystując metody WriteValue, lub ReadValue obiektu klasy PLCConnection – podając jako parametr pojedynczy obiekt klasy PLCTag. Lub odpowiednio WriteValues i ReadValues, które jako parametr przyjmują listę tagów (obiektów klasy PLCTag).

Obiekt możemy łatwo utworzyć podając jako parametr adres w notacji sterownikowej, oraz typ danych z enum-a TagDataType:

W tym przypadku przypisałem też od razu wartość, gdyż jest to tag który chcę zapisać do sterownika.

W przypadku wywołania metody odczytu, zmienna value przyjmie wartość odczytaną ze sterownika, skonwertowaną już odpowiednio bazując na ustawionym podczas tworzenia obiektu typie tagu (enum TagDataType).

Dobrą praktyką jest nie grupowanie zmiennych pochodzących z różnych bloków (różnych przestrzeni pamięci, lub różnych bloków DB). Lepiej pogrupować zmienne z tego samego obszaru – zoptymalizujemy w ten sposób odczyt czy też zapis.

Przykładowy kod tradycyjnie do znalezienia na moim github.

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

ZOSTAW ODPOWIEDŹ

Please enter your comment!
Please enter your name here