Konfiguracja sterownika S7
Ten poradnik ma na celu demonstrację procesu konfiguracji czytnika RFID Inveo IND ze sterownikami Siemens S7-300/S7-1200/S7-1500 przy użyciu protokołu Modbus TCP/IP.
Zaczynamy od stworzenia nowego projektu oraz wybrania sterownika – może to być dowolny sterownik z rodziny S71200/S71500 oraz wybrane modele S7300/S7400. W naszym przypadku będzie to jednostka 1511-1.
Zadbaj o to aby czytnik oraz sterownik znajdowały się w tej samej sieci.
W naszym przypadku będzie to:
- S7-1500 – IP: 192.168.0.10
- Czytnik Inveo Box ID – IP: 192.168.0.2
Zaczynamy od stworzenia bloku funkcyjnego, w którym obsłużymy protokół komunikacyjny Modbus TCP/IP, w moim przypadku będzie się on nazywał “Modbus”. Po jego stworzeniu możemy go wywołać w “OB1”.
Następnym krokiem jest wywołanie bloku funkcyjnego MB_CLIENT wewnątrz bloku “Modbus”, który znajdziemy w zakładce “Communication” -> “Others”. Docelowo będziemy musieli użyć czterech takich bloków – dwa do odczytu rejestrów “Holding Registers” oraz “Single Coils” oraz dwa do ich zapisu. Na razie skupmy się na bloku do odczytu danych “Holding Registers”.
Po wywołaniu bloku widoczne będą zaznaczone na czerwono wejścia na dane niezbędne do konfiguracji i nawiązania połączenia – bez ich wypełnienia program się nie skompiluje. Z tego względu musimy stworzyć blok danych z danymi konfiguracyjnymi.
Konfiguracja Modbus
W bloku tworzymy następujące zmienne:
“MbTCPClientRead” oraz “MbTCPClientWrite” to struktury do konfiguracji ustawień sieciowych. Pozostałe zmienne to zmienne pomocnicze służące do rozłączania Modbusa oraz ułatwiające pracę na rejestrach.
Struktury należy wypełnić tak jak poniżej, parametr “InterfaceId” będzie zależał od sprzętowego identyfikatora sieci – można sprawdzić jego wartość wchodząc w ustawienia sterownika “properties” -> “System constants” w naszym przypadku to 64. Tablica “ADDR” to adres IP naszego czytnika, “RemotePort” to port komunikacyjny, 502 to standardowy port dla Modbus TCP/IP.
Stwórzmy kolejny blok, w którym przechowywać będziemy już dane do odczytu i zapisu rejestrów “Holding Registers” przez Modbus.
Ważne aby blok, na którym będą wykonywane operacje odczytu i zapisu rejestrów był odpowiednio skonfigurowany. Musimy wyłączyć optymalizację bloku spowoduje to dodanie kolumny “offset” w bloku danych.
Po skonfigurowaniu ustawień bloku należy stworzyć tablicę, w której będziemy przechowywać dane. W moim przypadku nazywać się ona będzie “DataRegisters” i będzie przechowywała 50 elementów typu Word. Po utworzeniu tablicy możemy ją podłączyć do wejścia “MB_DATA_PTR” bloku “MB_CLIENT”. Jest to wskaźnik, który musimy przekazać w celu odczytu danych.
Następnym krokiem jest przypisanie stworzonych przez nas zmiennych z bloków “ModbusConnect” oraz “ModbusData” do bloku “MB_CLIENT”.
Ostatnim elementem potrzebnym do zakończenia konfiguracji bloku do odczytu danych jest podłączenie zegara do wejścia “REQ”. Ustawienie stanu wysokiego na wejście “REQ”
będzie powodowało odbiór danych. Dane będą aktualizowały się co sekundę – jeśli potrzebujesz szybszej aktualizacji danych możesz wykorzystać zegar o większej częstotliwości.
Konfiguracja zegarów
Jeżeli w swoim projekcie nie skonfigurowałeś zegarów sprzętowych to należy to zrobić aby uzyskać pożądany efekt.
W ramach przypomnienia, aby skonfigurować sprzętowe zegary należy wejść w “Properities” -> “System and clock memory” następnie trzeba aktywować checkbox “Clock memory bits” i ustawić początkowy Tag mapujący obszar zegarów w pamięci.
Blok do odczytu danych został poprawnie skonfigurowany, teraz kilkoma prostymi krokami stworzymy drugi blok do zapisu danych. Należy skopiować “MB_CLIENT” oraz przypisać w odpowiednie pola zmienne do odczytu danych.
Skopiuj blok do innego networka i podmień dane w polach “MB_DATA_PTR” oraz “CONNECT” odpowiednio na dane do zapisu. Ze względu na to, że blok będzie służył do zapisu danych należy zmienić tryb, czyli parametr “MB_MODE” na 1, który oznacza zapis. Ostatnią operacją wymaganą do poprawnego zapisu danych przez Modbus jest ustawienie inwersji stanu zegara w polu “REQ” – inwersje wykonujemy po to, aby zapobiec wysyłaniu i odbieraniu danych jednocześnie, musimy stworzyć swego rodzaju interlock, który sprawi, że dane będą odbierane i wysyłane naprzemiennie.
Należy dodać jeszcze jeden blok sumujący w celu przeliczania rejestrów czytnika IND na rejestry sterownika S7. Jest to dosyć prosta operacja, dodajemy tutaj 40000 do rejestru czytnika Inveo IND ponieważ adresacja dla “Holding Registers” zaczyna się od 40000.
Konfiguracja czytnika IND
Nadszedł czas na konfigurację czytnika Inveo IND. Obsługa tego czytnika odbywa się w całości przez wbudowany web server. W momencie kiedy łączymy się z czytnikiem pierwszy raz należy wpisać w przeglądarce jego domyślne IP: 192.168.111.15. Podczas tej operacji należy zadbać, aby nasza karta sieciowa znajdowała się w tej samej klasie co czytnik.
Po połączeniu się z czytnikiem zostaniemy zapytani o login oraz hasło, domyślne dane logowania to:
login – admin
hasło – admin00
Zaleca się, aby zmienić login oraz hasło tak, aby osoby nieupoważnione nie miały dostępu do zmiany konfiguracji urządzenia.
W przypadku wykorzystania naszej aplikacji Discoverer nasza karta sieciowa może znajdować się w innej podsieci niż czytnik.
Po zalogowaniu się do urządzenia wejdźmy w zakładkę “Network. Zmieńmy domyślny adres IP czytnika na taki jakiego wymaga nasza aplikacja. Na początku założyliśmy, że będzie to 192.168.0.2. Po zapisaniu danych przyciskiem “Save” ustawienia sieciowe zostaną zapisane, a czytnik zrestartuje się.
Po konfiguracji sieci czytnika należy jeszcze tylko aktywować Modbus TCP/IP w zakładce “Administration”:
Test komunikacji
Po wykonaniu tych dwóch powyższych kroków na web serwerze czytnika powinniśmy być w stanie poprawnie przesyłać dane między urządzeniami. Po wgraniu softu do sterownika oraz wyświetleniu podglądu powinniśmy widzieć jak statusy bloków przełączają się co sekundę odpowiednio na wartości 7004 oraz 7006 co oznacza poprawną transmisję danych.
Operacje na rejestrach
Należy oczywiście pamiętać o ustawianiu początkowego adresu tablicy, z której chcemy odczytać dane. Należy pamiętać o tym aby przed zmianą wartości zmiennej “InveoRegister” ustawić stan wysoki zmiennej “MbDisconnect” – następnie po dokonaniu zmiany ustawić z powrotem stan niski.
W powyższy sposób realizujemy dostęp do pamięci “Holding Registers”. Został jeszcze obszar “Single Coils”, przyda się on między innymi do sterowania wyjściami, odczytywaniem stanów wejść oraz monitorowania systemu. Aby zrealizować dostęp do tego obszaru musimy stworzyć nowy data block, który nazwiemy “SingleCoils”. W jego przypadku również musimy wyłączyć optymalizację
Wewnątrz bloku tworzymy tablicę typu bool o rozmiarze 50
Będziemy musieli stworzyć jeszcze zmienna pomocniczą, której stan będzie determinował odczyt/zapis danych w obszarach “Holding Registers” oraz “Single Coils”. Zmienną możemy stworzyć w bloku “ModbusConnect” nazywać się ona będzie “word/bool”. Kopiujemy zatem blok “MB_CLIENT” do odczytu danych i podmieniamy parametry “MB_DATA_PTR” na “SIngle Coils”. Do wejścia “EN” obydwu bloków wprowadzamy zmienną “word/bool” z negacją w bloku pierwszym, operacja ta ma zapobiec odczytu danych w tym samym czasie.
Analogiczną operację wykonujemy na blokach do zapisu danych. Jak widać zegar został zamieniony na 10Hz – pozwoli to na szybszy odczyt oraz zapis danych.
Należy jeszcze pamiętać o obsłudze wartości rejestrów, która u nas znajduje się w networku 3. W zależności od tego, do którego z obszaru pamięci chcemy się dostać musimy wykonać osobną operację, w przypadku “Holding Registers” będziemy dodawać 40000, a w przypadku “Single Coils” będziemy po prostu przepisywać wartość.
Ustawienie stanu wysokiego na “word/bool” da możliwość wykonywania operacji zapisu i
odczytu na obszarze “Single Coils”. Dla testów możemy wysterować wyjścia przekaźnikowe:
Tabela błędów
W przypadku problemów z nawiązaniem komunikacji pomiędzy urządzeniami należy sprawdzić statusy jakie otrzymujemy podczas próby odebrania/wysłania danych oraz przeanalizować je pod kątem tabeli błędów dostępnej poniżej:
Zakończenie
Jeżeli doszedłeś do tego kroku oznacza to, że poprawnie skonfigurowałeś czytnik Inveo IND ze sterownikiem S7, gratulacje! Mamy nadzieję, że nasze rozwiązanie sprawdzi się w wielu aplikacjach.