Strona główna ASTOR
Automatyka w praktyce

Przesyłanie ze sterownika PLC do robota pełnej nazwy programu do wykonania
Wymiana danych pomiędzy robotem Kawasaki a sterownikiem PLC, odc. 11

Kontakt w sprawie artykułu: Konrad Sendrowicz - 2025-03-11

To ostatnia część naszego poradnika, wykorzystująca poprzednie artykuły dotyczące przesyłania ciągu znaków. Tym razem ze sterownika PLC prześlemy do robota pełną nazwę programu, która najpierw będzie sprawdzona, a następnie – jeżeli program będzie w pamięci robota, zostanie uruchomiony.  

Wstęp

Dzięki opcji zarządzania programów z pozycji sterownika PLC w łatwy sposób można wybrać program, który ma być wykonywany oraz sprawdzić status bez konieczności wyprowadzania zmian na programatorze ręcznym (teach pendant). W tej części przedstawiona jest jedynie podstawowa obsługa programów, tj:

– weryfikacja, czy program jest w pamięci kontrolera,

– uruchomienie programu, jeżeli jest zapisany w pamięci kontrolera,

– zatrzymanie aktualnego programu na dwa sposoby – na koniec cyklu i natychmiast,

– wznowienie ostatnio wykonywanego programu.

Konfiguracja PLC – obsługa programów   

W tej części przygotowany zostanie algorytm do obsługi programów zapisanych w pamięci robota. Pierwszym krokiem będzie przygotowanie ekranu do obsługi programów przez operatora na ekranie sterownika. Następnie przygotowany zostanie algorytm w kontrolerze robota do obsługi przesyłanych sygnałów.

Jak poprzednio na początku należy dodać zmienne, które będą używane do obsługi programów, na liście globalnej:

Program_name:STRING; 
Stop_now:BOOL;
Resume_cycle:BOOL;
Stop_endcycle:BOOL;

Stworzony zostanie również dedykowany ekran do obsługi programów. Pierwszym elementem jest pole tekstowe do wpisywania nazwy programu. Pole testowe zostanie przypisane do zmiennej gvl.Program_name, a jako opcje wejściowe zostanie zdefiniowana możliwość wpisania ciągu znaków do tej zmiennej:

Następnie dodane zostaną dwa przyciski do sprawdzenia i uruchomienia programu w kontrolerze robota. Do obu przycisków zostanie przypisana ta sama funkcja wysyłania ciągu znaków, która została stworzona w poprzednich częściach. Będzie się różnił jedynie numer indeksu:
2 – sprawdzenie, czy program jest w pamięci.
3 – sprawdzenie, czy program jest w pamięci, a następnie uruchomienie (jeżeli działa inny program, od razu zostanie zatrzymany i uruchomiony będzie wybrany).

Dzięki podziałowi na dwa przyciski możliwe jest sprawdzenie w każdym momencie, czy dany program jest w pamięci kontrolera, bez ingerencji w aktualnie wykonywany program. Drugi przycisk może od razu uruchomić program.

Następnie zostaną dodane dwa przyciski zatrzymania. Pierwszy zatrzyma program od razu – spowoduje on zatrzymanie robota w aktualnej pozycji i wyłączenie motorów. Drugi przycisk natomiast zatrzyma robota na koniec całego programu, dzięki zmianie trybu powtarzania programu na Repeat Ones. Do przycisków zostaną przypisane zmienne typu BOOL utworzone na globalnej liście zmiennych:

Analogicznie przypisujemy zmienną do drugiego przycisku.

Zmienne te są ustawiane w stan wysoki i będą utrzymywać ten stan do momentu zatrzymania robota, dlatego należy w programie głównym sterownika dodać dwa warunki, które po zatrzymaniu robota zresetują stan zmiennych:

