Do Projektu iAutomatyka dołączyli:

https://iautomatyka.pl/wp-content/uploads/2020/08/main_2-2.png

TwinCAT 3: Wprowadzanie do sterowania ruchem


W nowoczesnej automatyce przemysłowej bardzo ważną rolę odgrywają systemy sterowania ruchem. W systemach tych do precyzyjnego sterowania położeniem wykorzystywane są serwonapędy oraz siniki krokowe, które w połączeniu z enkoderami dają możliwość pracy w zamkniętej pętli sprzężenia zwrotnego.  Systemy Motion Control nie są nowością, ale od około 2000 roku można zaobserwować coraz większe powiązanie ich ze sterownikami PLC. Zazwyczaj mamy do czynienia z dodatkowymi modułami rozszerzającymi możliwości sterownika PLC o funkcje kontrolera ruchu. Firma Beckhoff dla swoich sterowników proponuje rozwiązanie w postaci licencji programowej.  W oprogramowaniu TwinCAT 3 dostępne są oddzielne licencjonowane moduły. Dla sterownika PLC jest to TwinCAT PLC, natomiast dla systemu sterowania ruchem jest to TwinCAT NC. Licencja dla tego drugiego zależna jest od tego, ile „osi” zostanie wykorzystane w naszym projekcie. W wersji podstawowej jest to 10 osi, jednak istnieje możliwość rozszerzenie tej wartości. Moduł TwinCAT NC oferuje podstawowe funkcje sterownika ruchu realizujące ruch „point to point”(PTP). Oznacza to, że każda oś jest sterowana niezależnie. Jeżeli zachodzi potrzeba, aby osie pracowały w sposób skoordynowany. Na przykład w 3-osiowej frezarce CNC, gdzie muszą podążać złożoną ścieżką w 3 wymiarach, niezbędne jest wykorzystanie funkcji ruchu interpolowanego. TwinCAT 3 oferuje to, jako dodatek do TwinCAT NC, zwany TwinCAT NC I. Dodatek ten zawiera wbudowany interpreter G-code wykorzystywany przez frezarki CNC i drukarki 3D.

Konfiguracja projektu

Zacznijmy od utworzenia nowego projektu. Po uruchomieniu oprogramowania TwinCAT 3 wybieramy kolejno New TwinCAT Project… ->  TwinCAT Projects ->  TwinCAT XEA Projects (XML format), a następnie w polu Name i Location podajemy  nazwę projektu i ścieżkę dostępu do folderu, w którym zostanie on zapisany. Po zatwierdzeniu przyciskiem OK, w oknie Solution Explorer naszym oczom ukaże się drzewko stworzonego przez nas projektu.

Po rozwinięciu węzła SYSTEM z drzewka projektu możemy wybrać z listy kategorię License. Na ekranie zostaną wyświetlone wszystkie informacje związane z licencjonowanymi przez nas modułami. W tej chwili w tabeli licencji powinna być widoczna tylko 1 pozycja – TC1000 – jest to licencja dla naszego komputera. W kolumnie Current Status pokazany jest status licencji. W naszym przypadku wyświetlać powinien się napis missing, ponieważ nie aktywowaliśmy jeszcze żadnej licencji. Na tym etapie nie należy się tym przejmować, wrócimy do tego później.

Dodanie kontrolera ruchu i nowej osi

Aby dodać funkcję kontrolera ruchu do projektu, wracamy do drzewka projektu i odszukujemy węzeł MOTION. Znajduje się on bezpośrednio pod węzłem SYSTEM. Klikamy prawym przyciskiem myszy  na węzeł MOTION i wybieramy Add New Item… z menu kontekstowego. Spowoduje to wyświetlenie okna dialogowego Insert Motion Configuration, w którym wybieramy  NC/PTP NCI Configuration i wciskamy OK.

