Optymalizacja i czasy PID

Tematy związane z tworzeniem dużych aplikacji. Zaganiednia dotyczące architektury oraz zasad tworzenia optymalnych rozwiązań.
modrzew
Posty: 12
Rejestracja: 10 sty 2012 17:59
Wersja środowiska: LabVIEW 2009

Optymalizacja i czasy PID

Post autor: modrzew »

Hej.
Mam taki problem związany z rozbudowaniem (udoskonaleniem i zoptymalizowaniem) mojego programu.Program mój opiera się na tak ogólnie na trzech elementach, zasilaczu, termoparze i klocku PID. Działa w następujący sposób (albo tak wydaje mi się że działa poprawnie po trzech prostych próbach): klockek DAQ-assistant( odpowiada za temperaturę) podłączony jest do process variable PID (jako zmienna) a jako wyjście z PID output jest input current (zasilacz który zasila element grzejny). Program działa tak, że termopara mierzy temperaturę, jeśli jest za niska to daje sygnał do zasilacz, który puszcza prąd na grzałkę, i mierzy znów temperaturę, i tak do temperatury w pobliżu temperatury założonej wszystko w pętki while. Ale mam pytanie odnośnie rozbudowy czy da się a jak się da to w jaki sposób najprościej zrealizować, takie problemy:
-optymalizacja parametrów PID? mam na myśli albo podchodzenie do set pointa asymptotycznie od dołu albo przestrzelenie i asymptotycznie od góry albo przestrzelenie założonej temperatury i oscylacja wokół niej, ale żeby była jak najmniejsza amplituda i jak najmniejsza czestotliwość?
-czy można ustalić za pomocą PID szybkość grzania np 10 stopni celcjusza na sekundę? potrzebowałbym założyć aby do temp. 100stopni celciusza (set point w PID) temperatura wzrastała liniowo? chyba że istnieje inny sposób na realizację tego założenia?
-jak zrealizować zatrzymanie grzanie (albo całego programu) po np. 5 minutach grzania po osiągnięciu stabilnego set pointa w PID, powiązane jest to z pierwszym?
Dzięki za pomoc i podpowiedzi.
Jak komuś pomoże to tak to wygląda na schymacie blokowym.
Załączniki
schemat blokowy
schemat blokowy
Zyga
Posty: 86
Rejestracja: 26 sty 2012 23:36
Wersja środowiska: LabVIEW 2011

Optymalizacja i czasy PID

Post autor: Zyga »

Od razu zaznaczę, że nie jestem ekspertem i mogę się mylić w mojej wypowiedzi.
Pytania które zadałeś odnoszą się bardziej do właściwości sterowanego obiektu, a nie do samego sterowania. To w jaki sposób obiekt się nagrzewa (a na pewno ochładza, gdzie nie masz żadnej możliwości sterowania), zależy od właściwości fizycznych obiektu. Oscylacje wokół wartości zadanej są po prostu histerezą sterowania. O ile amplituda tych oscylacji jest zależna od nas, o tyle częstotliwość wynika ze stałej czasowej obiektu. Szybkość grzania możesz osiągnąć ograniczając sygnał sterujący z PIDa.
modrzew
Posty: 12
Rejestracja: 10 sty 2012 17:59
Wersja środowiska: LabVIEW 2009

Optymalizacja i czasy PID

Post autor: modrzew »

Z tego co rozumiem to oscylacja wokół set pointa (w moim przypadku temperatury założonej) będzie zależała i będzie różna w zależności od użytej grzałki tak? ale nie da się tego w jakiś sposób zminimalizować przez paramentry PID takie jak PID gains itp? Czy mógłbym Cię prosić o przybliżenie: szybkości grzaniaprzez ograniczenie sygnału z PID? Chcę osiągnąc np 10 stopni na sekunde (rozumiem że też to nie będzie dokładnie 10 tylko też w okolicy 10), to jak lub jakie parametry powinienem ograniczać? Ale rozumiem że będzie to sterowanie będzie wynikało z PID( a nie empiryczne z obliczeń że grzałka max może być 10A i będzie miała wtedy 100 po takim czasie). Bardzo proszę o pomoc wyjaśnienie i może jakieś wskazówki odnośnie tego problemu?
Zyga
Posty: 86
Rejestracja: 26 sty 2012 23:36
Wersja środowiska: LabVIEW 2011

