Articles

MODBUS RTU

Wprowadzenie do adresowania Modbus RTU, kody funkcyjne i przegląd sieci Modbus RTU

Modbus RTU jest otwartym protokołem szeregowym wywodzącym się z architektury Master/Slave opracowanej pierwotnie przez firmę Modicon (obecnie Schneider Electric). Jest to powszechnie akceptowany protokół szeregowy ze względu na łatwość użycia i niezawodność. Modbus RTU jest szeroko stosowany w systemach zarządzania budynkami (BMS) i przemysłowych systemach automatyki (IAS).

Komunikaty Modbus RTU mają prostą 16-bitową strukturę z sumą kontrolną CRC (Cyclic-Redundant Checksum). Prostota tych wiadomości ma na celu zapewnienie niezawodności. Ze względu na tę prostotę podstawowa 16-bitowa struktura rejestrów Modbus RTU może być używana do pakowania danych zmiennoprzecinkowych, tablic, tekstu ASCII, kolejek i innych niepowiązanych danych.

Protokół ten wykorzystuje do komunikacji przede wszystkim interfejsy szeregowe RS-232 lub RS-485 i jest obsługiwany przez prawie każdy komercyjny program SCADA, HMI, serwer OPC i program do akwizycji danych dostępny na rynku. Dzięki temu bardzo łatwo jest zintegrować sprzęt zgodny z protokołem Modbus z nowymi lub istniejącymi aplikacjami do monitorowania i sterowania.

Drobna historia Modbus RTU

Można nazwać protokół Modbus dziadkiem sieci przemysłowych. Jest on naprawdę stary jak wzgórza i ma na to dowody w postaci wąsów. W dzisiejszej dobie łączności z Internetem i usług sieciowych niepołączone komunikaty i prosta struktura komunikacji żądanie-odpowiedź w protokole Modbus są niemal zabytkowe. Prawie tak stare jak pierwszy programowalny sterownik logiczny, Modicon 084, który w tamtych czasach nazywano PC od Programmable Controller (sterownik programowalny).

Modbus RTU jest standardem otwartym, co oznacza, że producenci mogą go wbudowywać w swoje urządzenia bez konieczności uiszczania opłat licencyjnych. Jest to najbardziej rozpowszechniony protokół komunikacyjny w automatyce przemysłowej i obecnie jest najczęściej dostępnym sposobem łączenia przemysłowych urządzeń elektronicznych.

Modbus jest szeroko stosowany przez wielu producentów w wielu gałęziach przemysłu. Modbus jest zwykle używany do przesyłania danych z przyrządów kontrolnych do sterownika logicznego lub systemu archiwizacji danych. W automatyce budynkowej, na przykład, temperatura i wilgotność są często przekazywane do komputera w celu ich długotrwałego przechowywania. Modbus jest często używany do łączenia komputera nadzorczego ze zdalną jednostką końcową (RTU) w systemach kontroli nadzorczej i akwizycji danych (SCADA).

Dlaczego Modbus jest tak popularny?

Powodem, dla którego Modbus jest tak rozpowszechniony, jest prostota. Nie zaszkodziło również to, że Modbus został stworzony przez jednego z największych producentów sterowników PLC w tamtym czasie, dzięki czemu stał się otwarty i szeroko dostępny. Modbus wymaga również bardzo niewiele miejsca w kodzie procesora lub pamięci RAM. Chociaż nie jest to tak ważne w dzisiejszych czasach, biorąc pod uwagę potężne procesory i dostępną technologię, było to bardzo ważne we wczesnych latach automatyki przemysłowej, kiedy procesory wykorzystywały technologię 8-bitową, a zasoby takie jak pamięć RAM i ROM były bardzo drogie i rzadkie.

Sprawdzanie komunikatów to kolejny powód, dla którego Modbus jest tak popularny. Sprawdzanie CRC i LRC oznacza, że błędy transmisji są sprawdzane z dokładnością do 99%.

Komunikacja Modbus

