Poszukuję prostego, działającego algorytmu PID w wybranym języku programowania
PID >:-(
From: "Marcin Sommer" <m.sommer_at_nospam_kiz.pl>
Subject: PID >:-(
Date: Thu, 11 Mar 2004 19:49:23 +0100
Witam,
Po dłuuugim okresie walki, szukania w goglu, czytania wzorów i innych
krzaków, dziesiątkach przeprogramowań i eksperymentów niestety algorytm PID
okazał się silniejszy ode mnie. Psychika siadła. Poddaję się.
Czy ktoś może posiada wyciągnięty z elementarza, podstawowy, najprostszy,
DZIAŁAJĄCY algorytm PID napisany w jakimkolwiek języku?
Może moje zastosowanie wymaga czegoś innego, ale nie mam pewności, czy to co
zaprogramowałem w ogóle jest PIDem.
Będę wdzięczny za wszelką pomoc.
Pozdrawiam
Marcin
P.S. Nie znam się na matematyce, więc proszę o wyjaśnienia raczej w postaci
procedur niż wzorów.
========
Path: news-archive.icm.edu.pl!news.rmf.pl!news.ipartners.pl!newsfeed.gazeta.pl!news.nask.pl!news.itl.waw.pl!not-for-mai
From: "Jacek R. Radzikowski" <jacek_at_nospam_spamer.die.die.die.piranet.org>
Subject: Re: PID >:-(
Date: Thu, 11 Mar 2004 19:12:24 +0000 (UTC)
Marcin Sommer <m.sommer_at_nospam_kiz.pl> wrote:
Witam,
Po dłuuugim okresie walki, szukania w goglu, czytania wzorów i innych
krzaków, dziesiątkach przeprogramowań i eksperymentów niestety algorytm PID
okazał się silniejszy ode mnie. Psychika siadła. Poddaję się.
Czy ktoś może posiada wyciągnięty z elementarza, podstawowy, najprostszy,
DZIAŁAJĄCY algorytm PID napisany w jakimkolwiek języku?
Może moje zastosowanie wymaga czegoś innego, ale nie mam pewności, czy to co
zaprogramowałem w ogóle jest PIDem.
http://www.google.com/search?q=pid+algorithm+implementation
http://www.jashaw.com/pid/code.htm
http://www.intel.com/design/mcs96/papers/navin.pdf
Będę wdzięczny za wszelką pomoc.
mam nadziej ze pomoglem :)
Pozdrawiam
Marcin
P.S. Nie znam się na matematyce, więc proszę o wyjaśnienia raczej w postaci
procedur niż wzorów.
Znajomosc matematyki na podstawowym poziomie podczas pisania tego typu
aplikacji jest podstawowym minimum. Chociazby po to zeby wiedziec czy
sie zaimplementowalo PIDa czy perpetuum mobile.
Przydalo by sie tez wiedziec co oznaczaja te cyferki ktore podajasz jako
parametrach.
pzdr.
j.
========
Path: news-archive.icm.edu.pl!news.rmf.pl!news2.icm.edu.pl!news.mega.net.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai
From: "Marcin Sommer" <m.sommer_at_nospam_kiz.pl>
Subject: Re: PID >:-(
Date: Fri, 12 Mar 2004 12:05:39 +0100
http://www.google.com/search?q=pid+algorithm+implementation
http://www.jashaw.com/pid/code.htm
http://www.intel.com/design/mcs96/papers/navin.pdf
Niestety to już wszystko przerabiałem i nadal nie pomogło.
Chociaż nie do końca, bo pierwszy link - gogle z odpowiednimi keywordami,
doprowadził mnie do
http://www.seattlerobotics.org/encoder/200108/using_a_pid.html - a to już
może pomóc.
Znajomosc matematyki na podstawowym poziomie podczas pisania tego typu
aplikacji jest podstawowym minimum. Chociazby po to zeby wiedziec czy
sie zaimplementowalo PIDa czy perpetuum mobile.
Przydalo by sie tez wiedziec co oznaczaja te cyferki ktore podajasz jako
parametrach.
To mniej więcej wiem. Ba, nawet rozumiem. Tylko nie umiem wzorów czytać.
Jakoś mi się rozmywają ;-)))
Pozdrawiam
Marcin
========
Path: news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsgate.onet.pl!newsgate.p
From: zielpro_at_nospam_poczta.onet.pl (ziel)
Subject: RE: PID >:-(
Date: 13 Mar 2004 21:40:09 +0100
On Behalf Of Marcin Sommer
Niestety to już wszystko przerabiałem i nadal nie pomogło.
Bo wszystko zależy od zastosowania.
Nie istnieje jeden uniwersalny PID na wszystko!
Gorzej. Każde urządzenie wymaga w zasadzie indywidualnego podejscia.
Oczywiście, można wpisywać dwa parametry, ale jak one się mają
do rzeczywistości?
Samouczące się PID. Zapomnij, żebyś znalazł coś takiego sieci.
No chyba że kradzione. Osobiście znam dwa takie algorytmy i
żadnego nie podjąłbym się dziś pisać.
Po raz drugi oczywiście. ;-)
Do tego mają pare wad, jak choćby przeskok zadanej temperatury
w czasi uczenia - pierwszy nie określony, drugi o około 10%.
Oczywiście są lepsi, niż ja. I widziałem PID pracujący
"od ręki". Gotowca, działającego, musisz sobie napisać,
lub kupić.
pzdr
Artur
--
Archiwum grupy: http://niusy.onet.pl/pl.misc.elektronika
========
Path: news-archive.icm.edu.pl!news.rmf.pl!news.ipartners.pl!news.man.poznan.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai
From: jerry1111 <stop_this_spam_jerry1111_remove_at_nospam_remove.wp.pl>
Subject: Re: PID >:-(
Date: Mon, 15 Mar 2004 17:32:57 +0100
On Thu, 11 Mar 2004 19:12:24 +0000 (UTC), "Jacek R. Radzikowski"
<jacek_at_nospam_spamer.die.die.die.piranet.org> wrote:
http://www.google.com/search?q=pid+algorithm+implementation
http://www.jashaw.com/pid/code.htm
http://www.intel.com/design/mcs96/papers/navin.pdf
Linki fajne.
Znajomosc matematyki na podstawowym poziomie podczas pisania tego typu
aplikacji jest podstawowym minimum. Chociazby po to zeby wiedziec czy
sie zaimplementowalo PIDa czy perpetuum mobile.
Przydalo by sie tez wiedziec co oznaczaja te cyferki ktore podajasz jako
parametrach.
A to zastosujmy metode Nicholsa-Sieglera (ni cholery nie pamietam
pisowni nazwisk). Czyli krecmy Kp, potem Td, potem Ti tak, az sie
wzbudzi i 'troszke' cofnijmy :-)
Lepszej metody nie znam.
Aha - no i czesto jest tak, ze czlon rozniczkujacy (d) nie jest
potrzebny.
--
Jerry
========
Path: news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!lublin.pl!uw.edu.pl!news.pw.edu.pl!news.itl.waw.pl!not-for-mai
From: "Jacek R. Radzikowski" <jacek_at_nospam_spamer.die.die.die.piranet.org>
Subject: Re: PID >:-(
Date: Mon, 15 Mar 2004 17:16:46 +0000 (UTC)
jerry1111 <stop_this_spam_jerry1111_remove_at_nospam_remove.wp.pl> wrote:
On Thu, 11 Mar 2004 19:12:24 +0000 (UTC), "Jacek R. Radzikowski"
<jacek_at_nospam_spamer.die.die.die.piranet.org> wrote:
[...]
Znajomosc matematyki na podstawowym poziomie podczas pisania tego typu
aplikacji jest podstawowym minimum. Chociazby po to zeby wiedziec czy
sie zaimplementowalo PIDa czy perpetuum mobile.
Przydalo by sie tez wiedziec co oznaczaja te cyferki ktore podajasz jako
parametrach.
A to zastosujmy metode Nicholsa-Sieglera (ni cholery nie pamietam
pisowni nazwisk). Czyli krecmy Kp, potem Td, potem Ti tak, az sie
Zieglera-Nicholsa
wzbudzi i 'troszke' cofnijmy :-)
Lepszej metody nie znam.
Metoda bardzo dobra i szybka. Ale i tak warto wiedziec ze kp to wzmocnienie,
ze kd to czas itp. Ustawiac "na maupe" tez sie da, ale jak trzeba bedzie
skorygowac wspolczynniki, albo nie majac mozliwosci rozbujania obiektu[1],
znajomosc i zrozumienie podstaw dzialania okaza sie niezbedne.
Aha - no i czesto jest tak, ze czlon rozniczkujacy (d) nie jest
potrzebny.
Tez warto znac teorie zeby wiedziec dlaczego i kiedy :)
pzdr.
j.
[1] Powiedz szefowi ze uzyjesz Ziglera-Nicholsa do wyznaczenia wspolczynnikow
do PIDa sterujacego piecem w cementowni albo napedem sporej turbiny.
Ale wczesniej poszukaj sobie nowej pracy;)
========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai
From: jerry1111 <stop_this_spam_jerry1111_remove_at_nospam_remove.wp.pl>
Subject: Re: PID >:-(
Date: Tue, 16 Mar 2004 11:24:35 +0100
On Mon, 15 Mar 2004 17:16:46 +0000 (UTC), "Jacek R. Radzikowski"
<jacek_at_nospam_spamer.die.die.die.piranet.org> wrote:
A to zastosujmy metode Nicholsa-Sieglera (ni cholery nie pamietam
pisowni nazwisk). Czyli krecmy Kp, potem Td, potem Ti tak, az sie
Zieglera-Nicholsa
No wlasnie... TS sie skonczyla dawno temu :-)
Metoda bardzo dobra i szybka. Ale i tak warto wiedziec ze kp to wzmocnienie,
ze kd to czas itp. Ustawiac "na maupe" tez sie da, ale jak trzeba bedzie
skorygowac wspolczynniki, albo nie majac mozliwosci rozbujania obiektu[1],
znajomosc i zrozumienie podstaw dzialania okaza sie niezbedne.
[1] Powiedz szefowi ze uzyjesz Ziglera-Nicholsa do wyznaczenia wspolczynnikow
do PIDa sterujacego piecem w cementowni albo napedem sporej turbiny.
Ale wczesniej poszukaj sobie nowej pracy;)
-)
Akurat moje doswiadczenie z PIDami dotyczy szybkich procesow
(od 10us/krok do 1ms/krok). A w takim przypadku najwygodniej podlaczyc
oscylka i sprawdzac co sie dzieje. Co prawda kiedys uniesiony ambicja
i checia symulowania wszystkiego zrobilem model (dosc dokladny)
procesu w Matlabie. Efekt? G***o prawda te wszystkie wyliczenia -
- najlepsza wyszla metoda NZ.
Zreszta - przy tych szybkich procesach to przydatne sa PIDy, ktore
potrafia sobie zmienic nastawy w zaleznosci od warunkow. Najlepsze
bylyby samouczace sie, ale ja za leniwy zeby takie cos pisac :-)
--
Jerry
========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!news.rmf.pl!poznan.rmf.pl!news.man.poznan.pl!news.nask.pl!news.itl.waw.pl!not-for-mai
From: "Jacek R. Radzikowski" <jacek_at_nospam_spamer.die.die.die.piranet.org>
Subject: Re: PID >:-(
Date: Thu, 11 Mar 2004 19:20:49 +0000 (UTC)
Marcin Sommer <m.sommer_at_nospam_kiz.pl> wrote:
[...]
P.S. Nie znam się na matematyce, więc proszę o wyjaśnienia raczej w postaci
procedur niż wzorów.
Moze to Ci troche pomoze:
http://www.flightgear.org/Docs/XMLAutopilot/XMLAutopilot.html
http://www.flightgear.org/Docs/XMLAutopilot/node2.html
pzdr.
j.
========
Path: news-archive.icm.edu.pl!news.rmf.pl!news2.icm.edu.pl!news.mega.net.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai
From: "Rafał Ślebzak" <r.slebzak_at_nospam_manomtery.com.pl>
Subject: Re: PID >:-(
Date: Fri, 12 Mar 2004 11:42:26 +0100
Hm sproboj,co prawda tutaj jest tylko PI,ale pozniej poszukam linka albo
procedury PID,gdzies mam bo pisalem taka procedure w C.
Użytkownik "Marcin Sommer" <m.sommer_at_nospam_kiz.pl> napisał w wiadomości
news:c2qccj$qi5$1_at_nospam_atlantis.news.tpi.pl...
Witam,
Po dłuuugim okresie walki, szukania w goglu, czytania wzorów i innych
krzaków, dziesiątkach przeprogramowań i eksperymentów niestety algorytm
PID
okazał się silniejszy ode mnie. Psychika siadła. Poddaję się.
Czy ktoś może posiada wyciągnięty z elementarza, podstawowy, najprostszy,
DZIAŁAJĄCY algorytm PID napisany w jakimkolwiek języku?
Może moje zastosowanie wymaga czegoś innego, ale nie mam pewności, czy to
co
zaprogramowałem w ogóle jest PIDem.
Będę wdzięczny za wszelką pomoc.
Pozdrawiam
Marcin
P.S. Nie znam się na matematyce, więc proszę o wyjaśnienia raczej w
postaci
procedur niż wzorów.
========
Path: news-archive.icm.edu.pl!news.rmf.pl!poznan.rmf.pl!news.man.poznan.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mai
From: Marcin Stanisz <mstanisz_at_nospam_poczta.bzdury.onet.pl>
Subject: Re: PID >:-(
Date: Fri, 12 Mar 2004 22:57:27 +0100
Dnia czw 11. marca 2004 19:49 Marcin Sommer napisał(a):
Witam,
Po dłuuugim okresie walki, szukania w goglu, czytania wzorów i innych
krzaków, dziesiątkach przeprogramowań i eksperymentów niestety algorytm
PID okazał się silniejszy ode mnie. Psychika siadła. Poddaję się.
Czy ktoś może posiada wyciągnięty z elementarza, podstawowy, najprostszy,
DZIAŁAJĄCY algorytm PID napisany w jakimkolwiek języku?
W sumie nie powinienem tego robić, bo po co sobie konurencję wychowywać ;-),
ale jutro lecę do wujka Kadafiego, więc niech coś po mnie na pme zostanie
;-))) To jest moja procedura obliczania algorytmu PID, działająca na
ATmega32 w regulatorze temperatury. Jeśli się komuś przyda, niech wspomni
moje nazwisko w komentarzach :-) Może też mi maila pchnąć po usunięciu
bzdur.
/*
ek - uchyb w kroku k (bieżącym)
Kp, Ki, Kd - parametry regulatora
Mk1 - tu przechowujemy część I, zsumowaną od początku działania regulatora
ek1 - uchyb w kroku k-1 (poprzednim) do różnicowania
v1 - nie pamiętam, chyba do debuggowania było potrzebne... */
int PID(double ek, double Kp, double Ki, double Kd, double *Mk1, double
*ek1, double *v1)
{
double CVk;
if(ek < 40) {
// Tu obrabiamy człon całkujący: anti-windup, czyli nie doprowadzamy
// do nasycenia członu całkującego
if(((*Mk1) += Ki*ek)<0) *Mk1 = 0.0;
if(*Mk1>255.0) *Mk1 = 255.0;
// Człon różnicowy wyłączony, a my wyliczamy krok po kroku (żeby można było
// efekty w AVRStudio podejrzeć. Tu zakomentowany jest pełny wzór:
// CVk = Kp*ek+(*Mk1)+Kd*(ek-(*ek1));
// A tu rozbite:
// Człon proporcjonalny
*v1 = Kp*ek;
// Człon całkujący
CVk = *v1 + *Mk1;
// Nie może się nasycić (8 bitów mamy)
if(CVk>255.0) CVk = 255.0;
if(CVk<0.0) CVk = 0.0;
// Zaokrąglenie góra/dół
if((CVk-floor(CVk))>0.5)
CVk = ceil(CVk);
else
CVk = floor(CVk);
}
else { //jeśli temp. zadana jest > 40stC od aktualnej - leć pełną parą
CVk = 255.0;
(*Mk1 = 0.0);
}
// jeśli temp. zadana jest < 20stC od aktualnej - wyłącz regulator
if(ek < -20) {
CVk = 0.0;
(*Mk1 = 0.0);
}
// podstaw uchyb bieżący za poprzedni
(*ek1) = ek;
return ((int)CVk);
}
Proste, nie? :-)
PS. Komentarze dopisywałem teraz.
Pozdrawiam
--
Marcin Stanisz
"A lie will go round the world before the truth has got its boots on"
Terry Pratchett, "Truth"
========
Path: news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsgate.onet.pl!newsgate.p
From: zielpro_at_nospam_poczta.onet.pl (ziel)
Subject: RE: PID >:-(
Date: 13 Mar 2004 21:40:20 +0100
On Behalf Of Marcin Stanisz
;-))) To jest moja procedura obliczania algorytmu PID, działająca na
ATmega32 w regulatorze temperatury. Jeśli się komuś przyda, niech wspomni
moje nazwisko w komentarzach :-) Może też mi maila pchnąć po usunięciu
bzdur.
Czy mogę ustanowić nagrodę, dla pierwszego, któremu zadziała od ręki? ;-)
Oczywiście, Ty się nie liczysz. ;-)
pzdr
Artur
--
Archiwum grupy: http://niusy.onet.pl/pl.misc.elektronika
========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai
From: jerry1111 <stop_this_spam_jerry1111_remove_at_nospam_remove.wp.pl>
Subject: Re: PID >:-(
Date: Tue, 16 Mar 2004 11:24:35 +0100
On Fri, 12 Mar 2004 22:57:27 +0100, Marcin Stanisz
<mstanisz_at_nospam_poczta.bzdury.onet.pl> wrote:
W sumie nie powinienem tego robić, bo po co sobie konurencję wychowywać ;-),
ale jutro lecę do wujka Kadafiego, więc niech coś po mnie na pme zostanie
// Tu obrabiamy człon całkujący: anti-windup, czyli nie doprowadzamy
// do nasycenia członu całkującego
if(((*Mk1) += Ki*ek)<0) *Mk1 = 0.0;
if(*Mk1>255.0) *Mk1 = 255.0;
Ja ten punkt robie inaczej - pamietam w tablicy ostatnie X wartosci
do calki. Lepiej mi wychodzilo niz w/w.
Aha - tylko na poczatku pamietac o wyzerowaniu tablicy :-)
--
Jerry
========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!news.task.gda.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mai
From: J.F. <jfox_nospam_at_nospam_poczta.onet.pl>
Subject: Re: PID >:-(
Date: Tue, 16 Mar 2004 13:03:52 +0100
On Tue, 16 Mar 2004 11:24:35 +0100, jerry1111 wrote:
// Tu obrabiamy człon całkujący: anti-windup, czyli nie doprowadzamy
// do nasycenia członu całkującego
if(((*Mk1) += Ki*ek)<0) *Mk1 = 0.0;
if(*Mk1>255.0) *Mk1 = 255.0;
Ja ten punkt robie inaczej - pamietam w tablicy ostatnie X wartosci
do calki. Lepiej mi wychodzilo niz w/w.
Chcesz powiedziec ze zamiast calkowac przebieg bierzesz sume
n ostatnich probek ?
Moze i dziala, ale teoretycznie wypacza idee czlonu I -
maly blad przed dlugi czas po wycalkowaniu powinien
przestawic regulator zeby blad zszedl do zera.
U ciebie odpowiedz nie moze dowolnie narosnac.
Co prawda cyfrowo to chyba nie ma wiekszego znaczenia ..
J.
========
Path: news-archive.icm.edu.pl!news2.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed.silweb.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai
From: jerry1111 <stop_this_spam_jerry1111_remove_at_nospam_remove.wp.pl>
Subject: Re: PID >:-(
Date: Tue, 16 Mar 2004 14:48:57 +0100
On Tue, 16 Mar 2004 13:03:52 +0100, J.F. <jfox_nospam_at_nospam_poczta.onet.pl>
wrote:
On Tue, 16 Mar 2004 11:24:35 +0100, jerry1111 wrote:
// Tu obrabiamy człon całkujący: anti-windup, czyli nie doprowadzamy
// do nasycenia członu całkującego
if(((*Mk1) += Ki*ek)<0) *Mk1 = 0.0;
if(*Mk1>255.0) *Mk1 = 255.0;
Ja ten punkt robie inaczej - pamietam w tablicy ostatnie X wartosci
do calki. Lepiej mi wychodzilo niz w/w.
Chcesz powiedziec ze zamiast calkowac przebieg bierzesz sume
n ostatnich probek ?
Liczac calke bledu, biore sume X ostatnich wartosci
bledu i dziele przez X. Potem odejmuje ostatnia i dodaje
nowa.
Moze i dziala, ale teoretycznie wypacza idee czlonu I -
maly blad przed dlugi czas po wycalkowaniu powinien
przestawic regulator zeby blad zszedl do zera.
U ciebie odpowiedz nie moze dowolnie narosnac.
Moj sposob poprawia problem wind-up czlonu calkujacego. Podczas
prob zachowywalo sie to duzo lepiej niz zwykle ograniczenie
wartosci max. - a takie mialem na poczatku.
--
Jerry
========
Path: news-archive.icm.edu.pl!news.rmf.pl!news.ipartners.pl!news.nask.pl!news-stoc.telia.net!217.209.241.210.MISMATCH!news-stod.telia.net!telia.net!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai