Strona główna ASTOR
Dla użytkowników produktów ASTOR

Komunikacja Modbus RTU – konfiguracja i przykładowa aplikacja w środowisku Codesys, część 1
Kurs obsługi i konfiguracji serwonapędów Astraada

Kontakt w sprawie artykułu: Rafał Pilch - 2023-09-09

Z tego artykułu dowiesz się:

  • jak przygotować serwonapęd Astraada SRV do komunikacji w protokole Modbus RTU,
  • jak skonfigurować komunikację Modbus RTU w środowisku Codesys,
  • jak skonfigurować pracę w trybie sterowania pozycją oraz w trybie sterowania prędkością.

To już czwarty odcinek naszego kursu. W poprzednim odcinku dowiedziałeś się, w jaki sposób komunikować się z serwonapędem za pomocą protokołu EtherCAT. Natomiast w tej części nauczysz się konfigurować komunikację poprzez protokół Modbus RTU.

Powszechnie znany Modbus jest protokołem opracowanym specjalnie do zastosowań przemysłowych oraz opiera się na zdefiniowanych rejestrach i odwoływaniu się do nich. Modbus występuje w wersji szeregowej RTU i sieciowej TCP. W tym odcinku będziemy wykorzystywać Modbus RTU, będący asynchronicznym protokołem master-slave, pozwalającym na dwukierunkową komunikację kilkuset urządzeń, połączonych w jednej sieci.

Modbus RTU Master to urządzenie inicjujące transmisję i wysyłające zapytania do urządzeń typu slave. W sieci Modbus RTU funkcję master może pełnić tylko jedno urządzenie, które komunikuje się
z urządzeniami slave w trybie dwuprzewodowego RS-485.

Modbus RTU Slave to urządzenia odpowiadające na zapytania wysyłane przez urządzenia master.
W sieci Modbus RTU może pracować kilkaset urządzeń slave.

Architektura protokołu Modbus RTU

Komunikacja urządzenia nadrzędnego (master) z urządzeniami podrzędnymi (slave’ami) przebiega dzięki dwuprzewodowemu standardowi transmisji danych RS-485. W tym celu przekazywanie informacji odbywa się przy pomocy linii DATA+, DATA- oraz GND. Master zarządza siecią tak, aby komunikacja przebiegała sprawnie.

Schemat architektury protokołu Modbus RTU. Źródło: ASTOR

W przypadku, gdy wywoływane urządzenie nie odpowiada, jednostka nadrzędna zgłasza błąd komunikacji ze slave’m i przechodzi do odpytywania urządzenia o innym identyfikatorze, będącego następnym w kolejce.

Przygotowanie wzmacniacza do komunikacji w protokole Modbus RTU, ustawienie parametrów komunikacyjnych

Parametry komunikacyjne można ustawić przy pomocy przycisków i wyświetlacza, znajdujących się na serwowzmacniaczu. W celu przygotowania wzmacniacza do komunikacji po protokole Modbus RTU powinniśmy skupić się na poniższych aspektach.

Ustawianie parametrów komunikacyjnych łącza RS485 w serwowzmacniaczu

ParametrWartość
P4.01Adres w protokole Modbus RTU
P4.03Prędkość transmisji: wartość 0 oznacza 9600 bpswartość 1 oznacza 19200 bpswartość 2 oznacza 38400 bpswartość 3 oznacza 57600 bps
P4.04Pozostałe parametry transmisji: wartość 0 oznacza 8/N/1wartość 1 oznacza 8/E/1wartość 2 oznacza 8/O/1

Zezwolenie na sterowanie z poziomu Modbus RTU

ParametrNazwaAdres Modbus RTU (Holding Register)Wartość, opis
P4.10Źródła sterowania1821Wartość 1 oznacza wybranie Modbus RTU jako źródło sterowania
P0.40Źródło zadawania prędkości1081Wartość 2 oznacza zadawanie w protokole Modbus RTU
P0.60Źródło zadawania momentu siły1121Wartość 2 oznacza zadawanie w protokole Modbus RTU

