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”.
Kluczowe w tym aspekcie jest poznanie „słownictwa i gramatyki”. Dziś przybliżymy podstawowe pojęcia, które pozwolą nam zgrubnie zarysować temat.
W pierwszej i drugiej części tego artykuły skupimy się na przybliżeniu pojęcia stałej i zmiennej programowej oraz na ich występowaniu w środowisku programowym FANUC. W drugiej części przejdziemy do porównania przedstawionych deklaracji danych z części pierwszej w środowiskach innych robotów.
Typy deklaracji danych jakie możemy spotkać w robocie
Jak już wspomniałem we wstępie jednym z nieodłącznych elementów podczas programowania jest zastosowanie zmiennych i stałych programowych.
Zmienne i stałe to takie szuflady w szafie, gdzie odkładamy nasze rzeczy. Jedna z nich będzie na sztućce, inna na sweterki więc lepiej znać przeznaczenie każdej z nich. Używając tego porównania możemy przyjąć, że jako „stałe” będziemy traktować te szuflady, w których zawsze znajdują te same rzeczy (jak oszklony kredens cioci, na który można tylko patrzeć).
Jeżeli natomiast będziemy ciągle z tych szuflad coś wyciągać i wkładać to będą to „zmienne”. Jako zmienne programowe możemy zdefiniować miejsca w pamięci, które w zależności od zadeklarowanego typu przechowują dane. Są one jednym z najważniejszych elementów podczas tworzenia różnego rodzaju aplikacji. Jak sama nazwa wskazuje – zmienna może (a nawet musi) zmieniać swoją „zawartość” podczas wykonywania programu. Oprócz samej nazwy ważne jest, aby zadeklarować jej typ.
Należy się zastanowić w jakim celu tworzymy daną zmienną i jaką funkcję ma pełnić w aplikacjach. Deklaracja typu jest możliwa do zmiany w przyszłości, gdy uznamy, że taki zabieg jest konieczny, ale warto starać się trzymać pierwotnych założeń. Taka reguła jest o tyle ważna, że najprawdopodobniej, wprowadzenie zmian na tak fundamentalnym poziomie zazwyczaj spowoduje konieczność głębokiego „debugowania” – czyli poprawienie i usunięcie zaistniałych błędów.
Najpopularniejsze typy zmiennych występujące w większości języków programowych to:
– INTIGER – są to zmienne typu całkowitego np.: -19, 0, 2…,
– REAL – są to zmienne typu rzeczywistego (tzw. „z kropką”) np.: -13.232 , 0.232 , 43.1…,
– CHAR – są to zmienne reprezentujące jeden znak tekstu (czasem łączone w ciąg czyli tytułowy STRING) np.: ‘R’ , ’o’ , ‘1’,
– BOOL – są to zmienne posiadające wartość logiczną np.: TRUE/FALSE, 1/0.
W zależności od języka programowego mogą się one różnić nazwą (int, real itd.), zakresami „zapamiętywania danych” i możliwościami zastosowania.
Prostsza sprawa jest z definicją stałej, ponieważ jest to zakres pamięci, który chcemy zabezpieczyć przed modyfikacją przez cały okres wywoływania programu. Najczęściej definiuje się ją jako CONST (constans) i dodaje jej typ. Jest to dla programu (i programisty) wygodna i bezpieczna forma „zapamiętywania” wartości, której nie chcemy „przez przypadek” nadpisać w czasie wykonywania programu. Takim klasycznym przykładem jest tu na przykład używanie do obliczeń stałych matematycznych, np. π.
Teraz trochę bardziej szczegółowo omówimy to zagadnienie z podziałem na kilka typów robotów.
Dla przykładu w środowisku programowania firmy FANUC z poziomu programowania panelu robota, mamy dostępne gotowe typy danych. Budowa takiej struktury wygląda następująco:
Typ zmiennej [Numer zmiennej (wartość całkowita) : Nazwa zmiennej ]= Wartość
Podstawowe typy danych jakie możemy wykorzystać podczas programowania z poziomu panelu robota:
a) Rejestry (R[numer]):
Rejestry są przeznaczone dla wartości liczbowych (dodatnich i ujemnych). Możemy w nich zapisać zarówno wartości całkowite i rzeczywiste. Podczas tworzenia programów odwołuje się do nich na podstawie numeru (przykładowo R[1]), a nazwa rejestru jest tylko informacją dla operatora/programisty za co odpowiada lub do czego dany rejestr jest wykorzystywany. Są to zmienne globalne (mogą zostać użyte w każdym programie) z możliwością edycji i zmiany.
b) Rejestry pozycji (PR[numer]):
O samych rejestrach pozycji i ich budowie oraz możliwościach można napisać obszerny artykuł jednak w tym skupimy się o ich podstawowej budowie i typach zmiennych jakie w sobie skrywają.
W rejestrach pozycji zapisujemy wartości dotyczące pozycji robota w przestrzeni. Można je wykorzystać używając wartości kartezjańskich: XYZ oraz obroty W (wokół osi X), P (Y), R (Z). Istotną informacją jest, aby wiedzieć w jakiej bazie oraz narzędziu zostały zapisane, ponieważ są to zmienne globalne (dostępne do edycji i wykorzystania w każdym programie) posiadające wartości pozycji o typie rzeczywistym. W obszarze konfiguracji (CONF) możemy określić orientacje osi.
Jest to ważny parametr dla robota, ponieważ robot może osiągnąć jedną pozycje kartezjańską mając w różny sposób ułożone osie. W samej konfiguracji dostępne są dwa typy zmiennych. Pierwszy zapisany literami N(non-flip)/F(flip) , U(up)/D(down), T(Front)/B(Back) określane jako zmienne dwustanowe,. Drugi typ to wartości liczbowe z zakresu od -9 do 9. Najczęściej przy robotach spotykamy wartości -1,0,1. Same wartości liczbowe w konfiguracji to typ zmiennych całkowitych.
W celu lepszego zobrazowania konfiguracji robota w przestrzeni posłużę się kilkoma zdjęciami z symulacji w Roboguide, na których robot osiąga taką samą pozycję kartezjańską wraz za zachowaniem zadeklarowanych kątów obrotu, ale posiadającego inne ułożenie osi:
– Konfiguracja NUT000
– Konfiguracja FUT000
– Konfiguracja NDT000
– Konfiguracja FDT000
KONIEC CZĘŚCI PIERWSZEJ
Autor: Karol Groński – robotycy.com