Protokół Modbus RTU wykorzystuje technikę Master/Slave do komunikacji między urządzeniami. Oznacza to, że każda aplikacja wykorzystująca protokół Modbus RTU będzie miała urządzenie Modbus Master i co najmniej jedno urządzenie Modbus Slave. Urządzenie Modbus Master to zazwyczaj komputer nadzorujący, na którym działa oprogramowanie komunikujące się z jednym lub wieloma urządzeniami Modbus Slave.

modbusrtu_diagram

Modbus umożliwia komunikację Master/Slave między urządzeniami połączonymi za pomocą magistrali lub sieci. W modelu OSI, Modbus jest umieszczony na poziomie 7. Modbus ma być protokołem typu żądanie/odpowiedź i dostarcza usługi określone przez kody funkcyjne. Kody funkcji Modbus są elementami PDU (Protocol Data Unit).

Aby zbudować jednostkę danych aplikacji Modbus, klient musi zainicjować transakcję Modbus. Jest to funkcja, która informuje serwer o tym, jakiego typu akcję ma wykonać. Format żądania zainicjowanego przez Master jest ustalony przez protokół aplikacji Modbus. Pole kodu funkcji jest następnie zakodowane w jednym bajcie. Tylko kody z zakresu od 1 do 255 są uważane za prawidłowe, przy czym 128-255 są zarezerwowane dla odpowiedzi wyjątkowych. Kiedy urządzenie Master wysyła wiadomość do urządzenia Slave, to właśnie pole kodu funkcji informuje serwer o tym, jaki rodzaj akcji należy wykonać.

Lubisz to, co czytasz?

Prenumeruj naszą serię e-maili Automation Education, aby poznać tajniki najlepszych protokołów przemysłowych w formacie tygodniowym o rozmiarze bajta!

Aby zdefiniować wiele działań, niektóre funkcje będą miały dodane do nich kody podfunkcji. Na przykład, Master może odczytywać stany ON/OFF grupy dyskretnych wyjść lub wejść. Może również odczytywać/zapisywać zawartość danych w grupie rejestrów MODBUS. Kiedy Master odbiera odpowiedź Slave, pole kodu funkcji jest wykorzystywane przez Slave do wskazania odpowiedzi bez błędu lub odpowiedzi na wyjątek. Slave odpowiada echem na żądanie początkowego kodu funkcji w przypadku normalnej odpowiedzi.

Oprezentacja danych MODBUS RTU

Jak wszystko inne w Modbusie, reprezentacja danych jest prosta. W rzeczywistości, dane są reprezentowane w Modbusie prościej niż w jakimkolwiek innym protokole przemysłowym, jaki kiedykolwiek znajdziesz. Bit o najmniejszym znaczeniu jest wysyłany i odbierany jako pierwszy. Wszystkie urządzenia w sieci muszą interpretować każdy transmitowany bajt analogicznie w ten sposób.

Nie istnieją metody automatycznego rozpoznawania szybkości transmisji. Ta sama szybkość transmisji musi być wykorzystywana przez Slave(s) i Master podłączone do magistrali. Modbus nie określa konkretnej szybkości transmisji: typowe szybkości transmisji to 9600 lub 19200.

Przesyłany bajt jest zakodowany jako: 8 Bitowa wartość binarna, szesnastkowo 0 - 9 i A - F. Najmniej znaczący Bit jest wysyłany i odbierany jako pierwszy
Przesyłany Byte jest zakodowany jako 8 Bitowa wartość binarna, szesnastkowo 0 – 9 i A – F. Najmniej znaczący Bit jest wysyłany i odbierany jako pierwszy.

W Modbusie są tylko dwa typy danych: cewki i rejestry. Cewki to po prostu pojedyncze bity. Bity te mogą być włączone (1) lub wyłączone (0). Niektóre cewki reprezentują wejścia, co oznacza, że zawierają stan jakiegoś fizycznego wejścia dyskretnego. Lub reprezentują wyjścia, co oznacza, że przechowują stan jakiegoś fizycznego dyskretnego sygnału wyjściowego. Rejestry są po prostu 16-bitowymi danymi rejestrowymi bez znaku. Rejestry mogą mieć wartość od 0 do 65535 (0 do FFFF szesnastkowo). Nie ma reprezentacji dla wartości ujemnych, nie ma reprezentacji dla wartości większych niż 65535 i nie ma reprezentacji dla danych rzeczywistych jak 200.125.