Załączenie osi z poziomu Modbus RTU

Załączenie osi z użyciem protokołu Modbus RTU może być użyte w celach testowych. Ze względów bezpieczeństwa zaleca się docelowo załączanie serwonapędu sygnałem elektrycznym.

ParametrNazwaAdres Modbus RTU (Holding Register)Wartość, opis
P4.11Polecenie załączania osi18230 = wyłącz 1 = załącz

Konfigurowanie komunikacji Modbus RTU w środowisku Codesys

Pierwszym krokiem od którego powinniśmy zacząć, jest stworzenie nowego projektu
w środowisku Codesys. Następnie dodaj do niego swój sterownik i wybierz język Ladder Logic Diagram (LD). Język drabinkowy nie jest wyborem obligatoryjnym, gdyż w późniejszym etapie pisania aplikacji możesz go zmienić. Co więcej, Twoja aplikacja może zostać napisana w kilku językach jednocześnie.

Pamiętaj o dodaniu pliku deskrypcyjnego do obsługi serwonapędów Astraada SRV w celu poprawnego skonfigurowania połączenia. Jeżeli jeszcze nie konfigurowałeś serwonapędów Astraada SRV w oprogramowaniu Codesys, wybierz polecenie Tool -> Device Repository i wskaż lokalizację pobranego pliku (np.Astraada_SRV_CoE_V106.xml). W razie napotkania problemów skorzystaj z kursu, który pomoże Ci podłączyć i przygotować Codesys do pracy ze sterownikiem PLC.

Następnie w celu uaktywnienia w sterowniku Astraada One obsługi protokołu Modbus RTU, kliknij prawym przyciskiem myszy w drzewku projektu na Device i zaznacz polecenie Add Device.

W następnej kolejności w polu Vendor wybierz <All vendors> i rozwiń listę, która pozwoli Ci przejść do Modbus COM. Zatwierdź wybór poprzez dwukrotne kliknięcie lewym przyciskiem myszy lub dzięki przyciskowi Add Device.

Podobnie jak w punkcie 2 kliknij opcję Add Device, jednak po wcześniejszym wybraniu Modbus_COM. Po chwili ujrzysz okno, w którym możesz wybrać urządzenie nadrzędne z zakładki Modbus Serial Master – wybierz Modbus Master, COM Port. Dodaj je do projektu.

Analogicznie dodaj urządzenie Modbus Slave po wcześniejszym wybraniu Add Device na naszym nowo stworzonym Masterze.

Kolejnym krokiem jest ustawienie pożądanych parametrów portu szeregowego. Przejdźmy więc do jego konfiguracji. Z drzewka projektu wybierz Modbus_COM (Modbus COM). W przykładzie urządzenie Slave ma następujące parametry: RS485, prędkość 19200, brak parzystości, 8 bitów danych i 1 bit stopu.

UWAGA! Jeśli zaobserwujesz błąd komunikacji w postaci pomarańczowego trójkąta przy Modbus_Slave_COM, pamiętaj, aby powrócić do tego punktu i skonfigurować parametry w zależności od Twojego urządzenia.

Następnie przejdźmy do Modbus_Master_COM_Port (Modbus Master, COM Port). Będąc w zakładce General ustawiamy w Response timeout(ms) czas odpowiedzi na zapytanie, natomiast w Time between frames(ms) – czas pomiędzy kolejnymi zapytaniami. W tym miejscu musimy również zwrócić uwagę na Auto-restart communication – ta opcja odpowiada za automatyczne ponawianie próby połączenia w przypadku zerwania komunikacji. Zaznaczamy ją.

Z kolei wybieramy Modbus_Slave_COM_Port (Modbus Slave,COM Port), a następnie zakładkę General i wybieramy odpowiedni adres urządzenia podrzędnego.

