Komunikacja Modbus TCP w robotach Universal Robots

29.12.2021 How to / Robotyzacja
Komunikacja Modbus TCP w robotach Universal Robots
Wizerunek autora
Paweł Błocki
Producent: Universal Robots
  • Zakłady przemysłowe

Jeżeli tu trafiłeś, to prawdopodobnie zastanawiasz się, jak skorzystać z komunikacji Modbus TCP w robotach Universal Robots. Postaram się zawrzeć podstawowe informacje, które wykorzystasz do ustalenia połączenia pomiędzy cobotem a innym urządzeniem. W tym artykule skupię się głównie na skonfigurowaniu robota jako Modbus TCP Client, choć coboty potrafią pracować jednocześnie jako Client (master) i Server (slave).

Konfiguracja Modbus Client

Aby zacząć pracę z komunikacją Modbus, musimy upewnić się, że obydwa urządzenia znajdują się w tej samej podsieci. Ustawienia sieci możemy znaleźć nawigując do Menu Hamburger -> Ustawienia -> System -> Sieć.

Ustawienia sieciowe robota

Rysunek 1. Ustawienia sieciowe robota

Następnym krokiem będzie przejście do zakładki Instalacja -> Fieldbus -> Modbus. Konfiguracja jest bardzo prosta i zaczyna się od wpisania adresu IP Modbus Servera. W tym przypadku jest to 192.168.10.4 (drugi robot połączony w sieci).

Ekran główny konfiguracji clienta MODBUS

Rysunek 2. Ekran główny konfiguracji clienta MODBUS

Po wykonaniu poprzednich kroków, możemy podłączyć sygnały, które chcemy obsługiwać. W tym przypadku są to sygnały odpowiadające wyjściom cyfrowym drugiego robota. Pierwsze 4 (DO0 – D03) to cewki, ostatni (Outputs) to rejestr. Dodając kolejne sygnały wybieramy ich typ, adres oraz nazwę pod którą będziemy mogli je później odnaleźć. Adresację wszystkich rejestrów Modbus TCP Server działającego domyślnie na cobotach UR można znaleźć pod tym adresem.

Wybierając typ sygnału mamy do wyboru:

  • Wejście cyfrowe - jednobitowa wartość odczytywana z cewki o podanym adresie (kod funkcji 0x02).
  • Wyjście cyfrowe – jednobitowa wartość zapisywana w cewce o podanym adresie (kod funkcji 0x05). Dopóki użytkownik nie ustawi nowej wartości, odczytywana jest jej aktualna wartość (kod funkcji 0x01).
  • Wejście rejestru – 16 bitowa wartość odczytywana z rejestru o podanym adresie (kod funkcji 0x04).
  • Wyjście rejestru – 16 bitowa wartość zapisywana do rejestru o podanym adresie (kod funkcji 0x06). Dopóki użytkownik nie ustawi nowej wartości, odczytywana jest jej aktualna wartość (kod funkcji 0x03).

Należy pamiętać, aby dobrać odpowiedni typ do naszego sygnału. Nieprawidłowe dobranie, lub używanie funkcji nieobsługiwanych przez urządzenie podrzędne, może skutkować błędami.

Błędy w komunikacji

Rysunek 3. Błędy w komunikacji objawiają się zmianą koloru diody z zielonego na szary. Błąd E2 wskazuje na nieprawidłowy adres danych (próba odczytu cewki, która nie istnieje). Opis wszystkich błędów można znaleźć w podręczniku użytkownika (25.19.12. Stan połączenia sygnału)

W pokazanym wyżej przypadku (2), typ wszystkich sygnałów został ustawiony na wejście. Jak widać, robot w kolumnie wartość, odczytuje stan poszczególnych wyjść drugiego robota. Wejście Outputs to decymalna reprezentacja wyjść cyfrowych drugiego robota. W dalszej części artykułu zostanie wyjaśnione, jak możemy zamienić tą wartość na listę poszczególnych bitów, odpowiadających stanowi każdego z wyjść.

Odczytywanie wyjść drugiego robotaRysunek 4. Odczytywanie wyjść drugiego robota

 

Ustawianie wyjść drugiego robotaRysunek 5. Ustawianie wyjść drugiego robota

Wybierając opcję „Pokaż opcje zaawansowane”, możemy skorzystać z kilku dodatkowych funkcjonalności. Jedną z nich jest wymuszenie trybu sekwencyjnego, który wymusza zaczekanie na odpowiedź przed wysłaniem ponownego zapytania. Możliwa jest również zmiana częstotliwości wysyłania zapytań oraz adresu Modbus servera. Przedstawione są też podstawowe parametry połączenia, takie jak liczba ponownych połączeń, liczba błędnych otrzymanych pakietów czy też status połączenia. Przy każdym sygnale mamy możliwość sprawdzić czas odpowiedzi na zapytanie, ilości zapytań z przekroczonym czasem odpowiedzi lub błędną odpowiedzią oraz rzeczywistą częstotliwość aktualizacji sygnału.  

