MODBUS TCP/IP dla PLC SAMBA oraz Vision

185

Jak skonfigurować sterowniki PLC Vision i Samba w celu ustanowienia komunikacji po MODBUS TCP/IP?

O czym tu przeczytasz?

Wpis ten opisuje kolejne działania podejmowane w celu konfiguracji komunikacji pomiędzy dwoma sterownikami PLC za pomocą protokołu MODBUS TCP/IP. Pokazano w nim, jak zaprogramować urządzenia od Unitronics do realizacji tego zadania, na przykładzie programu zapisującego wartość do zmiennej.

Przede wszystkim, wpis ten bazuje na kilku podstawowych informacjach o generowaniu zapytań MODBUS, które przedstawiono już w tej lekcji (link). Mimo, że dotyczy ona szeregowej komunikacji, zaleca się zapoznanie z nią. Powodem jest fakt, że pewne aspekty są wspólne dla konfiguracji protokołu MODBUS RTU i TCP/IP.

Używane zasoby

Podczas lekcji korzysta się z dwóch sterowników PLC serii Vision:

  • V700-T20BJ – pełniącego rolę Master’a (dalej oznaczany jako „PLC-Master”);
  • V430-J-RH6 – który jest, w tym przypadku, urządzeniem typu Slave w sieci (nazywany dalej „PLC-Slave”).

Modele V700 to jedyne sterowniki PLC serii Vision, które mają fabrycznie wbudowane porty Ethernet. Jako, że dla komunikacji Modbus TCP/IP przewody Ethernet stanowią medium transmisyjne, należy upewnić się, że obydwa sterowniki posiadają takie porty.

Sterownik PLC V430 nie posiada takiego portu, dlatego na potrzeby wpisu domontowano mu osobny port dedykowany dla produktów Unitronics.

V100-17-ET2 - Port Ethernetowy dla sterowników V130, V350, V430, V700, SAMBA
V100-17-ET2 – Port Ethernetowy dla sterowników V130, V350, V430, V700, SAMBA

Wstępna konfiguracja PLC

W lekcji o komunikacji Ethernet pomiędzy PLC a VisiLogic (odnośnik), podano sposób, w jaki należy wstępnie skonfigurować takie połączenie. Jako, że na koniec wpisu nastąpi prezentacja rezultatów za pomocą programu Remote Operator, należy zainicjować karty Ethernet na każdym ze sterowników w sposób opisany w wyżej podlinkowanej lekcji.

Konfiguracje dokonane w tym przypadku, dla PLC-Master i PLC-Slave, przedstawione są niżej.

Wstępna konfiguracja karty Ethernet dla PLC-Master
Wstępna konfiguracja karty Ethernet dla PLC-Master
Wstępna konfiguracja karty Ethernet dla PLC-Slave
Wstępna konfiguracja karty Ethernet dla PLC-Slave

Od teraz można się połączyć ze sterownikami PLC, na przykład poprzez Remote Operator, wykorzystując protokół TCP.

Ustanowienie komunikacji MODBUS TCP/IP dla obydwu PLC

Parametry połączenia MODBUS dla Master i Slave

Jak już wiesz z poprzedniej lekcji o MODBUS RTU, przed rozpoczęciem wysyłania zapytań MODBUS, należy dodać odpowiednie bloczki konfigurujące parametry tego połączenia.

Po pierwsze, należy zainicjalizować kolejny Socket na potrzeby połączenia MODBUS TCP/IP oraz dodać bloczek „MODBUS IP Configuration” – zakładka „FB’s -> MODBUS IP”.

W lekcji o ustanawianiu połączenia Ethernet, zamieszczono screen z plików pomocy VisiLogic, który obrazuje domyślne konfiguracje socket’ów dla PLC od Unitronics. Jednak każdą taką domyślną konfigurację można zmienić, za pomocą bloczka „Socket Init”. W tym przypadku, dla sterownika PLC-Master skonfigurowano Socket 0 do komunikacji TCP na porcie 502, jako Master. Dla PLC-Slave dodano natomiast taką samą konfigurację, tyle że dla Socket’u 2 i w trybie Slave.

