Protok c3 b3 c5 82+Modbus


Rozdział III
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",
" zabezpieczenie przesyłanych komunikatów przed błędami,
" potwierdzanie wykonania rozkazów zdalnych i sygnalizacja błędów,
" skuteczne mechanizmy zabezpieczające przed zawieszeniem systemu,
wykorzystanie asynchronicznej transmisji znakowej zgodnej z RS-232C.
3.1. 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 zapylania 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. Odpowiedz zawiera dane \ądane przez master lub potwierdzenie
realizacji jego polecenia. Na rysunku 3.1 przedstawiono transakcję jako cykl polecenie -
odpowiedz pomiędzy urządzeniem master i urządzeniem slavc.
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ść. Odpowiedz 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 odpowiedz 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 odpowiedz do mastera.
Przy transmisji w trybie ASCII stosuje się zabezpieczenie części informacyjnej ramki
kodem LRC (Longitudinal Redundancy Check).
Format ramki w trybie ASCII przedstawiono na rysunku 3.2. 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ązana z nią zawartość pola danych. Część
informacyjna ramki (bez znaku ":") zabezpiecza pole kontrolne LRC. Ramka kończy się
przesłaniem dwóch znaków: CR i LF.
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.
3.2.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. Najprostsza
implementacja wymienionego interwału czasowego jest wielokrotne odmierzanie czasu
trwania znaku przy zadanej szybkości bodowej przyjętej w łączu. Na rysunku 3.3
3.2. Ramka w systemie MODBUS
przedstawiającym format ramki w trybie RTU, odstęp początkowy zaznaczono symbolicznie
jako T1-T2-T3-T4, czyli równy czterem długościom znaku (jednostki informacyjnej).
W systemie MODBUS wiadomości są zorganizowane w ramki o określonym początku i
Pierwszym polem informacyjnym ramki jest adres urządzenia.
końcu. Pozwala to urządzeniu odbierającemu na odrzucenie ramek niekompletnych i
Dopuszczalnymi znakami transmitowanymi w ramach pól ramki są 0-9, A-F. Połączone
sygnalizację związanych z tym błędów. Ze względu na mo\liwość pracy w jednym z
w system urządzenia stale (łącznie z przedziałami ciszy) monitorują magistralę. Po
dwóch ró\nych trybów transmisji (ASCII lub RTU), definiuje się dwie ramki.
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.
3.2.1. Ramka w trybie ASCII
W trybie ASCII, ka\dy bajt w wiadomości przesyłany jest w postaci dwóch znaków
ASCII. Podstawowa zaleta 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 0-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.
Ramkę kończy przerwa czasowa trwająca conajmniej 3.5 x (długości znaku). Po tym Pole danych
odstępie mo\na wysłać następna ramkę, traktując go jako jej przerwę początkowa. Cała
ramka musi zostać przesłana w postaci ciągłej, tzn. odstęp pomiędzy kolejnymi znakami Pole danych tworzy zestaw dwucyfrowych liczb heksadccymalnych, o zakresie 00 - FF.
tworzącymi ramkę nic mo\e być większy od 1.5 x (długości znaku). Je\eli odstęp ten Liczby te przy transmisji w trybie ASCII reprezentowane są dwoma znakami, a przy
przekroczy podana wartość, to urządzenie odbierające uzna ramkę za niekompletno i transmisji w trybie RTU jednym.
następny znak przyjmie za bajt pola adresowego kolejnej wiadomości. Podobnie, je\eli Pole danych ramki polecenia zawiera dodatkowe informacje potrzebne jednostce slave
nowa wiadomość pojawi się na magistrali przed upływem koniecznej przerwy (3.5 x do wykonania rozkazu określonego kodem funkcji. Mogą to być adresy rejestrów, liczba
(długość znaku)), to urządzenie odbierające potraktuje ja jako kontynuację poprzedniej bajtów w polu danych, dane itp. Na przykład, je\eli master \ąda odczytu grupy rejestrów
wiadomości. To doprowadzi do błędu sumy kontrolnej, poniewa\ urządzenie odbierające (kod funkcji 03), pole danych zawiera nazwę (adres) rejestru początkowego oraz ilość
będzie obliczać CRC dwóch wiadomości i porównywać go z CRC drugiej. rejestrów do odczytu. Przy operacji zapisu grupy rejestrów (kod funkcji l0h), 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
3.23. Charakterystyka pól ramki Pole
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
adresowe adekwatna reakcję mastera.
W niektórych ramkach polecenia pole danych mo\e posiadać zerowa długość. Tak jest
Pole adresowe w ramce zawiera dwa znaki (w trybie ASCII) lub osiem bitów (w trybie zawsze w sytuacji, gdy operacja określona kodem funkcji nie wymaga \adnych parametrów.
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 odpowiedz,
Pole kontrolne
umieszcza swój własny adres na polu adresowym ramki, co pozwala masterowi sprawdzić,
z która jednostka realizowana jest transakcja.
W standardzie MODBUS słowo kontrole zabezpieczające część informacyjna zale\y od
Adres 0 jest wykorzystywany jako adres rozgłoszeniowy, rozpoznawany przez wszystkie
zastosowanego trybu transmisji.
jednostki slave podłączone do magistrali.
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
Pole funkcji (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).
Pole funkcji w ramce zawiera dwa znaki w trybie ASCII łub osiem bitów w trybie RTU. W trybie RTU słowo kontrolne jest 16-bitowc i powstaje jako rezultat obliczenia
Zakres kodów operacji 1 - 255. Cyclical Redundancy Check (CRC) na zawartości ramki. Pole kontrolne zajmuje dwa bajty
Przy transmisji polecenia z jednostki master do slavc, pole funkcji zawiera kod rozkazu, dołączane na końcu ramki. Jako pierwszy przesyłany jest mniej znaczący bajt, jako ostani
określający działanie, które ma podjąć jednostka slave na \ądanie mastera. Przykładowymi starszy bajt, który jest jednocześnie znakiem kończącym* ramkę. Zasady obliczania słów
rozkazami mogą być: rozkaz odczytu zespołu rejestrów, odczyt statusu, zapis rejestrów w kontrolnych w obu trybach transmisji przedstawiono w punkcie  Generacja LRC/CRC".
jednostce slave, ładowanie, odczytywanie lub weryfikacja programu jednostki slave.
Kiedy jednostka slavc odpowiada masterowi, pole funkcji wykorzystuje do potwierdzenia
3.3. Generacja słów zabezpieczających LRC i CRC 3.3.1.
wykonania polecenia lub sygnalizacji błędu, je\eli z jakiś przyczyn nic 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
Wyznaczanie LRC
polu funkcji  szczególna odpowiedz" (exccption response), która stanowi kod funkcji z
Ośmiobitowa wartość LRC obliczana jest przez urządzenie nadające, które dołączają do
ustawionym na 1 najstarszym bitem. Na przykład, plecenie (z mastera do jednostki slave)
wiadomości i przesyła na końcu ramki w postaci dwóch znaków ASCII. Urządzenie
odczytu zespołu rejestrów posiada kod funkcji 0000 0011 (03h).
odbierające oblicza LRC podczas odbioru ramki i porównuje wyznaczona przez siebie
Je\eli jednostka slave wykona rozkaz, w swojej odpowiedzi zwraca ta sama wartość na polu
wartość ze słowem kontrolnym w ramce odebranej. Je\eli obie wartości są ró\ne, to znaczy
funkcji. Je\eli wykryje błąd, zwróci 1000 0011 (83h).
\e wystąpił błąd.
Oprócz  szczególnej odpowiedzi" sygnalizującej błąd, jednostka slave umieszcza kod błędu
Obliczanie LRC polega na sumowaniu kolejnych 8-bitowych bajtów wiadomości,
na polu danych ramki odpowiedzi. Pozwala to masterowi określić rodzaj lub powód błędu.
odrzuceniu przeniesień i na koniec wyznaczeniu uzupełnienia dwójkowego wyniku.
Program wykonywany przez jednostkę master jest odpowiedzialny za obsługę błędów.
Sumowanie obejmuje całą wiadomość za wyjątkiem znaczników początku i końca ramki.
Typowa reakcja na wystąpienie błędu jest powtórzenie ramki polecenia, odczyt informacji
Poni\ej przedstawiono procedurę obliczania LRC zapisaną w języku C.
statusowych umo\liwiających diagnostykę błędów, powiadomienie operatora.
/*Funkcja lrcgen wyliczająca bajt kontrolny LRC, parametry funkcji:*/
/*fptr - wskaznik do bufora wiadomości, nb - ilość bajtów w buforze*/
char lrcgen (fptr,nb) /*funkcja zwraca jeden bajt*/
unsigned char *fptr;
unsigned nb;
{
unsigned char lrc, sum = 0;
while (nb--)
sum += *fptr++; /*sumowanie kolejnych bajtów bez przeniesień*/
lrc = ~sum + 1; /*uzupełnienie do 2*/
return (lrc); }
3.3.2. Wyznaczanie CRC
Słowo kontrolne CRC stanowi 16-bitowa wartość wyznaczana przez urządzenie nadające,
które dołącza ja na końcu tamki w postaci dwóch 8-bitowych znaków. Urządzenie
odbierające dokonuje analogicznego obliczenia podczas odbioru ramki i porównuje
wyznaczona 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:
1. Załadowanie FFFFh do 16-bitowego rejestru CRC.
2. Pobranie bajtu z bloku danych (zabezpieczana wiadomość) i wykonanie operacji
EXOR z młodszym bajtem rejestru CRC (CRCLO). Umieszczenie rezultatu w
rejestrze CRC.
3. Przesuniecie zawartości rejestru CRC w prawo o jeden bit połączone z wpisaniem 0
na najbardziej znaczący bit (MSB=0).
4. Sprawdzenie stanu najmłodszego bilu (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ła A00lh.
5. Powtórzenie kroków 3 i 4 osiem razy, co odpowiada przetworzeniu całego bajtu
(ośmiu bitów).
6. Powtórzenie sekwencji 2, 3,4, 5 dla kolejnego bajtu wiadomości. Kontynuacja tego
procesu a\ do przetworzenia wszystkich bajtów wiadomości.
7. Zawartość CRC po wykonaniu wymienionych operacji jest poszukiwana wartością
CRC.
Zawartość 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). Na
rysunku 3.4 przedstawiono schemat blokowy procedury wyznaczania sumy kontrolnej CRC.
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
wskazników do wspomnianych tablic na podstawie zawartości bloku danych. Prawdziwa
trudność polega na właściwym przygotowaniu wspomnianych tablic, wyznaczenie
wskazników realizowane jest przez prosty program, który wykonuje się w czasie znacznie
krótszym ni\ procedura przedstawiona na rysunku 3.4. Przykład obliczania słowa
kontrolnego CRC oparty na tablicach znalezć mo\na w [10].
Pole danych znaku mo\e być (opcjonalnie) zabezpieczone bitem kontroli parzystości lub
3.4. Format znaku przy transmisji szeregowej
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
W standardzie MODBUS znaki są przesyłane szeregowo od najmłodszego do
urządzenie nadające i dołączane do wiadomości przed transmisjo. Urządzenie odbierające
najstarszego bitu.
sprawdza bit parzystości znaku (o ile występuje) oraz słowo kontrolne.
Organizacja jednostki informacyjnej w trybie ASCII:
" 1 bit startu,
3.5. Przerwanie transakcji
" 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,
W jednostce master u\ytkownik ustawia wa\ny parametr jakim jest  maksymalny czas
I bit stopu przy kontroli parzystości lub 2 bity stopu przy braku kontroli
odpowiedzi na ramkę zapytania", po którego przekroczeniu transakcja jest przerywana. Czas
parzystości.
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
Zasada wypracowywania bitu kontroli parzystości w jednostce informacyjnej jest
zatem o błędzie i tak te\ jest traktowane przez jednostkę master.
następująca:
Je\eli jednostka slavc wykryje błąd transmisji, nie wykonuje polecenia oraz nie wysyła
" Kontrola parzystości (even parity) - bit posiada wartość 1, je\eli ilość jedynek na
\adnej odpowiedzi. Spowoduje to przekroczenie czasu oczekiwania na ramkę odpowiedzi i
polu danych jest nieparzysta oraz 0, je\eli ilość jedynek jest parzysta.
przerwanie transakcji. Program realizowany w jednostce master powinien w takiej sytuacji
" Kontrola nieparzystości (odd parity) - bit posiada wartość 1, je\eli ilość jedynek na
przejść do obsługi błędu. W szczególności przerwanie transakcji powoduje zaadresowanie
polu danych jest parzysta oraz 0, je\eli ilość jedynek jest nieparzysta.
nie istniejącego urządzenia slave.
Organizacja jednostki informacyjnej w trybie RTU:
" 1 bit startu,
" 8 bitów pola danych, jako pierwszy wysyłany jest najmniej znaczący bit, 3.6. Funkcje w interfejsie MODBUS
" 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.
Producenci sterowników przemysłowych wyposa\onych w kontrolery interfejsu
MODBUS opracowali dla wykonywanych przez siebie urządzeń wiele funkcji (rozkazów
Na rysunku 3.5 przedstawiono format jednostki informacyjnej w trybie ASCII oraz RTU.
zdalnych), których zadaniem jest realizacja wymiany danych pomiędzy jednostka master a
urządzeniem slavc. Na rysunku 3.6 przedstawiono przykład funkcji umo\liwiającej zdalny
odczyt grupy rejestrów wejściowych urządzenia slave o adresie 07h zdefiniowanej dla
rodziny sterowników Modicon 384.
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 (08Clh, 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 (ON/OFF) wybranego wyjścia dwustanowego,
" ustawienie (ON/OFF) 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.


Wyszukiwarka