Interface szeregowy MODBUS

background image

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.

background image

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

background image

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.

background image

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.

background image

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


Wyszukiwarka

Podobne podstrony:
Interface szeregowy MODBUS
Program testujący dla wyświetlaczy VFD firmy Noritake z interfejsem szeregowym
#6 INTERFEJSY SZEREGOWE
AVT5351 Modul interfejsow szeregowych dla Arduino
Pytania dodatkowe na zajęcia laboratoryjne z KSPD, Budowa, właściwości i zastosowania pomiarowe inte
Interfejsy szeregowe RS232, PROFIBUS
Interface szeregowy PROFIBUS
INTERFEJSY SZEREGOWE
Interfejs szeregowy i równoległy
07 interfejsy szeregowe
Interfejsy szeregowe, ELEKTRONIKA I PROGRAMOWANIE, Mikroprocesory, programowanie Bascom, AVR,
INTERFEJSY SZEREGOWE, technika
Interfejsy szeregowe
USB Uniwersalny interfejs szeregowy komusb
USB Uniwersalny interfejs szeregowy komusb

więcej podobnych podstron