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.
Kurs obsługi i konfiguracji serwonapędów Astraada SRV
1. Z czego składa się zestaw serwonapędowy?2. Pierwsze podłączenie serwonapędu i przygotowanie do pracy.
3a. Sterowanie serwonapędem w EtherCAT – komunikacja i konfiguracja, część 1.
3b. Sterowanie serwonapędem w EtherCAT – komunikacja i konfiguracja, część 2.
4a. Sterowanie serwonapędem w Modbus RTU – komunikacja i konfiguracja, część 1
4b. Sterowanie serwonapędem w Modbus RTU – komunikacja i konfiguracja, część 2
5. Sterowanie Pulse Direction – jak sterować serwonapędem poprzez impulsy?
6. Czym jest oraz jakie możliwości daje tryb JOG?
7. Jak działa funkcja STO w serwonapędzie oraz jak podłączyć E-STOP?
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.
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
Parametr | Wartość |
P4.01 | Adres w protokole Modbus RTU |
P4.03 | Prędkość transmisji: wartość 0 oznacza 9600 bpswartość 1 oznacza 19200 bpswartość 2 oznacza 38400 bpswartość 3 oznacza 57600 bps |
P4.04 | Pozostał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
Parametr | Nazwa | Adres Modbus RTU (Holding Register) | Wartość, opis |
P4.10 | Źródła sterowania | 1821 | Wartość 1 oznacza wybranie Modbus RTU jako źródło sterowania |
P0.40 | Źródło zadawania prędkości | 1081 | Wartość 2 oznacza zadawanie w protokole Modbus RTU |
P0.60 | Źródło zadawania momentu siły | 1121 | Wartość 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.
Parametr | Nazwa | Adres Modbus RTU (Holding Register) | Wartość, opis |
P4.11 | Polecenie załączania osi | 1823 | 0 = 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
Parametr | Nazwa | Adres Modbus RTU (Holding Register) | Wartość, opis |
P4.10 | Źródło sterowania | 1821 | Wartość 1 oznacza wybranie Modbus RTU jako źródło sterowania |
P0.40 | Źródło zadawania prędkości | 1081 | Wartość 2 oznacza zadawanie w protokole Modbus RTU |
P0.60 | Źródło zadawania momentu siły | 1121 | Wartość 2 oznacza zadawanie w protokole Modbus RTU |
Załączenie osi z poziomu Modbus RTU
Parametr | Nazwa | Adres Modbus RTU (Holding Register) | Wartość, opis |
P4.11 | Polecenie załączenia osi | 1823 | 0 = wyłącz 1 = załącz |
Zadawanie parametrów w trybie sterowania prędkością
Parametr | Nazwa | Adres Modbus RTU (Holding Register) | Wartość, opis |
P0.03 | Ustawiony tryb sterowania | 1007 | 0 = 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.13 | Zadana prędkość [rpm] | 1827 | Zależ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 | Nazwa | Adres Modbus RTU (Holding Register) | Wartość, opis |
P0.09 | Zezwolenie na ograniczanie momentu siły | 1019 | Po wpisaniu wartości 1 do P0.09 serwonapęd będzie reagował na ograniczanie momentu siły parametrem P0.10. |
P0.10 | Zadany limit momentu siły [%] | 1021 | Wprowadzona 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 | Nazwa | Adres Modbus RTU (Holding Register) | Wartość, opis |
P0.54 | Czas rozpędzania [ms] | 1109 | Czas na rozpędzenie osi od zera do prędkości znamionowej. |
P0.55 | Czas hamowania [ms] | 1111 | Czas 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 | Nazwa | Adres Modbus RTU (Holding Register) | Wartość, opis |
P4.14 | Zadany moment siły [%] | 1829 | Zależnie od znaku wpisanej wartości, ruch osi odbędzie się odpowiednim kierunku. Wpisanie zera lub małej wartości spowoduje zatrzymanie osi. |
Parametr | Nazwa | Adres Modbus RTU (Holding Register) | Wartość, opis |
P0.67 | Zezwolenie na zadawanie limitu prędkości | 1135 | Po wpisaniu wartości 1 do P0.67, serwonapęd będzie reagował na zadawanie limitu prędkości parametrem P0.46. |
P0.46 | Zadany limit prędkości [rpm] | 1093 | Wprowadzona 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.
Poczytaj więcej o serwonapędach Astraada.
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
Parametr | Nazwa | Adres Modbus RTU (Holding Register) | Wartość, opis |
P4.10 | Źródło sterowania | 1821 | Wartość 1 oznacza wybranie Modbus RTU jako źródło sterowania |
P0.40 | Źródło zadawania prędkości | 1081 | Wartość 2 oznacza zadawanie w protokole Modbus RTU |
P0.60 | Źródło zadawania momentu siły | 1121 | Wartość 2 oznacza zadawanie w protokole Modbus RTU |
Załączenie osi z poziomu Modbus RTU
Parametr | Nazwa | Adres Modbus RTU (Holding Register) | Wartość, opis |
P4.11 | Polecenie załączenia osi | 1823 | 0 = wyłącz 1 = załącz |
Zadawanie parametrów w trybie sterowania prędkością
Parametr | Nazwa | Adres Modbus RTU (Holding Register) | Wartość, opis |
P5.20 | Wartość w tym parametrze oznacza komendę do zrealizowania | 2041 | Wartość „-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.
Sprawdź ofertę serwonapędów w sklepie internetowym firmy ASTOR.
Autor kursu:
Marcin Ryznar
Student Akademii Górniczo-Hutniczej w Krakowie, na kierunku Automatyka i Robotyka