Ruch po ścieżce i łączenie ruchów – kurs Trio Motion cz. IV

Opublikowano

6 lipca 2020

Ruch helikalny

MHELICAL jest komendą odpowiedzialną za generowanie ruchu spiralnego.

MHELICAL(koniec_1, koniec_2, srodek_1, srodek_2, kierunek, dystans_3, [, tryb])

Polecenie prowadzi do ruchu o interpolacji kołowej, na dwóch pierwszych osiach w tabeli BASE, przy jednoczesnym ruchu liniowym na trzeciej osi. Pierwsze 5 parametrów jest podobnych do parametrów polecenia MOVECIRC natomiast szósty parametr określa dystans na jaki ma się przemieścić trzecia oś. Opis parametrów:

koniec1pozycja zakończenia ruchu, względem punktu startowego, na pierwszej osi w tablicy BASE
koniec2pozycja zakończenia ruchu, względem punktu startowego, na drugiej osi w tablicy BASE
srodek1pozycja środka łuku, względem punktu startowego, na pierwszej osi w tablicy BASE
srodek2pozycja środka łuku, względem punktu startowego, na drugiej osi w tablicy BASE
kieruneksposób definiowania kierunku wykonywania ruchu
•  0 – kierunek przeciwny do ruchu wskazówek zegara
•  1 – kierunek zgodny z ruchem wskazówek zegara
•  2 – kierunek ruchu wyznaczany w taki sposób aby ruch odbywał się po krótszej ścieżce
•  3 – kierunek ruchu wyznaczany w taki sposób aby ruch odbywał się po dłuższej ścieżce
dystans_3 dystans do przebycia przez trzecią oś w tablicy BASE w jednostkach użytkownika
trybWybór sposobu działania polecenia
tryb = 0 / brak parametru – interpolacja ruchu trzeciej osi wraz z dwiema pierwszymi wykonującymi ruch główny podczas kalkulacji prędkości w ruchu po ścieżce (prawdziwa ścieżka spiralna)
tryb =1 – interpolacja tylko dwóch pierwszych osi w celu wyliczenia prędkości w ruchu po ścieżce oraz koordynacja ruchu trzeciej osi z dwiema pierwszymi (ścieżka kołowa z ruchem nadążnym trzeciej osi)

Przykład 1. Narzędzie porusza się po zaokrąglonym prostokącie (z wykorzystaniem osi 0 oraz 1) w taki sposób aby oś X narzędzia była normalna do toru ruchu przez cały czas jego trwania (oś 2 stanowi oś obrotu narzędzia). Parametr UNITS 2 osi został tak dobrany aby oś była skalibrowana w stopniach. W trybie drugim (tryb = 1) parametr UNITS trzeciej osi nie ma wpływu na prędkość ruchu dwóch pierwszych osi, natomiast w trybie pierwszym (tryb = 0) ma on wpływ na parametry wyznaczane przez kontroler dla danego ruchu.

ruch po ścieżce

Układ współrzędnych narzędzia został dobrany w taki sposób aby symulacja w jak najlepszym stopniu obrazowała działanie komendy MHELICAL.

Do wykonania powyższego zadania zostało użyte polecenie MHELICAL w trybie 0. Kod programu (z pominięciem części kalibracyjnej):

BASE(0, 1, 2)
MERGE = ON ‘ włączenie funkcji łączenia ruchów
MOVE(0, –1600)
MHELICAL(300, –300, 300, 0, 0, 90, 0)
MOVE(1200,0)
MHELICAL(300, 300, 0, 300, 0, 90, 0)
MOVE(0,800)
MHELICAL(-300, 300, –300, 0, 0, 90, 0)
MOVE(-1200,0)
MHELICAL(-300, –300, 0, –300, 0, 90, 0)

WAIT IDLE ‘ oczekiwanie na zakończenie ruchów

MERGE = OFF ‘ wyłączenie funkcji łączenia ruchów

ruch po ścieżce

Przykład 2. Wycinarka wykorzystuje dwie pierwsze osie w sposób podobny do zachowania plotera XY. Trzecia oś służy do utrzymania płaszczyzny ostrza w położeniu stycznym do toru ruchu. Urządzenie powinno utrzymywać stałą prędkość cięcia (stałą prędkość wynikową dla dwóch pierwszych osi).

ruch po ścieżceW celu rozwiązania takiego problemu użyta powinna zostać metoda MHELICAL (w częściach łukowych ścieżki) w trybie 1 aby parametr UNITS osi służącej do obrotu noża nie miał wpływu na prędkość wynikową dwóch pierwszych osi.

Ruch po ścieżce sferycznej

