Katedra Inżynierii Systemów Sterowania Materiały dodatkowe Krótka charakterystyka protokołu MODBUS Opracowali: mgr inż. Tomasz Karla Data: Luty, 2017 r.
Dodatkowe informacje Materiały dodatkowe mają charakter ogólny i służą tylko do zapoznania się z poszczególnymi procedurami. Należy korzystać z nich wybiórczo w zależności od potrzeb. Charakterystyka protokołu MODBUS [1] Protokół komunikacyjny MODBUS jest definicją, opisem struktury komunikatów opracowaną przez firmę Modicon (obecnie Schneider Electric) w 1979 roku. Jest on wykorzystywany do ustanowienia komunikacji wg modelu master-slave/client-server pomiędzy urządzeniami. Stanowi de facto otwarty standard, i jest to najczęściej stosowany protokół sieciowy w środowisku przemysłowym. Został zaimplementowany przez setki producentów w tysiącach różnych urządzeń sterujących w celu transferu dyskretnych i analogowych wejść i wyjść oraz danych rejestrowych. Protokół MODBUS jest wspólnym językiem komunikacji wśród urządzeń różnych producentów. W raportach technicznych napotyka się na określenia "standard integracji urządzeń wielu producentów. W raportach przemysłowych można znaleźć udokumentowane ponad 7 milionów węzłów (urządzeń z zaimplementowanym protokołem) w Europie i USA. Po wielu latach rozwijania protokołu MODBUS firma Schneider przekazała pieczę nad tym zadaniem organizacji typu non-profit pod nazwą MODBUS Organization. Protokół MODBUS wykorzystujący transmisję szeregową Komunikacja pomiędzy urządzeniami odbywa się asynchronicznie, z wykorzystaniem interfejsu RS232 lub zgodnych RS422, RS-485. Protokół MODBUS zajmuje trzy warstwy w modelu ISO/OSI: - warstwa 1 (fizyczna) definiuje w jaki sposób wysyłane i odbierane są sygnały, przy wykorzystaniu specyfikacji RS-232, RS-422 lub RS-485. - warstwa 2 (łącza danych) nadzoruje ruch w oparciu o protokół typu Master-Slave, wykorzystywane są ramki typu RTU lub ASCII. - warstwa 7 (aplikacji) określa w jaki sposób następuje komunikacja: klient-serwer.
Tryby transmisji szeregowej MODBUS Protokół MODBUS Serial umożliwia komunikację za pomocą dwóch typów ramek: 1. Tryb ASCII (znakowy) - Każdy bajt w wiadomości wysyłany jest w postaci dwóch znaków ASCII ( Tab.1 ) Tabela.1. Ramka MODBUS w trybie ASCII. ADRES FUNKCJA DANE POCZĄTKU KONTROLA LRC 1 ZNAK 2 ZNAKI 2 ZNAKI n ZNAKÓW 2 ZNAKI KOŃCA 2 ZNAKI CR i LF 2. Tryb RTU (binarny) - Pomiędzy ramkami wymagana jest przerwa trwająca co najmniej 3.5 x T, gdzie T czas trwania pojedynczego znaku. Dodatkowo odstępy pomiędzy kolejnymi znakami w jednej ramce nie mogą być większe niż 1.5 x T. ( Tab.2 ) Tabela.2. Ramka MODBUS w trybie RTU. ADRES FUNKCJA DANE POCZĄTKU ODSTĘP n x 8 8 bitów 8 bitów 3,5 x bitów KONTROLA CRC 16 bitów KOŃCA PRZERWA 3,5 x Szczegółowy opis ramki MODBUS (na podstawie RTU): Adres adres urządzenia Slave z którym ma nastąpić komunikacja, zakres od 1 do 247. Dodatkowo adres 0 wykorzystywany jest jako adres rozgłoszeniowy, wykorzystywany do komunikacji ze wszystkimi urządzeniami. Funkcja kod rozkazu, który określa konkretne polecenie żądane przez Mastera. Zakres funkcji zawiera się od 1 do 255. Tabela 3 przedstawia zestaw najczęściej wykorzystywanych funkcji. Dane pole to zawiera dodatkowe dane potrzebne do wykonania polecenia przez urządzenie Slave. Mogą to być adresy rejestrów, liczba bajtów lub też inne dane. Przykładowo przy zapisie danych (kod funkcji 10h) wymagane jest podanie adresu rejestru początkowego, ilość rejestrów, ilość pozostałych bajtów w polu danych oraz dane przeznaczone do zapisu.
Kontrola danych odbywa się w celu weryfikacji poprawności wysyłanych danych. W przypadku ramki RTU wykorzystywane jest CRC (Cyclical Redundancy Check), czyli 16 bitowe słowo kontrolne. CRC zajmuje 2 bajty i dołączane jest na końcu ramki. Tabela.3. Podstawowe funkcje MODBUS Kod Kod (hex) Opis 1 01h Odczyt wyjść bitowych 2 02h Odczyt wejść bitowych 3 03h Odczyt n rejestrów 4 04h Odczyt n rejestrów wejściowych 5 05h Zapis 1 bitu 6 06h Zapis 1 rejestru 7 07h Odczyt statusu urządzenia slave 8 08h Test diagnostyczny 15 0Fh Zapis n bitów 16 10h Zapis n rejestrów 17 11h Identyfikacja urządzenia slave 128-255 80h-FFh Zarezerwowane dla odpowiedzi błędnych
MODBUS TCP/IP Oprócz odmian protokołu MODBUS wykorzystującego szeregowe interfejsy, popularna jest wersja obsługiwana z wykorzystaniem protokołów TCP/IP. Pozwala on na większą elastyczność w dostępie do urządzeń. Dodatkowo, nie ma potrzeby ręcznego wyliczania kontroli LRC lub CRC, ponieważ jest już ona uwzględniona w protokole TCP/IP. Tabela 4 przedstawia strukturę ramki MODBUS TCP/IP. Tabela.4. Struktura ramki MODBUS TCP/IP. RAMKA TCP MODBUS MODBUS APPLICATION HEADER RAMKA MODBUS PDU transakcji protokołu Pole długości jednostki Kod funkcji Dane 2 Bajty 2 Bajty 2 Bajty 1 Bajt 1 Bajt n x bajtów Ramka MODBUS TCP/IP jest podobna jak w trybie RTU, pozbawiona pola kontroli danych, lecz rozszerzona o parametry: transakcji dwubajtowe pole identyfikujące zapytanie w celu powiązania z odpowiedzią. Najczęściej pozostawiane jako 0. protokołu dwubajtowe pole zarezerwowane dla przyszłych rozszerzeń. Aktualnie przyjmuje wartość 0. Pole długości dwubajtowe pole określające liczbę bajtów w komunikacie (wszystkie dane występujące po tym polu). jednostki jednobajtowe pole zastępujące adres urządzenia Slave, służące do identyfikowania poszczególnych jednostek.