Strona główna TECH .Net Biblioteki .Net do komunikacji ze sterownikami PLC Siemens – Komunikacja z LOGO

Biblioteki .Net do komunikacji ze sterownikami PLC Siemens – Komunikacja z LOGO

2
Biblioteki .Net do komunikacji ze sterownikami PLC Siemens – Komunikacja z LOGO

Sterowniki serii LOGO!, znajdujące się w ofercie Siemens-a to najprostsze ze sterowników PLC oferowanych przez tą firmę. Odbiegają one dość znacznie zarówno od serii S7-300/400 jak i od S7-1200/1500. Różnice znajdziemy zarówno w możliwościach konfiguracji o dodatkowe moduły, mocy obliczeniowej jak i w samym oprogramowaniu służącym do programowania i parametryzacji. LOGO znajdują zastosowania głównie w najprostszych maszynach, gdzie ilość sygnałów i operacji, jakie chcemy na nich wykonywać jest niewielka lub w zastosowaniach typu Smart Home.

W poprzednich postach z tego cyklu wspominałem, że również z tymi sterownikami możemy nawiązać połączenie z poziomu .Net wykorzystując do tego dostępne biblioteki. Niedawno pojawiła się okazja na przetestowanie tych możliwości w praktyce i na kanwie tego doświadczenia powstał ten post.Komunikację z LOGO trzeba zrealizować nieco inaczej niż w przypadku pozostałych sterowników. Tyczy się to zarówno konfiguracji samego sterownika jak i sposobu nawiązywania połączenia.

Do testowania komunikacji wykorzystałem ulubioną bibliotekę Sharp7, która jest .Net-owym portem biblioteki Snap7. W dokumentacji Snap7 znajdziemy nawet specjalny dokument, opisujący jak sobie poradzić z realizacją takiego połączenia. Zacznijmy więc od sterownika.

KONFIGURACJA STEROWNIKA

Po stronie projektu sterownika konieczne jest ustawienie parametrów połączenia.W tym celu, w narzędziu LOGO Soft Comfort, w naszym projekcie, przełączamy się do zakładki Network Project. W okienku Network View klikamy pozycję Add New Device i dodajemy nasz sterownik. Definiujemy adres IP, na którym będziemy realizować z nim połączenie Ethernetowe.Kiedy obrazek sterownika pojawi się już w oknie Network View, musimy zdefiniować połączenie serwerowe. Sterownik w naszym przypadku będzie działał jako serwer. To nasza aplikacja będzie z nim nawiązywać połączenie, wykonywać operacje odczytu/zapisu i zamykać to połączenie.W tym celu klikamy prawym przyciskiem na obrazku sterownika i z podręcznego menu wybieramy pozycję Add server connection… .

Pojawi się okienko konfiguracyjne. Jeżeli chcemy, aby dostęp do sterownika miał komputer z dowolnym adresem IP, po prawej stronie zaznaczamy pozycję Accept All Connection Requests. Poniżej wpisujemy numer TSAP, czyli numer określający kanał i pozycję w komunikacji. Numery TSAP mają w tym przypadku duże znaczenie, gdyż zarówno numer po lewej stronie jak i numer po prawej będziemy wykorzystywać do parametryzacji połączenia po stronie naszej aplikacji. Wartość parametru Connect With an Operator Panel nie ma wielkiego znaczenia dla funkcjonowania naszej komunikacji.
Konfigurację musimy oczywiście zapisać i załadować do sterownika !

APLIKACJA

Połączenie ze sterownikiem będziemy parametryzować nieco inaczej niż w przypadku opisywanych wcześniej sterowników. Tym razem nie będziemy podawać parametrów Rack i Slot. Skorzystamy z wcześniej ustalonych numerów TSAP.

Kod konfigurujący połączenie będzie wyglądał tak:

Utworzymy obiekt klasy S7Client

var _logo = new S7Client();

 

Zdefiniujemy parametry połączenia

_logo.SetConnectionParams(_ipAddress, 0x0300, 0x0200);

 

I już możemy próbować nawiązywać połączenie – identycznie jak w przypadku sterowników S7-300/400 czy S7-1200/1500

var result = _logo.Connect();

 

Trzeba zwrócić uwagę na jedną, bardzo ważną sprawę. W definicji funkcji SetConnectionParams znajdziemy argumenty LocalTSAP i RemoteTSAP. Musimy je wprowadzić odwrotnie, niż zrobiliśmy to w konfiguracji sterownika. Numer TSAP, który zdefiniowaliśmy w projekcie sterownika jako Remote wprowadzamy jako LocalTSAP, a numer TSAP który zdefiniowaliśmy jako LOCAL wprowadzamy jako RemoteTSAP.

Odczyt i zapis danych będzie wyglądał również nieco inaczej. Cała przestrzeń VM wewnątrz pamięci sterownika mapowane jest w komunikacji na blok DB1. I tutaj uzyskamy dostęp do zdefiniowanych zmiennych oraz wejść/wyjść. Operacje wykonujemy oczywiście za pomocą metod DBWrite i DBRead.

Mapa adresów w DB1 sterowników LOGO przedstawia się w następujący sposób:

Dla przykładu. Aby odczytać zawartość zmiennej typu Integer. Znajdujące się pod adresem VM8 odczytamy 2 bajty spod adresu 8 w DB1. Następnie należy wykonać standardową konwersję z formatu Simatic.

var buffer = new Byte[2];
var result = _logo.DBRead(1, 8, 2, buffer);
var value = S7.GetIntAt(buffer,0);

 

Aby odczytać stan wejścia 2 w sterowniku, musimy pobrać cały bajt (w komunikacji S7 nie ma możliwości odczytu pojedynczego bit-u) i „wyłuskać” z niego interesujący nas bit.

var buffer = new byte[1];
var result = _logo.DBRead(1, 1024, 1, buffer);
var i2 = S7.GetBitAt(buffer, 0, 2);

 

Warto pamiętać, że jeżeli chcemy bezpośrednio wystawić wyjście ze sterownika (czego raczej zalecam unikać, lepiej wystawiać flagę i następnie na podstawie tej flagi wyjście wystawić ze sterownika, analizując wcześniej wszystkie parametry i stany mające wpływ na dane wyjście). To musimy przeczytać cały bajt wyjść, następnie zmienić jedynie ten bit na którym nam zależy i zapisać bajt z powrotem. W przeciwnym wypadku może się zdarzyć, że zmienimy stan wyjścia które jest wysterowywane (lub nie) przez program sterownika.

2 KOMENTARZE

Skomentuj PStrejczek Anuluj odpowiedź

Proszę wpisać swój komentarz!
Proszę podać swoje imię tutaj