Rejestry są pogrupowane na rejestry wejściowe i rejestry trzymające. Podobnie jak cewki wejściowe, rejestry wejściowe zgłaszają stan jakiegoś zewnętrznego wejścia jako wartość z zakresu od 0 do 65535. Pierwotnym przeznaczeniem rejestrów wejściowych było odzwierciedlenie wartości jakiegoś wejścia analogowego. Jest to cyfrowa reprezentacja sygnału analogowego, takiego jak napięcie lub prąd. Większość dzisiejszych urządzeń Modbus nie jest urządzeniami wejścia/wyjścia, a rejestry wejściowe działają identycznie jak rejestry przechowujące.

Rejestry przechowujące zostały pierwotnie zaprojektowane jako tymczasowe magazyny programów dla urządzeń takich jak kontrolery Modbus. Obecnie Holding Registers funkcjonują jako magazyny danych dla urządzeń.

Pakiety Modbus RTU są przeznaczone tylko do wysyłania danych; nie mają możliwości wysyłania parametrów takich jak nazwa punktu, rozdzielczość, jednostki itp. Jeśli zdolność do wysyłania takich parametrów jest potrzebna, należy rozważyć BACnet, EtherNet/IP lub inne nowoczesne protokoły.

Wymagania adresowe Modbus RTU i identyfikacja stacji

Standardowe adresy węzłów Modbus RTU to 1-255, przy czym 0 jest zarezerwowane dla wiadomości rozgłoszeniowych i tylko do zapisu. Jednak adres 0 jest rzadko używany, ponieważ nie ma potwierdzenia, że wiadomość została prawidłowo odebrana w węźle slave. Nie ma to większego wpływu, jeśli warstwa fizyczna to RS-232, ponieważ tylko jeden węzeł może być zaimplementowany tak czy inaczej. RS-485 ogranicza liczbę węzłów do 32, choć niektóre sterowniki pozwalają na rozszerzenie tej liczby.

Seryjne urządzenia Modbus Slave są identyfikowane przez numer stacji, który poprzedza ogólną strukturę wiadomości. Generalnie obsługiwane są maksymalnie 32 stacje, ponieważ jest to limit narzucony przez większość sterowników szeregowych RS485. Nie ma programowego ograniczenia ilości stacji, które mogą być obsługiwane. Poprawne adresy Slave są przydzielane w zakresie od 1 do 255 z numerem stacji 0 zarezerwowanym dla wiadomości broadcast, wiadomości przetwarzanych przez wszystkie Slave.

Warstwy transportowe

Istnieje kilka standardowych transportów używanych do przenoszenia wiadomości protokołu Modbus: RS232 i RS485. Możesz używać innych, ale te są najbardziej powszechne.

RS485 jest następcą RS232. Działa w podobny sposób w odniesieniu do bitów synchronizujących, które synchronizują transfer bitów ze stacji wysyłającej do stacji odbierającej. Istnieją jednak dwie cechy definiujące, które sprawiają, że RS485 różni się od RS232. Pierwszą z nich jest zdolność do napędzania wielu miejsc docelowych. Nadajniki RS485 mogą elektrycznie sygnalizować do 32 urządzeń docelowych. To czyni RS485 preferowanym sposobem szeregowego transportu Modbus messages.

Drugą cechą definiującą RS485 jest zwiększona odporność na zakłócenia. RS485 nie używa elektrycznego wspólnego jako odniesienia dla swojego sygnału elektrycznego. Zamiast tego, RS485 używa pary przewodów i napędza sygnał przez ustawienie potencjału napięcia przez parę. W ten sposób wszelkie szumy elektryczne otoczenia wpływają na oba przewody jednakowo, a potencjał między nimi nie zmienia się.

Kodowanie danych Modbus RTU

