Metody programowania robotów przemysłowych, cz. 4
prof. dr hab. inż. Cezary Zieliński drukuj
Ostatnią część cyklu artykułów poświęcono programowaniu robotów firmy FANUC oraz podsumowaniu, co z tego przeglądu wynika.
W poprzednich numerach miesięcznika AUTOMATYKA przedstawiono ogólną problematykę związaną z metodami programowania robotów przemysłowych oraz trzy konkretne przykłady sposobów programowania robotów firm: Universal Robots, ABB Ltd i Stäubli International AG. Ostatnią część cyklu artykułów poświęcono programowaniu robotów firmy FANUC oraz podsumowaniu, co z tego przeglądu wynika.
Roboty firmy FANUC
Sterownik robota FANUC odpowiedzialny jest za sterowanie ramieniem robota oraz innymi urządzeniami do niego dołączonymi. Podstawowym urządzeniem służącym do komunikowania się operatora ze sterownikiem jest panel programowania TP (teach pendant), który jest dołączony do sterownika za pomocą kabla. Panel ten służy do:
- ręcznego sterowania ruchami robota,
- tworzenia programów użytkowych,
- testowego bądź automatycznego ich odtwarzania,
- konfigurowania systemu,
- określania aktualnego stanu systemu.
Panel programowania, prócz klawiszy numerycznych oraz aktywujących szereg funkcji, wyposażony jest w ekran dotykowy (touch panel), na którym wyświetlane są okienka umożliwiające komunikację między operatorem a sterownikiem. W zależności od aktualnych działań operatora wygląd wyświetlanych okienek i ich zawartość się zmieniają, by dostosować zawartość do aktualnie realizowanej funkcji.
Zastosowanie panelu programowania nie jest jedynym sposobem programowania robota. Roboty FANUC mogą być programowane na kilka sposobów:
- za pomocą panelu programowania iPendant, z użyciem języka ikonicznego (graficznego),
- wykorzystując oprogramowanie symulacyjne Roboguide,
- korzystając z edytora tekstowego na dowolnym komputerze klasy PC lub
- na komputerze zewnętrznym z użyciem języka KAREL.
W zasadzie zarówno panel programowania, jak i oprogramowanie Roboguide korzystają z tego samego języka programowania, ponieważ w Roboguide odtworzono graficznie wygląd panelu. Niemniej jednak Roboguide ma rozbudowany interfejs graficzny symulujący wygląd gniazda obróbczego zawierającego robota.
Oprogramowanie symulacyjne Roboguide
Roboguide umożliwia przede wszystkim tworzenie graficznej trójwymiarowej symulacji wykonania programu w gnieździe roboczym. Przygotowanie symulacji wymaga:
- wyboru typu robota spośród wszystkich typów oferowanych przez firmę FANUC,
- selekcji jednego z wielu typów sterowników,
- zdefiniowania urządzeń i innych obiektów, które znajdują się w gnieździe,
- określenia programu czynności, które mają być wykonane.
Rozróżniono dwa rodzaje obiektów, które mogą współegzystować w gnieździe. Są to: część (part) oraz urządzenie mocujące (fixture) dostarczające lub odbierające obiekty. Oba typy obiektów można stworzyć z brył podstawowych lub korzystając z rysunków CAD. Roboguide zawiera dużą bibliotekę gotowych rysunków CAD różnych typów obiektów, a co więcej rysunki te są sparametryzowane, więc można dostosowywać ich wygląd do potrzeb tworzonego gniazda. W trakcie aranżowania widoku gniazda oraz symulacji wykonania programu można zmieniać punkt widzenia, co wydatnie ułatwia ustawianie obiektów.
Obiekty przesuwa się i obraca poruszając nimi za pomocą kursora albo wprowadzając numeryczne współrzędne początku układu współrzędnych oraz jego orientację względem globalnego układu odniesienia. Zarówno z częściami, jak i urządzeniami związany jest szereg parametrów. Ponieważ części przemieszczają się w trakcie obróbki, trzeba ustalić, w którym miejscu gniazda się pojawią, a w którym znikną. Co więcej, należy określić, po jakim czasie znajdzie się w miejscu wejściowym replika tego obiektu. W ten sposób można zobrazować powtarzalne działanie gniazda na częściach wprowadzanych i wyprowadzanych z niego, np. przez taśmociągi. Symulator określa też czas wykonania cyklu.
Symulator nanosi na rysunek obraz przestrzeni roboczej samej końcówki manipulatora lub narzędzia, co ułatwia ustalenie, czy obiekt jest w zasięgu robota. Ponadto symulator wykrywa kolizje ramienia z otoczeniem w trakcie wykonania programu. Pod kątem działania programu robota nie ma różnicy między tym, który wykonywany jest przez sterownik robota, a tym realizowanym przez symulator. Symulacja jest bardzo wierna. Uwzględnia masę przemieszczanych przedmiotów, a nawet określa energię cieplną generowaną przez silniki manipulatora.
Narzędzie, którym ma się posługiwać robot, można wybrać z biblioteki lub stworzyć własny jego rysunek CAD. Skala rysunku może być zmieniana, więc wielkość narzędzia można dostosować do jego rzeczywistych wymiarów. Tak przygotowane narzędzie trzeba przytwierdzić do końca manipulatora. Co więcej, należy określić masę narzędzia oraz lokalizację jego TCP (punkt środkowy narzędzia określający położenie początku układu odniesienia z nim związanego oraz jego orientację). Jeżeli tworzymy np. chwytak, to korzystamy z dwóch rysunków – jednego, gdy szczęki są rozwarte i drugiego, gdy są zaciśnięte. Dzięki temu w symulacji szczęki będą się poruszały. Obraz robota może być poruszany na wiele sposobów, np. można poruszać poszczególnymi osiami manipulatora odpowiednio przemieszczając kursor na ekranie za pomocą myszki lub w podobny sposób przemieszczać końcówkę manipulatora lub narzędzie w przestrzeni operacyjnej.
Program robota może być tworzony za pomocą panelu programowania. W związku z tym w Roboguide istnieje symulowany panel programowania, który może być stosowany tak samo, jak ten rzeczywisty dołączony do sterownika. Można więc nauczyć robota pozycji, do których ma dochodzić stosując obraz gniazda. Te pozycje stanowią argumenty instrukcji ruchu. Po stworzeniu programu można zasymulować jego wykonanie lub przesłać go do rzeczywistego robota, by ten odtworzył ten program. Taka symulacja może być nagrana w postaci filmu w formacie AVI do odtworzenia w sposób niezależny od Roboguide.
Przed wykonaniem programu w trybie automatycznym należy go uruchomić w trybie testowym. Trzeba rozpocząć od wykonania programu w sposób krokowy – linia po linii kodu, następnym etapem będzie wykonananie programu ze zredukowaną prędkością ruchów, na koniec powinien być testowany z właściwą prędkością ruchów manipulatora. Istnieje też możliwość wykonania niektórych fragmentów programu wstecz. W odpowiednim trybie pracy panelu programowania na jego ekranie pojawia się graficzny model robota, wyświetlane są niektóre dane, np. o aktualnym położeniu TCP. W zależności od trybu można poruszać tylko modelem albo modelem i rzeczywistym robotem równocześnie. Model robota może być obserwowany z różnych punktów i z różnej odległości.
Stosowane rejestry i ich rola
Język stosowany w panelu programowania operuje różnymi rejestrami zamiast zmiennych. Nie można więc dowolnie nazwać zmiennych według swego upodobania. W sterowniku istnieje 200 rejestrów (P) mogących przechowywać wartości całkowite bądź rzeczywiste. Źródłem tych danych mogą być inne rejestry, stałe, grupy sygnałów wejściowych bądź wyjściowych zarówno cyfrowych, jak i analogowych, bądź zegary (timer). Rejestry używane są do prowadzenia obliczeń arytmetycznych w ograniczonym zakresie. Dopuszczalnymi operatorami są: +, –, *, /, MOD, DIV.
Ponadto istnieje 100 rejestrów pozycyjnych (PR), w których przechowywane są dane dotyczące pozycji. Dane te mogą dotyczyć albo przestrzeni konfiguracyjnej (złącz manipulatora) albo operacyjnej, a więc określać trzy współrzędne kartezjańskie oraz trzy kąty obrotu definiujące orientację. W tym przypadku można stosować operatory: + i –. Na elementach składowych rejestru pozycyjnego można wykonywać wymienione operacje arytmetyczne. Ponieważ rejestry mogą być stosowane przez wykonywane równolegle zadania, należy zadbać o to, by zadanie modyfikujące ich zawartość miało wyłączny dostęp do nich. Do tego służą instrukcje LOCK PREG oraz UNLOCK PREG. Jest to szczególnie istotne przy wykonywaniu wielu segmentów ruchu bez zatrzymywania się w pozycjach pośrednich. Taki ruch wymaga uwzględnienia wielu segmentów ruchu, których parametry zapisane są w rejestrach. By uniknąć zmiany zawartości tych rejestrów zanim dany segment ruchu zostanie zrealizowany, należy zablokować dostęp do tego rejestru za pomocą instrukcji LOCK. Do nadawania wartości rejestrom lub wyjściom służy instrukcja podstawienia (=). Można tworzyć wyrażenia arytmetyczne bądź logiczne korzystając z rejestrów, wejść i wyjść oraz wymienionych operatorów. Priorytet operatorów może być zmieniony przez zastosowanie nawiasów okrągłych w tworzonym wyrażeniu.
Dostępne są też rejestry przechowujące łańcuchy znaków (STRING – SR). Liczby mogą być konwertowane na łańcuchy znakowe i na odwrót, jeżeli tyko zawierają cyfry. Łańcuchy znakowe mogą być konkatenowane za pomocą operatora +. Do dyspozycji są funkcje działające na łańcuchach określające liczbę znaków w łańcuchu (STRLEN) oraz wyszukujące podłańcuch w łańcuchu (FINDSTR, SUBSTR).
Pozycję można wyrażać na dwa sposoby. Pierwszy dotyczy przestrzeni konfiguracyjnej, w której określa się poszczególne zmienne złączowe (joint variables), stanowiące kąty między kolejnymi członami manipulatora. Podczas procesu uczenia, wartości zmiennych złączowych, sterownik odczytuje z enkoderów umieszczonych na silnikach. Określenie pozycji w przestrzeni operacyjnej wymaga podania więcej informacji. Po pierwsze, należy określić układ współrzędnych, względem którego podana zostanie pozycja. Po drugie, należy podać współrzędne kartezjańskie (X, Y, Z) początku układu związanego z narzędziem (TCP) oraz orientację tego układu względem wcześniej wybranego układu odniesienia. Wreszcie należy określić pożądaną konfigurację ramienia – to jest związane z wielością rozwiązań odwrotnego zagadnienia kinematyki i służy wyborowi tego właściwego. Orientacja definiowana jest przez podanie trzech kątów obrotu względem osi głównych (X, Y, Z) nieruchomego układu odniesienia (roll, pitch, yaw).
Przy programowaniu robota korzysta się z wielu układów odniesienia. Podstawowym jest tzw. układ złączowy (joint coordinate system), czyli wektor wyrażony w przestrzeni konfiguracyjnej. Ponadto wykorzystywane są układy kartezjańskie. Interfejsem mechanicznym nazywany jest układ związany z kołnierzem stanowiącym zakończenie manipulatora. Względem tego układu definiuje się układ narzędzia. Początkiem tego układu jest punkt centralny narzędzia (TCP). Układ świata (world coordinate system) związany jest z bazą manipulatora. Względem tego układu wyznacza się układy użytkownika (user coordinate system) oraz układ, względem którego chcemy przemieszczać końcówkę manipulatora (jog coordinate system). W istocie jedynie orientacja tego ostatniego układu jest istotna. Jeżeli w gnieździe znajduje się więcej robotów niż jeden, to definiowany jest układ gniazda (cell coordinate system). Jest to układ odniesienia wspólny dla wszystkich robotów. Układy odniesienia mogą być definiowane za pomocą ramienia robota. Metodą trójpunktową można ustalić TCP, natomiast sześciopunktową zarówno TCP, jak i orientację definiowanego układu.
Stosując te metody definiowania układów odniesienia należy zadbać, by wskazywane punkty w znaczący sposób różniły się od siebie zarówno co do położenia, jak i orientacji narzędzia doprowadzanego do danego punktu. Istnieje wiele wariantów wspomnianych metod. W okienku na panelu programowania wyświetlane są wskazówki, co należy zrobić, by uzyskać zamierzony cel. Ponadto należy wskazać układ związany z podłożem gniazda (cell floor). Warto też zdefiniować bezpieczną pozycję odniesienia (reference position), do której może przemieścić się robot, np. by wystartować realizację nowego programu. Można zdefiniować do dziesięciu takich pozycji. Ze względów bezpieczeństwa można ograniczyć ruch w poszczególnych złączach manipulatora. Można także z pewnymi obszarami przestrzeni roboczej skojarzyć sygnały wejścia/wyjścia. Sygnały te służą porozumiewaniu się robota z urządzeniem dodatkowym. Dzięki temu, gdy urządzenie to zajmuje wskazaną przestrzeń roboczą, robot do niej nie wniknie i na odwrót. Aby uniknąć zakleszczenia (deadlock) urządzeniom można nadać priorytety. Obszary wykluczenia definiowane są jako prostopadłościany, przy czym można wybrać, czy obszarem wykluczonym jest wnętrze czy zewnętrze prostopadłościanu. Jak głęboko manipulator wniknie do obszaru wykluczonego, gdy jest on zajęty przez urządzenie dodatkowe, zależy od aktualnej prędkości ruchu ramienia. Manipulator zatrzymuje się z określonym przyspieszeniem ujemnym, a nie natychmiast. Należy to wziąć pod uwagę przy określaniu wymiarów prostopadłościanu.
Wskazanym jest, by sterownik był poinformowany, jak będzie obciążone ramię robota (PAYLOAD). W tym celu należy podać masę narzędzia i przemieszczanego obiektu oraz gdzie się znajduje ich środek ciężkości. Sterownik dysponuje funkcją automatycznej identyfikacji parametrów obciążenia manipulatora. Właściwe określenie tych parametrów jest konieczne dla uzyskania ruchów pozbawionych wibracji oraz dla optymalizacji prędkości ruchu.
Struktura programu
Program składa się z instrukcji przeznaczonych do wykonania przez sterownik oraz atrybutów. W skład atrybutów wchodzą: nazwa programu, jego podtyp (subtype), daty utworzenia oraz ostatniej modyfikacji, nazwy pliku źródłowego, rozmiar programu, wskazówki, czy zawiera dane pozycyjne, rozmiar stosu, maska grupy, zabezpieczenie przed modyfikacją, włączenie/wyłączenie przerwań etc. Instrukcje programu są ponumerowane.
Program może składać się z następujących elementów: zadanie (job), proces (process), makro (macro), program warunkowy (condition) oraz kolekcji (collection). Zadanie stanowi program główny. Proces jest podprogramem wywoływanym przez program główny. Makro stanowi program stworzony, by wykonać makroinstrukcję – należy go traktować jako rodzaj podprogramu obsługi zdarzenia (nie ma nic wspólnego z makrem znanym z informatyki). Makro wywoływane jest przez: przycisk na panelu programowania, uaktywnienie odpowiedniego pola na jego ekranie, bądź sygnał wejściowy (te źródła zdarzeń nazywane są w dokumentacji urządzeniami – device). Makro może być też wywołane w innym programie przez użycie jego nazwy. Program warunkowy związany jest z funkcją monitorującą stan systemu. Kolekcje stanowią programy nieprzeznaczone do wykonania przez roboty. Ponieważ sterownik może oddziaływać nie tylko na silniki manipulatora, ale także na silniki związane z innymi urządzeniami, można je pogrupować. Do tego służy maska grupy. W ten sposób wskazuje się, którymi silnikami steruje dany program.
Programowanie ruchu
Podstawową grupą instrukcji są rozkazy ruchu, które określają, jak i dokąd należy przemieścić narzędzie. Ich parametrami są:
- rodzaj ścieżki ruchu,
- pozycja, do której ma dotrzeć narzędzie,
- prędkość ruchu (feed rate),
- czy narzędzie ma dotrzeć do wskazanej pozycji precyzyjnie oraz
- dodatkowa instrukcja, która ma być wykonana w trakcie realizacji ruchu.
Wyróżniono cztery rodzaje ścieżek ruchu:
- wyrażone w przestrzeni konfiguracyjnej J (joint),
- liniowe w przestrzeni operacyjnej L (linear),
- po okręgu w przestrzeni operacyjnej C (circular),
- po łuku A (arc circle).
W przestrzeni konfiguracyjnej wszystkie silniki rozpoczynają ruch jednocześnie i kończą go w tym samym momencie. Czasy rozpędzania i czasy hamowania wszystkich złącz są jednakowe. Ruch liniowy w przestrzeni operacyjnej powoduje przemieszczenie TCP narzędzia wzdłuż linii prostej od pozycji aktualnej do docelowej. Orientacja narzędzia zmienia się liniowo wokół jego TCP. Ruch po okręgu odbywa się od pozycji aktualnej przez pośrednią do docelowej. Orientacja narzędzia zmieniana jest liniowo. Ruch po łuku jest podobny do tego po okręgu. Różnica polega na tym, że w ruchu po okręgu określa się pozycję pośrednią i docelową, natomiast w ruchu po łuku określa się jedynie pozycję docelową. Sekwencja pozycji wymienionych w kolejnych instrukcjach ruchu po łuku tworzy pożądaną krzywą.
Niezależnie od rodzaju ścieżki z pozycjami pośrednimi może być związany jeden z atrybutów – dokładnie (FINE) lub kontynuuj (CNT). W pierwszym przypadku narzędzie zostanie ustawione dokładnie w zadanej pozycji i ruch zostanie wstrzymany, natomiast w drugim przypadku narzędzie nie zostanie doprowadzone dokładnie do wskazanej pozycji, a ruch będzie kontynuowany bez zatrzymania. Można wskazać procentowo, w jakim stopniu narzędzie może się oddalić od wskazanej pozycji. Można też ograniczyć maksymalną prędkość ruchuza pomocą instrukcji JOINT_MAX_SPEED[i], która nakłada ograniczenie na maksymalną prędkość ruchu złącza [i] manipulatora bądź urządzenia dodatkowego, oraz LINEAR_MAX_SPEED, która ogranicza prędkość ruchu narzędzia w przestrzeni operacyjnej. Instrukcja PAUSE powoduje przerwanie aktualnie wykonywanego ruchu (robot wyhamowuje). Wykonanie programu po restarcie rozpocznie się od kolejnej instrukcji w programie po tej, której wykonanie zostało przerwane. Instrukcja ABORT działa podobnie, z tą różnicą, że program nie może być zrestartowany.
Istnieją dodatkowe instrukcje wpływające na sposób wykonania ruchu określonego przez kolejne rozkazy ruchu. Przykładowo, dodanie instrukcji Wjnt powoduje, że w trakcie ruchu po prostej lub okręgu TCP nadal podąża zadaną ścieżką, ale nadgarstek nie zmienia orientacji w zadany sposób. Umożliwia to przejście przez pozycję osobliwą. Można też spowalniać ruch wykorzystując instrukcję ACC, która redukuje maksymalne przyspieszenia. Instrukcja SKIP powoduje badanie wskazanego warunku w trakcie realizacji ruchu. W zależności od jego spełnienia aktualny ruch jest przerywany i wybierany jest inny wariant wykonania ruchu – opisany innymi instrukcjami ruchu. Instrukcja OFFSET bądź TOOL_OFFSET modyfikuje pozycję docelową w zależności od spełnienia zdefiniowanego warunku. Wartość modyfikacji może być wyrażona w przestrzeni konfiguracyjnej albo operacyjnej. Zazwyczaj wspomniane warunki konstruowane są tak, by zawierały wartości sygnałów wejściowych, co umożliwia wpływanie na wykonanie programu zależne od sytuacji zewnętrznej.
Instrukcja Simultaneous EV powoduje, że ruch manipulatora zostanie zsynchronizowany z ruchem dodatkowego urządzenia, np. taśmociągu. W efekcie ruchy obu urządzeń rozpoczną się i zakończą równocześnie. Istnieje również wariant tej instrukcji (Independent EV), w którym manipulator i urządzenie dodatkowe rozpoczną ruch jednocześnie, ale skończą go niezależnie od siebie. Zastosowanie instrukcji WAIT w sekwencji instrukcji ruchu spowoduje oczekiwanie na spełnienie warunku, który może być wyrażony jako czas oczekiwania albo pojawienie się odpowiedniego sygnału wejściowego. Jeżeli poprzedzająca instrukcja ruchu zawierała CNT, ruch będzie powstrzymany, a narzędzie będzie się starać dojść do wyspecyfikowanej pozycji. Jeżeli czas oczekiwania jest dostatecznie długi, a dodatkowo użyto instrukcji BREAK, to osiągnięta zostanie wyspecyfikowana pozycja dokładnie. Wszakże, jeżeli nie użyto instrukcji BREAK, to oczekiwanie odbędzie się na łuku łączącym aktualny i kolejny segment ruchu w pewnej odległości od wyspecyfikowanej pozycji.
Wykorzystując instrukcje TB (time before) lub TA (time after) można spowodować równoległe do ruchu wykonanie dodatkowego programu lub ustawienie wyjścia przed lub po zakończeniu ruchu. Umożliwia to uruchomienie lub wyłączenie dodatkowych urządzeń w odpowiedniej fazie ruchu. Można również zmodyfikować wykonanie instrukcji ruchu tak, aby wywołany został program lub ustawione wyjście, gdy narzędzie pojawi się w pewnej odległości od punktu docelowego lub pośredniego ścieżki DB (distance before). Instrukcje ruchu modyfikowane za pomocą TA, TB lub DB mogą wykonać zestawy instrukcji z nimi związane bez odwoływania się do programu (podprogramu). Zestaw takich instrukcji wyróżniany jest za pomocą słowa kluczowego POINT_LOGIC. Instrukcje zestawu nie mogą zawierać instrukcji ruchu. Zestaw kończony jest pojawieniem się instrukcji ruchu. Bezpośrednio w instrukcji ruchu można wymienić wyjścia, które mają być ustawione podczas ruchu. Istnieje też możliwość zdefiniowania warunków, które monitoruje sterownik niezależnie od jego innych aktywności. Monitorowanie dotyczy instrukcji umieszczonych w sekcji MONITOR <nazwa> <instrukcje> MONITOR END <nazwa>. Monitorowany warunek określony jest przez <nazwa> WHEN <warunek> CALL <nazwa programu warunkowego> . Wykrycie spełnienia warunku aktywuje związany z nim program warunkowy.
Translacja ruchu
Program zapisany jako sekwencja ruchów do określonych pozycji może być odtworzony w innym miejscu niż został pierwotnie stworzony. Do tego służy instrukcja SHIFT. Wszystkie pierwotne pozycje programu mogą być przesunięte o pewien wektor. By tak się stało albo należy wskazać, który punkt pierwotnego programu ma być przesunięty, do którego nowego punktu albo trzeba wyspecyfikować wektor translacji. Można też przesunąć i jednocześnie obrócić zaprogramowane ścieżki ruchu. W tym celu należy podać trzy punkty ścieżek wymienionych w pierwotnym programie oraz gdzie te trzy punkty mają się znaleźć w nowym położeniu. Można też zażądać lustrzanego odbicia pierwotnego programu względem płaszczyzny równoległej do płaszczyzny XZ układu związanego z narzędziem.
Wprowadzono ułatwienie specyfikacji zestawu tych samych czynności wykonywanych w różnych miejscach obróconych względem siebie o ten sam kąt względem wskazanej osi obrotu (angle entry shift function). Specyfikacja wymaga podania trzech punktów na obwodzie okręgu oraz kąta obrotu. Możliwe jest też dodanie punktu leżącego na osi obrotu będącej prostopadłą do płaszczyzny wyznaczonej przez te trzy punkty. Funkcja ta może być przydatna np. przy wykonywaniu tych samych operacji na otworach przeznaczonych do mocowania koła samochodowego do piasty. Można też zmieniać układy odniesienia, względem których realizowane będą ruchy. Wtedy czynności będą wykonane względem nowego układu odniesienia, zamiast w stosunku do układu odniesienia, względem którego pierwotnie nauczono program (coordinate system change shift function). Takiej zmianie może podlegać również układ związany z narzędziem.
Paletyzacja
Ponieważ zadanie paletyzacji jest często wykonane przez roboty, wprowadzono specjalną instrukcję złożoną PALLETIZING. Podstawową kwestią jest wybór sposobu paletyzacji. Są cztery sposoby wynikające z dwóch wzorców: wzorca stosu paletyzacji oraz wzorca ścieżki. Wzorzec stosu paletyzacji może być prosty bądź złożony, natomiast wzorzec ścieżki może być pojedynczy albo wielokrotny.
Definicja wzorca paletyzacji wymaga określenia kolejności i sposobu układania obiektów na palecie oraz jej miejsc charakterystycznych. Określa się je za pomocą instrukcji ruchu. Ponadto potrzebna jest instrukcja sterująca chwytakiem. Paleta może być jedno-, dwu- lub trójwymiarowa. Ułożenie elementów na palecie nie musi być prostopadłościenne, a obiekty mogą mieć różne orientacje. Koniec definicji wzorca zaznacza się instrukcją PALLETIZING-END. Wzorce ścieżek określają sposób dochodzenia do i odchodzenia od paletyzowanych obiektów. Instrukcja paletyzacji korzysta z rejestrów pozycyjnych do swej realizacji. Ponadto korzysta z rejestrów paletyzacji (PALLETIZING REGISTER - PL), w których przechowuje informacje na temat kolumny, wiersza oraz warstwy obiektu na palecie, czyli pełni rolę złożonego licznika. W programie można skorzystać z co najwyżej 32 takich rejestrów. Na elementach rejestru paletyzacyjnego można wykonywać operacje dodawania i odejmowania.
Instrukcje wejścia/wyjścia
Wprowadzono dużą gamę instrukcji wejścia/wyjścia umożliwiających wczytanie wartości sygnałów wejściowych bądź wysłanie wartości do wyjścia. Instrukcje te zostały pogrupowane w zależności od przynależności wejść/wyjść do odpowiednich części systemu oraz ich rodzaju.
Istnieją wejścia/wyjścia związane z pakietami montowanymi w sterowniku (I/O unit): binarne systemowe (DI/DO), analogowe (AI/AO), przekształcane na formę cyfrową i binarne grupowe (GI/GO), operujące na liczbach szesnastkowych. Wejścia binarne czytane są za pomocą instrukcji podstawienia (np.\ =DI), natomiast wyjścia (np.\ DO) są zerowane lub ustawiane (ON/OFF). Na wyjścia cyfrowe można też wysłać impuls o określonym czasie trwania (PULSE). Z wejścia analogowego (AI) można odczytać wartość i umieścić ją w rejestrze, natomiast do wyjścia analogowego można przesłać albo wartość stałą albo zawartość rejestru (R). Wejścia i wyjścia cyfrowe mogą być zgrupowane i wtedy można wczytywać lub wysyłać liczby binarne. Dostępne są też wejścia/wyjścia specjalizowane: cyfrowe robota (RI/RO), związane z kołnierzem manipulatora, peryferyjne (UI/UO), związane z panelem programowania oraz panelem operatora
(SI/SO); związane z panelem sterownika.
Instrukcje warunkowe skoku, pętle
Instrukcje sterujące wykonaniem programu umożliwiają zmianę sekwencji wykonywanych rozkazów programu. Można zdefiniować etykietę skoku (LBL) oraz wykonać do niej skok bezwarunkowy (JMP LBL). Ponadto można wykonać skok warunkowy za pomocą instrukcji IF. Warunek budowany jest jako porównanie wartości wejścia lub wyjścia odpowiedniego typu z zawartością rejestru albo stałą. Można też konstruować złożone wyrażenia logiczne stosując spójniki AND oraz OR, ale w ramach pojedynczego wyrażenia tylko jednego z tych dwóch rodzajów. Dopuszczalne jest również użycie negacji, jako prefiksowy operator oznaczany wykrzyknikiem. Skok może być wykonany do wskazanej etykiety albo można wywołać inny program (CALL) – w istocie jest to wtedy podprogram. Program może być również wywołany bezpośrednio za pomocą instrukcji CALL.
Do programu wywoływanego można przekazać argumenty. Każdy program kończony jest instrukcją END. Dojście do tej instrukcji zwraca sterowanie programowi, który wywołał program zawierający instrukcję END. Istnieje też instrukcja wielokrotnego wyboru SELECT rejestr = wartość skok, = wartość skok, … ELSE skok, gdzie skok to skok bezwarunkowy
(JMP LBL) albo wywołanie programu (CALL). Ponadto istnieje standardowa instrukcja warunkowa IF THEN ELSE ENDIF. Instrukcje te mogą być zagnieżdżane. Można też konstruować pętle za pomocą FOR ENDFOR. W zależności od tego, czy licznik pętli ma liczyć w dół czy w górę stosuje się słowo kluczowe TO bądź DOWNTO przed wartością określającą liczbę powtórzeń. Dopuszczalne jest dziesięciokrotne zagnieżdżenie pętli FOR, ale trzeba dopilnować, by każda z pętli używała innego rejestru licznika.
Praca współbieżna
Sterowniki robotów FANUC umożliwiają współbieżną realizację programów (multitasking). Wszakże należy zadbać, by instrukcje ruchu nie dotyczyły tych samych napędów. Można np. utworzyć dwa programy działające współbieżnie, jeden sterujący manipulatorem, a drugi taśmociągiem. Sposób tworzenia współbieżnych programów jest identyczny z tworzeniem indywidualnych programów. Jeden z programów musi być nadrzędny i ten powinien uruchomić pozostałe za pomocą instrukcji RUN.
Synchronizacja pracy dwóch programów odbywa się za pomocą wskazanego rejestru. Jeden program go ustawia, a drugi oczekuje (stosując instrukcję WAIT) na pojawienie się w nim odpowiedniej wartości, np. 0 lub 1. Ponieważ pod pewnymi warunkami programy mogą być wykonywane zarówno w przód, jak i wstecz, to wykonanie programu głównego wstecz pociąga za sobą realizację instrukcji programu współbieżnego, również w odwrotnej kolejności ustawienia jego instrukcji.
Instrukcje oczekiwania
Instrukcja WAIT powoduje wstrzymanie wykonania programu na określony czas lub do momentu zajścia zdarzenia opisanego warunkiem. Warunki są konstruowane tak samo, jak dla instrukcji warunkowych. Dodatkowym parametrem oczekiwania na zajście zdarzenia może być czas, po którym należy przerwać oczekiwanie mimo braku zajścia zdarzenia (TIMEOUT). Istnieje też możliwość wystartowania, wyzerowania, ustawienia bądź zatrzymania czasomierza za pomocą instrukcji TIMER. Jeżeli wybrany zostanie czasomierz globalny, to różne zadania mogą się względem niego synchronizować. Czasomierze mogą być stosowane do pomiaru czasu wykonania pewnych fragmentów programu. Umożliwiono też sygnalizację operatorowi systemu zachodzących zdarzeń. Służy do tego instrukcja sygnalizacji alarmu użytkownika UALM wstrzymująca działanie programu i wyświetlająca odpowiedni komunikat na panelu programowania. Można zwiększyć czytelność programu używając komentarzy, poprzedzając je wykrzyknikiem.
Język KAREL
Programy dla robotów FANUC mogą też być tworzone bez udziału panelu programowania. Można je pisać na dowolnym komputerze, wykorzystując język KAREL. Program w języku KAREL musi być poddany translacji, w wyniku której powstaje program w kodzie pośrednim (p-code) akceptowany przez panel programowania, a następnie wynik kompilacji ładowany jest do sterownika R-30iA/R-30iB w celu jego interpretacji. Nie ma możliwości bezpośredniego tworzenia programu w języku KAREL na panelu programowania, ani wykonania kodu źródłowego takiego programu bezpośrednio na sterowniku robota. KAREL jest językiem programowania wyższego poziomu niż język panelu programowania (TP). Program w języku KAREL (PROGRAM) składa się z następujących sekcji:
- dyrektyw dla translatora,
- deklaracji stałych (CONST),
- typów danych (TYPE),
- zmiennych (VAR) oraz
- podprogramów (ROUTINE).
Struktura programu w języku KAREL
Program główny zapisywany jest między słowami kluczowymi BEGIN i END, po których znów mogą pojawić się deklaracje podprogramów. Zmiennym można nadać ich wartości w tradycyjny sposób lub za pomocą panelu programowania za pomocą uczenia. Do sterownika można załadować wiele programów powstałych w wyniku kompilacji źródeł zapisanych w języku KAREL. Zmienne mogą być wspólne dla wielu programów. W trakcie wykonania programów tworzony jest plik LOG, w którym zapamiętywany jest ślad wykonanych instrukcji. Można go obejrzeć wydając polecenie SHOW HISTORY. Ułatwia to wskazanie przyczyny błędu, jeżeli taki powstanie.
Język KAREL wykorzystuje identyfikatory zarówno podprogramów, stałych, jak i zmiennych, tworzonych standardowo, jak we wszystkich innych językach. Korzysta też z etykiet (zakończonych podwójnym dwukropkiem), które wskazują miejsca skoku dla instrukcji GOTO. Czytelność programów zwiększana jest przez zastosowanie komentarzy, poprzedzanych podwójnym myślnikiem (--). Zmienne i stałe mogą być typów prostych, strukturalnych bądź zdefiniowanych przez użytkownika. Typami prostymi są: BOOLEAN, INTEGER, REAL, STRING oraz FILE. Typami strukturalnymi są:
- tablice (ARRAY), mające co najwyżej trzy wymiary,
- konfiguracja (CONFIG) określająca wariant ułożenia członów ramienia,
- wektor wartości zmiennych złączowych (JOINTPOSi, i = 1 ,…, 9),
- model (MODEL),
- ścieżka wyrażona jako lista węzłów (PATH), gdzie węzły zawierają m.in. informację o pozycjach (POSITION) definiujących ścieżkę,
- pozycja w przestrzeni operacyjnej zdefiniowana przez podanie współrzędnych początku układu oraz kąty orientacji (w konwencji: yaw, pitch, roll) i uzupełniona o pożądaną konfigurację złącz (POSITION),
- pozycja w przestrzeni operacyjnej zdefiniowana przez podanie współrzędnych początku układu oraz kąty orientacji (w konwencji: yaw, pitch, roll) i uzupełniona o konfigurację (XYZWPR),
- pozycja XYZWPR uzupełniona o pozycje złącz sprzętu dodatkowego (XYZWPREXT) oraz
- trójwymiarowy wektor (VECTOR).
Typy danych użytkownika tworzone są z typów prostych i strukturalnych i mają postać rekordu definiowanego między słowami kluczowymi STRUCTURE i ENDSTRUCTURE. Każde pole takiej struktury ma nazwę własną oraz typ. Nazwa własna pola służy do odwoływania się do zawartej w tym polu wartości. Stosuje się odwołanie do zmiennej danego typu oraz notację z kropką wskazującą, o które konkretnie pole chodzi. Na zmiennych typów prostych, w zależności od ich typu, można przeprowadzać standardowe operacje: logiczne, arytmetyczne i relacyjne (porównania), uzupełnione o specjalne operacje na pozycjach oraz operacje na stringach.
Instrukcje języka KAREL
Język KAREL zawiera standardowe instrukcje sterujące wykonaniem programu. Są to instrukcje warunkowe (IF THEN ELSE ENDIF) oraz wielokrotnego wyboru (SELECT CASE ENDSELECT), pętle (FOR ENDFOR, REPEAT ENDREPEAT oraz WHILE ENDWHILE), skoku do etykiety (GOTO), przerwania wykonania programu (ABORT), wstrzymania wykonania programu na określony czas (DELAY), zawieszenia wykonania programu (PAUSE) oraz wstrzymania wykonania programu do chwili zajścia odpowiedniego zdarzenia lub spełnienia odpowiedniego warunku (WAIT). Istnieją również zestawy akcji, które wykonywane są, gdy wykryte zostanie spełnienie warunku (CONDITION WHEN). Warunki te są monitorowane równolegle do wykonywania standardowych programów. Obsługa warunku może być uaktywniana (ENABLED) oraz dezaktywowana (DISABLED). Akcje, które mają być wykonane w przypadku spełnienia warunku są ograniczone.
KAREL dysponuje również procedurami i funkcjami, czyli podprogramami (ROUTINE). Te pierwsze nie zwracają wartości, natomiast te drugie robią to. Procedury są wywoływane bezpośrednio wewnątrz programów bądź procedur, natomiast funkcje są wywoływane wewnątrz wyrażeń. Dopuszcza się wywołania rekursywne tej samej funkcji bądź procedury. Powrót z podprogramu następuje po napotkaniu albo instrukcji RETURN albo końca jego definicji (END). Parametry podprogramu mogą być przekazywane albo przez wartość albo przez referencję. Oprócz procedur i funkcji definiowanych przez programistę KAREL dysponuje potężną biblioteką wbudowanych podprogramów.
Operacje na szeregowych strumieniach danych (np. RS-232) wykonywane są, jak na plikach (FILE). W związku z tym zarówno dla strumieni danych, jak i plików zdefiniowano standardowe operacje: OPEN, CLOSE, READ oraz WRITE. W ten sposób sterownik może się kontaktować zarówno z panelem programowania, jak i zewnętrznym komputerem (CRT/KB). Przed otwarciem szeregowego łącza trzeba zdefiniować jego atrybuty za pomocą instrukcji SET_FILE_ATR. Pliki mogą być binarne bądź w formacie XML. W tym drugim przypadku można skorzystać z wbudowanego interpretera języka XML. KAREL ponadto umożliwia korzystanie z gniazd (socket). Dzięki temu sterownik może kontaktować się z innymi komputerami używając protokołu TCP/IP. Istnieje biblioteka funkcji służących do przesyłania wiadomości poprzez gniazda. Dostępna jest także możliwość przesyłania zawartości rejestrów pomiędzy sterownikami robotów połączonych siecią Ethernet. Do tego służą funkcje języka KAREL, które działają w trybie klient-serwer (RGETNREG, RSETNREG, RGETPREG, RSETPREG). W tym przypadku także stosuje się protokół TCP/IP.
Za pomocą instrukcji języka KAREL można zdefiniować pozycje w przestrzeni operacyjnej. Wprawdzie ruch do tych pozycji można wykonać, ale nie bezpośrednio za pomocą instrukcji tego języka, ale za pomocą instrukcji języka programowania panelu programowania (TP). Procedury języka KAREL (move_to_pr – move to pose register, movl_to_pr – move linear to pose register) wywołują instrukcje języka panelu programowania. Dane pozycyjne, jak już wspominano, definiuje się za pomocą: POSITION, XYZWPR, XYZWPREXT i JOINTPOS oraz listy złożonej z tych elementów, czyli PATH. Pozycje te wyrażane są względem układów odniesienia. Wprowadzono trzy typy tych układów:
- WORLD – globalny układ odniesienia związany z konkretnym typem robota,
- UFRAME – układ określony przez użytkownika, wyrażony względem układu globalnego i o tej samej orientacji, co on, oraz
- UTOOL – układ TCP związany z narzędziem, także określany przez użytkownika, ale względem kołnierza manipulatora.
Ruch robota może być definiowany:
- w przestrzeni konfiguracyjnej (JOINT),
- w przestrzeni operacyjnej względem układu globalnego (WORLD), wtedy orientacja określana jest względem jego osi głównych,
- w przestrzeni operacyjnej względem układu narzędzia (TOOLFRAME),
- w przestrzeni operacyjnej względem układu uczenia (JOGFRAME),
- w przestrzeni operacyjnej względem wybranego układu użytkownika (USER FRAME).
We wszystkich tych przypadkach ruch interpolowany jest liniowo w odpowiadającej jego definicji przestrzeni.
KAREL, podobnie jak język panelu programowania (TP), umożliwia operowanie na wejściach i wyjściach sterownika. Tu także wyróżniono wejścia i wyjścia cyfrowe (DIN, DOUT), analogowe (AIN, AOUT) i zgrupowane porty
DIN/DOUT (GIN, GOUT). Ponadto można bezpośrednio odwoływać się do wejść i wyjść sterownika połączonych z manipulatorem (RDI, RDO) bądź z panelem operatora (OPIN, OPOUT), a także panelem programowania (TPIN, TPOUT).
Można także sterować chwytakiem (OPEN/CLOSE HAND).
KAREL umożliwia tworzenie słowników i formularzy, które wykorzystywane są do komunikacji z operatorem przez panel programowania (TP) oraz zewnętrzny komputer (CRT/KB). Słowniki zawierają teksty przeznaczone do wyświetlania użytkownikowi, ale nie zawierają informacji, jak dany tekst ma być przedstawiony. Opis, jak ma być sformatowany tekst, określany jest za pomocą formularza. Dzięki temu okna tworzone przez użytkownika przypominają te standardowe wyświetlane na panelu programowania. Formularze służą też wprowadzaniu danych. Ponadto sprawdzają, czy wczytywane dane są odpowiedniego typu.
Wielozadaniowość
Sterownik robota umożliwia wielozadaniowość, więc ta możliwość została odtworzona w języku KAREL. Oczywiście jest to wielozadaniowość realizowana w podziale czasu, bo sterownik ma jeden procesor. Ponieważ programy są interpretowane na sterowniku, każdy uruchomiony program (zadanie) ma własny interpreter obsługujący go. Na instrukcje zawarte w zadaniach narzucono ograniczenie mówiące, że dwa zadania nie mogą zawierać instrukcji ruchu sterujących tymi samymi osiami – powinny to być rozdzielne grupy napędów (manipulatora i urządzenia dodatkowego traktowanymi zbiorczo). Zadania mają przyporządkowane priorytety, na podstawie których program harmonogramujący decyduje, które z nich ma być wykonywane w danej chwili.
Do działań na zadaniach język KAREL stosuje się instrukcje: RUN_TASK, CONT_TASK, PAUSE_TASK, ABORT_TASK, GET_TSK_INFO, CONTINUE, ABORT, PAUSE. Ostatnie trzy instrukcje dotyczą programów warunkowych, natomiast te wcześniej wymienione odnoszą się do zadań. Synchronizacja pracy zadań odbywa się za pomocą semaforów wielowartościowych. Instrukcja CLEAR_SEM zeruje wartość semafora, natomiast POST_SEMA dodaje 1 do jego aktualnej wartości. Instrukcja SEMA_COUNT umożliwia odczytanie aktualnej wartości semafora. Oczekiwanie na semaforze realizowane jest za pomocą instrukcji PEND_SEMA. Jej wykonanie powoduje odjęcie 1 od jego wartości i zatrzymanie wykonania zadania, jeżeli jego wartość jest niedodatnia. Informacje między zadaniami mogą być przekazywane poprzez kolejki. Po zainicjalizowaniu kolejki instrukcjię NIT_QUEUE, można do niej wprowadzać informacje (APPEND_QUEUE) oraz pobierać je (GET_QUEUE).
Praca na zdalnych urządzeniach
Na zdalnym komputerze można pracować z wykorzystaniem środowiska programowego KAREL Command Language (KCL). Komendy skierowane do tego środowiska składają się ze słowa kluczowego oraz odpowiednich parametrów. Służą one do działania na plikach (LOAD, COPY, DELETE, DIRECTORY), edytowania programów (EDIT), uruchamiania programów (RUN, CONTINUE). Jeżeli program zawiera instrukcje ruchu, to zostaną one wykonane na dołączonym sterowniku. Można też tworzyć pliki wsadowe (.CF) zawierające sekwencje komend KCL, które następnie można wykonać jednym poleceniem (RUNCF). Ponadto KCL umożliwia korzystanie z wielozadaniowości.
Programowanie za pomocą tabletu
Niektóre sterowniki robotów FANUC (R-30iB Plus, R-30iB Mate Plus, R-30iB Mini Plus) można programować za pomocą tabletu. Tablet musi być przytwierdzony do specjalnej bazy i musi mieć zainstalowane odpowiednie oprogramowanie. Baza jest wyposażona w przycisk stopu awaryjnego oraz urządzenie uaktywniające. Ekran tabletu podzielony jest na: menu, ikony zależne od wybranej opcji, obszar wyświetlający stan robota, graficzną reprezentację robota. W zależności od wybranej opcji można edytować programy, wykonywać je lub sterować ręcznie ruchami robota zarówno w przestrzeni konfiguracyjnej jak i operacyjnej.
Programowanie odbywa się za pomocą języka ikonicznego, którego funkcje odzwierciedlają te, które realizuje język panelu programowania (TP), wszakże lista instrukcji jest nieco rozszerzona. Argumenty numeryczne wprowadzane są do odpowiednich pól w aktualnie wyświetlanym okienku lub wykorzystując udostępnione suwaki. Jednym z rozszerzeń jest ruch wzdłuż ścieżki wyrażanej jako funkcja sklejana (spline). Dla robotów serii CRX wprowadzono instrukcję ruchu do wskazanego celu lub do wykrycia kontaktu (Touch Skip). Innym udogodnieniem jest instrukcja umożliwiająca zapamiętanie punktów wzdłuż ścieżki powstającej wskutek ruchów ręcznych. Punkty zapamiętywane są w regularnych odstępach czasu. Dla robotów spawających wprowadzono wiele instrukcji ułatwiających ich programowanie, w tym możliwość nanoszenia ruchu oscylacyjnego w poprzek zadanej ścieżki (weave), co ułatwia rozprowadzanie spoiwa w szczelinie między spawanymi elementami.
Za pomocą tabletu można wywoływać poszczególne operacje w środowisku programistycznym nie tylko klikając w ikony, ale również wywołując je za pomocą komend wydawanych głosem. Wówczas tablet musi być podłączony do Internetu i odłączony od sterownika. Rozpoznawanie głosu obsługuje oprogramowanie Google. Stosowanie tabletu umożliwia ładowanie do sterownika oprogramowania (PLUGIN) dostarczanego przez producentów sprzętu dodatkowego, np. sterujące czujnikami bądź chwytakami. Wtedy sterownik będzie nadzorować pracę takiego sprzętu. Jedną z możliwości jest użycie kamery do lokalizacji przedmiotów, które mają być uchwycone. Wcześniej należy kamerę skalibrować. Zestaw instrukcji ruchu wykorzystujących informację z kamery nieco się różni od zestawu podstawowego, bo dodatkowym parametrem jest informacja pozyskana dzięki kamerze. Koboty CRX, które wyposażone są w czujniki siły, mogą stosować instrukcje siłowe udostępniane przez tablet. Instrukcje te mogą powodować wywieranie stałej siły, wprowadzanie wałka w okrągły otwór, wprowadzanie belki o kwadratowym przekroju w otwór o tym samym przekroju, dopasowanie powierzchni, wykrywanie nadmiarowego obciążenia, śledzenie konturu lub dokręcanie śruby.
Podsumowanie
W zaprezentowanym cyklu artykułów przedstawiono sposoby programowania robotów czterech globalnych firm produkujących roboty przemysłowe. Takich firm jest więcej, ale konieczne było ograniczenie liczby metod programowania, które można opisać w tekście o ograniczonym wolumenie, i jednocześnie na tyle dużej, by z cyklu artykułów wynikały zarówno różnice, jak i elementy wspólne dla sposobów programowania robotów przemysłowych. Wprawdzie starano się dość dokładnie opisać możliwości sterowników tych robotów, ale w przeglądowym cyklu artykułów trudno jest odzwierciedlić wszelkie szczegóły.
Skoncentrowano się na językach programowania oraz sposobach tworzenia programów, pomijając kwestie drugorzędne z punktu widzenia ogólnego zaznajomienia się z opisywaną materią. Wszakże, gdyby ktoś chciał na tej podstawie napisać złożony program, zapewne natrafiłby przy jego uruchomieniu na problemy. W opisie pominięto wiele niuansów, które mają wpływ zarówno na przetwarzanie, jak i wykonanie kodu programu. Celem cyklu było wprowadzenie w dziedzinę. Ci czytelnicy, którzy zetknęli się z dokumentacją do robotów przemysłowych, zapewne docenią takie streszczenie. Dokumentacja, na podstawie której przygotowano ten zestaw artykułów, liczyła kilka tysięcy stron.
Z przedstawionego opisu wynika, że obecny stan języków programowania odzwierciedla historyczne zaszłości. Panuje skłonność rozszerzania możliwości sterowników przez dodawanie instrukcji oraz ich parametrów. Nie sądzę, by ułatwiało to użycie tych języków. Podejrzewam, że bez solidnego szkolenia trudno uzyskać dobrego programistę. Ciekawym jest, że instrukcje ruchu, pomijając szczegóły, ograniczają się w zasadzie do trzech rodzajów: ruchu w przestrzeni konfiguracyjnej oraz dwóch typów ruchów w przestrzeni operacyjnej: po prostej i po okręgu. Oczywiście dzięki łączeniu segmentów bez konieczności dokładnego dojścia do poszczególnych pozycji ścieżki powstają krzywe bardziej złożone, ale o bliżej nieznanym opisie matematycznym. Zastosowanie matematycznych generatorów trajektorii niewątpliwie zwiększyłoby różnorodność opisu ścieżek i zachowania się narzędzia wzdłuż nich, a jednocześnie zredukowało liczbę parametrów niezbędnych do wymuszenia pożądanego ruchu. Niemniej jednak nie widać u producentów robotów chęci skorzystania z takiego podejścia. Zasadniczy trend rozwojowy dotyczy przede wszystkim graficznych symulatorów gniazd roboczych oraz programowania ikoniczno-okienkowego. W tym cyklu artykułów nie przedstawiono dodatkowych bibliotek, które firmy udostępniają, ułatwiających tworzenie programów do konkretnych zastosowań.
Pierwszy robot przemysłowy pojawił się w 1960 r. Od tego czasu minęło ponad 60 lat, więc metody programowania tych robotów okrzepły, co z jednej strony powoduje, że zachowywane są dawne instrukcje, a z drugiej zachodzi powolna ewolucja polegająca na dodawaniu kolejnych drobnych modyfikacji. Należy się spodziewać, że zmiana paradygmatu związana z wprowadzeniem kobotów może zasadniczo wpłynąć na programowanie tych urządzeń. Robot przemysłowy zawsze był odgradzany od ludzi, by nie dochodziło do wypadków. W przypadku kobotów roboty te muszą bezpośrednio współpracować z ludźmi, więc nie można ich od nich odgrodzić. Bezpieczeństwo zapewnia się za pomocą ustanawiania stref bezpieczeństwa oraz bogatego oczujnikowania. Chwilowo jednak sposoby programowania kobotów tylko nieznacznie się różnią od metod wykorzystywanych przez roboty przemysłowe.
źródło: Automatyka 10/2024
Komentarze
blog comments powered by Disqus