Dodany przez nas kontroler ruchu automatycznie definiuje zadanie NC-Task, które można zaplanować w węźle SYSTEM -> Real-Time tak jak zadania PLC. Zwykle powinno to być zadanie o wysokim priorytecie, wyższe niż zadania sterownika PLC i powinno być wykonywane często, na przykład raz na jedną lub dwie milisekundy, nawet jeśli sterownik PLC działa tylko raz na 10 milisekund. Zadanie to obsługuje całą komunikację z serwonapędami  i zapewnia uogólniony interfejs osi, z którym może współpracować sterownik PLC. Może również zamknąć pętlę sprzężenia zwrotnego położenia w przypadku niektórych tańszych napędów, które nie oferują pętli położenia, synchronizować wiele osi w systemie interpolowanym i wykonywać transformacje kinematyczne w przypadku robotów przemysłowych. Dodatkowo posiada nawet interpreter G-code.


Przejdźmy teraz do dodania naszej pierwszej osi. Będzie to wirtualna oś serwonapędu. Oprogramowanie TwinCAT 3 umożliwia zasymulowanie pracy zarówno sterownika PLC jak i serwonapędu, dzięki czemu istnieje możliwość przetestowania stworzonego przez nas projektu bez posiadania rzeczywistego układu sterowania. W późniejszym etapie bez problemu naszą wirtualną oś przypiszemy do rzeczywistego serwonapędu. Odnajdujemy węzeł Axes w utworzonym przez nas zadaniu NC-Task 1 i za pomocą prawego przycisku myszy otwieramy menu kontekstowe, z którego należy wybrać Add New Item…. Po tej operacji otworzy się okno dialogowe Insert NC Axis. W polu Name nadajemy nazwę osi, w moim przypadku będzie to Axis 1. Z listy rozwijanej Type możemy wybrać rodzaj osi, jaką chcemy dodać do projektu. Dla serwonapędu będzie to Continuous Axis. Wybieramy tę opcję, a następnie zatwierdzamy przyciskiem OK.

Konfiguracja osi

Konfigurację osi rozpoczynamy od przejścia do zakładki Settings dostępnej po dwukrotnym kliknięciu lewym przyciskiem myszy na nowo utworzoną oś Axis 1. W górnej części okna widoczne są dwa przyciski: Link To I/O… oraz  Link To PLC…. Służą one do ustawienia połączenia pomiędzy rzeczywistym serwonapędem podłączonym do sterownika PLC a strukturą danych AXIS_REF wykorzystywaną w programie. W tym momencie nie posiadamy ani podłączonego urządzenia, ani stworzonej struktury, dlatego pola te pozostawiamy bez zmian. Z listy rozwijanej Axis Type  możemy wybrać typ obsługiwanego napędu. W naszym przypadku zostawiamy opcję Standard (Mapping via Encoder and Drive), która pozwoli nam na uruchomienie wirtualnego napędu. Poniżej w polu Unit możemy dokonać wyboru jednostek, które będą opisywały pozycję naszego napędu. Ustawiamy oś, jako oś liniową(mm). Pozostałe opcje możemy zostawić bez zmian.

Przejdźmy teraz do zakładki Parameter opisującej parametry mechaniczne i dynamiczne naszego układu. Możemy dowolnie skonfigurować rampy przyśpieszenia i hamowania, prędkości maksymalne i minimalne oraz ustawienia zatrzymania awaryjnego. Istnieje także możliwość zdefiniowania programowych wyłączników krańcowych, które są niezbędnym zabezpieczeniem naszego układu mechanicznego. Zapobiegają one programowo przed wyjechaniem osi poza zdefiniowany zakres ruchu. Programowe wyłączniki krańcowe (Limit Switches) powinny być ustawione przed fizycznymi „krańcówkami”, które są ostateczną formą zabezpieczenia układu. Aby lepiej zobrazować dobór podstawowych parametrów, przyjmijmy, że nasz układ mechaniczny będzie posiadał następujące parametry:

  • oś liniowa,
  • zakres ruchu: -1000mm 1000mm,
  • przesunięcie po wykonaniu 1 obrotu przez napęd: d = 10mm/rev,
  • maksymalna prędkość serwonapędu: Vmax = 3000rpm,
  • enkoder 20bit –> 2^20 = 1048576.

