SoftMotion – synchronizacja serwonapędów przy pomocy sterownika PLC
Kurs programowania w Codesys odc. 13
Kontakt w sprawie artykułu: Mateusz Pytel - 2023-05-04
Z tego artykułu dowiesz się:
- czym jest Codesys SoftMotion,
- jak skonfigurować SoftMotion w sterowniku PLC,
- jak synchronizować serwonapędy za pomocą SoftMotion.
Zapraszamy na kolejny odcinek naszego kursu. Będzie on poświęcony synchronizacji serwonapędów przy pomocy sterownika PLC za pomocą oprogramowania SoftMotion.
Kurs programowania w Codesys
Część I – Podstawowe funkcjonalności środowiska Codesys
1. Pierwsze kroki w Codesys. Jak stworzyć program?2. Pierwsze podłączenie i przygotowanie Codesys do pracy ze sterownikiem PLC.
3. Język drabinkowy (LD).
4. Typy danych w Codesys, rodzaje zmiennych, sposoby ich tworzenia.
5. Język schematów blokowych (FBD).
6. Tworzenie podstawowej wizualizacji HMI.
7. Język strukturalny (ST).
8. Diagnostyka w Codesys – jak sprawdzać działanie oprogramowania i sterownika?
9. Język bloków funkcyjnych (CFC).
10. Funkcja, blok funkcyjny, program – zmodyfikuj program w Codesys dla lepszej funkcjonalności.
Część II – Zaawansowane funkcje i możliwości środowiska Codesys
11. Komunikacja MQTT – jak skonfigurować w Codesys?12. Komunikacja EtherCAT – konfiguracja i przykładowa aplikacja.
13. Softmotion – synchronizacja serwonapędów przy pomocy sterownika PLC.
14. Komunikacja Modbus RTU i TCP/IP w środowisku Codesys.
15. Tworzenie projektów w Codesys ze sterownikami bezpieczeństwa Safety: architektura systemu bezpieczeństwa.
16. Programowanie sterownika bezpieczeństwa w Codesys.
17. Integracja sterownika PLC z systemem SCADA w Codesys.
18. Konfiguracja maszyny CNC z wykorzystaniem sterownika PLC – obsługa G-Code.
Dodatkowe materiały i lekcje dla kursantów:
1. Jak stworzyć wirtualny serwonapęd w Codesys? Instrukcja krok po kroku.2. Przykładowa aplikacja Codesys w języku ST i LD: napełnianie i opróżnianie zbiorników wraz z alarmowaniem.
Najczęściej zadawane pytania:
Sprawdź odpowiedzi na najczęściej zadawane pytania dotyczące środowiska Codesys.Czym jest SoftMotion?
Codesys SoftMotion to oprogramowanie do sterowania ruchem, które jest wykorzystywane jako środowisko programistyczne i wykonawcze w układach PLC, pozwalające na użycie ogólnoświatowego standardu PLCOpen. Dzięki temu można efektywnie tworzyć układy ruchu w PLC. Wiele maszyn i instalacji wymaga uniwersalnego sterownika do sekwencji ruchów obok programu logicznego. Nowoczesne platformy procesorowe pozwalają na przetwarzanie zadań sterowania ruchem, CNC i robotyki na tych samych urządzeniach, co sterowanie logiczne. Otwarta architektura Codesys pozwala na połączenie lub integrację zewnętrznych narzędzi inżynierskich do planowania i sterowania ruchem, zarówno dla prostych ruchów, jak i bardziej złożonych. Aplikacje, które zawierają kontrolę przepływu i sterowanie procesem, również mieszczą się w zakresie zastosowań Codesys SoftMotion.
Najważniejsze funkcje pakietu SoftMotion to:
- Inżynieria projektu ruchu z wykorzystaniem modułów biblioteki funkcji.
- Konfiguracja napędów z obsługą magistrali Fieldbus.
- Oddzielenie tworzenia aplikacji od zastosowanego sprzętu poprzez wydzielenie napędów z nazwami grup napędów w drzewie urządzeń.
- Planowanie ruchu z edytorem krzywek.
- Zintegrowane planowanie ruchu: z edytorem 3D CNC wg DIN 66025 (G code) i edytorem tabelarycznym z wartościami współrzędnych dla pozycji robota w różnych układach współrzędnych.
- Edycja online programów CNC w Codesys Visualization.
W pakiecie SoftMotion możemy wyróżnić:
- Edytor w Codesys SoftMotion: pozwala na konfigurację sprzętu napędu poprzez interfejs użytkownika. Tworzona jest instancja bloku funkcyjnego IEC reprezentująca napęd, który automatycznie komunikuje się z napędem fizycznym. Program IEC może adresować napęd za pomocą bloków funkcyjnych bibliotek SoftMotion lub można opracować własne bloki funkcyjne. Ustawione wartości są cyklicznie zapisywane przez bloki funkcyjne.
- Edytor CNC: w nim generujemy wielowymiarowe ruchy. Ścieżki CNC tworzymy przy pomocy edytora tekstowego lub graficznego. Alternatywnie do edytora tekstowego można pracować w uproszczonym widoku tabelarycznym.
- Konfiguracja grupy osi: grupa osi definiuje relacje pomiędzy kilkoma mechanicznie zależnymi osiami, które wspólnie pozycjonują i orientują narzędzie lub płytę narzędziową w przestrzeni. Przy pomocy konfiguratora wybierasz i konfigurujesz kinematykę, która ma być stosowana. Dodatkowo można przyporządkować osie SoftMotion.
Ciekawą funkcjonalnością jest możliwość tworzenia osi wirtualnych. Taką oś można też ustanowić osią wiodącą dla całej maszyny, a osie fizyczne skonfigurować jako podrzędne. Biblioteka SoftMotion zawiera też obiekty do wizualizacji pracy serwonapędów, co przyspiesza programowanie i uruchamianie serwonapędów.
Typowe zastosowania biblioteki SoftMotion to aplikacje typu:
- Weź i odłóż (Pick&Place), np. pobranie detalu i umieszczenie go w określonym miejscu w półprodukcie przesuwanym na taśmociągu – a więc synchronizacja pozycji i prędkości z taśmociągiem.
- Nadruki na produktach i opakowaniach (Labelling), np. nadruki realizowane z użyciem elektronicznej krzywki CAM, w tym wykrywanie znaczników początku dla nadruków i etykiet, itp.
- Wtryskarki (Injection Moulding Machine), wykorzystujące zmianę w locie sterowania pozycją na sterowanie momentem siły.
Konfiguracja SoftMotion w sterowniku PLC
Aby zacząć projektowanie z pomocą SoftMotion, należy wybrać urządzenie SoftMotion w oknie dialogowym kreacji projektu.
Po utworzeniu projektu, spójrz na drzewko projektowe znajdujące się po lewej stronie okna. Zobaczysz, że pod głównym taskiem pojawił się nowy obiekt o nazwie SoftMotion General Axis Pool. Jest to konektor, który stanowi swego rodzaju hub dla urządzeń SoftMotion, gdzie możesz dodać nowe urządzenie. Aby to zrobić, naciśnij prawym przyciskiem myszy i z menu wybierz opcje Add Device.
Następnie wybierz wirtualny serwonapęd. Znajdziesz go pod nazwą w sekcji Virtual Drives pod nazwą SM_Drive_Virtual i dodaj go do projektu poprzez podwójne kliknięcie. Do wykonania projektu będą potrzebne dwa serwonapędy, więc dodaj kolejny napęd do drzewka projektowego.
Synchronizacja serwonapędów za pomocą SoftMotion
W ramach tego odcinka kursu wykonasz program sekwencyjny z wykorzystaniem gotowych bloków funkcyjnych zawartych w licencji SoftMotion. Najpierw poznasz bloki funkcyjne, które posłużą do regulacji pracy serwonapędów, a następnie skonstruujesz program sekwencyjny, które serwonapędy będą wykonywać.
Plik opisywanej w tym odcinku aplikacji możesz ściągnąć, korzystając z tego linku.
Bloki, które wykorzystasz to:
- MC_Power – blok funkcyjny kontrolujący zasilanie.
- MC_Home – blok ten wykonuje proces ustawienia serwonapędu do pozycji domowej.
- MC_MoveRelative – realizacja kontrolowanego ruchu na określoną odległość.
- MC_Stop – zatrzymanie pracy serwonapędu podczas ruchu.
Aby móc właściwie korzystać z tych bloków, musisz zapoznać się z opisem i działaniem wejść oraz wyjść poszczególnych elementów.
MC_Power
Rodzaj wejścia | Nazwa | Typ zmiennej | Opis |
Wejście-wyjście | Axis | AXIS_REF_SM3 | Odniesienie do osi |
Wejście | Enable | BOOL | Aktywowanie bloku funkcyjnego |
bRegulatorOn | BOOL | Włączenie stopnia mocy | |
bDriveStart | BOOL | Włączenie serwonapędu | |
Wyjście | Status | BOOL | Jeśli zmienna jest równa TRUE, napęd jest gotowy do pracy, bądź działa poprawnie |
bRegulatorRealState | BOOL | Jeśli zmienna jest równa TRUE, stopień mocy został aktywowany | |
bDriveStartRealState | BOOL | Jeśli zmienna jest równa TRUE, napęd nie jest zatrzymany przez mechanizm QuickStop | |
Busy | BOOL | Jeśli zmienna jest równa TRUE, napęd wykonuje pracę | |
Error | BOOL | Jeśli zmienna jest równa TRUE, nastąpił błąd podczas pracy napędu. | |
ErrorID | SMC_ERROR | Po wykryciu błędu zmienna przybierze wartość liczbową, adekwatną do typu błędu. Lista błędów dostępna jest w definicji bloku w środowisku Codesys. |
MC_Home
Rodzaj wejścia | Nazwa | Typ zmiennej | Opis |
Wejście-wyjście | Axis | AXIS_REF_SM3 | Odniesienie do osi |
Wejście | Execute | BOOL | Aktywowanie procedury |
Position | LREAL | Pozycja, do której zostanie przywrócony serwonapęd | |
Wyjście | Done | BOOL | Jeśli zmienna jest równa TRUE, procedura została wykonana poprawnie |
Busy | BOOL | Jeśli zmienna jest równa TRUE, napęd wykonuje pracę | |
CommandAborted | BOOL | Jeśli zmienna jest równa TRUE, komenda została przerwana przez inną komendę | |
Error | BOOL | Jeśli zmienna jest równa TRUE, nastąpił błąd podczas pracy napędu. | |
ErrorID | SMC_ERROR | Po wykryciu błędu zmienna przybierze wartość liczbową, adekwatną do typu błędu. Lista błędów dostępna jest w definicji bloku w środowisku Codesys. |
MC_MoveRelative
Rodzaj wejścia | Nazwa | Typ zmiennej | Opis |
Wejście-wyjście | Axis | AXIS_REF_SM3 | Odniesienie do osi |
Wejście | Execute | BOOL | Aktywowanie procedury |
Distance | LREAL | Odległość względna dla ruchu w jednostce technicznej [u]. | |
Velocity | LREAL | Prędkość serwonapędu | |
Acceleration | LREAL | Przyśpieszenie serwonapędu, w jednostce technicznej [u/s²] | |
Deceleration | LREAL | Hamowanie serwonapędu, w jednostce technicznej [u/s²] | |
Jerk | LREAL | Maksymalna wielkość szarpnięcia w [u/s³] | |
BufferMode | MC_BUFFER_MODE | Określa chronologiczną kolejność bloku w stosunku do poprzedniego. Jeżeli blok funkcjonalny jest zajęty, to dozwolone jest tylko BufferMode=Aborting. | |
Wyjście | Done | BOOL | Jeśli zmienna jest równa TRUE, procedura została wykonana poprawnie |
Busy | BOOL | Jeśli zmienna jest równa TRUE, napęd wykonuje pracę | |
CommandAborted | BOOL | Jeśli zmienna jest równa TRUE, komenda została przerwana przez inną komendę | |
Error | BOOL | Jeśli zmienna jest równa TRUE, nastąpił błąd podczas pracy napędu. | |
ErrorID | SMC_ERROR | Po wykryciu błędu zmienna przybierze wartość liczbową, adekwatną do typu błędu. Lista błędów dostępna jest w definicji bloku w środowisku Codesys. |
MC_Stop
Rodzaj wejścia | Nazwa | Typ zmiennej | Opis |
Wejście-wyjście | Axis | AXIS_REF_SM3 | Odniesienie do osi |
Wejście | Execute | BOOL | Aktywowanie procedury |
Deceleration | LREAL | Hamowanie w jednostce technicznej [u/s²] | |
Jerk | LREAL | Maksymalna wielkość szarpnięcia w [u/s³] | |
Wyjście | Done | BOOL | Jeśli zmienna jest równa TRUE, procedura została wykonana poprawnie |
Busy | BOOL | Jeśli zmienna jest równa TRUE, napęd wykonuje pracę | |
Error | BOOL | Jeśli zmienna jest równa TRUE, nastąpił błąd podczas pracy napędu. | |
ErrorID | SMC_ERROR | Po wykryciu błędu zmienna przybierze wartość liczbową, adekwatną do typu błędu. Lista błędów dostępna jest w definicji bloku w środowisku Codesys. |
Następnie stwórz nowy blok funkcyjny, wykorzystujący język strukturalny ST, o nazwie „Sekwencja”. W nim zapiszesz program, który będzie realizowany przez napędy.
Zadeklaruj następujące zmienne w bloku funkcyjnym:
VAR_INPUT
inicjacja:BOOL; //zmienna inicjująca rozpoczęcie sekwencji
done_ax1:BOOL; //wykonanie ruchu przez serwonapęd nr1
done_ax2:BOOL; //wykonanie ruchu przez serwonapęd nr2
END_VAR
VAR_OUTPUT
start_axis_1:BOOL; //sygnał rozpoczęcia ruchu serwonapędu nr1
start_axis_2:BOOL; //sygnał rozpoczęcia ruchu serwonapędu nr2
END_VAR
VAR
dexec_1:BOOL; //zmienna pomocnicza, sygnalizująca czy serwonapęd wykonuje ruch
dexec_2:BOOL; //zmienna pomocnicza, sygnalizująca czy serwonapęd wykonuje ruch
Bufor_1:ton; //zegary pomocnicze
Bufor_2:ton;
END_VAR
Następnie zapisz następujący kod w bloku funkcyjnym:
IF PLC_PRG.Zasilanie_a1.bDriveStart AND PLC_PRG.Zasilanie_a2.bDriveStart THEN //start sekwencji
IF inicjacja THEN
start_axis_1:=TRUE;
dexec_1:=1;
dexec_2:=0;
start_axis_2:=FALSE;
END_IF
IF done_ax1=FALSE AND dexec_1 AND inicjacja=0 THEN //ruch serwonapędu nr 1
dexec_1:=0;
start_axis_2:=TRUE;
start_axis_1:=FALSE;
END_IF
Bufor_1(IN:=start_axis_2,PT:= T#2S); //2 sekundy stopu przed kolejnym ruchem
IF Bufor_1.Q THEN
dexec_2:=1;
END_IF
IF done_ax2=TRUE AND dexec_2 AND inicjacja=0 THEN //ruch serwonapędu nr 2
start_axis_1:=TRUE;
dexec_2:=0;
start_axis_2:=FALSE;
END_IF
Bufor_2(IN:=start_axis_1,PT:= T#2S); //2 sekundy stopu przed kolejnym ruchem
IF Bufor_2.Q THEN
dexec_1:=1;
END_IF
END_IF
Ostatnim etapem jest stworzenie programu, korzystającego z wyżej wymienionych bloków funkcyjnych. Program został stworzony w języku CFC, a zatem końcowy rezultat programowania będzie wyglądać następująco:
Całością aplikacji sterowana jest z poziomu wizualizacji. Należy do niej dodać pola tekstowe do wpisywania oraz wyświetlania parametrów, dedykowane blokom funkcyjnym panele wizualizacyjne oraz wizualizacje serwonapędów wraz z przyciskiem inicjującym sekwencję. Dodaj pola tekstowe dla zmiennej dist, vel, acc oraz dec. Aby do pola tekstowego można było wpisywać nowe wartości, należy otworzyć pasek właściwości obiektu, a następnie w sekcji Input Configuration skonfiguruj opcję OnClick. Wybierz akcję WriteVariable i przypisz do niej odpowiednią zmienną.
Aby pole tekstowe wyświetlało wartość zmiennej, do pustego pola tekstowego, w sekcji Texts, w opcji TextVariable wpisz nazwe zmiennej, której wartość ma być wyświetlana.
Dodatkowo dopisz w polach tekstowych tekst określający zmienną oraz znak „%f”, przykładowo „Prędkość: %f”. Znak %f spowoduje możliwość wyświetlania zmiennej w formie dziesiętnej.
Przejdź teraz do dodania paneli sterujących blokami funkcyjnymi należącymi do licencji SoftMotion oraz wizualizacji serwonapędu.
W zakładce Visualisation Toolbox, wybierz filtr SM3_Basic. Znajdują się tam panele, które możesz wyszukać wpisując nazwę bloku z programu, przykładowo „MC_POWER”, w wyszukiwarce znajdującej się na dole zakładki.
Każdy blok posiada dwie wersje panelu, jednakże najlepiej wybrać wersję NEW. Dodaj panele MC_Power, MC_Stop oraz MC_Home, po jednym dla każdego serwonapędu. Do każdego panelu należy dodać referencję do bloku funkcyjnego z programu poprzez wpisanie nazwy instancji bloku, tak jak na poniższej ilustracji.
Aby dodać wizualizację serwonapędu, wyszukaj w tym samym miejscu element RotDrive i dodaj referencję w ten sam sposób, wpisując jego nazwę, widoczną w drzewku projektowym.
Ostatnim elementem jest dodanie przycisku, który zainicjuje sekwencję serwonapędów. Znajdziesz go w Common Controls pod nazwą RockerSwitch. W polu Variable przypisz mu zmienną inicjującą program.
Aby aplikacja działała poprawnie, wpisz parametry: prędkość, dystans, hamowanie, przyśpieszenie. Naciśnij wszystkie przyciski w panelach MC_Power, tak aby wskazówka na serwonapędach zmieniła kolor na niebieski oraz trzy pierwsze diody na panelu zaświeciły się na zielono, a następnie dwukrotnie naciśnij przycisk inicjalizacji sekwencji.
Autor artykułu: Mateusz Steczkowski
Plik opisywanej w tym odcinku aplikacji możesz ściągnąć, korzystając z tego linku.