Ruch po ścieżce sferycznej w języku TrioBASIC reprezentowany jest poprzez polecenie:

MSPHERICAL([parametry_trybu], tryb, [, gtpi] [, rotau] [, rotav] [, rotaw])

Jego zadaniem jest synchronizacja grupy 3 pierwszych osi zdefiniowanych w tabeli BASE w taki sposób aby ścieżka ruchu miała postać krzywej sferycznej, a sam ruch przebiegał z prędkością równą parametrowi SPEED pierwszej z nich. Sam ruch może odbywać się w czterech trybach definiowanych poprzez parametr tryb w zależności od którego różni się znaczenie 6 parametrów kryjących się pod oznaczeniem parametry_trybu w składni polecenia.

Omawianie możliwości oraz sposobu użycia komendy MSPHERICAL rozpoczniemy od opisu parametrów (z pominięciem parametry_trybu do których wrócimy w momencie opisu poszczególnych trybów działania komendy):

trybwybór jednego z czerech sposobów definicji krzywej sferycznej
•  tryb = 0 – definicja krzywej za pomocą punktu końcowego oraz punktu pośredniego należącego do krzywej
•  tryb = 1 – definicja krzywej za pomocą punktu końcowego oraz środka sfery do której należy krzywa
•  tryb = 2 – definicja krzywej stanowiącej pełny okrąg poprzez podanie dwóch punktów pośrednich należących do niej
•  tryb = 3 – definicja krzywej stanowiącej pełny okrąg poprzez podanie punktu pośredniego należącego do krzywej oraz środka sfery do której ona należy
gtpi[ parametr opcjonalny ]; ustalenie wartości x tego parametru spełniającej warunek INT(x) <> 0 (INT(x) – komenda konwertująca wartość x na liczbę całkowitą – działa poprzez odcięcie części liczby znajdującej się po przecinku; <> – oznacza „nie jest równy”) w trybie 0 lub 1 spowoduje wykonanie ruchu do sprecyzowanego punktu końcowego w przeciwnym kierunku (z pominięciem punktu pośredniego)
rotau[ parametr opcjonalny ]; jeśli ten parametr nie jest równy zero to czwarta oś w tabeli BASE wykona ruch interpolowany liniowo w trakcie trwania ruchu trzech pierwszych osi z tabeli po ścieżce sferycznej. Oś wykona ruch na odległość równą najbliższej wartości całkowitej do wartości podanego parametru (rotau = -112.3 → ruch na odległość równą -112 jednostek użytkownika)
rotav[ parametr opcjonalny ]; działanie takie samo jak parametru rotau z tym, że dodatkowy ruch wykonywany jest na piątej osi w tabeli BASE
rotaw [ parametr opcjonalny ]; działanie takie samo jak parametru rotau z tym, że dodatkowy ruch wykonywany jest na szóstej osi w tabeli BASE

Ciekawym sposobem na wykorzystanie omawianej komendy jest ustawienie parametrów dla trzeciej osi jako równych zeru (oraz definicja jej jako wirtualnej jeśli posiadamy tylko dwie osie), co pozwoli nam na wykonywanie ruchów o interpolacji kołowej bez znajomości środka łuku. Opis trybów (z pominięciem parametrów opcjonalnych; parametry krzywej podobnie jak w komendzie MOVECIRC podawane są względem ostatniej pozycji przed wykonaniem omawianego ruchu):

tryb=0MSPHERICAL(koniec_x, koniec_y, koniec_z, p_pos_x, p_pos_y, p_pos_z, 0)
Wykonanie ruchu, przez grupę trzech pierwszych osi w tabeli BASE, po krzywej sferycznej przy definicji jej poprzez punkt końcowy oraz punkt pośredni. Ruch jest wykonywany w taki sposób aby przejść przez punkt pośredni i dotrzeć do punktu końcowego.
•  koniec_x – końcowa pozycja, względem punktu startowego, pierwszej osi
•  koniec_y – końcowa pozycja, względem punktu startowego, drugiej osi
•  koniec_z – końcowa pozycja, względem punktu startowego, trzeciej osi
•  p_pos_x – pozycja pośrednia, względem punktu startowego, pierwszej osi
•  p_pos_y – pozycja pośrednia, względem punktu startowego, drugiej osi
•  p_pos_z – pozycja pośrednia, względem punktu startowego, trzeciej os
tryb=1 MSPHERICAL(koniec_x, koniec_y, koniec_z, srodek_x, srodek_y, srodek_z, 1)
Wykonanie ruchu, przez grupę trzech pierwszych osi w tabeli BASE, po krzywej sferycznej przy definicji jej poprzez punkt końcowy oraz punkt środka sfery na której jest opisana krzywa. Ruch odbywa się w kierunku w którym droga do punktu końcowego będzie krótsza.
Istnieje pewne ograniczenie odnośnie wprowadzanych parametrów ponieważ punk będący środkiem sfery nie może leżeć na prostej przechodzącej przez punkt początkowy oraz punkt końcowy – w związku z tym nie możemy za pomocą tego trybu poruszać się po krzywych stanowiących półokręgi.
•  koniec_x – końcowa pozycja, względem punktu startowego, pierwszej osi
•  koniec_y – końcowa pozycja, względem punktu startowego, drugiej osi
•  koniec_z – końcowa pozycja, względem punktu startowego, trzeciej osi
•  srodek_x – pozycja środka sfery, względem punktu startowego, do której należy krzywa dla pierwszej osi
•  srodek_y – pozycja środka sfery, względem punktu startowego, do której należy krzywa dla drugiej osi
•  srodek_z – pozycja środka sfery, względem punktu startowego, do której należy krzywa dla trzeciej osi
tryb=2MSPHERICAL(p_pos2_x, p_pos2_y, p_pos2_z, p_pos1_x, p_pos1_y, p_pos1_z, 2)
Wykonanie ruchu po krzywej sferycznej zamkniętej, przez grupę trzech pierwszych osi w tabeli BASE, przy definicji jej poprzez dwa punkty pośrednie. Ruch jest wykonywany w taki sposób aby przejść przez pierwszy punkt pośredni, kolejnie przez drugi i dotrzeć z powrotem do punktu startowego.
• p_pos2_x – współrzędna pierwszego punktu pośredniego względem punktu startowego osi pierwszej
• p_pos2_y – współrzędna pierwszego punktu pośredniego względem punktu startowego osi drugiej
• p_pos2_z – współrzędna pierwszego punktu pośredniego względem punktu startowego osi trzeciej
• p_pos1_x – współrzędna drugiego punktu pośredniego względem punktu startowego osi pierwszej
• p_pos1_y – współrzędna drugiego punktu pośredniego względem punktu startowego osi drugiej
• p_pos1_z – współrzędna drugiego punktu pośredniego względem punktu startowego osi trzeciej
tryb=3MSPHERICAL(p_pos_x, p_pos_y, p_pos_z, srodek_x, srodek_y, srodek_z, 3)
Wykonanie ruchu po krzywej sferycznej zamkniętej, przez grupę trzech pierwszych osi w tabeli BASE, przy definicji jej poprzez punkt pośredni oraz punkt środka sfery na której jest opisana krzywa. Ruch odbywa się w takim kierunku aby przebyta droga do punktu pośredniego była jak najkrótsza, a sam ruch odbywa się przez punkt pośrednie w celu ponownego dotarcia do punktu startowego.
Punk będący środkiem sfery nie może leżeć na prostej przechodzącej przez punkt początkowy oraz punkt pośredni.
•  p_pos_x – pozycja pośrednia, względem punktu startowego, pierwszej osi
•  p_pos_y – pozycja pośrednia, względem punktu startowego, drugiej osi
•  p_pos_z – pozycja pośrednia, względem punktu startowego, trzeciej osi
•  srodek_x – pozycja środka sfery, względem punktu startowego, do której należy krzywa dla pierwszej osi
•  srodek_y – pozycja środka sfery, względem punktu startowego, do której należy krzywa dla drugiej osi
•  srodek_z – pozycja środka sfery, względem punktu startowego, do której należy krzywa dla trzeciej osi

Jeśli w wywołaniu komendy MSPHERICAL pojawią się parametry nie pozwalające na wyznaczenie krzywej, kontroler zatrzyma program wystawiając kod błędu w parametrze RUN_ERROR (run time error; RUN_ERROR = 31 oznacza normalne zatrzymanie programu).

Przykład 1. Ruch po ścieżce sferycznej , w płaszczyźnie leżącej pod kątem 45 stopni do płaszczyzny XZ, który kończy się 800 mm powyżej płaszczyzny XY.

ruch po ścieżce

promien = 800 ‘ promien sfery
alfa = PI/4 ‘ kat odchylenia plaszczyzny ruchu od plaszczyzny XZ
start_x = 0
start_y = 0
start_z = 0
koniec_x = start_x + promien * COS(alfa)
koniec_y = start_y + promien *
SIN(alfa)
koniec_z = start_z + promien
p_pos_x = (koniec_x – start_x) * (
1COS(PI/4))
p_pos_y = (koniec_y – start_y) * (
1COS(PI/4))
p_pos_z = (koniec_z – start_z) *
SIN(PI/4)
DEFPOS(0) AXIS(0) ‘ wyzerowanie aktualnej współrzędnej osi 0
DEFPOS(0) AXIS(1) ‘ wyzerowanie aktualnej współrzędnej osi 1
DEFPOS(0) AXIS(2) ‘ wyzerowanie aktualnej współrzędnej osi 2
BASE(0, 1, 2)
SPEED = 5000
ACCEL = 500000
DECEL = DECEL
MSPHERICAL(koniec_x, koniec_y, koniec_z, p_pos_x, p_pos_y, p_pos_z, 0)