Konfiguracja parametrów MODBUS TCP dla PLC Master
Konfiguracja parametrów MODBUS TCP dla PLC Master
Konfiguracja parametrów MODBUS TCP dla PLC Slave
Konfiguracja parametrów MODBUS TCP dla PLC Slave

Na powyższych zdjęciach przedstawiono również ustawienia bloczków „MODBUS Configuration”. Użytkownik definiuje dla nich kilka parametrów. Są to:

  • numer wykorzystywanego socket’u do tej komunikacji (u nas : dla PLC-Master – Socket 0; dla PLC-Slave – Socket 2);
  • ID urządzenia w sieci – dowolne unikalne od 1 do 255;
  • na tym etapie nauki „Time out” i „Retries” można pozostawić niezmienione;
  • ostatni parametr, to dobrze znany z lekcji o MODBUS RTU – bit „Function in Progress”, informujący, czy w danej chwili jest realizowane jakieś zapytanie.

Dodatkowo, dla konfiguracji w programie PLC-Master, należy zdefiniować listę urządzeń typu Slave w sieci. W tym przypadku dodano jedno posiadane urządzenie. Wymagane informacje, to:

  • adres IP jego karty Ethernet;
  • port na danym urządzeniu Slave, który jest wykorzystywany do komunikacji MODBUS TCP/IP (zdefiniowany w bloczku „Socket Init” programu PLC-Slave);
  • ID urządzenia Slave w sieci.

Uzupełnienie programu dla PLC-Slave

Podobnie jak dla lekcji o MODBUS RTU, tak i tutaj dokończenie programu dla PLC-Slave jest proste. Wystarczy dodać bloczek o nazwie „ScanEX”, choć tym razem z zakładki „FB’s -> MODBUS IP”. Udostępnia on przechowywane wartości zmiennych dla zapytań nadchodzących od klientów MODBUS.

Dodatkowo, poprzedzono go w programie bloczkami typu „Direct Contact” z przypisanymi bitami systemowymi SB142 i SB145. Każdy ze sterowników PLC omawianych serii posiada zestaw zmiennych systemowych informujących o pracy sterownika. W tym przypadku bity te sygnalizują, czy:

  • karta Ethernet dla PLC-Slave została zainicjalizowana;
  • Socket 2 dla PLC-Slave jest zainicjalizowany.

Dzięki temu, udostępnianie wartości zmiennych następuje tylko, gdy odpowiednie zasoby są właściwie skonfigurowane.

Bloczek ScanEX w programie dla PLC-Slave
Bloczek ScanEX w programie dla PLC-Slave

Ciąg dalszy programu dla PLC-Master

Diagnozowanie pracy sterownika V700

Zarówno w komunikacji MODBUS RTU, jak i MODBUS TCP, pisząc programy dla PLC, korzysta się z szeregu bitów informujących o stanie sterownika i jego komponentów. Sterownik Vision V700 jest wyjątkiem wśród PLC omawianych serii. Do niego nie odnosi się większość zmiennych systemowych pokazanych na przykład, na zdjęciu wyżej. Dla tego sterownika, w celu sprawdzania statusu pracy Socket’ów, istnieje specjalny bloczek „V700: Read Socket Status” (zakładka „Com -> TCP/IP”).

Na jego wejście podaje się:

  • numer Socket’u, który chcemy sprawdzić;
  • pewną stałą wywołującą na wyjściu pojawienie się określonych wiadomości.

Do wyjścia przypisuje się zmienną MI, do której zostanie zapisana liczba całkowita, symbolizująca status danego Socket’u. Więcej o tym bloczku można przeczytać w plikach „Help” programu VisiLogic.

Sprawdzanie stanu pracy Socket'ow dla sterownika V700
Sprawdzanie stanu pracy Socket’ow dla sterownika V700
Pliki Help w VisiLogic odnoszące się do sterownika V700 i obsługi Ethernet
Pliki Help w VisiLogic odnoszące się do sterownika V700 i obsługi Ethernet

