Programowanie robota można porównać do rozmowy z obcokrajowcem. Jeżeli chcemy, żeby robot nas zrozumiał i wykonywał to o co go prosimy, musimy mówić jego „językiem”. Każdy z wymienionych robotów w niniejszym artykule ma właśnie taki własny „język”.

W poprzednich dwóch częściach omówiliśmy podstawowe zagadnienia dotyczące danych i ich typów w robotach firmy FANUC. Dziś przyjrzymy się temu tematowi bliżej dla robotów marek ABB i Kuka.

ABB

Pierwszą istotną rzeczą przy deklaracji zmiennych jest informacja czy wartość znajdująca się w danej zmiennej ma zostać zachowana przy restarcie programu/kontrolera lub też ma wrócić do wartości, która była podana przy deklaracji.

Wyróżniamy:
1) PERS – zalecane stosowanie, gdy chcemy, aby dane znajdujące się, w komórce były zachowane przy restarcie.
2) VAR – zalecane stosowanie w przypadku, gdy wartość znajdująca się w danej zmiennej ma wrócić do tej, która była wpisana przy deklaracji.

Do deklaracji stałych programowych używamy:
1) CONST – dane w komórce zachowują swoją wartość z deklaracji podczas wykonywania programu.
Drugą istotną informacją jest typ danych, jaki ma zawierać w sobie dana zmienna/stała. W środowisku programowym ABB możemy wyróżnić następujące przykładowe typy danych oraz podstawowe struktury:

a) BOOL – używany do przechowywania wartości TRUE/FALSE,

b) BYTE – typ danych obsługujący wartości całkowite odpowiadające jednemu bajtowi (od 0 do 255). Dodatkowo możemy dzięki niemu operować z funkcjami wykorzystującymi konwersje danych oraz pracę z poszczególnymi bitami,

c) NUM – możemy użyć przy deklaracji danych typu rzeczywistego (REAL), całkowitego (INT) oraz wykładniczego (przykładowo: 8E-5 = 8*10^(-5) = 0,00008 lub 5E3 = 5*10^3 = 5000),

d) DNUM – różnica pomiędzy NUM a DNUM jest w zakresie przechowywania danych typu całkowitego – DNUM może osiągnąć bardzo duże wartości (od -4503599627370496 do +4503599627370496 – ciekawe czy ktoś wykorzystał cały ten dostępny zakres 😊. Możecie pochwalić się w komentarzu na LinkedIn pod artykułem! Koniecznie napiszcie do czego ich użyliście),

e) STRING – używany do ciągu znaków. Istotną informacją jest maksymalna długość, która wynosi 80 znaków. Z takich ciekawostek możemy tutaj przytoczyć deklaracje cudzysłowu w ciągu znaków, którego należy zapisać podwójnie („„),

f) ROBTARGET – jedna z najważniejszych struktur danych w robocie. Jest to zapis kartezjański odnoszący się do punktu w przestrzeni.

W robotach ABB zawiera w sobie informacje jak:
– TRANS – typ danych POS zawierająca wartości x, y, z wyrażone w [mm] względem układu współrzędnych bądź Word robota. Składa się z trzech zmiennych typu NUM.
– ROT – typ danych ORIENT. Określa orientację narzędzia robota w przestrzeni. Istotną informacją jest, sposób zapisu, który wyrażamy w kwaternionach, a nie w kątach obrotu jak w przypadku robota FANUC. Składa się z czterech zmiennych typu NUM.
– ROBCONF – typ danych CONFDATA. Odnosi się do konfiguracji osi robota, a dokładniej do aktualnej ćwiartki obrotu dla osi 1,4,6 oraz parametru cfx (zależy od typu robota) Składa się z czterech zmiennych typu NUM.
– EXTAX – typ danych EXTJOINT. Poszczególne argumenty zawierają w sobie informację o kącie obrotu w stopniach (osie obrotowe) lub pozycję w milimetrach (osie liniowe). Wartość 9E9 informuje o braku wartości w danym argumencie i tak też kontroler będzie go interpretował. Jeśli oś jest aktywna to w takim wypadku spowoduje to błąd. Domyślnie składa się z sześciu zmiennych typu NUM.

g) JOINTTARGET – alternatywna struktura danych do zapisu pozycji robota w przestrzeni za pomocą wartości osiowych.

Składa się z:
– ROBAX – typ danych ROBJOINT. Definiuje pozycję poszczególnych osi robota wyrażone jako obrót. Składa się z standardowo z sześciu wartości typu NUM
– EXTAX – definicja jest identyczna jak dla wyrażania pozycji w ROBTARGET.

h) SPEEDDATA – struktura składająca się z czterech wartości NUM określające prędkość poruszania zarówno robota jak i osi zewnętrznych.

Budowa:
– V_TCP – wartość prędkości TCP (Tool Center Point) wyrażona w [mm/s],
– V_ORI – wartość reorientacji TCP wyrażona w [deg/s],
– V_LEAK – wartość jednostek liniowych jako osie zewnętrzne robota wyrażone w [mm/s],
– V_REAX – wartość jednostek obrotowych wyrażona w [deg/s].

Przykład wyżej wymienionych deklaracji w środowisku dla robotów ABB – RobotStudio:

Uczymy się języka robotów foto 1 cz 3 blog Robo Challenge

Przykład wyżej wymienionych deklaracji w środowisku dla robotów ABB – RobotStudio