UWAGA! Jeśli zaobserwujesz błąd komunikacji w postaci pomarańczowego trójkąta przy Modbus_Slave_COM, pamiętaj, aby powrócić do tego punktu i skonfigurować adres
w zależności od Twojego urządzenia.

W Modbus Slave Channel mamy możliwość wybrania zmiennych służących do zapisu lub odczytu. Najpierw jednak zapoznaj się z trybami, w jakich serwonapęd w komunikacji Modbus RTU może pracować.

Praca w trybie sterowania prędkością

W trybie ruchu z zadaną prędkością zmiany prędkości realizowane są zgodnie z zadanym przyspieszeniem. W celu uruchomienia serwonapędu do pracy w tym trybie wykonaj kroki na podstawie poniższych tabel. Pozwoli Ci ona również ustawić parametry w sposób ręczny.

Zezwolenie na sterowanie z poziomu Modbus RTU

ParametrNazwaAdres Modbus RTU (Holding Register)Wartość, opis
P4.10Źródło sterowania1821Wartość 1 oznacza wybranie Modbus RTU jako źródło sterowania
P0.40Źródło zadawania prędkości1081Wartość 2 oznacza zadawanie w protokole Modbus RTU
P0.60Źródło zadawania momentu siły1121Wartość 2 oznacza zadawanie w protokole Modbus RTU

Załączenie osi z poziomu Modbus RTU

ParametrNazwaAdres Modbus RTU (Holding Register)Wartość, opis
P4.11Polecenie załączenia osi18230 = wyłącz 1 = załącz

Zadawanie parametrów w trybie sterowania prędkością

Parametr          NazwaAdres Modbus RTU (Holding Register)Wartość, opis
P0.03Ustawiony tryb sterowania10070 = pozycją 1 = prędkością 2 = momentem siły   W przypadku zmiany parametr ten musi zostać zapisany do pamięci nieulotnej, a następnie powinno zostać ponownie załączone zasilanie serwonapędu.
P4.13Zadana prędkość [rpm]1827Zależnie od znaku wpisanej wartości, ruch osi odbędzie się odpowiednim kierunku. Wpisanie zera spowoduje zatrzymanie osi.

Opcjonalnie można też nałożyć ograniczenie dla momentu siły. Należy pamiętać, że przy zbyt małym momencie siły, pewne prędkości nie będą mogły zostać osiągnięte lub oś w ogóle może nie ruszyć.

Parametr                NazwaAdres Modbus RTU (Holding Register)Wartość, opis
P0.09Zezwolenie na ograniczanie momentu siły1019Po wpisaniu wartości 1 do P0.09 serwonapęd będzie reagował na ograniczanie momentu siły parametrem P0.10.
P0.10Zadany limit momentu siły [%]1021Wprowadzona wartość momentu siły nie będzie przekraczana podczas pracy serwonapędu.

Opcjonalnie można również określić sposób rozpędzania i hamowania osi (czasy wpływające na wartość przyspieszenia).

Parametr                NazwaAdres Modbus RTU (Holding Register)Wartość, opis
P0.54Czas rozpędzania [ms]1109Czas na rozpędzenie osi od zera do prędkości znamionowej.
P0.55Czas hamowania [ms]1111Czas na zahamowanie osi z prędkości znamionowej do zera.

Następnie dodajmy powyższe zmienne, które odczytamy w celu sprawdzenia poprawności komunikacji.  Dla podstawowej aplikacji służącej do sterowania prędkością będzie to Polecenie załączenia osi oraz Zadana prędkość [rpm]. Wybierz, więc przycisk Add Channel, aby je zadeklarować.
W celu lepszego rozróżniania na końcu nazwy przykładowo dodam wyrażenie „_o”. Do odczytu rejestrów wykorzystamy funkcję 3 protokołu Modbus. Długość odczytywanych rejestrów ustawiamy na 2 i w polu Offset (READ Register) ustawiamy rejestr niższy o jeden (np. 1822, po zapisaniu wartość zmieni się na heksadecymalną). W wyniku tego, będzie możliwa widoczna komunikacja z naszym serwonapędem. W polu Trigger pozostawiamy wielkość Cyclic. Dzięki niej zapytania będą wysyłane cyklicznie co 100 ms. W razie wystąpienia problemu z połączeniem naszego urządzenia podrzędnego (symbolizowanego pomarańczowym trójkątem), przyczyną może być źle zadeklarowana właśnie ta zmienna. W Error handling wybieramy Set to ZERO, aby w przypadku błędu wpisać wartość zerową do danego parametru.

