fbpx

Protokół Modbus TCP/IP

Modbus TCP/IP to popularny protokół komunikacyjny, w którym komunikacja między urządzeniami realizowana jest w architekturze master-slave/client-server. Jest to protokół typu otwartego, co oznacza, iż wszystkie niezbędne informacje do jego implementacji są ogólnodostępne. Protokół Modbus możemy spotkać pod nazwami Modbus RTU, Modbus TCP oraz Modbus ASCII.

Niniejszy artykuł opisuje stricte komunikację w standardzie Modbus TCP/IP. Ponieważ sposób kodowania danych w tym protokole jest taki sam jak w Modbus RTU (różnice wynikają tylko w początku i zakończeniu ramki danych — warstwa łącza danych w TCP sama w sobie realizuje adresowanie pakietów i kontrole błędów — ale o tym w dalszej części) nie będę szczegółowo opisywał budowy części głównej ramki danych. Te informacje bardzo szczegółowo omówiłem w pierwszej części wpisu dotyczącej głownie protokołu Modbus RTU. W celu dobrego zrozumienia działania Modbusa TCP bardzo pomocne będzie poznanie zasady działania odmiany RTU. Artykuł odnośnie Modbus’a RTU znajduje się tu: PROTOKÓŁ MODBUS ROZSZYFROWANY – CZYLI JAK DZIAŁA MODBUS RTU?

Rodzaje Modbusa

  • Modbus RTU bazuje na standardzie asynchronicznej transmisji szeregowej RS232 lub RS485. Dane przesyła się w formie binarnej, natomiast do kontroli poprawności ramek stosowany jest 2 bajtowy CRC. Stanowi to gwarancję poprawności przesyłanych danych. Jedno zapytanie Modbus RTU składa się z adresu slave (1 bajt), kodu funkcji (1 bajt), do 252 bajtów danych oraz CRC (2 bajty), maksymalna długość zapytania to 255 bajtów. Pomiędzy wiadomościami Modbus RTU występuje przerwa (brak transmisji), która trwa minimum 3,5 x czas potrzebny na przesłanie jednego bajtu. Więcej w artykule: PROTOKÓŁ MODBUS ROZSZYFROWANY – CZYLI JAK DZIAŁA MODBUS RTU?
  • Modbus ASCII działa na takiej samej zasadzie co Modbus RTU jednakże w tym przypadku mamy inny format danych. Dane zapisywane są w kodzie szesnastkowym, z wykorzystaniem czterobitowych znaków kodu ASCII. Do zapisania pojedynczego bajtu, potrzeba aż dwa bajty – to dwa razy więcej niż w typach RTU i TCP.
  • Modbus TCP/IP bazuje na standardzie komunikacji ETHERNET TCP/IP. Jest to odpowiednik Modbus RTU, ale do komunikacji wykorzystuje protokołu TCP, na porcie 502. Nie posiada obliczania sumy kontrolnej, ponieważ wyższa warstwa TCP już to realizuje. Pole ID nie jest zawsze używane, gdyż adres IP wykorzystywany w protokole TCP/IP jest już identyfikatorem urządzenia.

Ramka Modbus w protokole TCP/IP

Modbus TCP/IP (Modbus-TCP) jest to nic innego jak protokół Modbus RTU z interfejsem TCP, który umożliwia komunikację w sieci Ethernet.

Struktura ramek Modbus określa, w jaki sposób złożone są ramki danych i jak należy je interpretować niezależnie od medium, jakim są przesyłane. TCP/IP (Transmission Control Protocol and Internet Protocol) zapewnia medium komunikacyjne wiadomości w standardzie Modbus TCP/IP.

Mówiąc prościej stos TCP/IP pozwala na przesyłanie danych między systemami (np. komputerami czy sterownikami przemysłowymi). Jest to ogólnoświatowy standard będący podstawą działania sieci WWW (World Wide Web). Podstawową funkcją TCP jest zapewnienie, że wszystkie pakiety danych są odbierane poprawnie, podczas gdy IP odpowiada za poprawnie adresowane i dostarczane.

Istnieje też odmiana Modbusa UDP/IP, korzystająca oczywiście z protokołu UDP. Jest to szybszy niż TCP, ale charakterystyczną cechą jest to, że zezwala on na utratę przesyłanych pakietów danych. W systemie automatyki przemysłowej nie jest to pożądana cecha, gdyż zależy nam na niezawodności przesyłanych danych, więc jest on rzadko stosowany.