Język programowania w robotach ABB jest zbliżony do tego dostępnego w KAREL dla robotów FANUC. Producent robotów FANUC podszedł trochę inaczej do łatwości programowania i stworzył już gotowe typy danych oraz struktury (R[], PR[], SR[]), które są w podstawowym programowaniu łatwiejsze i nie wymagają dużego zastanowienia nad tym co mają „w sobie” przechowywać rejestry. Warto jednak się pochylić nad tym co skrywają te struktury, które tak de facto w każdym programie robota spotykamy i używamy. Myślę, że niejeden czytelnik tego artykułu, gdy kolejnym razem weźmie panel do ręki to spojrzy na to trochę z innej strony 😊

KUKA

I tak na koniec dla zamknięcia tematyki „naukowej” do kompletu trójcy brakuje deklaracji danych programowych od firmy KUKA. Dla tego środowiska deklaracje zmiennych i stałych oraz podstawowe struktury wyglądają następująco:

a) BOOL – przechowuje stan logiczny TRUE/FALSE,

b) INT – deklaracja typu całkowitego z zakresu od -2147483647 od 2147483647

c) REAL – dane typu rzeczywistego, czyli np. (-1.523) , 0.4232 , 213439.09,

d) CHAR – ciąg znaków ASCII,

e) E6POS – pierwsza z podstawowych struktur. Przechowuje dane odnoszące się do położenia robota w przestrzeni, używając zapisu kartezjańskiego. Standardowo posiada trzy wartości dla pozycji X,Y,Z oraz trzech wartości informujących o orientacji w przestrzeni A,B,C wszystkie zapisane przy użyciu typu rzeczywistego. Istotne jest, iż w robotach KUKA obrót A jest wokół osi Z, B-Y oraz C-X. Kolejne sześć wartości rzeczywistych jest przeznaczonych dla osi zewnętrznych. Ostatnie dwa parametry status (S) oraz turn (T) jednoznacznie definiują położenie poszczególnych osi w przestrzeni używając wartości całkowitych. Z takich ciekawostek, które można tutaj dopisać to sam zapis wartości może być w postaci bajtu ‘B00001001’ lub też liczbowo jako 9,

f) E6AXIS – struktura danych opisująca położenie robota w przestrzeni, składająca się z sześciu wartości odnoszących się do osi robota oraz sześciu dla osi zewnętrznych. Każda z nich jest typu rzeczywistego. W przypadku gdy oś zewnętrzna jest nieużywana dany argument odnoszący się do wartości osi wynosi 0.0.

Deklaracja wyżej wymienionych typów oraz struktur w środowisku programowania robotów KUKA – WorkVisual:

Uczymy się języka robotów foto 2 cz 3 blog Robo Challenge

Deklaracja wyżej wymienionych typów oraz struktur w środowisku programowania robotów KUKA – WorkVisual

Na koniec tego artykułu można się jeszcze zatrzymać przy dość istotnej kwestii, a mianowicie przy deklaracjach lokalnych oraz globalnych. Jako zmienne typu lokalnego możemy określić deklaracje, które odnoszą się do danego bloku programu i tylko w jego obrębie „żyją”.

Analogicznie zmienne typu globalnego mogą być modyfikowane w obrębie całego programu. Należy zawsze starać się używać jak najwęższego zasięgu zmiennej. Przykładowo zmiennymi przydatnymi jako zmienne globalne mogą być nazwy sygnałów, stany liczników, aktualna pozycja robota. Jako zmienne lokalne możemy zdefiniować te dane, które nie będą nigdy wykorzystywane przez żaden inny program.
Dla robotów firmy FANUC zmienne globalne to rejestry (R[]), rejestry pozycji (PR[]) oraz rejestry znaków (SR[]).

Zmienne lokalne możemy zadeklarować w programach KAREL oraz rejestry argumentów (AR[]). Dla robotów ABB możemy określić zmienną jako lokalną dla modułu dodając przed deklaracją jej typu dopisek LOCAL, natomiast, aby zmienna odnosiła się do całego taska – przedrostek TASK. Jest też opcja stworzenia danej zmiennej widocznej dla wszystkich taksów. W środowisku KUKA, aby zmienna była globalna, należy na końcu modułu dodać dopisek PUBLIC, a następnie przy deklaracji zmiennej zastosować przedrostek GLOBAL. Aby zobrazować teorię to dla ABB i KUKA wygląda to następująco.

ABB

KUKA plik .SRC:

KUKA plik .DAT:

Z takich jeszcze ciekawostek, o których można wspomnieć na koniec to obliczanie obrotów w robotach KUKA i FANUC. Oba te roboty opierają się na wartościach kąta obrotu jednak różnią się sposobem jego realizacji. Dla robotów FANUC korzystamy z obrotów RPY (Roll, Pitch, Yaw) natomiast KUKA używa kątów Eulera. Ma to istotny wpływ na kolejność obliczeń transformacji o poszczególne kąty.

Dobrnęliśmy do tego etapu artykułu, w którym już należałoby zamknąć rozpoczęty temat 😊. Z mojej strony (jeśli dotarłeś drogi czytelniku do tego momentu) chciałbym podziękować za poświęcony czas i mam nadzieję, że część z tej wiedzy wykorzystasz w przyszłości. Mi jako autorowi było miło przekazać jakąś część z posiadanej wiedzy. Należę do RoboTeamu z firmy Robotycy.com – firmy, która ma dość spore portfolio z zakresu robotyki i liczę na to, że spotkamy się na jakimś projekcie 😊.

Miłego dnia!!! (lub nocy).

Autor: Karol Grońskirobotycy.com

robotycy.com partner Robo Challenge logo