Do Projektu iAutomatyka dołączyli:

https://iautomatyka.pl/wp-content/uploads/2019/08/ustawienia_zalog_3.png

Regulator logiki rozmytej – przykład zastosowania


Wszyscy znamy cykl pracy automatyka – zaczynamy nowe zlecenie i z początku jest spokój. Dobieramy sprzęt, rysujemy schematy i programujemy, aż do momentu uruchomienia, które kończy sielankę. Drobne zamieszania administracyjne, opóźnienia dostaw, niedokończone prace mechaniczne, a na szarym końcu my z laptopem pod pachą.. Czasu zostało mniej niż mało, klient się niecierpliwi, ponieważ nowy system jest niezbędny do pracy, a my dopiero załączyliśmy zasilanie. Ale jaki to ma związek z regulatorem logiki rozmytej?

Jest już godzina popołudniowa, system ma zostać odebrany jutro, ale regulacja temperatury nie działa, a wystrojenie jednego regulatora PID wygląda na niewykonalne – należałoby zastosować dwa równolegle lub trzy kaskadowo/równolegle, co nie ułatwi obecnie trudnego strojenia. Przychodzi do głowy myśl – skoro function block jest gotowy i przetestowany na symulacji, czemu by nie spróbować? Szybka zmiana w oprogramowaniu i można przetestować czy ma to jakikolwiek sens.. eureka!

W tym artykule opiszę problem z jakim się zetknąłem i przedstawię moje rozwiązanie z regulacją rozmytą.

Opis procesu

Zadanie to regulacja temperatury w rurociągu, z wykorzystaniem dwóch zaworów regulacyjnych sterowanych analogowo (4-20 mA). Trochę jak lanie wody z kranu.

Teoria teorią, a w praktyce wychodzi jak zawsze, więc jakie problemy związane z regulacją napotkano?

  • Zawory otwierają się stopniowo w czasie, około 3 sekund od 0 do 100%;
  • Temperatura wody zmienia się w czasie z opóźnieniem;
  • Temperatura wody spada szybciej niż rośnie (prawdopodobnie zimna woda ma wyższe ciśnienie);
  • Temperatura ciepłej wody nie jest stała (centralna kotłownia i wiele odbiorów);

Nie wygląda to jak problemy, z którymi regulator PID sobie nie poradzi i jest to prawda, tyle że nie ma na to czasu, a na strojenie zmarnowano już ponad 2 godziny.

Logika rozmyta

Nie jest to wykład akademicki aby opisywać precyzyjnie wzorami jak zachodzą poszczególne procesy, wytłumaczmy sobie jak działa regulator logiki rozmytej na chłopski rozum:

  1. Odczytujemy dane i następuje ich rozmycie;
  2. Sprawdzamy do których reguł pasują rozmyte dane;
  3. Przeliczamy rozmyte dane reguł z użyciem wybranej funkcji (przeciwieństwo rozmycia?);

Wciąż nie brzmi to sensownie, więc przetłumaczmy co znaczą poszczególne punkty

  1. Logika rozmyta opiera się o założenie, że przykładowo temperatura może być gorąca i ciepła jednocześnie, stąd stwierdzenie rozmycia – ponieważ kwalifikujemy jedną wartość do dwóch zbiorów w różnym stopniu (20% jako gorąca i 80% jako ciepła) – różnica względem zwykłej logiki jest taka, że oceniamy prawdziwość stwierdzenia w procentach, zamiast oceniać jako prawda/fałsz.
  2. Rozmyte dane wykorzystujemy do wyliczenia siły reguł, wykorzystywanych potem do wyliczenia końcowej wartości wyjścia regulatora. Przykładową regułą jest – jeżeli temperatura jest zbyt ciepła i się nie zmienia to obniż temperaturę nieznacznie. Ważna uwaga: jednocześnie aktywowane może być wiele reguł!
  3. Funkcji wykorzystywanych do przeliczenia wartości z reguł jest wiele, wykorzystaną w tym przypadku jest środek ciężkości (ang. Center of Gravity).


Jak zatem rozumieć, że jedna wartość zawiera się w dwóch zbiorach w różnym stopniu? Wystarczy spojrzeć na poniższy obrazek

Widoczne na obrazku powyżej są przedstawienia reguł, gdzie:

  • Control Error = błąd regulacji = wartość zadana – wartość obecna;
  • Control Error delta = zmiana błędu regulacji = obecny błąd regulacji – poprzedni błąd regulacji;
  • Output = wyjście regulatora (a de facto zmiana wyjścia, ponieważ jest to regulator typu PI);
    • Regulator logiki rozmytej typu PD, to taki gdzie wyjście ustawiane jest bezpośrednio z obliczeń
      • y(t) = FLC(u(t), delta_u(t)), gdzie u(t) oznacza błąd regulacji, delta_u(t) oznacza jego zmianę w czasie t;
    • Regulator logiki rozmytej typu PI, to taki gdzie wyjście jest równe sumie poprzedniej wartości wyjścia oraz obecnie wyliczonej
      • y(t) = y(t-1) + FLC(u(t), delta_u(t)), gdzie t-1 oznacza poprzednią wartość;