Nawiązywanie połączenia z urządzeniem Slave

Protokół TCP to protokół połączeniowy, a to znaczy, że aby umożliwić wymianę danych pomiędzy dwoma urządzeniami, należy najpierw zainicjalizować odpowiednie połączenie.

W tym przypadku, połączenie będzie następować po wciśnięciu odpowiedniego przycisku na ekranie sterownika. Tak więc, do jego logiki należy dodać odpowiedni element typu „Positive Transition Contact (Rise)”.

Zgodnie ze wszelkimi zaleceniami Producenta, zanim wywoła się bloczek, powodujący nawiązanie połączenia z danym Socket’em, należy umieścić kilka styków, przekazujących dalej sygnał o ile odpowiednie zasoby zostały zainicjalizowane.

Poniższe zdjęcie przedstawia poziom drabinki, który wywołuje połączenie z Socket’em sterownika, gdy:

  • naciśnięto odpowiedni przycisk na HMI;
  • karta Ethernet dla PLC-Master została zainicjalizowana;
  • wskazany Socket (tutaj dla PLC-Master to Socket 0) jest zainicjalizowany do komunikacji TCP;
  • nie jest obecnie wykonywane żadne zapytanie MODBUS (bit „Function in Progress” ma wartość niską).
Nawiązywanie połączenia z urządzeniem PLC-Slave - widok z programu dla PLC-Master
Nawiązywanie połączenia z urządzeniem PLC-Slave – widok z programu dla PLC-Master

Jak widać na powyższym zdjęciu, do nawiązywania połączenia z urządzeniem Slave służy bloczek „Connect: TCP” (zakładka „Com -> TCP/IP”). Należy dla niego podać:

  • Socket używany do tego połączenia (który należy do PLC-Master – tu: Socket 0);
  • adres IP urządzenia Slave;
  • port na którym urządzenie PLC-Slave oczekuje połączenia; dla PLC-Slave skonfigurowaliśmy wcześniej Socket 2 na porcie 502.

Generowanie zapytań zapisujących wartość do zmiennej w pamięci urządzenia Slave

Zalecany mechanizm generowania zapytania MODBUS, uwzględniający m.in bit „Function in Progress” został już przedstawiony w lekcji o MODBUS RTU.

W tym przypadku, podobnie jak wcześniej, zapytanie jest generowane po wciśnięciu odpowiedniego przycisku na HMI PLC-Master (choć w ogólności nie musi tak być). Następnie sprawdzane jest, czy na danym Socket’cie istnieje poprawnie nawiązane połączenie i czy żadna funkcja MODBUS nie jest obecnie wykonywana.

Procedura zapisu wartości do zmiennej na urządzeniu Slave poprzez MODBUS TCPIP
Procedura zapisu wartości do zmiennej na urządzeniu Slave poprzez MODBUS TCPIP
Konfiguracja bloczka zapisu do zmiennej poprzez protokół MODBUS TCPIP
Konfiguracja bloczka zapisu do zmiennej poprzez protokół MODBUS TCPIP

Na powyższym zdjęciu, po prawej, widać parametry jakie trzeba podać przy konfiguracji bloczka, zapisującego wartość do rejestru MODBUS. Używany bloczek znajduje się w zakładce „FB’s -> MODBUS IP” i nosi nazwę „Preset Float Registers”.

  • Pierwszym z nich (od góry) jest docelowe urządzenie Slave, wybierane z listy uzupełnianej dla bloczka konfiguracyjnego MODBUS.
  • Drugi „Slave: Start Of Vector”, to natomiast adres docelowej zmiennej na urządzeniu PLC-Slave. W tym przypadku zapis następuje do zmiennej MF10. Sposoby adresowania zmiennych opisano już w poprzedniej lekcji o MODBUS RTU.
  • Kolejny parametr to referencyjna wartość, która ma być zapisana – zmienna lub stała.
  • Ostatni z parametrów wejściowych („Preset: Vector Length”) to ilość rejestrów do nadpisania. Zmienna MF zajmuje 32 bity, a to są dwa rejestry w pamięci PLC od Unitronics. Specyfikacje odnośnie zmiennych w VisiLogic dostępne są w plikach Help.
  • Na wyjściu należy przypisać zmienne MI oraz DW przechowujące informacje na temat statusu zapytania, czy ilości sesji. Nie są one teraz szczegółowo omawiane.

