Strona główna ASTOR
Automatyka w praktyce

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.

Utworzenie projektu wykorzystującego SoftMotion. Źródło: ASTOR

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.

Dodanie urządzenia SoftMotion. Źródło: ASTOR

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.

Dodanie wirtualnego serwonapędu. Źródło: ASTOR

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ć.

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ściaNazwaTyp zmiennejOpis
Wejście-wyjścieAxisAXIS_REF_SM3Odniesienie do osi
WejścieEnableBOOLAktywowanie bloku funkcyjnego
bRegulatorOnBOOLWłączenie stopnia mocy
bDriveStartBOOLWłączenie serwonapędu
WyjścieStatusBOOLJeśli zmienna jest równa TRUE, napęd jest gotowy do pracy, bądź działa poprawnie
bRegulatorRealStateBOOLJeśli zmienna jest równa TRUE, stopień mocy został aktywowany
bDriveStartRealStateBOOLJeśli zmienna jest równa TRUE, napęd nie jest zatrzymany przez mechanizm QuickStop
BusyBOOLJeśli zmienna jest równa TRUE, napęd wykonuje pracę
ErrorBOOLJeśli zmienna jest równa TRUE, nastąpił błąd podczas pracy napędu.
ErrorIDSMC_ERRORPo 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ściaNazwaTyp zmiennejOpis
Wejście-wyjścieAxisAXIS_REF_SM3Odniesienie do osi
WejścieExecuteBOOLAktywowanie procedury
PositionLREALPozycja, do której zostanie przywrócony serwonapęd
WyjścieDoneBOOLJeśli zmienna jest równa TRUE, procedura została wykonana poprawnie
BusyBOOLJeśli zmienna jest równa TRUE, napęd wykonuje pracę
CommandAbortedBOOLJeśli zmienna jest równa TRUE, komenda została przerwana przez inną komendę
ErrorBOOLJeśli zmienna jest równa TRUE, nastąpił błąd podczas pracy napędu.
ErrorIDSMC_ERRORPo 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ściaNazwaTyp zmiennejOpis
Wejście-wyjścieAxisAXIS_REF_SM3Odniesienie do osi
WejścieExecuteBOOLAktywowanie procedury
DistanceLREALOdległość względna dla ruchu w jednostce technicznej [u].
VelocityLREALPrędkość serwonapędu
AccelerationLREALPrzyśpieszenie serwonapędu, w jednostce technicznej [u/s²]
DecelerationLREALHamowanie serwonapędu, w jednostce technicznej [u/s²]
JerkLREALMaksymalna wielkość szarpnięcia w [u/s³]
BufferModeMC_BUFFER_MODEOkreśla chronologiczną kolejność bloku w stosunku do poprzedniego. Jeżeli blok funkcjonalny jest zajęty, to dozwolone jest tylko BufferMode=Aborting.
WyjścieDoneBOOLJeśli zmienna jest równa TRUE, procedura została wykonana poprawnie
BusyBOOLJeśli zmienna jest równa TRUE, napęd wykonuje pracę
CommandAbortedBOOLJeśli zmienna jest równa TRUE, komenda została przerwana przez inną komendę
ErrorBOOLJeśli zmienna jest równa TRUE, nastąpił błąd podczas pracy napędu.
ErrorIDSMC_ERRORPo 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ściaNazwaTyp zmiennejOpis
Wejście-wyjścieAxisAXIS_REF_SM3Odniesienie do osi
WejścieExecuteBOOLAktywowanie procedury
DecelerationLREALHamowanie w jednostce technicznej [u/s²]
JerkLREALMaksymalna wielkość szarpnięcia w [u/s³]
WyjścieDoneBOOLJeśli zmienna jest równa TRUE, procedura została wykonana poprawnie
BusyBOOLJeśli zmienna jest równa TRUE, napęd wykonuje pracę
ErrorBOOLJeśli zmienna jest równa TRUE, nastąpił błąd podczas pracy napędu.
ErrorIDSMC_ERRORPo 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:

Gotowy program. Źródło: ASTOR

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ą.

Przypisanie zmiennej. Źródło: ASTOR

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.

Wyszukiwanie paneli do obsługi bloków funkcyjnych. Źródło: ASTOR

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.

Określanie referencji do bloku funkcyjnego. Źródło: ASTOR

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.

Poprawnie skonfigurowana wizualizacja. Źródło: ASTOR

Autor artykułu: Mateusz Steczkowski

Newsletter Poradnika Automatyka

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

Please wait...

Dziękujemy za zapis do newslettera!

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 *