Dzisiejszym wpisem chcemy wyjaśnić różnicę pomiędzy konwertowaniem protokołu, a jego tunelowaniem na przykładzie Modbus'a, zapraszamy do lektury.
Wstęp
Modbus to protokół komunikacyjny, który używany jest niezwykle często, zarówno w rozwiązaniach przemysłowych jak i poza nimi. W pierwszej wersji został on opracowany dla standardu komunikacji szeregowej przez firmę Modicon (dzisiaj Schneider Electric) w 1979 roku, i zaimplementowany w sterowniku PLC. O jego sukcesie zadecydowało kilka czynników: -Darmowy i otwarty protokół -Łatwy do implementacji i zarządzania -Prosta zasada działania bez specjalnych wymagań Dziś, najczęściej jest on używany w sterownikach PLC do komunikacji pomiędzy urządzeniami, ale można też często go znaleźć w modułach I/O, oprogramowaniu SCADA czy choćby analizatorach jakości energii. W Modbusie można manipulować 4 typami obiektów, które zostały dobrane tak aby były odpowiednikami zasobów typowego sterownika PLC z okresu gdy powstawał ten protokół. Nadal ten zestaw jest aktualny, i w typowym sterowniku znajdziemy:
Obiekt | Dostęp | Rozmiar | Fizyczny odpowiednik |
Coil | Odczyt/Zapis | 1 bit | Wyjście cyfrowe, przekaźnikowe |
Discrete Input | Tylko do odczytu | 1 bit | Wejście cyfrowe |
Input Register | Tylko do odczytu | 16 bitów | Wejście analogowe, temperaturowe itp. |
Holding Register | Odczyt/Zapis | 16 bitów | Wyjście analogowe, PWM itp. |
Wersje
Modbus wraz z upływem czasu był unowocześniany a efektem jest jego kilka wersji, z czego w powszechnym użyciu są obecnie 2, 3. Poniżej opis wybranych wariantów protokołu Modbus: Modbus RTU – To najpopularniejsza wersja, w warstwie fizycznej korzysta ze standardu szeregowego (RS-232/422/485). Dane są tu reprezentowane w formie binarnej, a do kontroli poprawności ramek stosowany jest 2 bajtowy CRC (cyclic redundancy check ), co zapewnia sporą niezawodność 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 wspomnianego CRC (2 bajty), więc maksymalna długość zapytania to 255 bajtów. Pomiędzy wiadomościami Modbus RTU występuje przerwa (brak transmisji) która trwa minimum 3,5x czas potrzebny na przesłanie jednego bajtu (bodu). Komunikacja odbywa się na zasadzie zapytanie wysyłane przez mastera, oraz odpowiedź wysyłana przez slave, przy czym w urządzeniu Master, parametr „timeout” definiuje jak długo master ma czekać na odpowiedź od slave. Modbus ASCII – Ta wersja różni się nieznacznie od Modbus RTU, a podstawowa różnica tkwi w tym że dane są w nim kodowane w kodzie ASCII. Jeśli chodzi o nagłówek to dodatkowo znajdziemy tutaj 1 znak startu, 2 znaki adresu, do 252 znaków danych. Za polem danych używany jest LRC do kontroli spójności danych, a na końcu dodawane są 2 znaki końca linii czyli CR, LF, sygnalizujące koniec wiadomości. Modbus TCP/IP (potocznie Modbus TCP) – to odpowiednik Modbus RTU, ale używający do komunikacji protokołu TCP, na porcie 502. Nie posiada obliczania sumy kontrolnej, ponieważ niższa warstwa (TCP) już się tym zajmuje. Nie zawsze pole ID jest używane, ponieważ adres IP który wykorzystuje protokół TCP/IP jest już bezwzględnym identyfikatorem urządzenia. Modbus RTU przez TCP/IP (inna nazwa: Modbus RTU/IP) – Jest to tunelowany Modbus RTU, czyli przesyłany w formie surowej przez gniazdko (socket) TCP. Aby realizować taką komunikację wymagane jest specjalne urządzenie, które jest mostem pomiędzy RS-232/422/485 a standardem Ethernet, może to być np. serwer portów szeregowych Modbus przez UDP – Rzadko używany wariant powyższego, z tym że do transportu używany jest protokół UDP. Modbus Plus (Modbus+, MB+, MBP) – Rzadko używany wariant, jest własnością Schneider Electric. W warstwie fizycznej używa niestandardowego interfejsu fizycznego, dlatego wymaga specjalnej karty do podłączenia z komputerem.
Konwersja Modbus w urządzeniach Firmy Moxa
Firma Moxa posiada w ofercie urządzenia wspierające komunikację w automatyce przemysłowej. Najbardziej rozpoznawalne urządzenia tego producenta to serwery portów szeregowych i pełnią funkcje konwertera RS-232/422/485 na Ethernet, a właściwie na protokół TCP. Nporty potrafią tunelować każdy protokół który bazuje na wymienionych standardach szeregowych, to znaczy że można za ich pomocą podłączyć starsze urządzenia polowe, do sieci i infrastruktury przedsiębiorstwa. Najpopularniejsze urządzenia podłączane za pomocą Nportów to liczniki energii, analizatory jakości energii, wagi, drukarki termiczne, tablice informacyjne, systemy alarmowe i wiele innych. Umożliwiają one także tunelowanie protokołu Modbus RTU, czyli przesyłanie go dalej, np. do innego nporta, i powrót do właściwego medium. W trybie RealCOM możliwe jest zamapowanie wirtualnego portu COM (Windows) i w oprogramowaniu używanie go do odpytywania za pomocą Modbus RTU. Nporty są w stanie tunelować ruch Modbus RTU w protokole TCP, ale nie konwertują go na Modbus TCP. Do tego celu przeznaczone są konwertery protokołów, lub inaczej - bramy komunikacyjne. Wizualizacja tunelowania Modbus RTU w protokole TCP Mgate MB3180, oraz MGate MB3170, a także ich wieloportowy odpowiednik MGate MB3660 to właśnie konwertery protokołów. Ich zadaniem jest konwersja z Modbus RTU na Modbus TCP, lub w drugą stronę. Taki konwerter protokołów jest bardziej elastycznym rozwiązaniem, ponieważ dostęp do urządzenia schowanego za konwerterem zyskuje niemal każde urządzenie w sieci lokalnej, lub nawet z poza nią - za pomocą translacji adresów NAT, popularnie nazywanego przekierowywaniem portów (ang. Port Forwarding), czy protokołów routingu.
Podsumowanie:
Warto zapamiętać, że za pomocą serwerów portów szeregowych, (np. Nport 5150) można tunelować Modbus RTU w protokole TCP, a także inne protokoły bazujące na RS-232/422/485 takie jak DNP, DF1, CIP, MPI i wiele innych. Jeśli natomiast zachodzi potrzeba połączenia do sieci sieci Ethernet liczników energii i innych mediów, sterowników PLC itp., wyposażonych tylko w Modbus RTU, a konkretniej udostępnić je Modbus TCP masterom, to wtedy należy użyć bramy komunikacyjnej, np. Mgate MB3180. Poniżej w skrócie różnice pomiędzy Nportami i MGate MB3180/3170/3660:
Typ urządzenia | Funkcja |
Serwery portów szeregowych Nport | Tunelowanie Modbus RTU w protokole TCP lub UDP. Brak konwersji na Modbus TCP. |
Bramy komunikacyjne MGate MB3180/3170/3660 | Konwersja Modbus RTU – Modbus TCP |
Źródła: Ciekawie opisana różnica pomiędzy konwersją i tunelowaniem protokołów (j. ang.): http://www.gcom.com/support/documentation/tunneling-vs-protocol-conversion.html
Modbus w wikipedi anglojęzycznej:
https://en.wikipedia.org/wiki/Modbus
Oficjalna strona organizacji Modbus. Zawiera mnóstwo przydatnych informacji i linków:
Skontaktuj się ze specjalistą Elmark
Masz pytania? Potrzebujesz porady? Zadzwoń lub napisz do nas!