EtherCAT - przemysłowy protokół komunikacji
Dawid Pawlak , 27 lutego 2024
EtherCAT (z ang. Ethernet for Control Automation Technology) został zaprezentowany w 2003 roku przez firmę Beckhoff i już w 2007 stał się międzynarodowym standardem. EtherCAT jest otwartym protokołem przemysłowego Ethernetu pracującego w czasie rzeczywistym bazując na standardzie magistrali. Protokół jest zarządzany i rozwijany przez organizacje o nazwie EtherCAT Technology Group. Protokół powstał w celu przyśpieszenia komunikacji między sterownikami i systemami wymagającymi szybkiej wymiany danych np. serwonapędy, pomiary, maszyny mobilne przy jednoczesnym obniżeniu kosztów implementacji.
Korzyści z korzystania z EtherCAT
Wyjątkowa wydajność
Jest najszybszą technologią opartą o Ethernet przemysłowy, synchronizacja urządzeń zachodzi z dokładnością do 1 mikrosekundy. Jednocześnie mniej obciąża procesor o 30% w stosunku do innych protokołów. To wszystko prowadzi do większej dokładności systemu.
Elastyczna topologia
Oprócz typowych dla Ethernetu topologii, EtherCAT obsługuje jeszcze topologie magistrali. Urządzenia posiadają wbudowane dwa porty komunikacyjne umożliwiające podłączanie ich jeden za drugim. Maksymalna liczba urządzeń w sieci wynosi 65 535, więc w praktyce jest nieograniczona.
Zintegrowane bezpieczeństwo
Systemy bezpieczeństwa mogą być kontrolowane poprzez protokół EtherCAT. Wprowadzone zostało FSoE (functional safety over EtherCAT) spełniając kategorie bezpieczeństwa SIL 3. Wykorzystuje się go w scentralizowanych jak i zdecentralizowanych systemach sterowania.
Niskie koszty
Urządzenia muszą posiadać port Ethernet, ale nie są wymagane karty sieciowe, dodatkowo EtherCAT nie wymaga dużej mocy obliczeniowej CPU. To skutkuje niskimi kosztami wyprodukowania urządzenia. Cały system sieciowy również jest tańszy, ponieważ w tym protokole nie jest wymagane wykorzystywanie dodatkowych urządzeń typu switch.
Udział w rynku EtherCAT
EtherCAT z roku na rok rozpowszechnia się w coraz szerszym gronie zastosowań i jego udziały w rynku wciąż rosną. Najczęściej wykorzystuje się ten protokół do sterowania napędami wykorzystując jego największą zaletę czyli prędkość. Coraz więcej urządzeń jest również dostępnych, które posiadają możliwość komunikacji poprzez EtherCAT.
Parametry sieci EtherCAT
Dane w protokole EtherCAT są przesyłane za pomocą skrętki lub za pomocą dedykowanych przewodów. Ten protokół wykorzystuje do komunikacji 4 żyły w przewodzie. Wykorzystuje zalety warstwy fizycznej w sieci Ethernet jednocześnie eliminując wady warstwy programowej działając na zasadzie Master - Slave. Dzięki temu zwiększona jest prędkość transmisji danych w sieci. Prędkości jakie może osiągać EtherCAT w podstawowej wersji to 100 Mb/s, ale istnieją odmiany do nawet 10 Gb/s. Odczyt danych z rozproszonych 1000 wejść i wyjść zajmuje tylko 30 μs. Najczęściej odświeżanie danych w sieci EtherCAT odbywa się z częstotliwością 1-30 kHz. Co wskazuje, że używanie tego typu protokołu dla systemów napędowych przynosi wiele korzyści. Przyjmuje się, że odczyt danych ze 100 osi serwo zajmie 100 μs. W jednej sieci może się znajdować praktycznie nieograniczona liczba urządzeń, ponieważ maksymalna liczba wynosi 65 535 co jest wręcz nieosiągalne na poziomie jednej fabryki.
Sposób działania EtherCAT
Master wysyła pojedynczą ramkę danych do wszystkich węzłów jednocześnie, a nie jak to jest w innych sieciach opartych na Ethernet jedna ramka do jednego węzła. Pojedyncza ramka danych posiada informacje (datagramy) dla wszystkich urządzeń typu slave w danej sieci. Slave sprawdza dane w locie i odbiera informacje, które są skierowane do niego i sam wprowadza informacje zwrotne do ramki. Cała ramka z danymi przechodzi przez wszystkie urządzenia slave, a potem wraca do mastera. Jest to możliwe dzięki wykorzystaniu ESC (z ang. EtherCAT Slave Controller), który przetwarza te ramki całkowicie na poziomie sprzętowym, dlatego wydajność sieci i szybkość odczytu danych jest łatwa do przewidzenia. Ethercat wykorzystuje transmisje typu full duplex czyli dane mogą być przesyłane w dwie strony jednocześnie co umożliwia wykorzystanie kanału transmisyjnego nawet do 90%.
Dane do wszystkich urządzeń w EtherCAT są wysyłane w jednej ramce, a urządzenia slave odbierają i nadają dane w locie.
Urządzenia typu slave są automatycznie adresowane podczas inicjalizacji sieci przez Master w formie np. 0x01. Dane informacje urządzenia są pogrupowane w obiekty, które posiadają indeksy: Indeks obiektu wskazuje na konkretną funkcję, dane lub parametry, które można odczytywać lub zapisywać. W zależności od parametru spotyka się jeszcze pojęcie subindeksu, który pomaga jednoznacznie określić konkretną część danych lub funkcji związanych z danym obiektem. Opis parametrów i związanych z nimi numerami indeksów dostarczone są z dokumentacją techniczną danego urządzenia i zapisane są w sposób np. 0x3456.
Topologia sieci EtherCAT
Najczęściej urządzenia wspierające komunikacje w protokole EtherCAT posiadają dwa porty Ethernetowe (typu RJ45 lub M12) co umożliwia łatwe podłączenie w topologii liniowej. Nic nie stoi na przeszkodzie aby stosować również topologie drzewa, gwiazdy i pierścienia dla zwiększenia bezpieczeństwa redundancji sieci. Brak potrzeby stosowania urządzeń typu switch pozwala również zmniejszyć koszty implementacji sieci. Łączenie ze sobą bliskich urządzeń odbywa się za pomocą wpięcia patchcordu w ich porty. Maksymalna odległość przewodu typu skrętka może wynosić do 100m, jednak dla odległości większych można bez problemu zastosować światłowód.
EtherCAT Technology Group opracowało również funkcjonalność zwaną podłączeniem na gorąco (Hot connect) odpowiadające za możliwość modyfikacji sieci bez niebezpieczeństwa wpływu na jej prawidłowe funkcjonowanie. Szczególnie jest to przydatne przy maszynach mobilnych, które zmieniają swoje miejsce pracy. Podczas usunięcia sąsiedniego modułu port w danym urządzeniu slave zostanie automatycznie zamknięty umożliwiając dalszą prace systemu. Z podłączeniem nowego urządzenia również nie ma problemu, ponieważ adresy przydzielane są automatycznie. Bardzo krótki czas detekcji (poniżej 15 μs) umożliwia płynną zmianę struktury sieci.
Odmiany EtherCAT
Oprócz podstawowej wersji EtherCAT, wyszczególnia się jeszcze dwie odmiany, które posiadają specjalne cechy. Mogą one ze sobą współistnieć w jednej sieci.
- EtherCAT G - pozwala na przesyłanie danych z prędkością 1 Gb/s oraz jego wyższa wersja z prędkością 10 Gb/s. Te szybkie transfery danych umożliwiły korzystanie z tej odmiany przy zaawansowanych systemach pomiarowych, systemach wizyjnych oraz przy bardzo złożonych systemach związanych ze sterowania ruchem. EtherCAT G nadal jest elastyczny w stosunku do topologii oraz zachowana została zgodność ze standardem IEEE 802.3. Wprowadzono koncepcje EBC (z ang. EtherCAT Branch Controller), które umożliwiają integracje między odmianami i prędkościami w EtherCAT, jednocześnie segmenty EtherCAT i EtherCAT G są przetwarzane równolegle.
- EtherCAT P - jest połączeniem przesyłania danych wraz zasilaniem za pomocą jednego przewodu. Przekazywane zasilanie jest o napięciu 24V DC z maksymalnym obciążeniem 3A. Przy rozległych systemach może to znacznie zredukować koszty i zmniejszyć czas montażu, ponieważ do działania sieci jest użyty tylko jeden przewód. Wystarczy zastosować konwerter, który będzie łączył ze sobą dane wysyłane poprzez EtherCAT z zasilaniem. W taki sposób można zasilić wszelkiego rodzaju czujniki, aktuatory poprzez kompatybilność protokołu komunikacyjnego również do złącza M8.
EtherCAT w IoT i w dobie przemysłu 4.0
EtherCAT jako otwarty protokół komunikacyjny spełnia wymogi cyfrowej transformacji. Głównie dzięki wysokiej wydajności i dużej elastyczności. EtherCAT umożliwia dodanie połączenia z chmurą i do innych systemów nadrzędnych bez konieczności modyfikacji istniejących urządzeń. Wykorzystanie tzw. Edge Gateways pozwala na uzyskanie dostępu do dowolnych danych w dowolnym urządzeniu w sieci EtherCAT za pomocą tzw. Mailbox. Istnieje możliwość wysyłania danych skierowanych do systemu IT wykorzystując komunikacje poprzez TCP/IP lub UDP/IP, więc istnieje możliwość łatwej integracji z protokołami takimi jak OPC UA, AMQP, MQTT. Zarówno to się może odbywać w urządzeniu master jak i w slave, zapewniając bezpośrednie i ciągłe wysyłanie danych np. z czujnika do chmury zgodnie z łącznością IoT. EtherCAT Technology Group również współpracuje nad wprowadzenie TSN (z ang. Time-Sensitive Networking) do sieci Ethernet zgodnie w standardzie IEEE 802.1
Profile komunikacyjne EtherCAT
Wykorzystując komunikacje acykliczną istnieje możliwość odczytania różnego typu danych udostępnionych przez urządzenia typu slave. Opierając się na protokole Mailbox ustanowiono różne profile komunikacyjne EtherCAT umożliwiając obsługę szerokiej gamy urządzeń dla różnych warstw aplikacji.
- FoE (File access over EtherCAT) - prosty protokół bardzo podobny do TFTP umożliwia dostęp do plików w urządzeniu jak np. firmware i zaktualizowanie go na wybranym urządzeniu. Profil ten został zaprojektowany w sposób oszczędny dla CPU, tak aby mógł być obsługiwany przez boot loader i TCP/IP nie jest wymagane.
- AoE (ADS over EtherCAT) - wprowadza usługi routowalne i równoległe serwisy, aby obsłużyć dodatkowe funkcje typu dostęp do podsieci poprzez EtherCAT przy użycia bramy z poziomu PLC. Umożliwia używanie narzędzi diagnostycznych dla sprawdzenie stanu sieci EtherCAT. AoE jest również wykorzystywane przy acyklicznej komunikacji z systemami typu MES.
- EoE (Ethernet over EtherCAT) - w związku z tym, że EtherCAT wykorzystuje warstwy fizyczne oraz ramkę Ethernet każda wymiana danych poprzez Ethernet może być przesyłania w segmencie EtherCAT. Ramki Ethernet są tunelowane poprzez protokół EtherCAT, podobnie jak protokoły internetowe (np. TCP/IP, VPN, PPPoE (DSL) itp.) co sprawia, że sieć EtherCAT jest całkowicie przezroczysta dla urządzeń Ethernet. Dodatkowo urządzenia EtherCAT mogą również obsługiwać protokoły Ethernet (takie jak HTTP). W ten sposób wszystkie technologie internetowe mogą być również wdrażane w środowisku EtherCAT, np. serwer WWW, poczta e-mail, transfer FTP itp.
- SoE (Servo over EtherCAT) - profil wykorzystywany do sterowania napędami w czasie rzeczywistym zgodny ze standardem IEC 61800-7-204. Zawiera dostęp do wszystkich parametrów i funkcji dotyczących napędów i zostaje to zmapowane do Mailbox w EtherCAT
- CoE (CAN over EtherCAT) - umożliwia stosowanie tych samych mechanizmów komunikacji co w normie CANopen. Mowa tu głównie o słowniku obiektów, mapowanie obiektów danych procesowych (PDO) oraz mapowanie obiektów danych serwisowych (SDO). Usprawnia wdrożenie protokołu EtherCAT w urządzenia, które wcześniej były zgodne z CANopen.
Komunikacja w całej fabryce za pomocą protokołu EtherCAT
W celu wprowadzenie protokołu EtherCAT do wyższych warstw poziomu sterowania i zarządzania w przemyśle wprowadzono koncepcje protokołu automatyzacji EtherCAT (w skrócie EAP). Na poziomie procesowym komunikacja posiada nieco inne wymagania, ponieważ maszyny muszą wysyłać informacje o stanie jak i informacje o kolejnych etapach produkcji. Zazwyczaj za monitorowanie całego procesu produkcyjnego wykorzystuje się centralny sterownik, który wymienia dane z wieloma stacjami roboczymi. Wtedy priorytetem nie jest szybkość na poziomie mikrosekund, tylko pewność odczytu danych w zadeklarowanym cyklu. EAP jest wstanie zapewnić niezawodność ,spełnia wszystkie z powyższych wymagań i jest zgodny z normą IEC 61158.
EAP wprowadza interfejsy i usługi dla:
- wymiany danych pomiędzy urządzeniami typu Master EtherCAT (komunikacja Master to Master)
- komunikacji z panelami HMI
- kontrolujących systemów nadzorczych dając dostęp do urządzeń należących do niższych segmentów w sieci EtherCAT (routing)
- integracji narzędzi do konfiguracji maszyny lub nawet całego zakładu
Przesyłanie danych może odbywać się za pomocą dowolnego połączenia Ethernet, w tym bezprzewodowego. Cykliczna wymiana danych procesowych z wykorzystaniem EAP odbywa się zgodnie z zasadą push lub poll. W trybie push urządzenie wysyła swoje dane z własnym czasem cyklu lub jego wielokrotności. Odbiorca może zostać skonfigurowany do odbierania danych od określonego nadawcy. Konfiguracja danych odbywa się za pomocą wykorzystania słownika obiektów. W trybie poll centralny sterownik wysyła ramkę danych do innych urządzeń, a każde urządzenie odpowiada własną ramką.
Cykliczna komunikacja EAP może znajdować się bezpośrednio w ramce Ethernet bez użycia dodatkowych usług. Możliwa jest wymiana danych z zachowaniem wysokiej wydajności zachowując cykle danych na poziomie milisekundowym. Komunikacja również może się odbywać poprzez UDP/IP lub TCP/IP. Dodatkowo istnieje możliwość wysyłanie informacji na temat stanu systemu bezpieczeństwa (Safety over EtherCAT) umożliwiając wysyłanie informacji o zatrzymaniu awaryjnym do innych maszyn.
Biblioteki do komunikacji z EtherCAT
W związku z tym, że EtherCAT działa na zasadzie Master - Slave to istnieją biblioteki umożliwiające zaimplementowanie danego typu na komputerze. Istnieje rozwiązanie EtherLab, które jest otwarto źródłową implementacją EtherCAT master dla systemów Linux. W celu połączenia się w systemie Windows rozwiązanie przynosi biblioteka SOEM (Simple Open EtherCAT Master) i SOES (Simple Open EtherCAT Slave) stworzonej przez Open EtherCAT Society napisanej w języku C. Dla developerów wolących język Python jest dostępna biblioteka pySOEM wykorzystująca Cython do integracji z biblioteką SOEM. Zostały stworzone również specjalne płytki jak EasyCAT HAT umożliwiające posiadanie EtherCAT Slave na Raspberry PI.
pySOEM - biblioteka do komunikacji z EtherCAT w języku Python
Do zainstalowania biblioteki można wykorzystać pip:
pip install pysoem
Po zaimportowaniu biblioteki należy utworzyć mastera i odczytać dane na temat urządzeń typu slave.
import pysoem
BECKHOFF_VENDOR_ID = 0x0002
EK1100_PRODUCT_CODE = 0x044c2c52
EL3002_PRODUCT_CODE = 0x0bba3052
expected_slave_mapping = {0: SlaveSet('EK1100', EK1100_PRODUCT_CODE, None),
1: SlaveSet('EL3002', EL3002_PRODUCT_CODE, None)}
master = pysoem.Master() #create master
master.open('Your network adapters ID') # open network interface
if master.config_init() > 0: #read data about slaves
for i, slave in enumerate(master.slaves):
assert(slave.man == BECKHOFF_VENDOR_ID)
assert(slave.id == expected_slave_mapping[i].product_code)
slave.config_func = expected_slave_mapping[i].config_func
self.master.config_map()
else:
print('no device found')
master.close()
Następnie istnieje możliwość wyświetlenia informacji na temat urządzeń, które zostały wykryte w sieci.
print(slave_1.name)
print(slave_2.name)
Aby przekonwertować dane otrzymane poprzez EtherCAT należy użyć modułu Python: ctypes lub struct, ponieważ biblioteka SOEM jest napisana w C. W zależności od wykorzystanego rozwiązania należy zastosować odpowiedni typ danych jaki powinien zostać otrzymany.
Biblioteka pozwala na odczytanie i zapisywanie zmapowanych danych obiektów serwisowych SDO.
Do odczytania danych służy metoda: sdo_read(index, subindex, size=0, ca=False)
- index (int) – Indeks obiektu
- subindex (int) – Subindeks obiektu
- size (int, opcjonalnie) – Rozmiar odczytanego buforu
- ca (bool, opcjonalnie) – pełny dostęp
slave_name = slave.sdo_read(0x1008, 0).decode('utf-8')
W celu zapisania danych do Slave należy użyć funkcji sdo_write(), która posiada takie same argumenty jak sdo_read().
slave.sdo_write(0x3456, 0, bytes(ctypes.c_uint32(1))) # using ctypes
slave.sdo_write(0x3456, 0, struct.pack('I', 1)) # using struct
Używane typy danych
typ ESI | ctypes | struct |
---|---|---|
SINT | c_int8 | b |
INT | c_int16 | h |
DINT | c_int32 | i |
LINT | c_int64 | q |
USINT | c_uint8 | B |
UINT | c_uint16 | H |
UDINT | c_uint32 | I |
ULINT | c_uint64 | Q |
REAL | c_float | f |
BOOL | c_bool | c |
Podsumowanie
EtherCAT łączy w sobie najbardziej pożądliwe cechy w przemyśle czyli niski koszt implementacji oraz niskie opóźnienia odczytania danych. Organizacja EtherCAT TG ciągle rozwija ten protokół poszerzając jego możliwości implementacji, widać to po udziale tego protokołu na rynku. Jeszcze w 2021 roku EtherCAT posiadał tylko 8%, aktualnie może sięgać nawet 12% wszystkich sieci w przemyśle. Inne podejście przy projektowaniu protokołu się sprawdziło i przyniosło wiele korzyści.
Protokół ten nie tylko może być wykorzystywany do sterowania napędami, ale również do odbierania i wysyłania danych z czujników do systemów nadrzędnych. Wpisuje się w nowoczesne trendy IoT, a dodając bramki można poszerzyć możliwości komunikacyjne i współdziałania z innymi systemami typu MES i ERP.