Przesyłanie parametrów ruchu w czasie rzeczywistym i informacji o wykonanym programie
Wymiana danych pomiędzy robotem Kawasaki a sterownikiem PLC, odc. 4
Kontakt w sprawie artykułu: Konrad Sendrowicz - 2024-09-16
Z tej części naszego cyklu dowiesz się, jak wysyłać z robota jego parametry ruchu, takie jak prędkość, przyspieszenie i opóźnienie, a także informacje o numerze kroku i numerze programu.
Wymiana danych pomiędzy robotem Kawasaki Robotics a sterownikiem PLC
Wstęp: Integracja robota przemysłowego ze sterownikiem PLC i panelem HMI – dlaczego warto?1. Przesyłanie statusu połączenia i kodu błędów w czasie rzeczywistym.
2. Przesyłanie danych robota (typ, numer seryjny, godziny pracy i zużyta energia).
3. Przesyłanie dedykowanych sygnałów wejściowych i wyjściowych.
4. Przesyłanie parametrów ruchu w czasie rzeczywistym i informacji o wykonanym programie.
5. Przesyłanie aktualnej pozycji i dystansu do kolejnego punktu.
Parametry ruchu
Podstawową komendą, pozwalającą na uzyskanie informacji o aktualnych parametrach pracy robota, jest SYSDATA(). Zwraca ona wartość numeru wybranego parametru, którą można wykorzystać w programie lub wysłać do zewnętrznego urządzenia.
Poniżej znajduje się lista parametrów wraz z krótkim opisem.
Num. | Nazwa | Opt1 | Opt2 | Opis | Jed. |
1 | M.SPEED | 1- | Not Used | Prędkość główna (monitor speed) | % |
2 | MSTEP | 1- | Not Used | Aktualny numer kroku, jeśli program nie wykonywany – wartość 1. | Num. |
3 | STEP | 1-(100x) | Not Used | Aktulny krok programu, również pc programu 1001. | Num. |
4 | P.SPEED | 1- | Not Used | Prędkość kolejnego ruchu | % |
5 | P.SPEED.M | 1- | Not Used | Prędkość kolejnego ruchu | mm/s |
6 | P.ACCEL | 1- | Not Used | Przyspieszenie kolejnego lub ostatniego ruchu | % |
7 | P.DECEL | 1- | Not Used | Opóźnienie kolejnego lub ostatniego ruchu | % |
8 | MTR.RPM | 1- | 1-(Num JT) | Prędkość poszczególnych osi JT1 -1; JT2-2; … | rpm |
9 | TOOL.VEL.CMD | 1- | Not used | Prędkość TCP | mm/s |
10 | MEM.FREE | Not used | Not used | Procent wolnej pamięci w kontrolerze | % |
Do celów szkoleniowych będziemy wysyłać do sterownika tylko kilka wartości dotyczących prędkości ustawionej na programatorze (teach pendant), numeru kroku, prędkości następnego ruchu i prędkości TCP. Dodatkowo będziemy wyświetlać ilość zajętej pamięci.
Definicja zmiennych w programie PC:
Monitor_Speed_8=209 ; Number of first bit data with monitor speed [%],8 bits
Step_Numb_16=217 ; Number of first bit data with step program number, 16 bits
Speed_Robot_16=233; Number of first bit data with Speed robot [mm/s], 16 bits
Speed_TCP_16=249; Number of first bit data with Speed TCP [mm/s], 16 bits
Memory_free_8=265; Number of first bit data with Free memory [%],8 bits
W głównej pętli programu PC należy dodać:
BITS Monitor_Speed_8,8 = SYSDATA(M.SPEED)
BITS Step_Numb_16,16 = SYSDATA (STEP)
BITS Speed_Robot_16,16 = SYSDATA (P.SPEED.M)
BITS Speed_TCP_16,16 = SYSDATA (TOOL.VEL.CMD)
BITS Memory_free_8,8 = SYSDATA (MEM.FREE)
Dodatkowe parametry
Istnieją również dodatkowe funkcje w języku programowania AS Language, które zwracają określone wartości stanu robota. Poniżej znajduje się przykład kilku z nich.
GETENCTEMP(axis_number) – zwraca temperaturę enkodera wybranej osi robota.
DISP_EXESTEP – wyświetla numer kroku aktualnie wykonywanego programu
MSPEED – zwraca prędkość monitora (w procentach), która jest ustawiona na teach pendant
IQARM(axis_number) – zwraca wartość prądu silnika dla danej osi.
TRQNM(axis_number) – zwraca wartość momentu obrotowego dla danej osi, wyrażoną w Nm.
W tym przykładzie dodatkowo wyślemy temperaturę enkodera drugiej osi robota i moment obrotowy silnika, aby utworzyć ekran z parametrami silnika.
Definicja zmiennych w programie PC:
Temp_JT2_8=273; Number of first bit data with temperature axis 2 [Celsius],8 bits
Torq_JT1_16=281; Number of first bit data with Torque axis 1 [Nm],16 bits
Torq_JT2_16=297; Number of first bit data with Torque axis 2 [Nm],16 bits
Torq_JT3_16=313; Number of first bit data with Torque axis 3 [Nm],16 bits
Torq_JT4_16=329; Number of first bit data with Torque axis 4 [Nm],16 bits
Torq_JT5_16=345; Number of first bit data with Torque axis 5 [Nm],16 bits
Torq_JT6_16=361; Number of first bit data with Torque axis 6 [Nm],16 bits
W głównej pętli programu PC należy dodać:
BITS Temp_JT2_8,8 = GETENCTEMP(,2)
BITS Torq_JT1_16,16= TRQNM(1)*100; Multiple by 100 because BITS send only integer value
BITS Torq_JT2_16,16= TRQNM(2)*100
BITS Torq_JT3_16,16= TRQNM(3)*100
BITS Torq_JT4_16,16= TRQNM(4)*100
BITS Torq_JT5_16,16= TRQNM(5)*100
BITS Torq_JT6_16,16= TRQNM(6)*100
Konfiguracja PLC w Codesys
1. Pierwszym krokiem, jak poprzednio, jest zdefiniowanie zmiennych w GVL. Niektóre wartości mają 16 bitów, niektóre 8 bitów, w przypadku dłuższych zmiennych konieczne jest zdefiniowanie wartości niskiej i wysokiej oraz zmiennej, w której będzie przechowywana cała wartość. Na przykład wartość kroku będzie wymagała zmiennych STEP_L i STEP_H, aby odczytać wartości z modułu Ethernet/IP, a następnie połączyć te wartości i zapisać pełną wartość w zmiennej STEP_NUM.
Można również zdefiniować zmienne Integer 16 bitowe, przedstawione to zostanie w kolejnych częściach poradnika.
VAR_GLOBAL
STEP_L: INT;
STEP_H: INT;
STEP_NUM: INT;
Monitor_SPEED: INT;
Rob_SPEED_L: INT;
Rob_SPEED_H: INT;
Rob_SPEED:INT;
TCP_SPEED_L:INT;
TCP_SPEED_H: INT;
TCP_SPEED:REAL;
Memory_Free:INT;
Temp_JT2:INT;
Torq_JT1_L:INT;
Torq_JT1_H:INT;
Torq_JT1:INT;
Torq_JT2_L:INT;
Torq_JT2_H:INT;
Torq_JT2:INT;
Torq_JT3_L:INT;
Torq_JT3_H:INT;
Torq_JT3:INT;
Torq_JT4_L:INT;
Torq_JT4_H:INT;
Torq_JT4:INT;
Torq_JT5_L:INT;
Torq_JT5_H:INT;
Torq_JT5:INT;
Torq_JT6_L:INT;
Torq_JT6_H:INT;
Torq_JT6:INT;
END_VAR
2. Następnie zdefiniowane zmienne należy przypisać do modułu komunikacyjnego (Mapping), aby dane odbierane zostały wpisane do właściwej zmiennej. Po przypisaniu wszystkich wartości okno powinno wyglądać jak poniżej:
3. Kolejnym krokiem jest dodanie do głównego programu procedury obsługi danych odebranych od robota.
Główny program:
//Combining the values of two 8-bit variables
GVL.STEP_NUM:= GVL.STEP_L +( GVL.STEP_H *256);
GVL.Rob_SPEED:= GVL.Rob_SPEED_L +( GVL.Rob_SPEED_H *256);
GVL.TCP_SPEED:= INT_TO_REAL(GVL.TCP_SPEED_L +( GVL.TCP_SPEED_H *256));
GVL.Torq_JT1:= GVL.Torq_JT1_L +( GVL.Torq_JT1_H *256);
GVL.Torq_JT2:= GVL.Torq_JT2_L +( GVL.Torq_JT2_H *256);
GVL.Torq_JT3:= GVL.Torq_JT3_L +( GVL.Torq_JT3_H *256);
GVL.Torq_JT4:= GVL.Torq_JT4_L +( GVL.Torq_JT4_H *256);
GVL.Torq_JT5:= GVL.Torq_JT5_L +( GVL.Torq_JT5_H *256);
GVL.Torq_JT6:= GVL.Torq_JT6_L +( GVL.Torq_JT6_H *256);
//Other values will be directly assigned to the elements in the visualisation:
//GVL.Temp_JT2; GVL.Monitor_SPEED; GVL.Memory_Free;
4. Ostatnią operacją jest wyświetlenie odebranych danych. Pola, na których będą wyświetlane dane, zostaną dodane do ekranu wizualizacji. W celach szkoleniowych zmienne zostaną wyświetlone na różne sposoby, które można dowolnie zmieniać.
A) Zmienne z numerem kroku i ustawionej prędkości jest dodana standardowo jako wyświetlenie liczby:
B) Wolna pamięć jest wyświetlana jako ProgressBar, aby można było w łatwy sposób zwizualizować ile pamięci pozostało w kontrolerze:
C) Ponieważ temperatura to ważny parametr, dobrze aby wartość była połączona z kolorem, który informuje, w którym przedziale jest aktualna temperatura. Dlatego zostało wykorzystane dedykowane okno BarDisplay, dla których dobrane są również parametry graniczne:
D) Prędkość punktu TCP w mm/s dla łatwiejszego odczytu będzie zmieniona na m/s, a wyświetlona jako obrotowy wskaźnik, więc będzie można dynamicznie sprawdzić aktualną prędkość.
E) Parametry momentu poszczególnych osi są oznaczone prostymi wskaźnikami, dla każdego robota będą się różnić i wymagają dostosowania na etapie testów.
Aplikacja
W następnej części dowiesz się, jak szybko udostępniać aktualną pozycję robota oraz dystans do kolejnego dynamicznie zmieniającego się punktu w przestrzeni.
Następny odcinek: Przesyłanie aktualnej pozycji i dystansu do kolejnego punktu