background image

 

 

 

 

 

 

 

 

 

 

Opracowanie: mgr inż. Paweł Ilczyszyn, mgr inż. Paweł Dobrowolski 

 Katedra Inżynierii Systemów Sterowania 

 

background image

 

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.  

 

background image

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 

01h 

Odczyt wyjść bitowych 

02h 

Odczyt wejść bitowych 

03h 

Odczyt n rejestrów 

04h 

Odczyt n rejestrów wejściowych 

05h 

Zapis 1 bitu 

background image

06h 

Zapis 1 rejestru 

07h 

Odczyt statusu urządzenia slave 

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. 

background image

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. 

 

background image

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. 

background image

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 

background image

‘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’ 

background image

 

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. 

 

background image

 

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. 

 

 

 

 

background image

4. Dodatek – szczegółowa specyfikacja ramek wysyłanych przez protokół Modbus [3]. 

1) Odczyt wyjść bitowych – funkcja 01h 

 

 

 

 

2) Odczyt wejść cyfrowych – funkcja 02h 

 

background image

 

3) Odczyt n rejestrów – funkcja 03h 

 

 

 

4) Odczyt n rejestrów wejściowych – funkcja 04h 

 

 

background image

 

5) Zapis 1 bitu – funkcja 05h 

 

 

 

6) Zapis 1 rejestru – funkcja 06h 

 

 

 

 

background image

 

7) zapis n bitów – funkcja 0Fh 

 

 

 

 

 

 

 

 

 

 

background image

 

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