Optymalizacja i czasy PID

Post autor: Zyga »

Niestety na razie nie mam czasu żeby wszystko tłumaczyć. Proponuję zasięgnąć jakiejś książeczki zatytułowanej "Teoria sterowania". To powinno wyjaśnić pewne nieścisłości. Odpowiem tylko na szybkości na pytania. Każda grzałka będzie innym obiektem (moc, kształt, masa itp.) i wymaga innych nastaw PIDa. Oscylacje wokół wartości zadanej jest to efekt źle dobranych nastaw regulatora (raczej nie chcemy żeby winda jadąc docelowo na 10 piętro wjeżdżała na 11 a następnie wracała na 9,5, po czym zatrzymywała się na 10). Z tą prędkością grzania to można rozwiązać na różne sposoby i podałem właśnie jeden z nich. Powiedzmy że twój zasilacz jest mocy maksymalne 100W. PID zwraca wartość z zakresu 0-100 (sygnał sterujący). Czyli jeżeli pid policzy 100, to zasilacz będzie działał na 100% swojej mocy czyli 100W. Jeżeli policzy 27 to zasilacz będzie działał w 27% mocy maksymalnej. Ograniczając maksymalny sygnał sterujący powiedzmy do zakresu 0-20, spowolnisz nagrzewanie, gdyż maksymalną moc jaką wygeneruje zasilacz będzie 20W. To tak na chłopski rozum najbardziej jak potrafiłem.
Prędkość grzania możesz także ograniczyć zmieniając nastawy PID. Ustaw Ti=0 Td=0 K=1. Zobacz jak to działa. Poźniej zmień K na powiedzmy 100. Zobacz jaki to da efekt. Oczywiście ogrzewanie startuj od stałej temperatury i do jednego setpointa dla obu przypadków.
modrzew
Posty: 12
Rejestracja: 10 sty 2012 17:59
Wersja środowiska: LabVIEW 2009

Optymalizacja i czasy PID

Post autor: modrzew »

Dzieki serdeczne za wskazówki, już spróbuję to w moim programi i dam odpowiedź o rezultatach jakich osiągnąłem. Może jakiś jeszcze inny pomysł się urodzi.
modrzew
Posty: 12
Rejestracja: 10 sty 2012 17:59
Wersja środowiska: LabVIEW 2009

Optymalizacja i czasy PID

Post autor: modrzew »

Zrobiłem próbę z ograniczeniem mocy (w moim przypadku ograniczyłem natężenie prądu). Rezultaty są średnio zadawalające, poniewa z faktycznie trzeba było zobaczyć faktynie jak szybko grzeje się grzałka przy różnym prądzie, jedna wada co jest zauważalna odrazu to ta metoda jest stricte empiryczne po pierwsze należy zrobić parę prób i otrzymane rezultaty są właściwe tylko dla tego jednego przypadku (inna grzałka już będzie inaczej to wyglądało, nie mówię już o innym zasilaczu). Mnie zastanawia czy w tych PID jest możliwoś dodanie "jakiegoś kolcka" która tak jak samo PID pilnuje aby dogrzać do odpowiedniej temperatury do ten klocek pilnuje aby grzać z odpowiednią temperaturą do tej temperatury? i nie zależnie (lub w bardzo mały sposób zależny) od używanej grzałki czy zasilacza? Ktoś spotkał się z takim problem lub potrzebował podobne rozwiązanie (niekoniecznie z temperaturą, nie wiem np z prędkością obrotową silnika, czy czym kolwiek), Bardzo proszę o pomoc i porady jak moge rozwiązać tem problem.
Zyga
Posty: 86
Rejestracja: 26 sty 2012 23:36
Wersja środowiska: LabVIEW 2011

Optymalizacja i czasy PID

Post autor: Zyga »