Dodatkowo zostanie dodany przycisk wznowienia cyklu. Przycisk ten będzie monostabilny, więc tylko w momencie wciśnięcia będzie wysyłany sygnał do kontrolera robota, aby wznowić działanie programu. W zakładce funkcji przycisku należy przypisać zmienną gvl.Resume_cycle do zakładki TAP. Dodatkowo ustawiony zostanie warunek dezaktywacji przycisku, gdy warunki nie będą spełnione, w przeciwnym razie mógłby wystąpić błąd w kontrolerze.

Ostatnim krokiem jest przypisanie trzech dodatkowych sygnałów do ramki komunikacyjnej:

Następnie należy stworzyć okno, w którym wyświetlana będzie odpowiedź od robota, czy dany program istnieje czy nie, oraz czy został uruchomiony poprawnie. Okno należy stworzyć na tej samej podstawie, jak okno z informacją o błędzie, stworzone w poprzedniej części poradnika, które pojawia się na ekranie sterownika. W wiadomości zostanie przesłana informacja, czy udało się uruchomić program, czy nie.

Aby okno pojawiało się automatycznie po odczytaniu wiadomości należy dodać w programie string_manage obsługę dodatkowego ID z wyświetleniem informacji. Indeks 6 będzie służył do przesyłania ważnych informacji. Po pojawieniu się wiadomości zostanie otwarte okno „Info_from_robot” na ekranie głównym i użytkownik będzie widział informację zwrotną od robota.

Konfiguracja robota  

Zmiany programu w robocie będą podzielone na dwa etapy. Pierwszy to uruchomienie programu, a drugi – zatrzymanie lub wznowienie pracy.

Sterownik PLC po zatwierdzeniu programu przez użytkownika prześle ciąg znaków do robota z jednym z dwóch ustalonych ID. Zmiany będą więc dotyczyły części kodu odpowiedzialnej za odbieranie ciągu znaków od sterownika. Aby sprawdzić czy program istnieje w pamięci sterownika wykorzystana zostanie funkcja EXISTDATA, która jako parametry wejściowe przyjmuje nazwę wyszukiwanej danej oraz typ, który ma być wyszukiwany. W tym przypadku wykorzystany zostanie typ „G”, który przeszukuje tylko nazwy programów. Przykład wykorzystania:

EXISTDATA(“Program_main”,G) – jeżeli program program_main jest w pamięci, funkcja zwróci wartość TRUE, jeżeli nie ma w pamięci, wtedy zostanie zwrócona wartość FALSE.

Obsługa sprawdzenia, czy program istnieje, może wyglądać następująco:

IF EXISTDATA($Recieve_string,G) == TRUE THEN 
	$message="Selected program is in memory: " + $Recieve_string
	Send_str_TAS.pc($message,6)
ELSE 
	$message="Selected program not exist: " + $Recieve_string
	Send_str_TAS.pc($message,6)
END

Tą część kodu należy dodać do kodu odpowiadającego za odbieranie ciągu znaków, tak jak poniżej:

W kolejnym ID (3) jest sprawdzenie i uruchomienie programu. Kod do sprawdzenia programu będzie ten sam, zostanie jednak dodane dodatkowo sprawdzenie parametrów robota, czy jest w trybie automatycznym i czy nie ma błędów, aby uruchomić program. Jeżeli warunki będą spełnione, program zostanie uruchomiony za pomocą funkcji MC EXECUTE, która jako parametr przyjmuje nazwę programu do wykonania. Niestety w programie wątku równoległego nie można wykorzystać nazwy programu w postaci zmiennej typu STRING.

Dlatego zostanie wywołany stworzony w kolejnym etapie program exe_prog, w którym zostanie wykorzystana funkcja SCALL. Dodatkowo zostanie wykorzystana funkcja PRIME, która ustawi aktualny program do wykonania exe_prog. Całość będzie wyglądać następująco:

Program exe_prog, który został wywołany powyżej, będzie zawierał jedynie jedną linię kodu z funkcją SCALL. Funkcja ta wywołuje program zgodnie ze zmienną typu STRING.