Korzystając z poniższego wzoru możemy obliczyć nasze Reference Velocity:

Vref[mm/s] = Vmax[rev/s]*d[mm]

Vref[mm/s] = (3000[rev]/60[s]) * 10[mm/rev]

Vref[mm/s]  = 500 [mm/s]

Pozostałe parametry ustawiamy jak na poniższym obrazku.

Przechodząc do zakładki Dynamics możemy podejrzeć ustawione przez nas podstawowe parametry, oraz sprawdzić jak zmiana parametru Jerk wpływa na czasy przyspieszenia i hamowania układu.

Do ustawienia pozostały nam jeszcze parametry enkodera. Odnajdujemy w drzewku projektu węzeł Enc i przechodzimy do zakładki Parameter. W polu Invert Encoder Counting Direction możemy wybrać kierunek zliczania impulsów enkodera. W taki sam sposób przechodząc do Axis 1 -> Drive -> Parameter -> Invert Motor Polarity możemy zmienić kierunek ruchu naszego napędu. Uzupełnijmy teraz pozostałe parametry pracy enkodera. W polu Scaling Factor Numerator wpisujemy wartość 10, jest to nasze przesunięcie po wykonaniu przez napęd pełnego obrotu. W polu Scaling Factor Denominator (default: 1.0) podajemy rozdzielczość enkodera: 2^20 = 1048576. W ten sposób zakończyliśmy pracę z ustawieniami parametrów układu.

Test osi

Przyszła pora na przetestowanie naszej konfiguracji. W pierwszej kolejności wrócimy do podglądu licencji SYSTEM -> License. W tabeli aktywnych licencji możemy zauważyć, że licencja TC1000 zniknęła, a na jej miejscu pojawiły się dwie nowe pozycje: TC1200 i TF5000. Tak jak wspominałem we wstępie, moduły programowe sterownika są osobo licencjonowane, z tego powodu oprogramowanie TwinCAT 3 dodało nam automatycznie moduły odpowiedzialne za funkcje sterownika PLC i sterownika Motion. Pozostaje nam tylko aktywować tymczasową (7-dniową) licencje na nasze moduły. Dokonujemy tego poprzez klikniecie na przycisk 7 Days Trial License…,  w oknie dialogowym należy przepisać 5 znakowy klucz aktywacyjny i zatwierdzić przyciskiem OK. Licencja jest w pełni darmowa, a po jej upływie bez problemu możemy aktywować ją kolejny raz.

Po poprawnym wygenerowaniu licencji musimy aktywować naszą konfigurację. Klikamy lewym przyciskiem myszy na Activate Configuration. Oprogramowanie zapyta nas o nadpisanie poprzedniej konfiguracji, zgadzamy się na to, po czym otrzymujemy informację o przejściu w trybie Run Mode. Jeśli w tym momencie pojawił się błąd informujący o problemie z systemami Windows 8 i nowszymi, w moim przypadku tak się stało dla Windows 10, należy zgodnie z instrukcją w oknie dialogowym przejść do folderu, w którym zainstalowaliśmy oprogramowanie …\TwinCAT\3.1\System i z uprawnieniami administratora uruchomić plik win8settick.bat. Po tej operacji niezbędne będzie ponowne uruchomienie komputera.