Zaawansowane opcje komunikacjiRysunek 6. Zaawansowane opcje komunikacji

Jak można użyć sygnałów

Sygnały, które skonfigurowaliśmy w głównym oknie możemy wykorzystywać nie tylko podczas pisania programów. W zakładce Instalacja -> Ogólne -> Konfiguracja WE/WY, po zmianie widoku na MODBUS, mamy dostęp do skonfigurowanych sygnałów. W przypadku, gdy sygnały zostały ustawione w trybie wejść, mamy możliwość przypisania im funkcji takich jak uruchomienie, wstrzymanie lub zatrzymanie programu, bądź zastosowanie trybu swobodnego. Gdy korzystamy z sygnałów w trybie wyjść, mamy możliwość przypisania im wartości sygnalizujących stan robota i wykonywanie programu.

Działania możliwe do przypisania, gdy sygnały ustawione jako wejście

Rysunek 7. Działania możliwe do przypisania, gdy sygnały ustawione jako wejście

 

Działania możliwe do przypisania, gdy sygnały ustawione jako wyjście

Rysunek 8. Działania możliwe do przypisania, gdy sygnały ustawione jako wyjście

 

Wartości cewek i rejestrów możemy odczytywać i zmieniać w zakładce We/wy -> Zewnętrzny

Rysunek 9. Wartości cewek i rejestrów możemy odczytywać i zmieniać w zakładce We/wy -> Zewnętrzny

Sygnały Modbus mogą być wykorzystywane praktycznie tak, jak typowe wyjścia/wejścia cyfrowe. Można przy ich pomocy tworzyć warunki logiczne, wykorzystywane w poleceniach Jeżeli, Pętla, Czekaj, Przełącznik. Wartości sygnałów można również użyć w operacji Przypisanie czy Ustaw.

Przykładowe zastosowanie sygnału wejściowego MODBUS - program oczekuje stanu wysokiego sygnału DO0, aby mógł kontynuować pracę

Rysunek 10. Przykładowe zastosowanie sygnału wejściowego MODBUS - program oczekuje stanu wysokiego sygnału DO0, aby mógł kontynuować pracę

Jak można zamienić wartość rejestru na listę binarną i na odwrót

Rejestry, to w dużej części listy pojedynczych bitów zapisane w systemie decymalnym. Universal Robots przygotował specjalne funkcje, które pozwalają konwertować binarne listy na wartości decymalne i odwrotnie. Są one dostępne do wybrania z listy funkcji w edytorze wyrażeń.

Indeksy pojedynczych bitów w liście wskazują potęgę, do której należy podnieść 2. Zsumowane elementy dają wartość rejestru.

Rysunek 11. Indeksy pojedynczych bitów w liście wskazują potęgę, do której należy podnieść 2. Zsumowane elementy dają wartość rejestru

Aby rozbić rejestr na pojedyncze bity, należy skorzystać z funkcji integer_to_binary_list(<integer>). Jako argument funkcji podajemy wartość rejestru. Jak widać na rysunku poniżej (12), w programie, do zmiennej outputs_list przypisano listę utworzoną za pomocą funkcji integer_to_binary_list(). Następnie do zmiennych output_0 - output_3 przypisano wartości kolejnych elementów listy, korzystając z dostępu poprzez indeksy.

Zamiana wartości decymalnej rejestru na listę binarną

Rysunek 12. Zamiana wartości decymalnej rejestru na listę binarną

Aby zamienić listę wartości binarnych na wartość decymalną, można skorzystać z funkcji binary_list_to_integer(<list>), która jako argument przybiera listę wartości binarnych. Na rysunku poniżej (13) można zobaczyć przykładowe wykorzystanie takiej funkcji. Do zmiennej output_reg przypisana została liczba, reprezentująca wartość listy składającej się ze zmiennych output_1-output_3.

Zamiana listy binarnej na wartość w systemie dziesiątkowym.

Rysunek 13. Zamiana listy binarnej na wartość w systemie dziesiątkowym

Podsumowanie

Kroki pokazane w powyższym artykule pokazują, że konfiguracja Clienta Modbus w cobotach Universal Robots jest łatwa. Pomimo swojej prostoty, sygnały Modbus mogą mieć wiele zastosowań, tym samym dodając wiele funkcjonalności do aplikacji. Aby dowiedzieć się więcej o komunikacji przemysłowej robotów UR ze sterownikami PLC, zapraszamy do obejrzenia Magazynu Robotów, poświęconego tej tematyce.

Jeżeli masz pytania dotyczącej komunikacji lub chcesz dowiedzieć się więcej o robotach Universal Robots, napisz do nas na adres: roboty@elmark.com.pl.

Skontaktuj się ze specjalistą Elmark

Masz pytania? Potrzebujesz porady? Zadzwoń lub napisz do nas!