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ć.
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).
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.
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ść.
Rysunek 4. Odczytywanie wyjść drugiego robota
Rysunek 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.
Rysunek 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.
Rysunek 7. Działania możliwe do przypisania, gdy sygnały ustawione jako wejście
Rysunek 8. Działania możliwe do przypisania, gdy sygnały ustawione jako wyjście
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.
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ń.
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.
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.
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!