Sterowniki PLC Astraada One: czy opłaca się inwestować w jednostki centralne z procesorem dwurdzeniowym?
Kontakt w sprawie artykułu: Mateusz Pytel - 2023-11-06
Z tego artykułu dowiesz się:
- jak przygotować program wykorzystujący możliwości procesora dwurdzeniowego w sterowniku PLC Astraada One,
- jakie wyniki uzyskano podczas testów porównawczych procesorów jedno- i dwurdzeniowych.
Procesor jest sercem i mózgiem każdego sterownika PLC. Dla nas, użytkowników, najbardziej istotnym jego parametrem jest szybkość przetwarzania informacji. W skomplikowanych układach sterowania pożądane jest, aby procesor działał jak najszybciej. Procesory jednordzeniowe wykonują wszystkie swoje operacje na jednym rdzeniu. Niestety pomimo taktowania rzędu milionów razy na sekundę czasami nie jest to wystarczające. Rozwiązaniem są procesory wyposażone w więcej rdzeni obliczeniowych.
Poniżej przedstawiamy testy porównawcze sterownika Astrada One Compact ECC2200 i ECC2201 DUO. Ten drugi wyposażony jest w procesor Dual Core, który dzięki dwóm niezależnym rdzeniom może wykonywać dwie różne operacje w tym samym czasie, poprawiając tym samym wydajność. Sprawdzimy, jak to wygląda w praktyce.
W poniższej tabeli zebrane są najważniejsze parametry obu tych sterowników:
Model | ECC2200 | ECC2201 DUO |
CPU | Freescale i.MX6 CPU 800MHz | Dual core: 800MHz ARM CPU Cortex-A9 |
Pamięć Flash | 256 MB/ 100MB na aplikacje | 1 GB |
Pamięć RAM | 256MB/ 128 MB na aplikacje | 1 GB |
Pamięć z podtrzymaniem | 100 kB | 100 kB |
Interfejs Ethernet | 1x 10/100 lub 3x 10/100 | 1x 10/100 |
Interfejs EtherCAT | 1x RJ45 | 1x RJ45 |
Interfejs USB | 1x USB 2.0 | 1x USB 2.0 |
Interfejs CAN Bus/open | 1x CAN/RJ45 | 1x CAN/RJ45 |
Interfejs COM | 1x RS232/RS485, 1x RS485 | 1x RS232/RS485, 1x RS485 |
Slot kart micro SD | Do 32 GB | Do 32 GB |
Wejścia cyfrowe | 16 | 16 |
Szybkie liczniki | Możliwość programowalnej aktywacji 2x HSC 500kHz | Możliwość programowalnej aktywacji 2x HSC 500kHz |
Wyjścia cyfrowe | 4×4 (0,5A) | 4×4 (0,5A) |
Wejścia analogowe | – | 6x (+/-10V, +/-20mA PT100/PT1000) 6x (+/-10V, +/-20mA) |
Wyjścia analogowe | – | 6x napięciowe (0-10V) |
Przebieg testów
Przeprowadzono dwa testy, do których wykorzystano dwa różne kody: jeden cyklicznie ustawiał zmienne, a w drugim zaimplementowano dwa regulatory PID. Każdy z tych kodów zdublowano do nowego programu (POU), który przydzielono do innego tasku (zadania). Następnie sterowniki wykonywały te programy – najpierw przydzielone w Task Configuration do jednego, a następnie do dwóch różnych rdzeni. W każdym teście monitorowane były czasy cyklów, które są ściśle powiązane z wydajnością programu.
Scan time to czas cyklu potrzebnego na odczytanie danych wejściowych, przetworzenie i wykonanie obliczeń, obsługę interfejsów komunikacyjnych oraz ustawienie wyjść i autodiagnostykę. Im szybciej sterownik wykona te czynności, tym szybciej program może analizować i przetwarzać dane. Czas cyklu zależy między innymi od systemu operacyjnego oraz parametrów procesora
Jak podzielić taski na dwa rdzenie?
Pierwszym krokiem jest dodanie dwóch dodatkowych programów POU. Klikamy prawym przyciskiem myszy na zakładkę Application i wybieramy Add Object -> POU…
Następnie dodajemy dwa nowe taski, klikając prawym przyciskiem myszy na pozycję Task Configuration i wybierając Add Object -> Task…
Następnie przeciągamy POU do poszczególnych tasków, aby końcowy rezultat był następujący:
PLC-PRG jest to program główny. Zostawiamy go pustego, ponieważ w nim oraz w Main Task wykonywane będą operacje systemowe, które zaciemnią nam wyniki testów. Chcemy oddzielić wykonywane programy od operacji wykonywanych w tle. W dwóch kolejnych POU umieszczamy docelowe programy testowe. W praktyce nie musimy robić takich podziałów i możemy zrealizować go tylko w dwóch POU i Task Group.
Przydzielamy taski do grup. Klikamy dwukrotnie w Task Configuration i dodajemy nową grupę przyciskiem Add Group. Możemy zmienić jej nazwę klikając na niej dwukrotnie. Następnie przeciągamy taski do odpowiednich grup. W kolumnie Core wybieramy numer rdzenia, na którym ma być wykonywany dany task.
Na końcu łączymy się ze sterownikiem, wgrywamy program (pamiętajmy o napisaniu i zdublowaniu kodu w naszych POU), przechodzimy w tryb RUN. W Task Configuration przechodzimy do zakładki Monitor.
Program cyklicznie ustawiający zmienne
Wykonujemy prosty program cyklicznie zmieniający zmienną typu BOOL. W pełnym okresie cyklu przez jedną sekundę zmienna ma wartość 1, a przez jedną – wartość 0.
Program wykorzystujący regulatory PID
W tym programie dodajemy dwa moduły PID. Wykorzystujemy do tego blok BOX znajdujący się w zakładce General, w którym wpisujemy PID i wciskamy Enter. Pod każdym blokiem dodajemy blok sumy, który będzie dodawał nam wartość regulacji do wartości aktualnej.
Otrzymujemy „goły” blok PID, do którego musimy teraz stworzyć zmienne. Nie wszystkie będą używane, natomiast wymagane jest ich zdefiniowanie. Przypisujemy im wartości startowe, które ustawią się wraz z włączeniem programu. Należy pamiętać, aby przed każdym testem wyzerować zmienne, które zawierają dane z poprzednich cykli testowych.
Końcowy rezultat wygląda następująco:
Warto zaznaczyć, że dla tego programu zmieniono czas interwału tasków na 1000 ms, czyli 1 s. Dzięki temu regulatory PID trochę wolniej regulują sygnał.
Wyniki testów
Analizując wyniki będziemy patrzeć na Average Cycle Time mierzony w µs, który jest podawany przez sterownik podczas podglądu programu.
Program cyklicznie ustawiający zmienne
Poniżej przedstawiono porównanie danych pozyskanych po około 1000 cyklach programu. Jak widać, w sterowniku Dual Core zasoby przeznaczone na programy rozłożone są po równo, natomiast w sterowniku z jednym rdzeniem widać już lekkie dysproporcje, co jest spowodowane priorytetyzacją jednego z podprogramów. Przy bardziej skomplikowanych i dłuższych programach może to wpływać na wydajność całego systemu.
Program wykorzystujący regulatory PID
Jak można zauważyć, tam gdzie programy są przydzielone do tego samego rdzenia, występują dysproporcje w czasie cyklu poszczególnych tasków, a w przypadku obydwu programów działających w odosobnieniu od Main Taska ta różnica jest największa, bo aż 16 mikrosekund. Oznacza to, że jeden program działa szybciej od drugiego, co przy większej skali projektu może negatywnie wpływać na efektywność. Kiedy programy były na dwóch osobnych rdzeniach, różnica ta była najmniejsza.
Wnioski
Na podstawie przeprowadzonych testów możemy odpowiedzieć sobie na pytanie zawarte w tytule artykułu i wywnioskować, że sterowniki z dwoma rdzeniami mają wyraźną przewagę. Dzięki możliwości przypisania różnych zadań do rożnych rdzeni możemy zwiększyć wydajność i szybkość operacji, co jest kluczowe w układach sterowania wymagających szybkości i wykonywania dużej ilości obliczeń. Możemy także rozdzielić zadania, aby zwiększyć ogólną szybkość sterownika lub podzielić na zadania mniej i bardziej priorytetowe.