Po aktywacji trybu Run Mode możemy z poziomu zakładki Online i Functions w Axis 1 przetestować działanie naszej wirtualnej osi serwonapędu. Przechodzimy do pierwszej z nich, odnajdujemy grupę opcji Enabling, naciskamy na SET a następnie na All. Aktywowaliśmy w ten sposób napęd do pracy. Za pomocą przycisków F1 – F4 znajdujących się w dolej części okna, możemy teraz wysterować oś w wybranym przez nas kierunku. Po uzupełnieniu wartości parametrów Target Position i  Target Velocity za pomocą przycisku F5 wywołujemy funkcję ruchu bezwzględnego do zadanej pozycji. W trakcie wykonywania ruchu możemy zatrzymać oś za pomocą przycisku F6. Przyciski F8 i F9 odpowiadają kolejno za reset osi i wywołanie funkcji bazowania. Po przejściu do zakładki Functions możemy przetestować pozostałe opcje ruchu oferowane przez kontroler osi.

Połączenie osi ze sterownikiem PLC

Udało nam się do tej pory skonfigurować kontroler ruchu i przetestować ręcznie działanie wirtualnej osi. Przyszła pora na wykorzystanie sterownika PLC do sterowania naszym napędem. Zaczniemy od dodania do projektu nowego sterownika PLC. Odnajdujemy w drzewku projektu węzeł PLC, klikamy na niego prawym przyciskiem myszy i wybieramy z menu Add New Item…. Otworzy się okno przypominające to, które widzieliśmy podczas tworzenia nowego projektu. Wybieramy Standard PLC Project, a następnie w polu Name podajemy nazwę dla naszego projektu PLC. Ścieżkę dostępu pozostawiamy bez zmian. Po wykonaniu powyższych czynności naciskamy na przycisk Add.

Pierwszą rzeczą, jaką musimy zrobić w swoim projekcie PLC, jest dodanie odwołania do biblioteki Tc2_MC2. W drzewku projektu przechodzimy do PLC-> MotionPLC-> MotionPLC Project (zakładam, że projekt PLC nosi nazwę MotionPLC)  i klikamy prawym przyciskiem myszy na węzeł References. Kliknij Add library… w menu kontekstowym, aby otworzyć okno dialogowe. Możemy teraz znaleźć bibliotekę Tc2_MC2 w Motion-> PTP.

Następnie musimy zdefiniować zmienną typu AXIS_REF w swoim projekcie PLC. Stworzymy w tym celu listę zmiennych globalnych GVL. Naciśnij prawym przyciskiem myszy na GVLs, a następnie wybierz Add i Global variable list…. Otworzy się w ten sposób okno dialogowe, w którym należy podać nazwę naszej listy, użyjemy GVL. Operację zatwierdzamy przyciskiem Open. Otwieramy stworzoną przed chwilą listę i dodajemy pierwszą zmienną globalną Axis typu AXIS_REF. Trzeba teraz przeładować projekt. Z menu oprogramowania TwinCAT wybieramy BUILD -> Build Solution lub korzystamy ze skrótu klawiszowego Ctrl+Shift+B.

Zmienna Axis będzie teraz dostępna do połączenia z naszym kontrolerem ruchu. Wracamy teraz do NC_Task -> Axes -> Axis 1 i w zakładce Settings wybieramy Link To PLC…. Otworzy się okno dialogowe, w którym powinieneś zobaczyć stworzoną przez nas zmienną GVL.Axis. Wybieramy ją i zatwierdzamy przyciskiem OK. Udało nam się połączyć strukturę danych ze sterownika PLC do naszego kontrolera ruchu.

Funkcje sterowania osią

Czas na stworzenie prostego programu, który pozwoli nam na kontrolowanie wirtualnej osi. Sam program będzie prosty i zaprezentuję w nim tylko kilka podstawach funkcji, jakie oferuje biblioteka Tc2_MC2. Wszystkie użyte w programie funkcje zostały szczegółowo opisane na stronie internetowej firmy Beckhoff.

MC_Power – włączenie osi