ruch po ścieżce

Przykład 2. Rozwiązanie problemu podobnego do opisanego w powyższym przykładzie jednak z ruchem w przeciwnym kierunku i dodatkowym ruchem układu XY dwóch osi stanowiącym przesunięcie o wektor (1131, 1131).

Wyznaczanie parametrów pozostaje niezmienione względem poprzedniego przykładu więc odpowiednia część kodu zostanie pominięta.

DEFPOS(0) AXIS(0) ‘ wyzerowanie aktualnej współrzędnej osi 0
DEFPOS(0) AXIS(1) ‘ wyzerowanie aktualnej współrzędnej osi 1
DEFPOS(0) AXIS(2) ‘ wyzerowanie aktualnej współrzędnej osi 2
DEFPOS(0) AXIS(3) ‘ wyzerowanie aktualnej współrzędnej osi 3
DEFPOS(0) AXIS(4) ‘ wyzerowanie aktualnej współrzędnej osi 4
‘ definicja dodatkowych dwóch osi wykonujących równoczesny ruch interpolowany
BASE(0, 1, 2, 3, 4)
SPEED = 5000
ACCEL = 500000
DECEL = DECEL
MSPHERICAL(koniec_x, koniec_y, koniec_z, p_posr_x, p_posr_y, p_posr_z, 0, 1, 1131, 1131)

ruch po ścieżce

Łączenie ruchów

W punkcie traktującym o komendzie MHELICAL pojawiło się polecenie MERGE, które odpowiada za funkcjonalność pozwalającą na łączenie ze sobą ruchów o profilowanej prędkości (FORWARD, REVERSE, MOVE, MOVEABS, MOVECIRC, MHELICAL, MSPHERICAL). Wspomniane ruchy nie mogą jednak być łączone z ruchami wiązanymi (CONNECT, MOVELINK, CAMBOX). Działanie MERGE polega na przejściach pomiędzy aktualnie wykonywanymi ruchami, a ruchami buforowanymi bez spadku prędkości do zera.

Przy wykonywaniu takiej operacji programista musi mieć pewność, że jego działania są sensowne ponieważ przykładowy zabieg łączenia ruchów o przeciwnych zwrotach będzie wiązał się z próbą natychmiastowej zmiany zwrotu wektora ruchu (do czego potrzebne byłoby przyspieszenie o nieskończonej wartości). Aby łączenie ruchów przyniosło oczekiwany skutek muszą być spełnione dwa warunki:

  • kolejny ruch musi znajdować się w buforze
  • używana grupa osi nie może ulec zmianie w trakcie wykonania ruchu wiążącego ze sobą wiele osi

W związku z powyższym w sytuacji łączenia ze sobą krótkich ruchów potrzebnym może się okazać zwiększenie limitu buforowanych komend za pomocą LIMIT_BUFFERED.

Flagi MERGE używamy w następujący sposób:

  • MERGE = ON – komendy ruchu będą łączone
  • MERGE = OFF – komendy ruchu nie będą łączone

Dobrą praktyką w przypadku używania funkcjonalności łączenia ruchów będzie ustawianie flagi MERGE = OFF w którym przestaje ona być potrzebna. Jednak zanim tego dokonamy należy użyć polecenia WAIT IDLE, które powoduje oczekiwanie programu w danej linii na zakończenie ruchów ostatnio definiowanej grupy osi – ma to na celu zapobiegnięcie wyłączeniu flagi łączenia ruchów jeszcze w trakcie ich wykonywania.

Zapraszamy do kolejnej części kursu.

blank

Autor: Artur Sobas

Świeżo upieczony Inżynier, student II stopnia Inżynierii Mechatronicznej na Akademii Górniczo – Hutniczej im. Stanisława Staszica w Krakowie. Związany z firmą od czasów szkoły średniej poprzez uczestnictwo w szkoleniach i późniejsze praktyki. Obecnie Doradca Techniczny na co dzień zajmujący się projektowaniem stanowisk szkoleniowych oraz demonstracyjnych. Od wielu lat w kręgu jego zainteresowań miejsce znajduje szeroko pojęta automatyka.