Potrzebujemy również zmiennych, do których chcemy zapisywać. Wybierzmy Access type jako Write Multiple Registers (Function Code 16). Posłuży to do zapisu wielu rejestrów jednocześnie. Nazwę możemy przykładowo również zakończyć przyrostkiem „_z” w celu odróżnienia zmiennych do zapisu. Następnie w polu Trigger ustaw wartość Cyclic, aby wartości zmiennych były wysyłane na żądanie, gdy zmienna bitowa zmieni się z wartości zero na jeden. Zmienna będzie dostępna w zakładce ModbusGenericSerialSlave I/O Mapping. Długość wpisywanych rejestrów ustawiamy tak samo jak w odczycie na wartość równą 2.

Pamiętajmy jednak, aby uwzględnić zmienną przeznaczoną do ustawiania trybu sterowania, dzięki której będziemy mieli w naszej aplikacji możliwość przełączania się między danymi trybami pracy.

Przechodząc do wcześniej wspomnianej zakładki ModbusGenericSerialSlave I/O Mapping możemy mieć rzeczywisty podgląd na nowo wpisane zmienne po połączeniu ze sterownikiem. W tym celu wybierz opcję Enabled 2(always in bus cycle task).

Po konfiguracji musimy poprawnie połączyć sterownik z urządzeniem slave, używając odpowiedniego kabla. W naszym przypadku dla RS485 istotne jest skrzyżowanie linii RX (odbieranie) z TX (wysyłanie) na podstawie poniższego układu pinów portów szeregowych.

Dodatkowo pozostało dodać również nasz zestaw XBIO_Berghof_IO (XBIO Berghof IO) w którym zaimplementujemy przyciski oraz diody. Przyda nam się on w tworzeniu podstawowej aplikacji.

Do Extension_Slots dodaj urządzenie XBIO Berghof IO.

Świetnie, tak naprawdę pozostało nam połączenie sterownika oraz sprawdzenie poprawności działania modułu Modbus. Poprawna komunikacja powinna wyglądać w poniższy sposób:

W przypadku wystąpienia błędów powinniśmy powrócić do wcześniejszych etapów konfiguracji i sprawdzić ustawienia komunikacji.

Przejdźmy teraz do przypisania wartości dla naszych zmiennych zakończonych „_z”, odpowiadających za zapis. Pozwoli nam to sprawdzić poprawność konfiguracji komunikacji oraz zaobserwowania „ręcznej” pracy w trybie sterowania prędkością. Wprowadź wartości w Prepared Value, a następnie przyciśnij CTRL + F7,aby wpisać je do serwonapędu. Zostaną one przepisane do Current Value.  Teraz powinieneś zaobserwować pracę silnika.

Praca w trybie sterowania momentem siły

W celu rozpoczęcia pracy w tym trybie pamiętaj o wcześniejszej deklaracji tak samo jak w trybie sterowania prędkością Polecenia załączenia osi. Pierwszy poniższy parametr, a mowa o Zadanym momencie siły w Astraada SRV-64 ma domyślnie ustawioną wartość na 300[%],natomiast w tym trybie to od nas będzie zależeć jaką wielkość powinna przyjąć ta zmienna.

