Opracowanie: mgr inż. Paweł Ilczyszyn, mgr inż. Paweł Dobrowolski
Katedra Inżynierii Systemów Sterowania
1. Wstęp
Celem ćwiczenia laboratoryjnego jest zapoznanie się z protokołem komunikacyjnym Modbus. W
czasie zajęć wykonywane i oceniane będą następujące zadania:
- Nawiązanie komunikacji poprzez protokół Modbus RTU, pomiędzy sterownikiem
programowalnym a programem Mtester.
- Komunikacja pomiędzy środowiskiem Matlab a sterownikiem programowalnym przy
wykorzystaniu protokołu Modbus RTU.
- Komunikacja pomiędzy środowiskiem Matlab a sterownikiem programowalnym przy
wykorzystaniu protokołu TCP/IP.
- Sterowanie obiektem z wykorzystaniem regulatora zaimplementowanego na sterowniku
programowalnym i komunikującego się po protokole Modbus .
Wszystkie powyższe zadania są szczegółowo opisane w dalszym rozdziałach instrukcji. Zadanie
czwarte w zależności od jakości wykonania może być ocenione na ocenę ponad bardzo dobrą.
2. Wprowadzenie
Modbus jest protokołem komunikacyjnym stworzonym przez firmę Modicon w 1979 roku.
Początkowo stworzony został w celu komunikacji ze sterownikami programowalnymi producenta,
jednakże w późniejszym czasie stał się otwartym protokołem. Modbus pomimo upływu długiego
czasu od powstania w dalszym ciągu jest stosunkowo często wykorzystywany w przemyśle. Dzieje
się tak ze względu na prostotę działania, otwartość protokołu oraz zasadzie dostępu dołącza „Master
– Slave”.
Komunikacja pomiędzy urządzeniami odbywa się asynchronicznie, z wykorzystaniem interfejsu RS-
232 lub zgodnych RS-422, RS-485.
Protokół modbus zajmuje trzy warstwy w 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.
2.1 Tryby transmisji.
Protokół Modbus umożliwia komunikację za pomocą dwóch typów ramek:
Tryb ASCII (znakowy)
Każdy bajt w wiadomości wysyłany jest w postaci dwóch znaków ASCII
Rysunek1 Ramka protokołu Modbus - tryb ASCII.
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.
Rysunek2 Ramka protokołu Modbus - tryb RTU.
Szczegółowy opis ramki (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.
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
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.
W przypadku sterowników firmy GE-Fanuc, występują następujące zależności pomiędzy obszarami
pamięci, a kodowaniem danych w ramce:
%Qxxxx – numeracja od 0xxxx (np. %Q0001 – 00 000),
%Ixxxx – numeracja od 1xxxx (np. %I0001 – 10 000),
%AIxxxx – numeracja od 3xxxx (np. %AI0001 – 30 000),
%Rxxxx – numeracja 4xxxx (np. %R0001 – 40 000).
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.
Algorytm obliczania CRC:
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, umieszczenie rezultatu w rejestrze.
3) Przesunięcie zawartości rejestru w prawo o 1 bit oraz wpisanie 0 na najbardziej znaczący bit
(MSB).
4) Sprawdzenie stanu najmłodszego bitu (LSB) w rejestrze. Jeżeli stan równy jest 0 to następuje
powrót do punktu 3 (kolejne przesunięcie), jeżeli 1 to wykonywana jest operacja EXOR
rejestru ze stałą A001h.
5) Powtórzenie kroków 3) o 4) osiem razy (przetworzenie całego bajtu).
6) Powtórzenie sekwencji 2, 3, 4, 5 dla kolejnego bajtów wiadomości.
7) Zawartość rejestru po wykonaniu wszystkich powyższych kroków jest wartością CRC.
Rysunek4 Algorytm obliczania CRC.
Tryb RTU z wykorzystaniem TCP/IP
Rysunek 3 Ramka Modbus TCP/IP.
Ramka podobna jak w trybie RTU, lecz rozszerzona o parametry:
identyfikator transakcji – dwubajtowe pole identyfikujące zapytanie w celu powiązanie z
odpowiedzią. Najczęściej pozostawiane jako 0.
identyfikator protokoły – dwubajtowe pole zarezerwowane dla przyszłych rozszerzeń. Aktualnie
przyjmuje wartość 0.
Długość – dwubajtowe pole określające liczbę bajtów w komunikacie.
3. Zadania do wykonania
3.1 Zestawienie komunikacji programu Mtester ze sterownikiem programowalnym (transmisja
szeregowa).
Celem zadanie jest wykonanie następujących poleceń:
- zestawienie komunikacji pomiędzy programem Mtester i sterownikiem;
- zapisanie i odczytanie przykładowych wartości liczbowych w rejestry podane przez prowadzącego;
- przeanalizowanie struktury wysyłanych i odbieranych ramek.
Informacje pomocnicze:
Konfiguracja programu Mtester.
Mtester jest darmowym programem symulacyjnym służącym do badania komunikacji pomiędzy
komputerem PC a urządzeniem obsługującym protokół Modbus. Program ten działa jako master i
komunikuje się za pomocą portu szeregowego RS-232 bądź też RS-485.
W celu skonfigurowania połączenia należy przejść do zakładki „Modbus Settings” i podać parametry
zgodne z wcześniej użytymi na sterowniku programowalnym.
Port COM: zgodny z aktualnie używanym na komputerze,
Baud rate: 9600, Data bits: 8, Parity: none, Stop bits: 2,
Rysunek5 Konfiguracja programu Mtester.
Konfiguracja sterownika GE Fanuc serii 90-30 do pracy jako Modbus – Slave.
Należy skonfigurować sterownik programowalny. Następnie należy przejść do zakładki
odpowiedzialnej za konfigurację modułu CMM311 i ustawić tryb pracy RTU na porcie 2. Dalej, w
zakładce port 2 należy podać następujące parametry pracy:
Rodzaj transmisji: RS232
Prędkość: 9600
Flow control: none
Parity: none
Następnie należy fizycznie podłączyć przewód RS-232 pomiędzy portem 2 modułu CMM311 a portem
COM komputera, który będzie służył jako master.
3.2 Komunikacja pomiędzy środowiskiem Matlab, a sterownikiem programowalnym przy
wykorzystaniu portu szeregowego.
Wykorzystując środowisko Matlab napisać aplikację, która realizuje polecenia:
- Zestawienie połączenia ze sterownikiem programowalnym po porcie szeregowym RS-232(protokół
Modbus).
- Odczytanie i zapisanie dowolnej wartości pod rejestr i wyjście bitowe sterownika podane przez
prowadzącego. W celu realizacji tego zadania należy odpowiednio sformułować ramkę danych.
Informacje pomocnicze:
Sumę kontrolną CRC można obliczyć na stronie internetowej [1] bądź skorzystać z gotowego mpliku
dostarczonego do ćwiczenia.
Komendy wykorzystywane w środowisku Matlab
‘Serial’ – deklaracja parametrów portu szeregowego.
Główne parametry konfiguracyjne polecenia ‘serial’- numer portu, BaudRate, StopBits, Parity
‘Fopen’ – otwiera połączeni z portem, plikiem
‘Fwrite’ – wysyła dane do wskazanego portu, pliku
‘fread’ – odczytuje dane ze wskazanego portu, pliku
‘Fclose’ – zamyka połączenie z danym portem, plikiem
‘delete(instrfindall)’ – zamyka wszystkie otwarte porty przez środowisko Matlab
‘hex2dec’ – konwertuje wartość wyrażoną w systemie szesnastkowym na wartość dziesiętną
3.3 Komunikacja pomiędzy środowiskiem Matlab a sterownikiem programowalnym przy
wykorzystaniu protokołu TCP/IP.
Celem zadania jest:
- zestawienie połączenia pomiędzy środowiskiem Matlab, a programem mod_RSsim za pomocą
protokołu Modbus TCP/IP.
- Odczytanie i zapisanie dowolnej wartości pod rejestr i wyjście bitowe sterownika podane przez
prowadzącego.
- weryfikacja działania na sterowniku Pac RX3i.
Informacje pomocnicze:
Mod_RSsim jest programem symulacyjnym, który może zastąpić sterownik programowalny.
Głównym celem wykorzystania programy jest szybkie i bardzo proste testowanie komunikacji przy
wykorzystaniu protokołu Modbus. W przypadku braku obecności programu na komputerze możliwe
jest pobranie go ze strony autora [5].
Konfiguracja środowiska Matlab.
W celu korzystania z poleceń do komunikacji po protokole TCP/IP należy wykorzystać zewnętrzny
toolbox o nazwie ‘TCP/UDP/IP Toolbox’. Toolbox ten dostępny jest na stronie przedmiotu [6] bądź
autora [7]. Należy go pobrać a następnie rozpakować do dowolnego katalogu. Ważne jest aby mpliki,
które będą tworzone w ramach tego zadania również znajdowały się w folderze z rozpakowaną
biblioteką.
Komendy wykorzystywane w środowisku Matlab
con=pnet('tcpconnect','hostname',port) – inicjalizacja połączenia TCP/IP, gdzie ‘hostname’ – nazwa
lub adres stacji docelowej, port – numer portu po którym wykonywana będzie komunikacja
elements=pnet(con,'write', data [,swapping]) – polecenie służące do zapisy danych poprzez port
TCP/IP. Data – wysyłane dane, [ ] – dodatkowe parametry określające konwencje przesyłania danych
little endian bądź big endian.
pnet(con,'close') – plecenie służące do zakończenia transmisji.
Więcej poleceń i bardziej szczegółowe dane dostępne są po wywołaniu polecenia:’ help pnet’
Konfiguracja sterownika GE Fanuc serii Pac RX3i do pracy jako Modbus – Slave.
Po skonfigurowaniu sterownika programowalnego należy przejść do zakładki odpowiedzialnej za
ustawienia procesora. Później należy odszukać wewnętrzną zakładkę ‘Settings’ i przestawić opcję
‘Modbus Address Space Mapping Type’ zgodnie z poniższą ilustracją.
Rysunek6 Konfiguracja procesora sterownika Pac Rxi3.
W dalszej kolejności należy odszukać moduł komunikacyjny ETM001 i nadać odpowiedni adres IP z
zakresu od 192.168.1.2 do 192.168.1.99 oraz ustalić maskę podsieci 255.255.255.0.
Rysunek7 Konfiguracja modułu ETM001.
3.4 Sterowanie obiektem z wykorzystaniem regulatora zaimplementowanego na sterowniku
programowalnym i komunikującego się po protokole Modbus .
Celem zadania jest:
- Zamodelowanie prostego obiektu regulacji w środowisku Matlab, np. inercja.
- Zaprojektowanie i implementacja prostego regulatora po stronie sterownika programowalnego (np.
PID lub regulator dwu stanowy).
- Ustanowienie komunikacji pomiędzy obiektem i regulatorem. Komunikacja powinna odbywać się za
pomocą protokołu Modbus RTU lub Modbus TCP/IP.
4. Dodatek – szczegółowa specyfikacja ramek wysyłanych przez protokół Modbus [3].
1) Odczyt wyjść bitowych – funkcja 01h
2) Odczyt wejść cyfrowych – funkcja 02h
3) Odczyt n rejestrów – funkcja 03h
4) Odczyt n rejestrów wejściowych – funkcja 04h
5) Zapis 1 bitu – funkcja 05h
6) Zapis 1 rejestru – funkcja 06h
7) zapis n bitów – funkcja 0Fh
8) zapis n rejestrów – funkcja 10h
Bibliografia
[1] http://www.lammertbies.nl/comm/info/crc-calculation.html, Kalkulator CRC, dostęp z dnia
15.04.2012
[2] „Protokół Modbus” – dr inż. T. Rutkowski
[3] MODBUS APPLICATION PROTOCOL SPECIFICATION V1.1b, pobrane ze strony
http://www.Modbus-
IDA.org
[4] http://www.modbus.pl, strona autorów programu Mtester
[5] http://www.plcsimulator.org/, strona autorów programu Mod_RSsim
[6] http://www.ely.pg.gda.pl/kiss/dydaktyka/psi
[7] http://www.mathworks.com/matlabcentral/fileexchange/345, toolbox TCP/UDP/IP