Jeżeli zmienisz jakiś element, musisz zmienić nastwy PID'a. Nie ma innej możliwości. A problem nad którym się zastanawiasz może zobrazuje Ci taki przykład:
Dodajesz gazu w samochodzie. W zależności ile wciśniesz to przyspieszasz szybciej lub wolniej, ale nie przestaniesz przyspieszać gdy osiągniesz określoną prędkość (no chyba że się skończą konie ;)). Jak widzisz sterujesz tutaj czymś innym. Jeżeli chcesz osiągnąć określoną prędkość używasz już innego urządzenia zwanym tempomatem. Analogicznie do twojego przypadku. Jeżeli chcesz sterować obiema rzeczami jednocześnie, o ile się nie mylę, mamy do czynienia z obiektem MIMO (Multiple Input Multiple Output), A to już wyższa szkoła jazdy, przynajmniej dla mnie.

EDIT:
Wpadł mi teraz pomysł do głowy jak można by to rozwiązać. Robisz dwa regulatory. Pierwszy steruje przyrostem temperatury. Natomiast gdy temperatura zbliży się do setpointa przełączasz na drugi regulator, który będzie stabilizował temperaturę na określonym poziomie..
modrzew
Posty: 12
Rejestracja: 10 sty 2012 17:59
Wersja środowiska: LabVIEW 2009

Optymalizacja i czasy PID

Post autor: modrzew »

Dobra chyba zaczynam rozumieć, że reguluje na dany przypadek (sprzęt). Ale bordzo ciekawy pomysł z dwoma regulatorami. Po tym jak napisałeś i jak tak popatrzyłem to można chyba byłoby jak się odpowiednio użyje PID setpoint profie. Spróbuję coś z tym zrobić i zobaczę co i jak mi wyjdzie.
Zyga
Posty: 86
Rejestracja: 26 sty 2012 23:36
Wersja środowiska: LabVIEW 2011

Optymalizacja i czasy PID

Post autor: Zyga »

Z setpoint profile może być ciężko sterować prędkością narastania temperatury. Wrzuć swojego VI'ie i numery kart pomiarowych jakimi dysponujesz. Jak na weekendzie znajdę trochę czasu to spróbuje coś wykombinować.

Jeszcze tak z ciekawości - na jakich zakresach temperatur operujesz i jak często mierzysz aktualną temperaturę?
Ostatnio zmieniony 08 sie 2012 17:42 przez Zyga, łącznie zmieniany 1 raz.
modrzew
Posty: 12
Rejestracja: 10 sty 2012 17:59
Wersja środowiska: LabVIEW 2009

Re: Optymalizacja i czasy PID

Post autor: modrzew »

Dzięki serdeczne jeśli znajdziesz chwilę czasu na weekendzie i coś zobaczysz. KArta NI9213, jak pomoże to zasilacz GW instek psh10100A. Temperatury będą do 600 stopni, nie wiem czy rozumiem mierzenie aktualnej temperatury, ale przez DAQ assistant to wydaje mi się że "na bieżąco" tj. (z opźnieniem wynikającym z karty, tak?). Jak zauważysz jest to prosty program abym sobie wszsytko mógł spokojnie opanować. Rozwiązanie też staram się proste abym mógł zrozumieć i żeby za dużo nie mogło się zepsuć bo na razie jestem początkujący. Może powiem co chcędokładnie osiągnąc otóż chce zrobić takie sterowaeni aby grzało ze stała prędkością (najmniej ważne czy 5 stopni na sekuntę, czy do 500 stopni w 5 min) do setpointa i tam "stabilizowała" sie temperatura, przez program, żeby było mozliwość w panelu frontowym decydowania o tej szybkości. Spróbuję zobaczyć do czego ogólnie służy to setpoint profile. Jeszcze raz serdeczne dzięki jak znajdziesz czas i coś zobaczysz, jestem bardzo wdzięczny za Twoją pomoc.
Załączniki
Program.vi
program
(128.89 KiB) Pobrany 352 razy
Zyga
Posty: 86
Rejestracja: 26 sty 2012 23:36
Wersja środowiska: LabVIEW 2011

Re: Optymalizacja i czasy PID

Post autor: Zyga »

Przelałem na VI ten pomysł z dwoma regulatorami. Zapewne będziesz musiał wnieść poprawki (o ile w ogóle to zadziała ; )), tak bez sprzętu ciężko..
Załączniki
Program.vi
(36.23 KiB) Pobrany 385 razy
ODPOWIEDZ