Warto zaznaczyć, że protokół TCP / IP jest jedynie protokołem transportowym i nie definiuje formatu przesyłanych informacji, co oznacza, że sposób kodowania danych lub ich interpretacji odbywa się w części aplikacyjnej, w tym przypadku Modbus.

Nagłówek MBAP w Modbus TCP/IP

Można powiedzieć, że Modbus TCP umieszcza standardową ramkę Modbus RTU (pozbawioną sumy kontrolnej oraz pola adresu) w ramce TCP. Ponadto na początku dodaje 7 bajtowy nagłówek zwany MBAP.

Nagłówek MBAP w Modbus TCP/IP
Budowa nagłówka MBAP w Modbus TCP/IP

MBAP (Modbus Application Protocol Header) zawierający cztery pola:

  • Identyfikator transakcji TransactionIdentifier (2 bajty) – wykorzystywany przez klienta do prawidłowego parowania odpowiedzi uzyskiwanych na zapytania. Jest to niezbędne w sytuacji gdy w tym samym momencie wiele wiadomości jest przesyłana przez łącze TCP. Wartość ta zostaje ustalona i umieszczona w ramce zapytania przez jednostkę master, a następnie skopiowana i umieszczona w ramce odpowiedzi.
  • Identyfikator protokołu Protocol Identifier (2 bajty)- to ma zawsze wartość 0 odpowiadającą oznaczeniu protokołu Modbus
  • Rozmiar wiadomości Length (2 bajty) – liczba pozostałych bajtów wiadomości, na którą składają się: identyfikator urządzenia (Unit ID), kod funkcji oraz ilość pól danych. Pole to zostało wprowadzone ze względu na możliwość dzielenia pojedynczej wiadomości na oddzielne pakiety TCP/IP.
  • Identyfikator urządzenia Unit Identifier (1 bajt) – odgrywa znaczenie np. w przypadku komunikacji z urządzeniami Modbus wyposażonymi w interfejs szeregowy za pomocą bram (Modbus Data Gateway). W typowej aplikacji serwera Modbusa TCP to pole ustawia się na 0 lub FF i ignoruje przez serwer. Serwer w odpowiedzi powiela tę wartość otrzymaną do klienta.

Kategorie kodów funkcyjnych oraz dane w Modbus TCP/IP

W przesyłanej ramce zaraz po nagłówku MCAP znajduje się pole funkcji (Function Code) oraz pole danych (Data).