Jest to najważniejszy blok funkcyjny, którego użyjemy w programie. MC_Power aktywuje zezwolenie programowe dla osi. Aktywacji dokonujemy poprzez podanie stanu wysokiego na wejście Enable. Dodatkowo włączenia można dokonać dla obu kierunków ruchu lub tylko dla jednego z nich. Na wyjściu Status wskazana jest gotowość operacyjna osi. W zależności od typu napędu Status sygnalizuje również gotowość napędu do pracy. Napędy cyfrowe dostarczają informację zwrotną o gotowości operacyjnej, podczas gdy napędy analogowe nie są w stanie dostarczyć tej informacji. W tym drugim przypadku Status wskazuje tylko na gotowość operacyjną strony kontrolnej. Wyście Error informuje nas o wystąpieniu błędu podczas pracy napędu. Jeśli wyjście Error zostało wysterowane, Parametr ErrorID podaje numer zaistniałego błędu.

MC_Reset – resetowanie błędów osi

MC_Reset resetuje nasza oś. W wielu przypadkach prowadzi to również do resetowania podłączonego urządzenia napędowego. W zależności od systemu magistrali lub typu napędu, w niektórych przypadkach może być wymagany oddzielny reset urządzenia napędowego.


MC_Halt – zatrzymanie osi

Aby zatrzymać wykonywaną funkcję pozycjonowania, wykorzystywany jest blok MC_Halt. Zatrzymuje on naszą oś ze zdefiniowaną rampą zatrzymania.

MC_Jog – sterowanie manualne

Blok funkcyjny MC_Jog umożliwia manualne przesuwanie osi za pomocą przycisków podłączonych bezpośrednio do sygnałów JogForward i JogBackwards. Dopóki któryś z sygnałów sterujących posiada stan wysoki, napęd pozostaje w ruchu. Żądany tryb pracy jest określany poprzez wejście Mode. Dostępny jest również tryb krokowy umożliwiający przesuwanie osi o określoną odległość po każdym naciśnięciu przycisku. Prędkość i dynamikę ruchu można określić w zależności od trybu pracy.

MC_Home – bazowanie osi

Za pomocą bloku funkcyjnego MC_Home wykonywane jest bazowanie osi. Funkcja, po pojawianiu się zbocza narastającego na wejściu Execute  pozwala na wyzerowanie pozycji naszej osi  na jeden z czterech różnych sposobów, który wybieramy w parametrze HominMode:

MC_DefaultHoming – Wykonuje standardowe bazowanie.

MC_Direct – Ustawia pozycję osi na zerową bez wykonywania ruchu.

MC_ForceCalibration – Wymusza stan Axis is calibrated. Nie następuje żaden ruch, a pozycja pozostaje niezmieniona.

MC_ResetCalibration – Resetuje stan kalibracji osi. Nie następuje żaden ruch, a pozycja pozostaje niezmieniona.

MC_MoveRelative – ruch względny

MC_MoveRelative uruchamia procedurę pozycjonowania względnego na podstawie aktualnej pozycji zadanej i monitoruje ruch osi na całej ścieżce ruchu. Oznacza to, że po pojawieniu się zbocza narastającego na wejściu Execute nasza oś przesunie się o wartość podaną w parametrze Distance.  Wyjście Done jest ustawiane po osiągnięciu pozycji docelowej. W przeciwnym razie otrzymujemy stan wysoki na wyjściu CommandAborted lub Error.

MC_MoveAbsolute – ruch bezwzględny

Funkcja ruchu bezwzględnego MC_MoveAbsolute rozpoczyna pozycjonowanie do bezwzględnej pozycji docelowej podanej w parametrze Position i monitoruje ruch osi na całej ścieżce ruchu. Wyjście Done jest ustawiane po osiągnięciu pozycji docelowej. W przeciwnym razie otrzymujemy stan wysoki na wyjściu CommandAborted lub Error.

MC_MoveVelocity – ruch z zadaną prędkością

