Modbus

Opublikowano

Modbus - informacje ogólne

Sposób przesyłania danych

Dane w Modbusie nie są przesyłane jako ciągły strumień, lecz jako paczki danych zwarte ramkami. Dane w ramce posiadają ściśle określoną strukturę.   

Wizualizacja ramki
Wizualizacja ramki
  • Adres Slave (1 bajt) – Numer urządzenia, do którego kierowane jest zapytanie (np. serwo nr 5). 
  • Kod funkcji (1 bajt) – Instrukcja dla urządzenia (np. “odczytaj rejestr” albo “zapisz wartość”). 
  • Dane (N bajtów) – Konkretne informacje, np. adres rejestru, który chcemy sprawdzić lub wartość prędkości, którą chcemy ustawić. 
  • Suma kontrolna (CRC – 2 bajty) – Mechanizm bezpieczeństwa. Jeśli podczas przesyłu wystąpił błąd (zakłócenie), suma się nie zgadza i urządzenie ignoruje ramkę. 

Architektura Master - Slave

Modbus opiera się na relacji Master-Slave (Nadrzędny-Podrzędny). Jest to model komunikacji, który określa ścisłe zasady wymiany danych w sieci oraz sposób, w jaki urządzenia komunikują się między sobą. 

  • Master (PLC – sterownik) zarządza całą komunikacją w sieci i jako jedyny może ją inicjować. Wysyła zapytania, określając, jakie dane chce odczytać (np. pozycję serwonapędu) lub jakie wartości zapisać (np. prędkość). 
  • Slave nie inicjuje transmisji. Pracuje w trybie nasłuchiwania i odpowiada wyłącznie na zapytania skierowane do jego unikalnego adresu. Ramki przeznaczone dla innych urządzeń są przez niego ignorowane. 

W przykładach poniżej zostanie pokazana komunikacja dwóch sterowników Fatek za pomocą protokołu Modbus.  

Modbus TCP

ModBus TCP działa w oparciu o protokół TCP/IP, wykorzystując standardową sieć Ethernet. Urządzenie typu client wysyła zapytania o odczyt lub zapis rejestrów, a urządzenie server odpowiada, przesyłając wymagane dane. Komunikacja odbywa się poprzez pakiety TCP na porcie 502, bez mechanizmów synchronizacji czasu.   

Przykładowa Topologia: 

Topologia ModBus TCP
Topologia ModBus TCP

Konfigruacja slave’a

W pierwszej kolejności należy wejść w Konfiguracje komunikacji: 

Konfiguracja komunikacji w drzewku projekt
Konfiguracja komunikacji w drzewku projekt

Należy ustawić adres IP urządzenia slave, ponieważ będzie on wymagany w dalszej części konfiguracji. Zarówno urządzenie master, jak i slave muszą znajdować się w tej samej sieci IP. 

Konfiguracja komunikacji Ethernet
Konfiguracja komunikacji Ethernet

Następnie w Alokacji Adresów ModBus sprawdzić jaki adres ModBus posiada szukana przez nas zmienna, która ma być zapisywana bądź odczytywana.

Alokacja adresów ModBUs
Alokacja adresów ModBUs

Przykładową daną będzie Rejestr R0. Rejestry od R0 – R47319 odpowiadają adresom ModBus  400001 – 447320 czyli : 

R0 -> 400001 

R1 -> 400002 

Itd… 

Konfiguracja sterownika master

W pierwszej kolejności należy wejść w Konfiguracje komunikacji: 

Konfiguracja komunikacji w drzewku projekt
Konfiguracja komunikacji w drzewku projekt

I zmienić adres IP mastera by znajdował się w tej samej sieci co slave, np.:  

  • Adres master: 192.168.2.5 
  • Adres slave: 192.168.2.4 
Konfiguracja komunikacji Ethernet
Konfiguracja komunikacji Ethernet

Następnie w drzewie projektu w zakładce Edycja tabel dodać Tabele ModBus master.

Dodawanie tabeli ModBus master
Dodawanie tabeli ModBus master

W Typie tabeli wybrać Tabele ModBus TCP [FUN152 MD1]. 

ModBus TCP [FUN152 MD1]
ModBus TCP [FUN152 MD1]

Następnie należy nadać adres tabeli – w programie przypisano jej adres R1000. Nawet pusta tabela zajmuje rejestry od R1000 do R1009, a wraz ze zwiększaniem jej rozmiaru liczba zajmowanych rejestrów będzie rosła. Należy upewnić się, że rejestry używane przez tabelę nie kolidują z innymi rejestrami wykorzystywanymi w programie, oraz należy nadać nazwę tabeli. 

Przypisanie rejestru
Przypisanie rejestru

