1
Interface szeregowy MODBUS
Interfejs MODBUS zosta
ł opracowany w firmie Modicon i stał się wkrótce standardem przyjętym przez większość
znanych producentów sterowników przemys
łowych dla asynchronicznej, znakowej wymiany informacji pomiędzy
urz
ądzeniami systemów pomiarowo-kontrolnych. O jego popularności i rozpowszechnieniu zadecydowały takie cechy,
jak
•
prosta regu
ła dostępu do łącza oparta na zasadzie "master-slave" , o zabezpieczenie przesyłanych
komunikatów przed b
łędami,
•
potwierdzanie wykonania rozkazów zdalnych i sygnalizacja b
łędów, o skuteczne mechanizmy
zabezpieczaj
ące przed zawieszeniem systemu,
•
wykorzystanie asynchronicznej transmisji znakowej zgodnej z RS-232C.
Transakcje w systemie MODBUS
Kontrolery urz
ądzeń pracujących w systemie MODBUS komunikują się ze sobą przy wykorzystaniu protokołu typu
master-slave, w którym tylko jedno urz
ądzenie może inicjować transakcje (jednostka nadrzędna - master), a pozostałe
(jednostki podrz
ędne -slave) odpowiadają jedynie na zdalne zapytania mastera. Transakcja składa się z polecenia
(query) wysy
łanego z jednostki master do slave oraz z odpowiedzi (response) przesyłanej z jednostki slave do master.
Odpowied
ź zawiera dane żądane przez master lub potwierdzenie realizacji jego polecenia. Master może adresować
indywidualnych odbiorców (jednostki slave) lub te
ż przesyłać wiadomości "rozgłoszeniowe" (broadcast),
przeznaczone dla wszystkich urz
ądzeń podrzędnych w systemie. Na polecenia rozgłoszeniowe jednostki slave nie
przesy
łaj odpowiedzi. Protokół MODBUS określa format wiadomości przesyłanych z jednostki master do slave.
Zawiera on adres odbiorcy, kod funkcji reprezentuj
ący żądane polecenie, dane oraz słowo kontrolne zabezpieczające
przesy
łaną wiadomość. Odpowiedź urządzenia slave wysyłana jest również zgodnie z formatem zdefiniowanym w
protokole MODBUS. Zawiera ona pole potwierdzenia realizacji rozkazu, dane
żądane przez master oraz słowo
kontrolne zabezpieczaj
ące odpowiedź przed błędami. Jeżeli urządzenie slave wykryje błąd przy odbiorze wiadomości,
lub nie jest w stanie wykona
ć polecenia, przygotowuje specjalny komunikat o wystąpieniu błędu i przesyła go jako
odpowied
ź do mastera.
Ramka w systemie MODBUS
W systemie MODBUS wiadomo
ści są zorganizowane w ramki o określonym początku i końcu. Pozwala to urządzeniu
odbieraj
ącemu na odrzucenie ramek niekompletnych i sygnalizację związanych z tym błędów. Ze względu na
mo
żliwość pracy w jednym z dwóch różnych trybów transmisji (ASCII lub RTU), definiuje się dwie ramki.
Ramka w trybie ASCII
W trybie ASCII, ka
żdy bajt w wiadomości przesyłany jest w postaci dwóch znaków ASCII. Podstawową zaletą tego
trybu transmisji jest to,
że pozwala on na długie odstępy między znakami (do 1 s) bez powodowania błędów. Format
znaku przesy
łanego w trybie transmisji ASCII jest następujący:
•
system kodowania: heksadecymalny, znaki ASCII 4-9, A-F. Jeden znak heksadecymalny zawarty jest w
ka
żdym znaku ASCII wiadomości.
•
jednostka informacyjna: ograniczona znakami start (na pocz
ątku) i stop (na końcu), 10-bitowa.
Przy transmisji w trybie ASCII stosuje si
ę zabezpieczenie części informacyjnej ramki kodem LRC (Longitudinal
Redundancy Check). Znacznikiem pocz
ątku ramki jest znak dwukropka (":" - ASCII 3Ah). Dopuszczalnymi znakami
dla pozosta
łych pól (za wyjątkiem znacznika końca ramki) są 0-9, Ah-Fh. Urządzenie po wykryciu znacznika początku
ramki sprawdza, czy pole adresowe zawiera jego adres w
łasny. Jeżeli tak, to odczytuje zawartość pola funkcji i
zwi
ązaną z nią zawartość pola danych. Część informacyjni ramki (bez znaku ":") zabezpiecza pole kontrolne LRC.
Ramka ko
ńczy się przesłaniem dwóch znaków: CR i LF.
Format ramki w trybie ASCII
Odst
ęp pomiędzy znakami tworzącymi ramkę nie może przekraczać 1 s. Jeżeli odstęp ten będzie większy od podanej
warto
ści, urządzenie odbierające dane sygnalizuje błąd.
2
Ramka w trybie RTU
W trybie RTU wiadomo
ści rozpoczynaj się odstępem czasowym trwającym minimum 3.5 x (czas trwania
pojedynczego znaku), w którym panuje cisza na
łączu. Najprostszą implementacją wymienionego interwału
czasowego jest wielokrotne odmierzanie czasu trwania znaku przy zadanej szybko
ści bodowej przyjętej w łączu.
Pierwszym polem informacyjnym ramki jest adres urz
ądzenia. Dopuszczalnymi znakami transmitowanymi w ramach
pól ramki s
ą 0-9, A-F. Połączone w system urządzenia stale (łącznie z przedziałami ciszy) monitorują magistralę. Po
odebraniu zawarto
ści pola adresu urządzenia sprawdzaj, czy przesłany adres jest ich adresem własnym. Jeżeli tak, to
kontynuuj
ą interpretację pozostałych pól wchodzących w skład ramki.
Format ramki w trybie RTU
Ramk
ę kończy przerwa czasowa trwająca co najmniej 3.5 x (długości znaku). Po tym odstępie można wysłać następni
ramk
ę, traktując go jako jej przerwę początkową. Cała ramka musi zostać przesłana w postaci ciągłej, tzn. odstęp
pomi
ędzy kolejnymi znakami tworzącymi ramkę nie może być większy od 1.5 x (długości znaku). Jeżeli odstęp ten
przekroczy podan
ą wartość, to urządzenie odbierające uzna ramkę za niekompletną i następny znak przyjmie za bajt
pola adresowego kolejnej wiadomo
ści. Podobnie, jeżeli owa wiadomość pojawi się na magistrali przed upływem
koniecznej przerwy (3.5 x d
ługość znaku)), to urządzenie odbierające potraktuje ją jako kontynuację poprzedniej
wiadomo
ści. To doprowadzi do błędu sumy kontrolnej, ponieważ urządzenie odbierające będzie obliczać CRC dwóch
wiadomo
ści i porównywać go z CRC drugiej.
Charakterystyka pól ramki
Pole adresowe
Pole adresowe w ramce zawiera dwa znaki (w trybie ASCII) lub osiem bitów (w trybie RTU). Zakres adresów
jednostek slave wynosi 0 - 247. Master adresuje jednostk
ę slave umieszczając jej adres na polu adresowym ramki.
Kiedy jednostka slave wysy
ła odpowiedź, umieszcza swój własny adres na polu adresowym ramki, co pozwala
masterowi sprawdzi
ć, z którą jednostką realizowana jest transakcja. Adres 0 jest wykorzystywany jako adres
rozg
łoszeniowy, rozpoznawany przez wszystkie jednostki slave podłączone do magistrali.
Pole funkcji
Pole funkcji w ramce zawiera dwa znaki w trybie ASCII lub osiem bitów w trybie RTU. Zakres kodów operacji 1 - 255.
Przy transmisji polecenia z jednostki master do slave, pole funkcji zawiera kod rozkazu, okre
ślający działanie, które
ma podj
ąć jednostka slave na żądanie mastera. Przykładowymi rozkazami mogą być: rozkaz odczytu zespołu
rejestrów, odczyt statusu, zapis rejestrów w jednostce slave,
ładowanie, odczytywanie lub weryfikacja programu
jednostki slave. Kiedy jednostka slave odpowiada masterowi, pole funkcji wykorzystuje do potwierdzenia wykonania
polecenia lub sygnalizacji b
łędu, jeżeli z jakiś przyczyn nie może wykonać rozkazu. Potwierdzenie pozytywne
realizowane jest poprzez umieszczenie na polu funkcji kodu wykonanego rozkazu. W przypadku stwierdzenia b
łędu,
jednostka slave umieszcza na polu funkcji "szczególn
ą odpowiedź" (exception response), którą stanowi kod funkcj i z
ustawionym na 1 najstarszym bitem. Na przyk
ład, plecenie (z mastera do jednostki slave) odczytu zespołu rejestrów
posiada kod funkcji 0000 0011 (03h). Je
żeli jednostka slave wykona rozkaz, w swojej odpowiedzi zwraca tą sami
warto
ść na polu funkcji. Jeżeli wykryje błąd, zwróci 1000 0011 (83h). Oprócz "szczególnej odpowiedzi" sygnalizującej
b
łąd, jednostka slave umieszcza kod błędu na polu danych ramki odpowiedzi. Pozwala to masterowi określić rodzaj
lub powód b
łędu. Program wykonywany przez jednostkę master jest odpowiedzialny za obsługę błędów. Typową
reakcji na wyst
ąpienie błędu jest powtórzenie ramki polecenia, odczyt informacji statusowych umożliwiających
diagnostyk
ę błędów, powiadomienie operatora.
Pole danych
Pole danych tworzy zestaw dwucyfrowych liczb heksadecymalnych, o zakresie 00 - FF. Liczby te pozy transmisji w
trybie ASCII reprezentowane s
ą dwoma makami, a przy transmisji w trybie RTU jednym. Pole danych ramki polecenia
zawiera dodatkowe informacje potrzebne: jednostce slave do wykonania rozkazu okre
ślonego kodem funkcji. Mogą to
by
ć adresy rejestrów, liczba bajtów w polu danych, dane itp. Na przykład, jeżeli master żąda odczytu grupy rejestrów
(kod funkcji 03) , pole danych zawiera nazw
ę (adres) rejestru początkowego oraz ilość rejestrów do odczytu. Przy
operacji zapisu grupy rejestrów (kod funkcji lOh), na polu danych znajduj
ą się następujące informacje: adres rejestru
pocz
ątkowego, ilość rejestrów, ilość pozostałych bajtów w polu danych, dane przeznaczone do zapisu. Jeżeli nie
wyst
ąpi błąd, pole danych odpowiedzi zawiera żądane informacje. Wykrycie błędu powoduje zapisanie przez
jednostk
ę slave kodu błędu na polu danych ramki odpowiedzi, co umożliwia adekwatni reakcję mastera. W niektórych
ramkach polecenia pole danych mo
że posiadać zerowi, długość. Tak jest zawsze w sytuacji, gdy operacja określona
kodem funkcji
3
Pole kontrolne
W standardzie MODBUS s
łowo kontrole zabezpieczające część informacyjną zależy od zastosowanego trybu
transmisji. W trybie ASCII pole kontrolne sk
łada się z dwóch znaków ASCII, które są rezultatem obliczenia
Longitudinal Redundancy Check (LRC) na zawarto
ści części informacyjnej ramki (bez znaczników początku i końca).
Znaki LRC s
ą dołączane do wiadomości jako ostatnie pole ramki, bezpośrednio przed znacznikiem końca (CR, LF). W
trybie RTU s
łowo kontrolne jest 16-bitowe i powstaje jako rezultat obliczenia Cyclical Redundancy Check (CRC) na
zawarto
ści ramki. Pole kontrolne zajmuje dwa bajty dołączane na końcu ramki. Jako pierwszy przesyłany jest mniej
znacz
ący bajt, jako ostatni starszy bajt, który jest jednocześnie znakiem kończącym ramkę. Zasady obliczania słów
kontrolnych w obu trybach transmisji przedstawiono w punkcie "Generacja LRC/CRC".
Generacja s
łów zabezpieczających LRC i CRC
Wyznaczanie LRC
O
śmiobitowa wartość LRC obliczana jest przez urządzenie nadające, które dołącza ją do wiadomości i przesyła na
ko
ńcu ramki w postaci dwóch znaków ASCII. Urządzenie odbierające oblicza LRC podczas odbioru ramki i porównuje
wyznaczon
ą przez siebie wartość ze słowem kontrolnym w ramce odebranej. Jeżeli obie wartości są różne to znaczy
że wystąpił błąd. Obliczanie LRC polega na sumowaniu kolejnych 8-bitowych bajtów wiadomości, odrzuceniu
przeniesie
ń i na koniec wyznaczeniu uzupełnienia dwójkowego wyniku. Sumowanie obejmuje całą wiadomość za
wyj
ątkiem znaczników początku i końca ramki.
Wyznaczanie CRC
S
łowo kontrolne CRC stanowi 16-bitowi wartość wyznaczaną przez urządzenie nadające, które dołącza ją na końcu
ramki w postaci dwóch 8-bitowych znaków. Urz
ądzenie odbierające dokonuje analogicznego obliczenia podczas
odbioru ramki i porównuje wyznaczon
ą przez siebie wartość z odebranym słowem kontrolnym CRC. Jeżeli obie
warto
ści są różne, to znaczy że wystąpił błąd. Obliczanie CRC realizowane jest według następującego algorytmu:
•
Za
ładowanie FFFFh do 16-bitowego rejestru CRC.
•
Pobranie bajtu z bloku danych (zabezpieczana wiadomo
ść) i wykonanie operacji EXOR z młodszym bajtem
rejestru CRC (CRCLO). Umieszczenie rezultatu w rejestrze CRC.
•
Przesuni
ęcie zawartości rejestru CRC w prawo o jeden bit połączone z wpisaniem 0 na najbardziej znaczący
bit (MSB=0).
•
Sprawdzenie stanu najm
łodszego bitu (LSB) w rejestrze CRC. Jeżeli jego stan równa się 0, to następuje
powrót do kroku 3 (kolejne przesuni
ęcie) , jeżeli 1, to wykonywana jest operacja EXOR rejestru CRC ze stałą
AOOlh.
•
Powtórzenie kroków 3 i 4 osiem razy, co odpowiada przetworzeniu ca
łego bajtu (ośmiu bitów).
•
Powtórzenie sekwencji 2, 3, 4, 5 dla kolejnego bajtu wiadomo
ści. Kontynuacja tego procesu aż do
przetworzenia wszystkich bajtów wiadomo
ści.
•
Zawarto
ść CRC po wykonaniu wymienionych operacji jest poszukiwaną wartością CRC.
Zwarto
ść rejestru CRC po realizacji przedstawionego algorytmu stanowi słowo kontrolne CRC, które dołączane jest
na ko
ńcu ramki i przesyłane w dwóch bajtach (tryb RTU). Wyliczanie CRC jest stosunkowo złożone i trwa długo,
szczególnie przy du
żym rozmiarze zabezpieczanego pola informacyjnego. Istnieje jednak szybszy sposób
wyznaczania s
łowa CRC, który polega na umieszczeniu wartości CRC w dwóch tablicach (256-elementowa tablica
warto
ści CRCLO i 256-elementowa tablica wartości CRCHI) oraz określeniu wskaźników do wspomnianych tablic na
podstawie zawarto
ści bloku danych. Prawdziwa trudność polega na właściwym przygotowaniu wspomnianych tablic,
wyznaczenie wska
źników realizowane jest przez prosty program. Przykład obliczania słowa kontrolnego CRC oparty
na tablicach znale
źć można w [10].
Format znaku przy transmisji szeregowej
W standardzie MODBUS znaki s
ą przesyłane szeregowo od najmłodszego do najstarszego bitu.
Organizacja jednostki informacyjnej w trybie ASCII:
•
1 bit startu,
•
7 bitów pola danych, jako pierwszy wysy
łany jest najmniej znaczący bit,
•
1 bit kontroli parzysto
ści (nieparzystości) lub brak bitu kontroli parzystości,
•
1 bit stopu przy kontroli parzysto
ści lub 2 bity stopu przy braku kontroli parzystości.
4
Zasada wypracowywania bitu kontroli parzysto
ści w jednostce informacyjnej jest następująca:
•
Kontroli parzysto
ści (even parity) - bit posiada wartość 1, jeżeli ilość jedynek na polu danych jest nieparzysta
oraz 0, je
żeli ilość jedynek jest parzysta.
•
Kontrolce nieparzysto
ści (odd parity) - bit posiada wartość 1, jeżeli ilość jedynek na polu danych jest parzysta
oraz 0, je
żeli ilość jedynek jest nieparzysta.
Organizacja jednostki informacyjnej w trybie RTLJ:
•
1 bit startu,
•
8 bitów pola danych, jako pierwszy wysy
łany jest najmniej znaczący bit,
•
1 bit kontroli parzysto
ści (nieparzystości) lub brak bitu kontroli parzystości,
•
1 bit stopu przy kontroli parzysto
ści lub 2 bity stopu przy braku kontroli parzystości.
Pole danych znaku mo
że być (opcjonalnie) zabezpieczone bitem kontroli parzystości lub nieparzystości. Wspomniane
wcze
śniej zabezpieczenie LRC lub CRC dotyczy całej treści ramki. Oba zabezpieczenia, tzn. zabezpieczenie znaku
oraz ca
łej ramki, generowane są przez urządzenie nadające i dołączane do wiadomości przed transmisją. Urządzenie
odbieraj
ące sprawdza bit parzystości znaku (o ile występuje) oraz słowo kontrolne.
ASCII
START
1
2
3
4
5
6
7
PAR
STOP
START
1
2
3
4
5
6
7
STOP
STOP
RTU
START
1
2
3
4
5
6
7
8
PAR
STOP
START
1
2
3
4
5
6
7
8
STOP
STOP
Przerwanie transakcji
W jednostce master u
żytkownik ustawia ważny parametr jakim jest "maksymalny czas odpowiedzi na ramkę
zapytania", po którego przekroczeniu transakcja jest przerywana. Czas ten dobiera si
ę tak, aby każda jednostka slave
pracuj
ąca w systemie (nawet ta najwolniejsza zdążyła normalnie odpowiedzieć na ramkę zapytania. Przekroczenie
tego czasu
świadczy zatem o błędzie i tak też jest traktowane przez jednostkę master. Jeżeli jednostka slave wykryje
b
łąd transmisji, nie wykonuje polecenia oraz nie wysyła żadnej odpowiedzi. Spowoduje to przekroczenie czasu
oczekiwania na ramk
ę odpowiedzi i przerwanie transakcji. Program realizowany w jednostce master powinien w takiej
sytuacji przej
ść do obsługi błędu. W szczególności przerwanie transakcji powoduje zaadresowanie nie istniejącego
urz
ądzenia slave.
Funkcje w interfejsie MODBUS
Producenci sterowników przemys
łowych wyposażonych w kontrolery interfejsu MODBUS opracowali dla
wykonywanych przez siebie urz
ądzeń wiele funkcji (rozkazów zdalnych), których zadaniem jest realizacja wymiany
danych pomi
ędzy jednostką master a urządzeniem slave. W ramce polecenia znajduje się adres urządzenia slave
(07h), do którego jest ono skierowane, kod funkcji (04h) oraz jej argumenty (adres rejestru pocz
ątkowego 0003h oraz
ilo
ść rejestrów w grupie 0002h) znajdujące się na polu danych ramki. Na początku ramki odpowiedzi urządzenie slave
umieszcza swój adres (07h), po którym nast
ępuje kod wykonanej funkcji (04h) oraz dane stanowiące zawartość
odczytywanych rejestrów (O8Clh, 5A3Bh). Podstawowymi funkcjami w interfejsie MODBUS s
ą:
•
odczyt stanu wybranego wej
ścia dwustanowego
•
odczyt stanu wybranego wyj
ścia dwustanowego
•
odczyt zawarto
ści grupy rejestrów,
•
ustawienie (ONJOFF) wybranego wyj
ścia dwustanowego,
•
ustawienie (ONJOFF) grupy wyj
ść dwustanowych,
•
zapis warto
ści początkowej do rejestru,
•
zapis warto
ści początkowej do grupy rejestrów,
•
odczyt rejestru statusu urz
ądzenia slave,
•
odczyt licznika komunikatów.
5
POLECENIE
Nazwa pola
Przyk
ład
TRYB ASCII
TRYB RTU
(hex)
(znaki)
(8-bitowe pole)
Znacznik pocz
ątku
brak znacznika
Adres slave
7
0 7
0000 0111
Kod funkcji
4
0 4
0000 0100
Adres pocz
ątkowy HI
0
0 0
0000 0000
Adres pocz
ątkowy LO
3
0 3
0000 0011
Ilo
ść rejestrów HI
0
0 0
0000 0000
Ilo
ść rejestrów LO
2
0 2
0000 0010
S
łowo kontrolne
LRC (2 znaki)
CRC (16 bitów)
Znacznik ko
ńca
CR LF
brak znacznika
Ca
łkowita ilość bajtów:
17
8
ODPOWIED
Ź
Nazwa pola
Przyk
ład
TRYB ASCII
TRYB RTU
(hex)
(znaki)
(8-bitowe pole)
Znacznik pocz
ątku
brak znacznika
Adres slave
7
0 7
0000 0111
Kod funkcji
4
0 4
0000 0100
Ilo
ść bajtów
4
0 4
0000 0100
Dane: rejestr 1 HI
8
0 8
0000 1000
Dane: rejestr 1 LO
C1
C 1
1100 0001
Dane: rejestr 2 HI
5A
5 A
01011010
Dane: rejestr 2 LO
3E
3 E
0011 1110
S
łowo kontrolne
LRC (2 znaki)
CRC (16 bitów)
Znacznik ko
ńca
CR LF
brak znacznika
Ca
łkowita ilość bajtów:
19
9