Przykład: wartość błędu regulacji równa -7.0 będzie należeć jednocześnie do reguły zbyt niskiej (NegativeBig) i do reguły poniżej zera (NegativeSmall).

Uwaga:

Wiem, że jest to powierzchowne przedstawienie, lecz nie czuję się na siłach aby uczyć innych o czymś, co sam dopiero poznaję w praktyce, mogę polecić cykl anglojęzycznych poradników z firmy MathWorks:
https://www.mathworks.com/videos/getting-started-with-fuzzy-logic-toolbox-part-1-68764.html

Proszę nie opierać się na wiedzy przedstawionej w artykule, ma on na celu zainteresowanie tematem i pokazanie, że nie jest to czarna magia i przede wszystkim działa.

PLC

Problemem, który może wstrzymywać wielu automatyków jest brak lub trudny dostęp do gotowych bloków logiki rozmytej, w przeciwieństwie do regulatora PID. Należy zatem napisać, przetestować i wdrożyć to samemu!

Dlaczego zmienna do zezwolenia pracy regulatora nazywa się „global_PIDenable”? Wcześniej wspomniano, że logika rozmyta wybrana została rzutem na taśmę, jest to po prostu pozostałość po próbie stosowania PIDa.

Tak przedstawia się function block w środowisku TIA Portal z zewnątrz, niestety nie pokażę tutaj całości, ale pokażę użyteczną część.

Uwaga:

Komentarz w linii 22 zawiera błąd, powinno być Out_delta = sum(Weight*Rule) / sum(Rule).

Co oznaczają komentarze widoczne powyżej? Dla przykładu przetłumaczymy kilka z nich

  • Reguła 2:
    • X=LN, Y=SN
    • Control Error is LargeNegative, Control Error Delta is Small Negative;
    • Błąd regulacji jest zbyt niski i zmniejsza się powoli;
  • Reguła 18:
    • X=SP, Y=ZZ;
    • Control Error is SmallPositive, Control Error Delta is Zero;
    • Błąd regulacji jest powyżej zera i się nie zmienia ;

Możemy zauważyć również, że reguły 2 i 18 posiadają opis jako LN i SP, co oznacza ich wagę:

  • Reguła 2:
    • LN = LargeNegative;
    • Mocno obniż;
  • Reguła 18:
    • SP = SmallPositive;
    • Lekko podnieś;


Tak właściwie do czego wykorzystywana jest waga reguły? Jest ona niezbędna do obliczenia wyjścia regulatora, ponieważ po rozmyciu danych wejściowych operujemy na wartościach od 0 do 100%, z użyciem czego uzyskujemy siły reguł, również w zakresie od 0 do 100%. Finalnie z użyciem wagi obliczamy wyjście lub jego zmianę, zgodnie ze wzorem w komentarzu (poprawka w uwadze powyżej):

  • Zmiana_wyjścia = suma(Wagi_Reguł * Siły_Reguł) / suma(Siły_Reguł)
    • Wagi_Reguł – wartość dla reguły, przykładowo: NB = NegativeBig = -5.0;
    • Siły_Reguł – wartość od 0 do 100%;

Poniżej widoczny jest kod do obliczania zmiany wyjścia regulatora, może zastanawiać pętla IF, a jest to po prostu zabezpieczenie przed dzieleniem przez 0.

Uwaga:

Ograniczenie wyjścia funkcją LIMIT() jest podyktowane wyłącznie metodologią programowania przez autora i nie jest częścią regulatora.

  • #outNominator oznacza mianownik, a więc zgodnie z w.w. wzorem = suma(Wagi_Reguł * Siły_Reguł)
  • #outDenominator oznacza dzielnik, a więc zgodnie z w.w. wzorem =  suma(Siły_Reguł)
    • dzielnik w tym wypadku zawsze jest większy lub równy zero, ponieważ siły reguł zawierają się w zakresie od 0 do 100%

Wcześniej wspomniano, że wypadałoby mieć interfejs graficzny do strojenia zamiast ustawiać dane bezpośrednio w datablocku, poniżej widzimy dlaczego

Skoro mamy już obliczenia gotowe, to jak zamienić jedną wartość na dwie? Przecież sterujemy dwoma zaworami, a wyjście regulatora jest jedno.

Przyjęto założenie, że jeden z zaworów powinien być zawsze otwarty na 100% – jak? To przedstawia się w kodzie programu poniżej

Zatem skoro regulator posiada wyjście powyżej 0 przymykamy zawór zimnej wody, jeżeli posiada wartość poniżej 0 przymykamy zawór ciepłej wody.

Regulator w pracy

Niestety, w całym chaosie uruchomienia „na wczoraj” nie zachowało się zbyt wiele wykresów z rzeczywistej pracy regulatora, więc zaprezentuję ostatni z nich.