Następnie w tabeli (przykład) należy: 

  1. Wpisać adres IP urządzenia, z którego będą odczytywane dane (slave’a). 
  2. Nacisnąć przycisk Dodaj.  
  3. Wypełnić tabelę z danymi komunikacji 
  • Komenda – w tym przypadku odczyt. 
  • Dane mastera -miejsce zapisu odczytanych danych. W projekcie jest to R50. 
  • Dane slave’a – odczytywany jest rejestr R0, którego adres Modbus wynosi 400001, 
  • Rozmiar danych do odczytania – określa sekwencyjną liczbę rejestrów; np. wartość 10 oznacza odczyt zakresu 400001-400010 i zapisze od R50 do R59. Ponieważ wymagany jest tylko rejestr 400001, rozmiar danych wystarczy ustawić na 1. 
  • Pole „Operacja” zostanie uzupełnione automatycznie. 
Opis tabeli ModBus
Opis tabeli ModBus

Następnie w programie głównym Main należy wstawić funkcję 152NCR (Network Active Communication) która odpowiada za inicjowanie i obsługę komunikacji sieciowej ModBus TCP. 

Funkcja NCR
Funkcja NCR

Do podstawowych parametrów funkcji NCR należą: 

SR : Rejestr tabeli Modbus, która ma być obsługiwana (w projekcie R1000). 

MD : Tryb wykonywanej pracy; ustawiony na wartość 1.    

WR : Rejestry robocze przeznaczone do obsługi działania funkcji (w projekcie R2000). 

NCR w kodzie
NCR w kodzie

Przed funkcją zastosowano styk normalnie otwarty M0, aby komunikacja była wywoływana tylko wtedy, gdy jest to potrzebne. Dodatkowo dodano styki M100–M102, służące do kontroli poprawności przebiegu komunikacji, postawiono je na wyjściach funkcji:  

  • ACT (aktywna),  
  • ERR (błąd)   
  • DN (zakończona).  

Po aktywacji funkcji NCR wartość rejestru R0 w urządzeniu slave zostanie odczytana i zapisana pod adresem R50 w urządzeniu master. Następnie w drzewie projektu na wejść zakładkę Karty stanu prawym przyciskiem myszy a następnie Nowa karta stanu: 

Nowa karta stanu
Nowa karta stanu

Nazwać kartę i potwierdzić przyciskiem OK. Teraz wartości z R0 (slave) -> R50 (master) pojawią się tutaj. W sterowniku slave wpisano testową wartość 1000 w rejestrze R0. 

Sterownik slave
Sterownik slave
Sterownik slave
Sterownik slave

Modbus RTU

Modbus RS 485 to standard przemysłowej komunikacji szeregowej. Protokół Modbus RTU definiuje sposób przesyłania danych, natomiast RS485 określa warstwę fizyczną transmisji.

Fizyczna warstwa RS 485

Standard RS-485 wykorzystuje transmisję różnicową. Dane nie są przesyłane względem masy, lecz jako różnica potencjałów między dwiema liniami sygnałowymi. Rozwiązanie to pozwala skutecznie ograniczyć wpływ zakłóceń elektromagnetycznych. Do komunikacji RS-485 należy stosować skrętkę ekranowaną, ponieważ skręcenie żył odgrywa kluczową rolę w redukcji zakłóceń. Ekran kabla powinien być uziemiony w jednym punkcie. Magistrala musi być szeregowa oraz zakończona rezystorem o wartości 120 Ω, podłączonym pomiędzy liniami. Rezystor terminujący należy zamontować wyłącznie na obu fizycznych końcach magistrali. Długość kabla nie może przekraczać 1200m. W sieci RS-485 może pracować tylko jeden Master, a każde urządzenie Slave musi posiadać unikalny adres z zakresu 1–247. Do jednego segmentu magistrali można podłączyć maksymalnie 32 urządzenia. 

Porty komunikacyjne w PLC Fatek serii M

Jak widać na załączonym module komunikacyjnym oraz jednostce głównej, linie sygnałowe oznaczone są jako „+” oraz „–”. W urządzeniach Slave często można jednak spotkać inne oznaczenia – linię ujemną jako B, a dodatnią jako A. W standardzie RS-485 nie istnieje jedno, ujednolicone nazewnictwo linii sygnałowych, dlatego oznaczenia mogą się różnić w zależności od producenta. 

Moduł komunikacyjny
Moduł komunikacyjny
Porty komunikacyjne w PLC
Porty komunikacyjne w PLC

Ustawienia komunikacji

  • Baud rate (prędkość transmisji) – określa liczbę bitów przesyłanych w ciągu sekundy (np. 9600, 19200, 38400 bps).  
  • Liczba bitów danych – zazwyczaj 8 bitów. 
  • Parzystość (Parity) – mechanizm kontroli błędów (None / Even / Odd).  
  • Liczba bitów stopu – zwykle 1. 