Rozłączenie z urządzeniem Slave

Tak samo, jak można połączyć się ze zdalnym urządzeniem poprzez TCP, tak może również nastąpić rozłączenie – na przykład na żądanie operatora, po wciśnięciu przycisku na HMI.

Odpowiednią procedurę przedstawia zdjęcie poniżej. Podobnie jak we wszystkich przypadkach, uwzględnia ona sprawdzanie dodatkowych warunków, jak na przykład czy nie wykonuje się obecnie żadne zapytanie.

Bloczek zamykający połączenie TCP nosi nazwę „Close: TCP” i znajduje się w zakładce „Com -> TCP/IP”. Należy dla niego wskazać jedynie numer Socket’u, na którym połączenie się zakończy.

Zamykanie połączenia w komunikacji MODBUS TCPIP dla programu PLC - Master
Zamykanie połączenia w komunikacji MODBUS TCPIP dla programu PLC – Master

Informowanie na temat istniejącego połączenia TCP

Do naszego programu dla PLC będącego klientem można jeszcze dodać informację na temat istnienia połączenie po MODBUS TCP/IP na danym Socket’cie. Informację tą może przechowywać pojedynczy bit. Jego wartością można sterować w niżej przedstawiony sposób.

Wystarczy sprawdzać wartość zmiennej przechowującej status pracy Socket’u 0, wspomnianej w sekcji „Diagnozowanie pracy sterownika V700” tego wpisu. Zgodnie z informacjami z plików „Help”, przy takim wywołaniu bloczka „V700: Read Socket Status”, jak u nas, zmienna ta przyjmie wartość 23, w przypadku gdy istnieje połączenie na Socket’cie 0.

Określenie statusu połączenia dla Socket 0 w programie PLC-Master
Określenie statusu połączenia dla Socket 0 w programie PLC-Master

Przygotowanie ekranów HMI dla PLC Master i Slave

W tym przypadku, ekran HMI dla PLC-Master powinien zawierać następujące elementy:

  • przyciski nawiązywania i zamykania połączenia na danym Socket’cie;
  • dwustanowe pole tekstowe informujące o obecnym statusie połączenia ( zawierające napisy „CONNECTED”/”DISCONNECTED”);
  • pole dla referencyjnej wartości liczbowej z opcją podawania wartości z poziomu HMI;
  • przycisk wywołujący zapis do zmiennej.

Dla PLC-Slave możemy się natomiast ograniczyć do pola wyświetlającego wartość odbieranej zmiennej.

Widok HMI PLC - Master dla programu do komunikacji MODBUS TCPIP
Widok HMI PLC – Master dla programu do komunikacji MODBUS TCPIP
Widok HMI PLC - Slave dla programu do komunikacji MODBUS TCPIP
Widok HMI PLC – Slave dla programu do komunikacji MODBUS TCPIP

Prezentacja rezultatów

Dlatego, że chcemy tu pokazać na raz dwa ekrany HMI sterowników PLC, skorzystamy z programu Remote Operator od Unitronics. Jego obsługa została już omówiona w tej lekcji (link).

W celu właściwego połączenia, należy użyć Socket’ów 1 skonfigurowanych na początku tego wpisu zarówno dla PLC-Master, jak i Slave na porcie 20256. Wszystkie pliki (projekty PLC w VisiLogic oraz projekt połączenia w Remote Operator) są dostępne do pobrania niżej.

Prezentacja komunikacji MODBUS TCP/IPŹródło: Elmark