Opis wykresów w kolejności od góry:

  • błąd regulacji,
  • wyjście regulatora,
  • rozkaz otwarcia zaworu ciepłej wody,
  • rozkaz otwarcia zaworu zimnej wody.

Oscylacje są w czasie 0,333 min do 0,917 min są spowodowane pracą blisko górnej granicy temperatury (stąd niewielkie otwarcie zaworu zimnej wody), w okolicy czasu 1,083 min została zmieniona wartość zadana na maksymalną dostępną stąd spadek otwarcia zaworu zimnej wody do 0.

Czas regulacji jest w tym przypadku wynosi około 20 sekund, jednak nie jest to krytyczna kwestia w całym procesie, ponieważ dozowanie wody trwa o wiele, wiele dłużej więc jest to nieodczuwalne w ostatecznym rozrachunku.

Podsumowanie

Dlaczego wystrojenie regulatora logiki rozmytej zajęło mniej czasu niż regulatora PID, pomimo większej ilości zmiennych?

Parametry są bezpośrednio zrozumiałe przez człowieka, można łatwo odczytać i wyobrazić sobie, gdzie zaczyna się temperatura gorąca, a gdzie ciepła, ile oznacza obniżyć mocno, a ile lekko podnieść. Jest to niewątpliwy plus względem innych algorytmów.

Logika rozmyta posiada również swoje minusy, stanowi większe obciążenie obliczeniowe dla procesora i jest trudniejsza w przełożeniu na kod, względem chociażby regulatora PID.

Oprócz plusów opisanych wcześniej, jest jeden bardzo ważny z punktu regulacji procesu – regulator PID najlepiej pracuje od punktu X do punktu Y (przykładowo od temperatury 20 do 60 stopni), lecz gdybyśmy chcieli zmienić punkt pracy może się okazać, że nastawy są nieodpowiednie – logiki rozmyta nie dotyczy ten problem i nastawy są niezależne od punktu pracy.

Przede wszystkim!

Należy sięgać po odpowiednie narzędzie do zadania, w tym konkretnym przypadku regulator logiki rozmytej  sprawdził się w sam raz, zastępując 2 godziny nieudanego strojenia regulatora PID, 30 minutami dostrajania.

PS. Na forum klubautomatyka.pl  obiecałem, że napiszę artykuł o symulacji zrobotyzowanej linii transportowej i trzymam się danego słowa, ograniczał mnie ostatnio brak czasu związany chociażby z treścią powyższego artykułu.

 

Artykuł został nagrodzony w Konkursie iAutomatyka – edycja Sierpień 2019

Nagrodę Voucher na szkolenie + głośnik + zestaw gadżetów

dostarcza ambasador konkursu, firma EMT-Systems.



Utworzono: / Kategoria: , ,

Reklama

Newsletter

Zapisz się i jako pierwszy otrzymuj nowości!



PRZECZYTAJ RÓWNIEŻ



NAJNOWSZE PUBLIKACJE OD UŻYTKOWNIKÓW I FIRM

Reklama



POLECANE FIRMY I PRODUKTY
  • Zapraszam Cię na kurs tworzenia wizualizacji HMI z wykorzystaniem panelu XV102 od firmy EATON. Kurs stworzyłem z myślą o każdym, kto chce zacząć przygodę z tworzeniem wizualizacji HMI przy użyciu programu Galileo. Stworzyłem kurs bazujący n...
  • Obsługa za pomocą urządzeń mobilnych zapewnia wygodę i ciągłość pracy Operatorzy maszyn mogą teraz płynnie przełączać kontrolę nad maszyną między głównym interfejsem HMI a urządzeniami mobilnymi. Nowa funkcja systemu mapp View firmy B&R...
  • Drukarka i aplikator owijek Wraptor A6500r™ A6500. Automatyzuje proces identyfikacji przewodów i kabli. Wraptor automatycznie drukuje i nakłada etykiety samolaminujących w pięć sekund a tym samym zwiększa wydajność produkcji i oszczę...
  • Zapraszamy Cię na pełny kurs zdalnego dostępu SECOMEA. Kurs powstał z myślą o każdym, kto chce zgłębić tajniki zdalnego dostępu do maszyn i sieci przemysłowej. Zdalny dostęp rozwija się dynamiczne i zyskuje na znaczeniu zwłaszcza w sytuacji...
  • Czym jest PRRT? PRRT oznacza Power Remote Reset Technology, opatentowaną funkcję, którą posiadają wybrane switche przemysłowe PoE i media konwertery firmy Antaira. Prezentowana funkcja umożliwia łatwe zresetowanie zasilanego urządzenia w zd...
  • Inteligentny chwytak równoległy SCHUNK EGI z certyfikowanym interfejsem PROFINET-IRT został zaprojektowany z myślą o rozmaitych wymagających zastosowaniach z zakresu przenoszenia w branży elektronicznej, farmaceutycznej i laboratoryjnej. Te...