Kolejną częścią jest obsługa sygnałów do zatrzymywania i wznawiania aplikacji. Najpierw należy przypisać sygnały do ramki komunikacyjnej:

;****     Variable to PART 11 (program manage)
Resume_signal=First_bit_In + 7
Stop_now=First_bit_In + 8*1+0
Stope_endcycle=First_bit_In + 8*1+1

Następnie każdy z tych sygnałów będzie przypisany do innej akcji w kodzie:

1. Zatrzymanie od razu – nie wymaga sprawdzenia warunków czy stanu robota. Wystarczy, że sygnał jest w stanie wysokim i motory działają, wtedy zatrzymujemy robota komendą HOLD i wyłączamy motory, tak jak poniżej:

;Stop application imidietly - now 
IF SIG(Stop_now)==TRUE AND SWITCH(POWER)==TRUE THEN 
	MC HOLD 
	TWAIT 0.2 
	MC ZPOWER OFF
END

2. Zatrzymanie na końcu programu – wykorzystuje możliwość zmiany trybu działania robota w cyklu. Możliwe jest powtarzanie programu raz lub nieskończenie wiele razy, dlatego gdy pojawi się sygnał, ustawiany zostaje tryb powtórzenia programu raz, gdy program dojdzie do końca, cykl zostanie zakończony. Tryb ten jest zmieniany komendą REP_ONCE, która przyjmuje parametry ON oraz OFF. Dodatkowo na koniec zostaną wyłączone również motory.

;Stop application at the end of cycle 
IF SIG(Stop_endcycle)==TRUE AND SWITCH(POWER)==TRUE AND SWITCH(REP_ONCE)==FALSE THEN
	REP_ONCE ON ; run program till end of it
END
IF SIG(Stop_endcycle)==TRUE AND SWITCH(POWER)==TRUE AND SWITCH(CS)==FALSE THEN 
MC HOLD 
	TWAIT 0.2 
	MC ZPOWER OFF
	REP_ONCE OFF
END

3. Wznowienie programu – wymaga jedynie sprawdzenia, czy cykl robota nie jest aktualnie uruchomiony. Jeżeli warunki są spełnione, następuje włączenie motorów i wznowienie programu komendą MC CONTINUE.

;Resume program and turn cycle again 
IF SIG(Resume_signal)==TRUE AND SWITCH(CS)==FALSE THEN 
	MC ZPOWER ON
	TWAIT 0.3
	MC CONTINUE
END

Te części kodu powinny zostać dodane do głównej pętli modyfikowanego programu Autostart.PC. Ich działanie nie obejmuje pełnej kontroli i sprawdzenia wszystkich warunków uruchomienia programu. Podczas używania tych komend zalecane jest użycie dodatkowych warunków pozwalających na uruchomienie robota i sprawdzenie np. czy jest w pozycji domowej, ewentualnie za każdym razem dodanie procedury dojazdu do pozycji domowej, tzw. Homing.

Działająca aplikacja

Aby przetestować zmodyfikowaną aplikację, wystarczy wpisać jej nazwę do pola tekstowego, a następnie nacisnąć przycisk Check lub Check and run. W zależności od warunków, powinien pojawić się komunikat potwierdzający wykonanie akcji.

Dodatkowo można wyświetlić na tym samym ekranie podstawowe statusy działania robota, aby móc sprawdzić i potwierdzić, czy wszystko działa prawidłowo.

Newsletter Poradnika Automatyka

Czytaj trendy i inspiracje, podstawy automatyki, automatykę w praktyce

Please wait...

Dziękujemy za zapis do newslettera!

Czy ten artykuł był dla Ciebie przydatny?

Średnia ocena artykułu: 0 / 5. Ilość ocen: 0

Ten artykuł nie był jeszcze oceniony.

Zadaj pytanie

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *