Komunikacja Modbus RTU – konfiguracja i przykładowa aplikacja w środowisku Codesys, część 2
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 zdefiniować zmienne w przykładowej aplikacji,
- jak powinna wyglądać logika w języku LD,
- jak przygotować prostą wizualizację na panelu operatorskim.
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.
W drugiej części odcinka stworzymy przykładową aplikację w języku LD jak wizualizację na panelu HMI. Zbudujemy program pozwalający na sterowanie prędkością serwosilnika z uwzględnieniem momentu siły. Wszystkie wartości przypisywane do zmiennych będą zależeć od „osoby sterującej”, działającej na naszym oprogramowaniu. W razie wątpliwości zawsze możesz wrócić do pierwszej części odcinka.
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?
Pierwszym krokiem jest nazwanie zmiennych, z których będziemy korzystać. Przejdź do zakładki ModbusGenericSerialSlave I/O Mapping poprzez wcześniejsze wejście w nasze urządzenie podrzędne Modbus_Slave_COM_Port. Zadeklaruj odpowiednie komponenty, tak jak zostało to przedstawione przy opisie trybu prędkości. Skupmy się dodatkowo na parametrze Zezwolenia na ograniczanie momentu siły oraz Zadaniu limit momentu siły [%]. Następnie będziemy potrzebować jedynie zmiennych służących do zapisu, więc nadaj im nazwy w kolumnie Variable. Nasza tabela powinna wyglądać w poniższy sposób.

Przejdźmy teraz do ustawień wejść i wyjść naszego zestawu XBIO_Berghof_IO (XBIO Berghof IO) i ustawmy przyciski oraz diody. Diody tak naprawdę będą miały charakter jedynie informacyjny. Dzięki nim dowiemy się w jakim trybie aktualnie jesteśmy. Dzięki przyciskom będziemy mogli włączyć nasz serwonapęd w tryb gotowy do pracy.
Przejdź do zakładki i zadeklaruj poniższe zmienne.

Jesteśmy gotowi do budowania logiki działania serwonapędu. Otwórz więc zakładkę PLC_PRG znajdującą się w drzewku programu. Będziemy korzystać z języka drabinkowego.

Więcej o języku drabinkowym możesz dowiedzieć się z naszego kursu programowania w Codesys.
Zacznijmy od inicjalizacji przycisków i przypisania odpowiednich wartości do zmiennych. Tworzymy więc sekwencję, gdzie pierwszy przycisk uruchamia tryb sterowania prędkością, polecenie załączania osi oraz zezwala na ograniczenie momentu siły. Na wyjściu dodajemy również zmienną „Generator_1” dla Przycisku1.

W kolejnych networkach stworzymy prosty generator, który będzie powiązany z trybem pracy oraz z naszymi diodami. Wszystkie cztery diody, poprzez miganie będą nas informowały, że Polecenie załączania osi jest aktywne i serwonapęd jest gotowy do pracy. Korzystamy z bloków TON (Time On Delay) z opóźniającym załączaniem. Wykorzystamy również dodatkowe zmienne „puls_”, aby zapętlić odliczanie oraz stworzyć ideę na której bazuje generator.

Tworzymy dodatkową zmienną „RESET”, dzięki której mamy możliwość stworzenia logiki, która pozwoli na przypisanie zera do zmiennych. Innymi słowy zresetuje nam przypisane wcześniej wielkości liczbowe zadane w panelu HMI, do którego teraz przejdziemy.

Świetnie, zakończyliśmy tworzenie logiki w języku drabinkowym! Przejdźmy teraz do wizualizacji naszego projektu. Stwórzmy ekrany, dzięki którym będziemy mieli kontrolę nad trybami sterowaniu w panelu HMI. W drzewku projektu wybierz Application -> Add Object -> VisualizationManager.

W menedżerze wizualizacji dodaj TargetVisualization, a jeśli chciałbyś mieć dostęp do wizualizacji poprzez przeglądarkę internetową, wybierz WebVisualization.

Poczytaj więcej o serwonapędach Astraada.
Dodajmy teraz ekran odpowiadający za deklaracje zmiennych w trybie sterowania.

Po poprawnej konfiguracji, tak powinno wyglądać nasze drzewo projektu.

Rozpocznijmy od zobrazowania możliwości wyboru pracy dla danego trybu sterowania. W celu lepszego przedstawienia naszej wizualizacji na panelu HMI wybierzmy jego odpowiednią rozdzielczość. Klikamy prawym przyciskiem myszy na Wizualizacja, a następnie Properties. Powinniśmy ujrzeć takie okno:

W zakładce Visualization zaznaczmy opcję Use specified visualization size, gdzie w rubryce Visualization Size mamy możliwość wybrania parametrów naszego panelu HMI.
Zobaczmy teraz, jak powinien wyglądać nasz ekran. Musimy uwzględnić wszystkie zmienne liczbowe oraz odnieść się do logiki, którą zadeklarowaliśmy z wykorzystaniem języka LD. Utwórzmy w zakładce Wizualizacja trzy elementy typu Button, które będą odpowiedzialne za:
Podpis przycisku | Nazwa zmiennej |
Zadana predkosc | Zadana_predkosc |
Zadany limit momentu sily | Zad_limit_mom_sily |
RESET | RESET |
Z tą różnicą jednak, że w bloczkach oprócz bloczka RESET nie przypisujemy nazwy tak jak poprzednio, a wyrażenie „%d”, dzięki któremu mamy rzeczywisty podgląd na zmieniające się wartości liczbowe danych zmiennych. Odniesienie do danej zmiennej musi zostać uwzględnione w Text variable znajdującej się w zakładce Text variables. Dodałem opcjonalnie również tekst „Tryb sterowania predkoscia” mający cel jedynie informacyjny.

W celu przypisywania dowolnych wartości na bieżąco, musimy zadeklarować klawiaturę dla każdego przycisku.

Następnie przygotujmy przycisk RESET, dzięki któremu usuniemy wszystkie wartości wybrane z klawiatury. Nadajmy mu kolor oraz nazwę. W celu odniesienia się do naszej stworzonej logiki, wyszukaj zmienną RESET w Variable dla Tap.

Finalna wersja ekranu powinna zostać przedstawiona w poniższy sposób. Sprawdź działanie aplikacji, pozwalające na sterowanie prędkością serwosilnika wraz z uwzględnieniem momentu siły.

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