MC_MoveVelocity rozpoczyna ciągły ruch z określoną prędkością i kierunkiem. Ruch wywoływany jest przez podanie zbocza narastającego na wejście Execute. Zatrzymanie osi dokonujemy  za pomocą polecenia stop np.  MC_Halt. Wyjście InVelocity jest ustawiane po osiągnięciu stałej prędkości. Po osiągnięciu stałej prędkości funkcja blokowania jest zakończona i nie ma dalszego monitorowania ruchu. Jeżeli polecenie zostanie przerwane podczas fazy przyspieszania, zostanie ustawione wyjście CommandAborted lub, w przypadku błędu, wyjście Error.

Testowanie programu

Pozostało nam tylko przetestowanie napisanego programu. Przeładuj program korzystając z BUILD -> Build Solution lub ze skrótu klawiszowego Ctrl+Shift+B, a następnie aktywuj konfigurację przyciskiem Activate Configuration. Jeśli jesteśmy w trybie Run Mode, odszukujemy przycisk Login. Jego naciśniecie otworzy okno dialogowe TwinCAT PLC Control, w którym zostaniemy zapytani o utworzenie i wgranie konfiguracji do naszej symulacji. Zatwierdzamy przyciskiem YES, odnajdujemy przycisk Start znajdujący się po prawej stronie od przycisku Login i uruchamiamy sterownik.

Po uruchomieniu sterownika czas na aktywację napędu. Możemy to zrobić z poziomu tabeli zmiennych lub odnajdując styk na wejściu Enable bloku MC_Power. W pierwszym przypadku klikamy dwukrotnie lewym przyciskiem myszy w kolumnie Prepared value obok zmiennej b_MCEnable, w drugim na styk przy wejściu Enable.  Przy naszym styku i w kolumnie Prepared value  wyświetli się stan, który przypisujemy do naszej zmiennej za pomocą przycisku Force values lub Write values.  Jeśli wyjście Status zmieniło stan na wysoki, oś została aktywowana i możliwe jest teraz przetestowanie przygotowanych przez nas funkcji. Podczas uruchamiania kolejnych bloków postępujemy analogicznie jak w przypadku bloku MC_Power, pamiętając o uzupełnieniu wartości niezbędnych parametrów takich jak prędkość i pozycja. Dodatkowo pod każdym blokiem sterującym osią umieściłem blok MOVE pobierający informacje o rzeczywistym położeniu naszej osi ze struktury AXIS_REF (parametr GVL.Axis.NcToPlc.ActPos), dzięki czemu na bieżąco możemy monitorować zmiany wywołane przez aktywowane funkcje ruchu. Podgląd parametrów ruchu dostępny jest również z poziomu zakładki Online, z której korzystaliśmy podczas manualnego testowania naszego kontrolera.

Podsumowanie

Z powyższego opisu dowiedzieliście się w jaki sposób w oprogramowaniu TwinCAT 3 dodać moduł kontroli ruchu oraz skonfigurować i wysterować z poziomu sterownika PLC serwonapęd, a to wszystko bez potrzeby podłączania rzeczywistych modułów. Dzięki rozbudowanemu symulatorowi mogliśmy tego dokonać posiadając jedynie komputer. Dodatkowo użyte przez nas bloki sterowania napędem spełniają normę IEC 61131-3 i są one używane również przez innych producentów automatyki. Pozwala to na wykorzystanie zdobytej wiedzy podczas pracy ze sterownikami innych firm niż Beckhoff.


Ocena artykułu zgłoszonego do Konkursu iAutomatyka 4.0 pisz artykuły, zdobywaj punkty, wymieniaj je na nagrody.

Kryterium 1 2 3 4 5 6 7 8 9 10
Punkty (0-2) 2 2 2 2 2 1 2 1 2 2
Suma zdobytych punktów: 18


Utworzono: / Kategoria: ,

Reklama



PRZECZYTAJ RÓWNIEŻ



NAJNOWSZE PUBLIKACJE OD UŻYTKOWNIKÓW I FIRM

Reklama



POLECANE FIRMY I PRODUKTY