Pole funkcji informuje urządzenie Slave o czynności, jaką ma wykonać. Wartość z zakresu 1 – 127 zarezerwowane są do przesyłania poprawnych kodów funkcji. Zakres 128 – 255 przewidziany jest dla odpowiedzi Slave`a, któremu nie udało się wykonać polecenia. Przykładowo Master wysłał ramkę danych o funkcji 6 (zapis pojedynczego rejestru). W odpowiedzi zamiast funkcji 6 otrzymał 134 (86h – heksadecymalnie). Otrzymując taką ramkę, Master otrzymuje informacje, o niepowodzeniu zapisu. Dodatkowo Slave w polu danych ramki umieszcza kod błędu, co umożliwia Masterowi określenie jego rodzaju. Jeśli natomiast zapis powiódłby się, Slave odesłałby ramkę z funkcją 6.

Wspomniany zakres poprawnych funkcji 1 – 127, można podzielić na na 3 podgrupy:

  • Publiczne – zdefiniowane przez standard, ich funkcjonalność jest jasno określona i udokumentowana. Są powszechnie stosowane w urządzeniach.
  • Zdefiniowane przez producenta – mieszczą się one w dwóch zakresach: 65 – 72 oraz 100 – 110. Nie są zdefiniowane przez specyfikacje. Pozwalają producentom na przypisywanie własnych funkcjonalności urządzeń, jednak nie ma gwarancji, że użycie danego kodu funkcji będzie unikalne. Jeśli producent chciałby przypisać funkcjonalność do funkcji publicznej, musi zgłosić się do organizacji zajmującej się wsparciem i rozwojem standardu Modbus.
  • Zarezerwowane – zastosowane przez niektóre firmy do starszych produktów, nie są dostępne do użytku publicznego.

Modbus funkcje publiczne.

KODKOD SZESNASTKOWOOPIS
101hOdczyt wyjść bitowych
202hOdczyt wejść bitowych
303hOdczyt rejestrów
404hOdczyt rejestrów wejściowych
505hZapis pojedynczego bitu
606hZapis pojedynczego rejestru
707hOdczyt statusu urządzenia slave
808hTest diagnostyczny
150FhZapis bitów
1610hZapis rejestrów
1711hIdentyfikcja urządzenia slave
128 – 25580h – FFhOdpowiedzi wyjątkowe
Najczęściej stosowane funkcje publiczne.

Część z danymi (Data) zawiera dodatkowe informacje niezbędne jednostce Slave do wykonania określonego rozkazu zdefiniowanego w polu funkcji. Część z danymi możemy podzielić na mniejsze części zawierające dodatkowe informacje, takie jak adresy rejestrów, liczba bajtów w polu danych oraz same właściwe dane. Dokładny opis pola danych znajduje się w I części artykułu: PROTOKÓŁ MODBUS ROZSZYFROWANY – CZYLI JAK DZIAŁA MODBUS RTU?

Stos komunikacyjny w modelu sieciowym OSI -> TCP/IP a protokół Modbus TCP

Model OSI ma architekturę sieci, składa się z warstw mających swoją hierarchię. Zawartość każdej z warstw jest zależna bezpośrednio od warstwy poniżej. Protokół TCP nie posiada sprecyzowanego opisu warstwy 5 oraz 6 dlatego te warstwy są często pomijane w opisie TCP.

W modelu OSI funkcje komunikacyjne są podzielone na siedem warstw (5 w Modbus TCP/IP), z których każda obsługujące precyzyjnie zdefiniowane zadania. Poniżej omówiłem krótko zadanie każdej z nich.

Model sieciowy OSI i stos TCP/IP

NrNazwaOpis
7AplikacjiUżywany przez aplikacje do tworzenia
i interpretacji danych na potrzeby pozostałych sześciu warstwy OSI. Zapewnia
interfejs aplikacji sieci. HTTP, FTP, e-mail SMTP i POP3, CIP ™ i SNMP lokalizują się w tej warstwie.
6PrezentacjiReprezentacja danych, typ kodowania i definiowanie wykorzystywanych znaków. Wykonuje negocjacje i konwersje protokołów, co z kolei zapewnienia możliwości wymiany danych między hostami i transmisje w sieci. Realizuje kompresje i szyfrowanie danych.
5SesjiSterowanie nawiązywaniem i synchronizacją połączeń – tworzenie i zarządzanie sesjami połączenia między aplikacjami w sieć.
4TransportowaSekwencjonowanie danych aplikacji. Zapewnia sterowanie początkiem i konicem transmisji, realizuje wykrywanie błędów transmisji i ich korekcję. Jest to oprogramowanie do kontroli przepływu danych między sieciami. Protokoły TCP i UDP lokalizują się w tej części.
3SieciowaKontrole routingu – czyli zarządza: priorytetami połączeń, ich konfiguracją. Zwalnia połączenia, realizuje kontrola przepływu, nawiązuje / utrzymuje połączenia w sieci, zapewnia adresowanie, routing i dostarczanie pakietów do hostów. Znajdziemy tu Adresy IP, PPP, IPX i X.25.
2Łącza danychZapewnia niezawodność przesyłu informacji na najniższych poziomach – ramka danych. To tu są wykrywane błędy oraz ich korekta. Ethernet (IEEE 802.2) oraz MAC zdefiniowane są na tym poziomie.
1FizycznaHardware – fizyczne właściwości transmisji. Definiuje elektryczne, mechaniczne,
funkcjonalne cechy niezbędne do uzyskiwania dostępu i wysyłania danych (definiuje np. złącze RJ-45 i kabel Ethernetowi CAT5).

Modbus TCP/IP Ramka ADU

Omawiana wcześniej ramka ADU (application data unit) protokołu Modbus TCP/ip znajduje się w warstwie aplikacji modelu sieciowego TCP/IP. Warstwa ta odpowiada za funkcje aplikacji, więc definiuje sposób interpretacji danych urządzenia.

Poniżej zamieściłem tabelę zestawiające warstwy modelu sieciowego OSI oraz Modelu wykorzystywanego w Modbus TCP/IP. Wyraźnie widać, że rolę warstwy 5, 6 i 7 pełni tylko warstwa 7.

Modbus TCP/IP

Istotnym faktem komunikacji urządzeń w sieci, jest konieczność istnienia tego samego protokółu w warstwie aplikacji. W przeszłości wiele urządzeń sieciowych korzystało z własnych zastrzeżonych protokołów, co utrudniało interoperacyjność między rozwiązaniami różnych producentów. Z tego powodu w nowych urządzeniach stosuje się już opracowane otwarte protokoły. Z tego powodu powstał właśnie powstał Modbus TCP. Urządzenia posiadające interfejs TCP/IP bez problemu mogą współpracować z rozwiązaniami innych producentów posiadających ten protokół.

Gdy wysyłamy, dane przechodzą one, począwszy od warstwy aplikacji, przez każdą następną warstwę modułu sieciowego. Każda warstwa zaopatruje ramkę danych w odpowiednie nagłówki protokołów tych warstw. Proces ten nazywamy hermetyzacją danych (ang. encapsulated). Gdy ramka dojdzie do najniższej warstwy modelu sieciowego, czyli warstwy fizycznej, dane zamienia się na sygnały elektryczne i przesyła do punktu docelowego. W urządzeniu docelowym realizuje się odwrotny proces, to znaczy dane się odpakowywuje aż w warstwie aplikacji zostanie jedynie ramka protokołu Modbus – ADU.

Modbus TCP/IP enkapsulacja danych

Host nadający (master / klient) tworzy zapytanie Modbusowe i tak utworzoną ramkę przekazuje do niższych warstw, z których każda kolejna dodaje dodatkowe informacje w formie nagłówków i czasem końców ramki. Gdy pakiet dotrze do warstwy fizycznej, jest on przesłany do miejsca docelowego (slave / server). Tam pakiet danych przechodzi przez kolejne warstwy, ale w drugą stronę. W ramce danych idąc w górę stosu, realizuje się ich dekodowanie i usuwanie odpowiednich bajtów. Należy zaznaczyć, że ma to miejsce w odpowiadających warstwach klienta, gdzie bajty te zostały dodane. Finalnie dane docierają do docelowej aplikacji, a tam następuje ich analiza przez odbiornik i zależnie od aplikacji stosowna reakcja. Chociaż każda warstwa komunikuje się z tylko z warstwą tuż nad lub tuż pod nią, cały proces można postrzegać jako wymiana danych pomiędzy skrajnymi warstwami stosu.

Modbus TCP/IP łącze danych
Przepływ danych od nadawcy do odbiorcy w standardzie TCP/IP

Modbusowe pakiety danych przesyła się w TCP portem 502. Jest to specjalnie zarezerwowany port do aplikacji komunikujących się protokołem Modbus RTU. Także podczas konfiguracji zarówno Klienta, jak i Servera należy wybrać port 502.

Modbus RTU/IP, czyli Modbus RTU przez  TCP/IP

Można zauważyć, że działanie protokołu Modbus przez Ethernet jest praktycznie identyczne w aspekcie rejestrów i poleceń klasycznego Modbusa. Różnica jest w zawartości nagłówków i medium transmisyjnym. Tak więc, jeśli znamy działanie tradycyjnego Modbus-a, to można powiedzieć że znamy Modbus TCP/IP.

Modbus RTU przez  TCP/IP (inna nazwa: Modbus RTU/IP) – jest to tunelowany Modbus RTU, czyli przesyłany w formie surowej przez gniazdko TCP. Chcąc zrealizować taką komunikację, potrzebny będzie serwer portów szeregowych, które jest mostem pomiędzy RS-232/422/485 a standardem Ethernet.

Dlaczego przesyłamy pakiety Modbus przez Ethernet?

Ethernet (IEEE 802.) to istniejący od dawna protokół sieciowy, który zyskał powszechną akceptację na całym świecie. Jest to otwarty standard obsługiwany przez wielu producentów, którego infrastruktura jest powszechnie dostępna. W związku z tym pakiety protokołów typu TCP / IP są używane na całym świecie, a nawet służą jako podstawa dostępu do sieci Internet. Ponieważ wiele urządzeń obsługuje już Ethernet, rozszerzenie go do zastosowań przemysłowych wydaje się być naturalne.

Podobnie jak w przypadku Ethernetu, Modbus wykorzystuje wielu producentów sprzętu przemysłowego. Łatwość jego zrozumienia czyni go naturalnym kandydatem do wykorzystania w budowaniu innych standardów komunikacji przemysłowej. Mając tak wiele wspólnego, połączenie protokołu Modbus z tradycyjną transmisją IEEE 802.3 Ethernet tworzy potężny przemysłowy standard komunikacji Modbus TCP/IP. A ponieważ Modbus TCP/IP współdzieli te same warstwy fizyczne i łącza danych, co tradycyjny IEEE 802.3 Ethernet i używa tego samego zestawu protokołów TCP / IP, pozostaje w pełni kompatybilny z już zainstalowaną infrastrukturą Ethernet obejmującą, złącza, kable, karty sieciowe, koncentratory i switche.

Przetworniki Modbus RTU

W Ntronic mamy urządzenia do pomiaru temperatury i wilgotność przez Modbus RTU. Jeśli chciałbyś zrealizować komunikację z nimi przez Ethernet możesz zastosować konwerter RS485 na TCP/IP. Zachęcam do zapoznania się z naszymi produktami .

Przetwornik TD2 ↗

Umożliwia odczyt z czujników temperatury i wilgotności w sieci OneWire o długości nawet 400 m. Dane można odczytywać portami RS485 i USB. Istotne jest, że te porty są separowane galwanicznie.

Moduł TD1.01 ↗

TD1.01 to konwerter temperatury z wyświetlaczem LED. Odczytuje temperaturę z 64 czujników temperatury DS18B20 w sieci o długości 100 m. Dane odczytujemy portem RS485 przez Modbus RTU

Przetwornik temperatury na szynę DIN z wyświetlaczem

Podsumowanie

  • Protokół to zbiór procedur oraz reguł rządzących komunikacją, między co najmniej dwoma urządzeniami sieciowymi. Istnieją różne protokoły, lecz nawiązujące w danym momencie połączenie urządzenia muszą używać tego samego protokołu, aby wymiana danych pomiędzy nimi była możliwa.
  • Protokoły sieciowe mają strukturę warstwową.
  • W modelu sieciowy OSI każda warstwa może operować na jednym lub więcej protokole.
  • W tej samej warstwie może pracować kilka protokołów niezależnie od siebie.
  • Zbiór protokołów ustawionych hierarchicznie w warstwy nazywamy stosem.
  • Warstwa X komunikuje się z innymi jednostkami warstwy X (innymi protokołami na tej samej warstwie) za pomocą jednostek danych protokołu (PDU).
  • Warstwa X zależy bezpośrednio od warstwy niżej (X-1) i obsługę warstwie n + 1.
  • Protokoły dzielimy na zorientowane na połączenie i bezpołączeniowe. Połączenie oznacza, że komunikacja wymaga synchronizacji wszystkich stron przed faktyczną wymianą danych aplikacji. Modbus TCP/IP jest protokołem połączeniowym.
  • Modbus TCP/IP jest zgodny z modelem klient-serwer, w którym Moduły Modbus Master są określane jako klienci, podczas gdy urządzenia podrzędne Modbus Slave są serwerami.
  • Klient (lub master) to dowolne urządzenie sieciowe, które wysyła żądania danych do serwerów (lub slave).
  • Serwer (lub slave) to dowolny program, który oczekuje na przesłanie do niego żądań danych. Serwery nie inicjują kontaktu z klientami, a jedynie na nie odpowiadają. Niektóre urządzenia działają zarówno jako klient, jak i serwer.
  • Port to adres, który jest używany lokalnie w warstwie transportowej (w jednym węźle) i identyfikuje źródło i miejsce docelowe pakietu w tym samym węźle. Numery portów są podzielone na dobrze znane numery portów (0–1023), numery portów zarejestrowanych użytkowników (1024–49151) i numery portów prywatnych / dynamicznych (49152–65535). Porty pozwalają TCP / IP na multipleksowanie i demultipleksowanie sekwencji datagramów IP, które muszą przejść do wielu różnych procesów aplikacji. Modbus TCP / IP do nasłuchiwania i odbierania wiadomości Modbus przez Ethernet wykorzystuje dobrze znany port 502.

Dodaj komentarz