Autorzy (skład zespołu):
- Mateusz Jończyk
- Dawid Nowak
kier. Informatyka SSM, sem. 3, gr. BDIS
Proszę poczekać na załadowanie się wzorów matematycznych. W dolnym lewym rogu jest pasek postępu. Może to trwać nawet 20 sekund.
W dzisiejszych czasach, duża liczba produkowanych urządzeń czy też innych wyrobów wymaga mniej lub bardziej szczegółowej kontroli jakości. Takie wymaganie może być narzucone np. przepisami prawa, zapisami kontraktów/przetargów albo polityką firmy zakładającą produkcję towarów wysokiej jakości. W przypadku chociażby urządzeń elektronicznych zazwyczaj podaje się w specyfikacji również warunki, w których dane urządzenie będzie działać prawidłowo (np. zakres temperatur). W celu sprawdzenia jakości danego towaru, należy przeprowadzić badania empiryczne, m.in. poprzez sprawdzenie czy urządzenie działa prawidłowo w różnych warunkach pracy. Do takich badań służą komory klimatyczne i temperaturowe.
Komora klimatyczna zapewnia kontrolę zarówno temperatury jak i wilgotności powietrza, temperaturowa - tylko temperatury.
Sterowanie komorą temperaturową jest bardzo podobne do sterowania systemami HVAC (ang. Heating, Ventilation, Air Conditioning). HVAC jest pojęciem bardzo szerokim. Swoim zasięgiem obejmuje ogół zagadnień związanych z ogrzewaniem, wentylacją i klimatyzacją wszelkich pomieszczeń (nie tylko komór klimatycznych). Najogólniej rzecz biorąc HVAC zajmuje się kwestiami dostarczania i odprowadzania ciepła (np. przez pompy ciepła, instalacje solarne, rekuperatory).
Efektywne sterowanie komorą klimatyczną i ogólnie systemami HVAC jest zadaniem bardzo trudnym. Podstawowymi sterownikami stosowanymi powszechnie w kontrolerach HVAC są sterowniki PID. Nie nadają się one jednak zbyt dobrze do sterowania tego typu systemami ("Raad Z. Homod, Khairul Salleh Mohamed Sahari, Haider A.F. Almurib, Farrukh Hafiz Nagi, Gradient auto-tuned Takagi–Sugeno Fuzzy Forward control of a HVAC system using predicted mean vote index, Energy and Buildings, Volume 49, June 2012, Pages 254-267, ISSN 0378-7788, http://dx.doi.org/10.1016/j.enbuild.2012.02.013). Z tego względu trzeba szukać innych metod.
Algorytm opisany w naszej pracy został wymyślony przez nas w bardzo dużej mierze niezależnie. Nie analizowaliśmy jednak literatury przedmiotu, z tego powodu przedstawione przez nas podejście nie jest pewnie zbyt nowatorskie.
Niniejsze opracowanie przedstawia teoretyczne rozważania problemu sterowania grzałką w komorze klimatycznej w celu uzyskania żądanego przebiegu temperatury (dopasowania krzywej temperaturowej) podczas symulacji. Podejście to opiera się na analizie danych historycznych oraz korektach w czasie rzeczywistym.
Dla skupienia uwagi będziemy projektować pod komory temperaturowe serii AR, produkowane przez ESPEC Corporation. Ich dokumentacja jest dostępna tutaj i tutaj.
Można założyć (w sposób dosyć agresywny):
-
okres co jaki wykonuje się pętla kontrolna:
$W = 5$ sekund,Pętla kontrolna składa się z następujących operacji:
- pobranie danych,
- przetwarzanie,
- ustawienie wyjść.
Odstęp czasu między kolejnymi iteracjami pętli nazywamy przedziałem czasu albo jednostką czasu. Zakładamy, że w jednym przedziale czasu ustawienia urządzeń wpływających na temperaturę w komorze (moc grzałki, wentylatora, itd) są stałe, a temperatura zmienia się jedynie w ograniczonym zakresie. Przedziały czasu będziemy indeksować kolejnymi liczbami całkowitymi, poczynając od 0.
-
po wyłączeniu grzania temperatura w komorze stabilizuje się w czasie mniejszym niż 10 minut (czyli po K = 120 jednostkach czasu). Po tym czasie przestajemy śledzić konsekwencje grzania w przeszłości.
Wartości podane powyżej są dosyć wyśrubowane, można je złagodzić tak aby zmniejszyć wartość K.
Ponadto:
-
dokumentacja dla komór temperaturowych serii AR (pierwszy link, strona 5) podaje, że "Odchyłka temperatury w przestrzeni" jest równa 3,0 K. Jest to wartość dosyć duża. Z tego względu wydaje się zasadne dopasowywanie bezpośrednio temperatury mierzonej przez termometr do temperatury zadanej przez charakterystykę czasową i pomijanie opóźnień na termometrze (wynikających raczej nie z natury samego termometru, ale z czasu potrzebnego na dotarcie ciepła z grzałki do termometru).
-
porównanie charakterystyk różnych mierników temperatury można znaleźć tutaj. Zakładamy termistor, który wg nas jest najlepszy do zastosowania w omawianym urządzeniu. Posiada on przede wszystkim bardzo dużą szybkość działania oraz dużą dokładność.
-
pomijamy chłodzenie, żeby uprościć problem. W sumie to jednak dosyć dobrze pasuje do różnych systemów HVAC, które mogą działać bez klimatyzatora (np. w zimie).
-
zakładamy, że czas potrzebny na wykonanie jednej iteracji pętli kontrolnej jest pomijalny, zatem na początku każdego przedziału czasu będziemy w stanie pobrać temperaturę, wykonać obliczenia jak i ustawić moc grzałki. Algorytm da się jednak w dosyć prosty sposób dostosować do sytuacji kiedy tak nie jest.
W pracy będziemy się starali ograniczyć drgania typu: grzanie -> chłodzenie (bo zbyt mocno ogrzaliśmy) -> grzanie (bo zbyt mocno ochłodziliśmy)
Na zmiany temperatury w komorze mogą wpływać procesy (np. grzania)
zachodzące stosunkowo dawno temu (wcześniej niż
Rozważamy jednostkę czasu o numerze
Przyrost temperatury podczas tej jednostki można przybliżyć jako:
(Na razie pomijamy upływ ciepła przez ściany komory. Pomijamy również ew. ciepło wytwarzane w urządzeniu znajdującym się w komorze.)
Gdzie:
-
$T[k]$ - temperatura na początku k-tej jednostki czasu, -
$({\Delta}T[k] :|: P[j])$ - przyrost temperatury w k-tej jednostce czasu dzięki grzaniu w j-tej jednostce czasu. Oczywiście$k {\geq} j$ (grzanie nie może wpłynąć na zmianę temperatury przed jego rozpoczęciem).
Jesteśmy w stanie bezpośrednio zmierzyć jedynie
Musimy więc założyć:
Przy czym:
-
$ P[j] $ - moc grzałki w jednostce czasu o indeksie
$j$ , -
$ f(x) $ - pewna funkcja dążąca do zera dla
$x$ dążącego do nieskończoności:$$lim_{k \to +\infty} ({\Delta}T[k] :|: P[j]) = 0$$ Posiada ona następujące własności:
-
jest zdefiniowana wyłącznie dla wartości nieujemnych (grzanie nie może wpłynąć na zmianę temperatury przed jego rozpoczęciem),
-
jeśli na początku rozważanego przedziału czasu układ znajdował się w równowadze, to wartość
$f(0)$ jest równa stosunkowi przyrostu temperatury w rozważanym przedziale czasu do mocy grzałki w tym przedziale, -
po K = 120 przedziałach czasu od rozpoczęcia grzania, ciepło wydzielone przez grzałkę zostaje rozproszone w komorze i nie wpływa już na zmiany temperatury na termometrze. Z tego względu można uznać że **
$f(x) \equiv 0$ dla$x > K$ **:-
czyli
$f(x)$ może być niezerowe tylko dla$0 \leq x \leq K$ , -
istnieje co najwyżej K+1 niezerowych wartości funkcji
$f(x)$ : 0 oraz od 1 do K, -
mamy zatem jeden okres czasu przeznaczony na grzanie, który nie wlicza się do czasu stabilizacji, oraz K okresów, przez które temperatura się stabilizuje.
-
-
Po podstawieniu
Po przyjęciu że
(wewnętrzna suma przechodzi przez K + 1 wartości)
Rozważymy teraz dla przykładu postać sumy dla niskich wartości
Dla
Dla
I podsumowując, poprzez analogię:
$ {\Delta}T[0] = T[1] - T[0] ≈ (P[0] f(0))$
$ {\Delta}T[1] = T[2] - T[1] ≈ (P[0] f(1) + P[1] f(0))$
$ {\Delta}T[2] = T[3] - T[2] ≈ (P[0] f(2) + P[1] f(1) + P[2] f(0))$
$ {\Delta}T[3] = T[4] - T[3] ≈ (P[0] f(3) + P[1] f(2) + P[2] f(1) + P[3] f(0))$
Taką strukturę nazywamy splotem (convolution).
Mamy więc:
i ogólnie:
W tym wypadku przy definicji splotu pomijamy składniki dla których
Ostatecznie mamy układ równań o postaci:
Ten układ równań posiada
Dla każdej danej historycznej (pary wartości
Model komory grzewczej przestawiony w poprzedniej sekcji nie uwzględnia upływu ciepła przez jej ścianki.
Można założyć w dużym uproszczeniu, że szybkość upływu ciepła zależy wyłącznie od temperatury panującej w komorze. Uwzględnienie innych czynników (np. historii zmian temperatury) spowodowałoby znaczny wzrost liczby niewiadomych w układzie równań, co byłoby niekorzystne z dwóch względów:
- do wyliczenia układu równań potrzebnych byłoby bardzo wiele danych historycznych,
- spadłaby znacznie dokładność oszacowania wartości niewiadomych.
Niech
Równanie
Żeby ograniczyć liczbę niewiadomych w układzie równań, można określić
Szybkość ucieczki ciepła można aproksymować w podany poniżej prosty sposób:
- definiujemy pewną funkcję
$j(x)$ - określoną dla wartości x podzielnych przez 5, - dla
$k$ nie należącego do dziedziny funkcji$j(x)$ mamy (zaokrąglamy$k$ w dół do liczby podzielnej przez 5):
- dla
$k$ należącego do dziedziny funkcji$j(x)$ mamy:
Oznaczmy jako
Powyższe wzory można w prosty sposób uwzględnić w układzie równań
Po rozwiązaniu go, otrzymujemy wartości funkcji
Znając wartości funkcji
Przy wyliczaniu wartości funkcji
Jesteśmy w chwili czasu
Oznaczenia:
-
$i$ - obecna chwila czasu, którą analizujemy, -
$j$ - indeksuje czas w którym przewidujemy że będziemy grzać, -
$k$ - indeksuje temperaturę w przyszłości,
Przyjmujemy uproszczony model ogrzewania przedstawiony w sekcji 3 - wzór
Będziemy postępowali podobnie jak doświadczony szachista, przewidujący kilka ruchów naprzód a jednocześnie w każdym ruchu dostosowujący się do działań rywala i aktualizujący odpowiednio swoją strategię. Z drugiej strony będziemy postępowali podobnie jak przy sterowaniu rakietą. Rakiety nie naprowadza się bowiem na konkretną trasę, po prostu w każdej jednostce czasu wylicza się na podstawie obecnego położenia oraz innych czynników nową trasę, która trochę się różni od starej i po niej rakietę prowadzi.
Niech
Moglibyśmy tutaj ułożyć układ równań:
Niestety, dopasowywanie
Mamy zatem:
Podstawiamy do powyższego równania równanie
Potrzebujemy teraz odwrócić kolejność sum w ostatnim składniku
powyższego równania, tak aby łatwo przejść do postaci macierzowej.
Widzimy, że przy rozwinięciu sumy mamy wyrazy na
Oraz:
$$
\begin {cases}
0 \leq l-j \leq K \\
i-j \leq l-j \leq k-j-1
\end {cases}
$$
Pierwsze z tych równań jest ograniczeniem do niezerowej dziedziny funkcji
Ostatecznie mamy więc:
W celu zapewnienia optymalnego sterowania, będziemy starali się dążyć do
W tym układzie równań niewiadomymi są wartości
Dla
Po wprowadzeniu tych ograniczeń wiersz układu równań przyjmuje postać:
Musimy teraz przekształcić ten układ równań do postaci macierzowej
(używam oznaczeń jak na Wikipedii):
Oznaczenia:
-
$\mathbf{y}$ - wektor wyrazów wolnych, -
$\mathbf{\beta}$ - wektor niewiadomych, -
$\mathbf{X}$ - macierz współczynników.
W tym celu zaczniemy od rozdzielenia wyrazów z
Można optymistycznie założyć, że
Element wektora wyrazów wolnych opisujący
Można tu zauważyć, że
wektor
Element wektora niewiadomych można zdefiniować jako:
$$\mathbf{\beta}[b] = P[j]
\qquad
\textrm{przy czym } \quad j = i + b - 1
$$
I wreszcie: $$ \mathbf{X}[a,b] = \sum_{l=\max(0,; i-j)}^{\min(K,; k-j-1)} f(l) \qquad \textrm{przy czym } \quad j = i + b - 1 \quad \textrm{oraz } \quad k = i + a - 1 $$
We współrzędnych elementu wektora podajemy najpierw wiersz a później kolumnę.
Element
Gdybyśmy macierze indeksowali od zera, wówczas
Po skonstruowaniu w powyższy sposób macierzy
Lepsze wyniki uzyskamy jednak, jeśli uwzględnimy wagi poszczególnych równań, starając się dopasować
Uwzględnienie wag przy rozwiązywaniu układu równań pozwala na łagodne odcięcie
wartości
Najlepiej prawdopodobnie stopniowo zmniejszać wagę kolejnych pomiarów, tak
żeby waga dopasowania
Żeby przy rozwiązywaniu układu równań można było zastosować wagi, musi posiadać on więcej równań niż niewiadomych, nadmiar powinien być odpowiednio duży.
Pojawia się jednak problem, jak daleko w przód przewidujemy nasze ruchy.
Rozwiązywanie układu równań z uwzględnieniem wag błędów jest opisane na
StackExchange
oraz Wikipedii.
Na obu tych stronach są stosowane różne oznaczenia.
Na StackExchange minimalizujemy
Błąd definiujemy jako różnicę
Będziemy potrzebowali macierz wag
Będziemy się starali minimalizować
Znając macierz wag oraz macierze
Posiada on tyle samo równań co niewiadomych.
Po jego wyliczeniu (w sposób dokładny) uzyskujemy wektor
Wikipedia zaleca żeby wagi były odwrotnością wariancji pomiarów.
Niech
- ma dążyć stosunkowo szybko do zera,
powiedzmy dla argumentów > 80 (przy
$K = 120$ ) jej wartości mają już być pomijalne, - nie może zbyt mocno maleć dla niewielkich argumentów (powiedzmy, < 40),
Po wykonywaniu eksperymentów w LibreOffice, stwierdziłem że
dla
Niedokończone i niedopracowane pomysły
Można by rozpisać funkcję
Przy czym:
- $ g(x) < 1 $,
- $ g(0) = 1 $ (tak żeby
$c_{1}$ ustalić na sztywno) //jednak to by nie było dopuszczalne, ponieważ f(0) może być //stosunkowo małe, mniejsze niż g(1) -
$T$ - jakaś liczba.
Mogłoby to ew. pomóc przy rozwiązywaniu układu równań - można w ten sposób ograniczyć wartości funkcji $ f(x) $.
Może być jednak problem z uwzględnieniem
Mamy dane N zbiorów danych historycznych o postaci:
{kontekst, akcja, reakcja}
- akcja - jaką czynność podjęliśmy w danej chwili,
- kontekst - co działo się z układem przed podjęciem akcji,
- reakcja - jakie były skutki podjętej akcji.
Zakładając że znamy wartości funkcji f (wyliczone z powyższego układu równań), możemy skonstruować rekordy danych historycznych:
Podobnie jak poprzednio, rozważamy k-ty rekord danych historycznych, dotyczący grzania w k-tym przedziale czasu,
-
kontekst:
$\sum_{j=k-119}^{k} \frac{\Delta T[j]}{t}$ $\sum_{j=k-119}^{k} \frac{\Delta T[j]}{t^{2}}$ $\sum_{j=k-120}^{k} \frac{P[j]}{t}$ $\sum_{j=k-120}^{k} \frac{P[j]}{t^{2}}$ - ewentualnie
$T[k]$
-
akcja:
$P[k]$
-
reakcja:
-
Zdefiniujmy
$(ΔT[k-1] || P[j])$ - przyrost temperatury który da się przypisać grzaniu w k-tej jednostce czasu, -
rekord zawierałby całki takie same jak dla kontekstu, z tym że dla
$(ΔT[k-1] || P[j])$ i oczywiście indeksy wartości byłyby większe od k, znaczy się sumowane wszystko byłoby w przód, -
albo może po prostu surowe przebiegi
$(ΔT[k-1] || P[j]) $
-
Mając N pełnych rekordów historycznych (znaczy się takich które zostały sporządzone więcej niż 120 okresów temu, tak że reakcje są w pełni wyliczone).