Parametr                NazwaAdres Modbus RTU (Holding Register)Wartość, opis
P4.14Zadany moment siły [%]1829Zależnie od znaku wpisanej wartości, ruch osi odbędzie się odpowiednim kierunku. Wpisanie zera lub małej wartości spowoduje zatrzymanie osi.
Parametr                NazwaAdres Modbus RTU (Holding Register)Wartość, opis
P0.67Zezwolenie na zadawanie limitu prędkości1135Po wpisaniu wartości 1 do P0.67, serwonapęd będzie reagował na zadawanie limitu prędkości parametrem P0.46.
P0.46Zadany limit prędkości [rpm]1093Wprowadzona wartość prędkości nie będzie przekraczana podczas pracy serwonapędu. O ile zadany moment będzie wystarczający, serwonapęd osiągnie zadaną prędkość.

Przy zadawaniu ruchu osi poprzez moment siły, należy określić limit prędkości takiego ruchu.

Praca w trybie sterowania pozycją

Najwłaściwszą metodą sterowania pozycją poprzez zadawanie jej w protokole Modbus RTU, jest skorzystanie z tzw. ruchów PTP (point-to-point), ponieważ metoda ta umożliwia określanie nie tylko pozycji, ale też i innych parametrów związanych z osiągnięciem tej pozycji, tj. prędkości, przyspieszania, hamowania oraz ewentualnego czasu na zatrzymanie się po wykonaniu ruchu, a także ustalania, czy ruch ma być absolutny, czy też inkrementalny.

Wykonanie ruchu polega na wpisaniu numeru ruchu do zrealizowania do odpowiedniego rejestru. Sterowanie za pomocą ruchów PTP jest dość skomplikowane, więc nie będziemy skupiać się na tym w tym odcinku. Poniżej przedstawiam najistotniejsze parametry.

Zezwolenie na sterowanie z poziomu Modbus RTU

ParametrNazwaAdres Modbus RTU (Holding Register)Wartość, opis
P4.10Źródło sterowania1821Wartość 1 oznacza wybranie Modbus RTU jako źródło sterowania
P0.40Źródło zadawania prędkości1081Wartość 2 oznacza zadawanie w protokole Modbus RTU
P0.60Źródło zadawania momentu siły1121Wartość 2 oznacza zadawanie w protokole Modbus RTU

Załączenie osi z poziomu Modbus RTU

ParametrNazwaAdres Modbus RTU (Holding Register)Wartość, opis
P4.11Polecenie załączenia osi18230 = wyłącz 1 = załącz

Zadawanie parametrów w trybie sterowania prędkością

Parametr          NazwaAdres Modbus RTU (Holding Register)Wartość, opis
P5.20Wartość w tym parametrze oznacza komendę do zrealizowania2041Wartość „-1” oznacza brak polecenia.   Wartość od 0 do 15 oznacza numer ruchu do wykonania. Wpisanie wartości z tego przedziału jest równoznaczne z wyborem numeru ruchu i wydaniem polecenia TRIG (wykonaj). Aby ruch został zrealizowany, konieczne jest wcześniejsze załączenie serwonapędu (np. klasycznym sygnałem SON lub komendą wydaną w protokole Modbus RTU).   Wartość „2048” to polecenie zatrzymania (STOP) dla aktualnie wykonywanego ruchu

Teraz możemy przejść do drugiej części odcinka, w której zbudujemy przykładową aplikację wykorzystującą przedstawione wyżej informacje.

Przejdź do części drugiej.

Autor kursu:

Marcin Ryznar

Student Akademii Górniczo-Hutniczej w Krakowie, na kierunku Automatyka i Robotyka

Newsletter Poradnika Automatyka

Czytaj trendy i inspiracje, podstawy automatyki, automatykę w praktyce

Please wait...

Thank you for sign up!

Czy ten artykuł był dla Ciebie przydatny?

Średnia ocena artykułu: 5 / 5. Ilość ocen: 1

Ten artykuł nie był jeszcze oceniony.

Zadaj pytanie

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *