Projektowanie i Organizacja Systemów Elektronicznych Protokół MODBUS Marek Niedostatkiewicz Katedra Metrologii i Systemów Elektronicznych Wydział Elektroniki, Telekomunikacji i Informatyki Politechnika Gdańska
Protokół Modbus MODBUS Systemy automatyki przemysłowej, firma MODICON, 1979 Przyjęty jako standard inżynierski przez wielu producentów Powołano organizację kontrolującą rozwój standardu Standard jawny Pierwotnie protokół realizowany na bazie magistrali RS485 Rejestracja jako standard IEC
Protokół Modbus Obecna specyfikacja zawiera rozdzielne standardy warstwy aplikacji Modbus oraz warstwy łącza danych i fizycznej Możliwość realizacji na bazie różnych interfejsów RS232 / RS485 TCP / IP (Ethernet) port 502 High speed token passing network HDLC protokół Modbus Plus Obejmuje możliwość enkapsulacji danych nie objętych protokołem Współpraca z innymi systemami np. CANopen Współpraca z Gateway ami
Protokół Modbus Sygnalizacja błędów / zabezpieczanie przesyłanych komunikatów przed błędami Potwierdzanie wykonywania rozkazów Mechanizmy zabezpieczające przed zawieszeniem systemu Standard zawiera zgodne z notacją UML grafy stanów funkcji urządzeń Modbus Standard zawiera specyfikację elementów mechanicznych (złącza, kolory kabli Standard zaleca sposób sygnalizacji transmisji diodą LED
Protokół Modbus Przykład architektury sieciowej Modbus
Protokół Modbus Stos protokołów MODBUS
Protokół Modbus układ warstw wg ISO/OSI Najpopularniejszy zestaw: Modbus + RS485 Warstwa łącza danych (MB szeregowy) dzieli się na dwie podwarstwy: Protołół Master / Slave Tryb transmisji: ASCII RTU
Protokół Modbus warstwa aplikacji Protokół typu: zapytanie odpowiedź (transakcja) Usługi serwera są dostępne jako funkcje Funkcje oferują ustawianie linii IO, zmianę rejestrów sterownika itp.. zdefiniowane jednoznaczne postaci zapytań i odpowiedzi
Protokół Modbus warstwa aplikacji Definicje Zapytań i odpowiedzi Modbus: PDU
Protokół Modbus warstwa aplikacji Serwer sygnalizuje błąd za pomocą excep_resp_pdu: mb_excep_rsp_pdu = {exception function code, exception code} Zwracany jest kod funkcji Zwracany jest numer błedu (wyjątku) Typy błędów są zdefiniowane w tabeli. Maksymalna ilość funkcji: 128 (0-127) Kody funkcji i kody błędów później :)
Protokół Modbus implementacja szeregowa Dla MB+RS485 (unicast): Serwer Slave Klient Master UWAGA: Master (klient) inicjuje transakcję i zarządza magistralą RS485 nadawanie rozsiewcze (broadcast) Bez odpowiedzi
Protokół Modbus implementacja W zależności od implementacji PDU ADU W przypadku MB+RS485: postać ADU zawiera: Maksymalna długość ADU ( dziedzictwo ):
Protokół Modbus implementacja szeregowa Zakres adresów Modbus Serial: W dalszej części: opis warstwy łącza danych. Podwarstwa protokołu Master / Slave Podwarstwa trybu transmisji ASCII / RTU Warstwę fizyczną RS485 patrz wykład IS sem.vi Standard dodatkowo definiuje mechanikę złącz Grafy opisu protokołu zgodne ze specyfikacją UML :)
Protokół Modbus warstwa łącza danych Protokół Master / Slave Protokół Master/Slave - transakcje Modbus Subwarstwa warstwy łącza danych Prezentowane transmisje unicast i broadcast
Protokół Modbus warstwa łącza danych Protokół Master / Slave Graf działania Master Response timeout - >1s @ 9600bps Turnaround timeout 100ms-200ms Frame error: błąd parzystości znaku lub błąd kontroli ramki (CRC/LRC)
Protokół Modbus warstwa łącza danych Protokół Master/Slave Graf działania Slave W przypadku błędu transmisji ramki Slave nie odpowiada W przypadku błędu Polecenia lub błędu wykonania MUSI odpowiedzieć Zmieniane są wartości liczników diagnostycznych transmisji
Protokół Modbus warstwa łącza danych tryb RTU Tryb RTU (real-time unit) obligatoryjny 8-bitowe, binarne kodowanie danych Znaki przesyłane asynchronicznie: wymagana kontrola parzystości E / dopuszczalne O/N Sprawdzanie spójności ramki: CRC16 (Cyclical Redundancy Checking 16 bits) Ramka Modbus w trybie RTU:
Protokół Modbus warstwa łącza danych tryb RTU Tryb RTU (real-time unit) obligatoryjny Ramka transmitowana w sposób ciągły ( t < 1.5 znaku) Koniec i początek ramki sygnalizowane t1-2-3-4 (t >= 3.5 znaku)
Protokół Modbus warstwa łącza danych tryb RTU Tryb RTU (real-time unit) obligatoryjny Ramki błędne: Tryb RTU wymaga pomiaru czasu idle Wartości t1/2 i t1-2-3-4 powyżej 19200bps przyjmuje się jako wartości stałe: 750us i 1.750ms
Protokół Modbus warstwa łącza danych Tryb RTU n1: N1.1 graf trybu RTU wspólny dla Master i Slave
Projektowanie i Organizacja Systemów Elektronicznych Protokół Modbus warstwa łącza danych - RTU Obliczanie CRC16 2 metody: Obliczanie CRC16 bezpośrednio Obliczenia z wykorzystaniem tablic tytuł
Protokół Modbus warstwa łącza danych Tryb RTU Obliczanie CRC16 Funkcja obliczająca CRC16 metodą tablicową
Protokół Modbus warstwa łącza danych Tryb ASCII Tryb ASCII historyczny Kodowanie hexadecymalne, za pomocą znaków ASCII 0-9, A-F Każdy znak hexadecymalny odpowiada 4 bitom / jeden bajt PDU transmisja 2 znaków ASCII Znaki przesyłane asynchronicznie: wymagana kontrola parzystości E / dopuszczalne O/N Sprawdzanie spójności ramki: LRC (Longitudal Redundancy Checking)
Protokół Modbus warstwa łącza danych Tryb ASCII Tryb ASCII Ramka w trybie ASCII: Rozpoczyna się od jawnego znaku : W polach ramki mogą występować wyłącznie 0-9, A-F Kończy się CR LF Dopuszczalne odstępy między znakami: do 1s!!! Długość ramki: do 513 znaków (pole danych 252x2) Ramki niedokończone muszą być wykrywane i odesłane
Protokół Modbus warstwa łącza danych Tryb ASCII Tryb ASCII Obliczanie LRC Obliczyć 8-bitową sumę (bez przeniesień) bajtów ramki Wynik LRC to dopełnienie do 2 obliczonej sumy Przykład funkcji obliczającej LRC
Protokół Modbus warstwa łącza danych Tryb ASCII graf trybu ASCII wspólny dla Master i Slave
Protokół Modbus warstwa fizyczna Struktura wielopunktowej magistrali szeregowej dla Modbus Trunk główny pień magistrali, terminowany na końcach Passive TAP (Derivation interface) (także distributor multi TAP) Active TAP (zintegrowany z transceiverem) Atachment Unit Interface Daisy Chain
Protokół Modbus warstwa fizyczna Struktura dla 2W RS485 Terminatory: 150ohm 0.5W lub ( 1nF min. 10V + R120ohm 0.25W) Rezystory polaryzujące 450-650 ohm, nie zawsze wymagane (musi być opis w dokumentacji urządzenia)
Protokół Modbus warstwa fizyczna Wymagany przewód Common Wymagane zachowanie nazewnictwa D0/D1 Możliwe dodatkowe linie: Wybór 2W / 4W(RS232) za pomocą PMC (port mode control sygnał TTL) Rozwarcie domyślny RS485 2W Poziom niski RS485 4W lub RS232 (zależne od implementacji) Zasilanie 5-24V DC
Protokół Modbus warstwa fizyczna Struktura dla 4W RS485 Nie jest to RS422!!!
Protokół Modbus warstwa fizyczna tytuł n1: N1.1
Protokół Modbus warstwa fizyczna n1: N1.1
Protokół Modbus warstwa fizyczna Zalecane kolory przewodów dla magistrali szeregowej dla Modbus Wymagana sygnalizacja za pomocą LED stanu transmisji:
Protokół Modbus szeregowy klasy realizacji Zdefiniowano 2 klasy implementacji Modbus interfejs szeregowy W obu klasach urządzenia muszą spełniać warunki obligatoryjne specyfikacji Urządzenie klasy regular musi być konfigurowalne
Protokół Modbus szeregowy Liczniki błędów transmisji szeregowej Modbus (dostępne z poziomu warstwy aplikacji)
Protokół Modbus Liczniki błędów transmisji szeregowej Modbus (dostępne z poziomu warstwy aplikacji)
Protokół Modbus Odbiór ramki liczniki błędów tytuł
Protokół Modbus szeregowy Odbiór ramki liczniki błędów
Protokół Modbus szeregowy Odbiór ramki liczniki błędów tytuł
Protokół Modbus szeregowy Odbiór ramki liczniki błędów tytuł
Protokół Modbus warstwa aplikacji WARSTWA APLIKACJI Protokół typu: zapytanie odpowiedź (transakcja) Usługi serwera są dostępne jako funkcje Funkcje oferują ustawianie linii IO, zmianę rejestrów sterownika itp.. zdefiniowane jednoznaczne postaci zapytań i odpowiedzi
Protokół Modbus warstwa aplikacji Serwer sygnalizuje błąd za pomocą excep_resp_pdu: mb_excep_rsp_pdu = {exception function code, exception code} Zwracany jest kod funkcji Zwracany jest numer błedu (wyjątku) Typy błędów są zdefiniowane w tabeli. Maksymalna ilość funkcji: 128 (0-127) Kody funkcji i kody błędów TERAZ :)
Protokół Modbus Modbus kody błędów (exception responses)
Protokół Modbus warstwa aplikacji Modbus kody błędów (exception responses)
Protokół Modbus tytuł Analiza kompletnego PDU
Protokół Modbus warstwa aplikacji
Protokół Modbus warstwa aplikacji tytuł
Protokół Modbus warstwa aplikacji
Protokół Modbus tytuł
Protokół Modbus warstwa aplikacji (01) READ COILS
Protokół Modbus (01) READ COILS
Protokół Modbus warstwa aplikacji (02) READ DISCRETE INPUTS
Protokół Modbus warstwa aplikacji (03) READ HOLDING REGISTERS
(03) READ HOLDING REGISTERS
Protokół Modbus warstwa aplikacji (04) READ INPUT REGISTERS
Protokół Modbus warstwa aplikacji (05) WRITE SINGLE COIL
Protokół Modbus warstwa aplikacji (06) WRITE SINGLE REGISTER
Protokół Modbus warstwa aplikacji (07) READ EXCEPTION STATUS (tylko szeregowe)
Protokół Modbus warstwa aplikacji (08) DIAGNOSTICS (tylko szeregowe)
Protokół Modbus warstwa aplikacji (08) DIAGNOSTICS (tylko szeregowe) subfunkcje
Protokół Modbus warstwa aplikacji (08) DIAGNOSTICS (tylko szeregowe) Przykład subfunkcji echo data
Protokół Modbus warstwa aplikacji (11) GET COMM EVENT COUNTER (tylko szeregowe) (12) GET COMM EVENT LOG (tylko szeregowe) (17) REPORT SLAVE ID (tylko szeregowe)
Protokół Modbus warstwa aplikacji (15) WRITE MULTIPLE COILS
Protokół Modbus warstwa aplikacji (16) WRITE MULTIPLE REGISTERS 1 do ~120 rejestrów
Protokół Modbus warstwa aplikacji (22) MASK WRITE REGISTERS
Protokół Modbus warstwa aplikacji (23) READ/WRITE MULTIPLE REGISTERS zapis wykonywany przed odczytem
Protokół Modbus warstwa aplikacji (23) READ/WRITE MULTIPLE REGISTERS zapis wykonywany przed odczytem
Protokół Modbus warstwa aplikacji (24) READ FIFO QUEUE
Protokół Modbus warstwa aplikacji (20/06) READ FILE RECORD (21/06) WRITE FILE RECORD
Protokół Modbus warstwa aplikacji (43) ENCAPSULATED INTERFACE TRANSPORT MEI modbus encapsulated interface
Protokół Modbus warstwa aplikacji (43) ENCAPSULATED INTERFACE TRANSPORT MEI modbus encapsulated interface
Protokół Modbus warstwa aplikacji (43/13) CANOPEN GENERAL REFERENCE REQUEST AND RESPONSE PDU (43/14) READ DEVICE IDENTIFICATION
Projektowanie i Organizacja Systemów Elektronicznych Protokół MODBUS Marek Niedostatkiewicz Katedra Metrologii i Systemów Elektronicznych Wydział Elektroniki, Telekomunikacji i Informatyki Politechnika Gdańska