Wszystkie urządzenia w sieci muszą mieć ustawione te same wartości!   

Topologia sieci – wizualizacja

Wizualizacja topologii sieci
Wizualizacja topologii sieci

Konfiguracja slave’a:

W pierwszej kolejności należy wejść w Konfiguracje komunikacji: 

Konfiguracja komunikacji w drzewku projektu
Konfiguracja komunikacji w drzewku projektu

Następnie w Alokacji Adresów ModBus sprawdzić jaki adres ModBus posiada szukana przez nas zmienna która ma być zapisywana bądź odczytywana.

Alokacja adresów ModBUs
Alokacja adresów ModBUs

Przykładową daną będzie Rejestr R0. Rejestry od R0 – R47319 odpowiadaj adresom ModBus  400001 – 447320 czyli : 

R0 -> 400001 

R1 -> 400002 

Itd… 

Ustawić następnie na porcie, przez który idzie magistrala Protokół ModBus RTU (Slave). 

Wybór protokołu
Wybór protokołu

Konfiguracja master’a

W drzewie projektu w zakładce Edycja tabel dodać Tabele ModBus master.

Dodawanie tabeli ModBus master
Dodawanie tabeli ModBus master

Następnie w Typ tabeli wybrać Tabele ModBus master [FUN150], jest to tabela z jakiej należy korzystać w przypadku komunikacji RTU. 

ModBus master [FUN150]
ModBus master [FUN150]

Nadać nazwę tabeli oraz przypisać jej rejestr. 

Tabela ModBus master przypisanie rejestru
Tabela ModBus master przypisanie rejestru

Następnie należy nadać adres tabeli – w programie przypisano jej adres R1000. Nawet pusta tabela zajmuje rejestry od R1000 do R1009, a wraz ze zwiększaniem jej rozmiaru liczba zajmowanych rejestrów będzie rosła. Należy upewnić się, że rejestry używane przez tabelę nie kolidują z innymi rejestrami wykorzystywanymi w programie, oraz należy nadać nazwę tabeli. 

Opis tabeli ModBus Master
Opis tabeli ModBus Master

Opis tabeli Modbus Master:

  1. Komenda – w tym przypadku odczyt. Do wyboru jest jeszcze zapis oraz pojedynczy zapis. Pojedynczy zapis modyfikuje tylko jeden rejestr, podczas gdy zapis pozwala na przesłanie całego bloku danych w jednej ramce komunikacyjnej.
  2. Slave – numer slave’a z którego tyczy się operacja.  
  3. Dane mastera -miejsce zapisu odczytanych danych. W projekcie jest to R50. 
  4. Dane slave’a – odczytywany jest rejestr R0, którego adres Modbus wynosi 400001. 
  5. Rozmiar danych do odczytania – określa sekwencyjną liczbę rejestrów; np. wartość 10 oznacza odczyt zakresu 400001-400010 i zapisze od R50 do R59. Ponieważ wymagany jest tylko rejestr 400001, rozmiar danych wystarczy ustawić na 1. 
  6. Pole „Operacja” zostanie uzupełnione automatycznie.

Następnie w programie głównym Main należy wstawić funkcję 150.M-BUS która odpowiada za inicjowanie i obsługę komunikacji ModBus RTU. 

Funkcja 150.M-BUS posiada 3 parametry: 

  • Pt – Na którym porcie podłączona jest komunikacja ModBus (1-4). 
  • SR – Początkowy rejestr tabeli ModBus Master. 
  • WR – rejestry robocze potrzebne do obsługi funkcji.  

Przed funkcją zastosowano styk normalnie otwarty M0, aby komunikacja była wywoływana tylko wtedy, gdy jest to potrzebne. Dodatkowo dodano styki M100–M102, służące do kontroli poprawności przebiegu komunikacji, postawiono je na wyjściach funkcji: 

  • ACT (aktywna),  
  • ERR (błąd)   
  • DN (zakończona). 

Przed funkcją został postawiony jeszcze bit systemowy $COM_READY_P1 odpowiadający za gotowość portu 1.  

Funkcja M-BUS w kodzie
Funkcja M-BUS w kodzie

Po aktywacji funkcji M-BUS wartość rejestru R0 w urządzeniu slave zostanie odczytana i zapisana pod adresem R50 w urządzeniu master. Następnie w drzewie projektu na wejść zakładkę Karty stanu prawym przyciskiem myszy, a następnie Nowa karta stanu: 

Nowa karta stanu
Nowa karta stanu

Nazwać kartę i potwierdzić przyciskiem OK. Teraz wartości z R0 (slave) -> R50 (master) pojawią się tutaj. W sterowniku slave wpisano testową wartość 2000 w rejestrze R0. 

Sterownik slave
Sterownik slave
Sterownik Master
Sterownik Master
Bez kategorii