Mechanizm kodowania opisuje, w jaki sposób tworzone są wzorce bitów z wartości sterowania i danych, które są zakodowane w pakiecie. Zarówno nadawca jak i odbiorca muszą używać tego samego kodowania, aby poprawnie zrozumieć zawartość danych. Istnieją dwa mechanizmy kodowania wiadomości Modbus: ASCII i RTU.

Kodowanie RTU jest znacznie bardziej powszechnym mechanizmem kodowania używanym w sieci Modbus. RTU oznacza po prostu, że wartości są kodowane jako standardowe binarne big-endian. Oznacza to, że w przypadku wartości 16-bitowych, bajt najbardziej znaczący (MSB) jest kodowany przed bajtem najmniej znaczącym (LSB). Wartość 8-bitowa, taka jak dziesiętna 41 (29 hex) jest kodowana jako 0010 1001. Natomiast wartość 16-bitowa, taka jak dziesiętna 300 (12C hex) jest kodowana jako 0000 0001 0010 1100. MSB z 01 jest kodowany i przesyłany przed LSB z 2C.

Mapa pamięci MODBUS RTU

Modbus RTU
Typ danych Typ
Common
name
Adres początkowy
Cewki Modbus Bity, wartości binarne, flagi 00001
Wejścia cyfrowe Wejścia binarne 10001
Wejścia analogowe Wejścia binarne 30001
Rejestry Modbus Wartości analogowe, zmienne 40001

Różnica między Modbus RTU a Modbus TCP

Najbardziej podstawowa różnica między Modbus RTU a Modbus TCP (znanym również jako Modbus IP, Modbus EtherNet, i Modbus TCP/IP) jest taka, że Modbus TCP działa na warstwie fizycznej Ethernet, a Modbus RTU jest protokołem szeregowym. Modbus TCP używa również 6-bajtowego nagłówka, aby umożliwić routing.

Master Modbus RTU to pojedyncza magistrala Master. Wysyła on komunikat do urządzenia RTU Slave i otrzymuje odpowiedź. Modbus RTU jest ograniczony do pojedynczego urządzenia Master. Tylko jeden zestaw sygnałów może być na łączu RS485 w tym samym czasie. Albo pojedynczy Master RTU nadaje, albo jedno z urządzeń RTU Client nadaje.

Wraz z wprowadzeniem Modbus TCP wszystko zostało uproszczone i ułatwione. Dzięki Modbus TCP sterowniki mogą o wiele efektywniej wykorzystywać przepustowość sieci Ethernet, aby pełnić rolę Mastera dla setek urządzeń Modbus TCP. Modbus TCP pozwala na obsługę wielu klientów. Tam, gdzie RS485 miał elektryczne ograniczenie do 32 urządzeń, Ethernet jest nieograniczony. Pamięć operacyjna RAM jest jedynym praktycznym ograniczeniem. Dzięki Modbus TCP projektant sieci ma możliwość korzystania z wielu klientów/masterów, jeśli tak zdecyduje.

Z Modbus TCP (Ethernet) trzeba zaangażować kosztowny przełącznik. W przypadku Modbus RTU (szeregowego) można po prostu połączyć wszystkie urządzenia łańcuchowo. Urządzenia ze starymi 8-bitowymi procesorami i niewielką ilością pamięci mogą z łatwością obsługiwać Modbus szeregowy, ale do obsługi Ethernetu potrzebna jest droższa platforma.

Czy wiesz, że?

Założyciel Real Time Automation, John S. Rinaldi, napisał całą książkę na temat Modbus? Sprawdź The Everyman’s Guide to Modbus, dostępny już teraz na Amazon!

Aby uzyskać więcej informacji na temat naszych produktów i usług Modbus RTU, zadzwoń pod numer 1-800-249-1612 lub wyślij nam wiadomość e-mail na adres [email protected].

Chcesz dodać Modbus RTU do swojego projektu?

Zobacz Rozwiązania Modbus RTU

Chcesz tę stronę w formacie PDF? Kliknij tutaj!

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *