Någon som kan förklara integrerade delen på PID-regulator?

Robot, CNC, Pneumatik, Hydraulik, mm
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Någon som kan förklara integrerade delen på PID-regulato

Inlägg av Al_Bundy »

danei skrev:T2-T1 är konstant. Vad det är beror ju på hur du samplar. Men det finns ingen anledning att räkna ut den konstanten för varje sample.
Jag vet inte exakt vad det är för sekund där mellan. Men det ligger ca på 1 sekund vad jag har höftat ut.
danei
EF Sponsor
Inlägg: 27414
Blev medlem: 2 juni 2003, 14:21:34
Ort: Östergötland
Kontakt:

Re: Någon som kan förklara integrerade delen på PID-regulato

Inlägg av danei »

Det finns bara en sorts sekund. :wink:
Al_Bundy skrev: Så du menar att jag måste summera alla fel i en statisk variabel? Typ som jag redan gör nu?
Nej, variabeln ska inte vara statisk, den ändrar värde varje varv i loopen.
Al_Bundy skrev: Jo. Jag kom på att om jag nollar statiska variabeln sumIntegral så kommer allt bara totalt falla då sumIntegral håller upp systemet så e blir 0.
Om du läser i tråden så behöver du inte ens komma på det själv.
Al_Bundy skrev: Jag förstog inte varför integralen blir noll när e går mot noll? Du missar att det är en statisk variabel vi talar om. Den sparar på minnet.
Det är "P" delen som går mot noll när felet går mot noll. Då hamnar hela regleringen i "I" delen. Det har också skrivits i tråden.
Al_Bundy skrev: Ja. Jag funderar på ha ett marxvärde för integralen. Det kan vara skonsamt för processorn.
Villkora integreringen med att regler signalen inte är mättad. Om reglersignalen är max så släpper du bara fram negativa förändringar av "I" och vice versa.
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Någon som kan förklara integrerade delen på PID-regulato

Inlägg av Al_Bundy »

Men om vi tar och tittar på min kod nu.

När du säger "Nej, variabeln ska inte vara statisk, den ändrar värde varje varv i loopen. " så tolkar jag som att jag inte ska ta arean av e(t). Du vet att när man talar om statisk variabel så sparas det tills nästa gång man anropar funktionen? :wink:

Här summerar jag felvärdet e till sumIntegral, där sumIntegral kommer max kunna vara 100. Men PH_voltage kommer bara vara mellan 0 och 1. Där är mitt arbetsområde på min regulator. Alltså mina teorier och idéer. Ja dessa fungerar.

Kod: Markera allt

static int U_pump(float PHar)
      {
        static const byte Td = 5;                                            // Td value 
        static const byte Ti = 3;                                            // Ti value
        static const byte MAX = 100;                                         // Maximum value of integral
        
        float e = PHbor - PHar;                                              // The wrong value
        static long sumIntegral =+ e;                                        // I-part
        if (sumIntegram >= MAX)
        {
          sunIntegram = MAX;
        }
        
        double PH_voltage = K*(e + Td*(e-e_before) + (1/Ti)*sumIntegral);    // Lovely PID-regulator 
        
        e_before = e;  
Nerre
Inlägg: 27201
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: Någon som kan förklara integrerade delen på PID-regulato

Inlägg av Nerre »

Nej, det är en "static" variabel. Du kan inte översätta programmeringstermer till svenska utan vidare.

Något statiskt är något som inte förändras, motsatsen är dynamiskt.

Det stämmer alltså att du ska ha en "static" eller global variabel som innehåller integralen av felet. Men du ska inte ha en statisk variabel.

Men sen är jag lite fundersam, kan man verkligen göra en tilldelning sådär samtidigt som variabeln dekareras?

Kod: Markera allt

static long sumIntegral =+ e;    
Måste man inte deklarera den först?

Kod: Markera allt

static int U_pump(float PHar)
      {
        static const byte Td = 5;                                            // Td value
        static const byte Ti = 3;                                            // Ti value
        static const byte MAX = 100;                                         // Maximum value of integral
        static long sumIntegral = 0;
       
        float e = PHbor - PHar;                                              // The wrong value
        sumIntegral =+ e;                                           // I-part
Du måste också ta hänsyn till att integralen kan bli negativ, du har nu bara tagit hänsyn till att den kan bli positiv.

(Sen tycker ju jag att du borde ändra kommentaren "fel värde" till "felet". D.v.s. "wrong value" till "error".)
Användarvisningsbild
Al_Bundy
Inlägg: 2889
Blev medlem: 11 september 2012, 23:59:50
Ort: The U.S - Chicago
Kontakt:

Re: Någon som kan förklara integrerade delen på PID-regulato

Inlägg av Al_Bundy »


Men sen är jag lite fundersam, kan man verkligen göra en tilldelning sådär samtidigt som variabeln dekareras?
Måste man inte deklarera den först?
Jo. Det fungerar.
Du måste också ta hänsyn till att integralen kan bli negativ, du har nu bara tagit hänsyn till att den kan bli positiv.

(Sen tycker ju jag att du borde ändra kommentaren "fel värde" till "felet". D.v.s. "wrong value" till "error".)
Det görs automatisk. När e blir negativ så minskas sumIntegral.

Jag vet. Jag är inte expert på engelska :)
Det är "P" delen som går mot noll när felet går mot noll. Då hamnar hela regleringen i "I" delen. Det har också skrivits i tråden.
Jag vet. P-delen gör grovjobbet. D-delen är en broms och I-delen är filputs. När e:et blir noll så kommer I-delen hålla upp hela systemet med en fin känning. Men så fort e ökar så är det I-delen som ökar och då blir felvärdet e 0 igen :)
swp
Inlägg: 63
Blev medlem: 31 december 2010, 00:54:56

Re: Någon som kan förklara integrerade delen på PID-regulato

Inlägg av swp »

Din I-del kommer nog inte att göra det du förväntar dig. Om du vill summera felet bör du nog ändra operatorn.

Kod: Markera allt

        static long sumIntegral =+ e;            // sumIntegral = e

        static long sumIntegral += e;            // sumIntegral = sumIntegral + e
Sedan tror jag att du bör ta till dig rådet från Gimbal att ha separat förstärkning för den proportionella delen, dvs använda formen K*(P+I+D). Det underlättar att kunna ändra bara P.

Rent praktiskt så föredrar jag även att låta I=1/Ti och att det är värden på K, P, I och D man anger. Då är det lätt att koppla bort en del genom att sätta den till noll, och ett större värde ger alltid en högre förstärkning.
Nerre
Inlägg: 27201
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: Någon som kan förklara integrerade delen på PID-regulato

Inlägg av Nerre »

Al_Bundy skrev: Det görs automatisk. När e blir negativ så minskas sumIntegral.
Fint. Så den får inte blir större än 100, men det är helt ok att den blir -1285473954673478?

Om du kollar att den inte blir större än MAX bör du alltså också kolla att den inte blir mindre än -MAX.
danei
EF Sponsor
Inlägg: 27414
Blev medlem: 2 juni 2003, 14:21:34
Ort: Östergötland
Kontakt:

Re: Någon som kan förklara integrerade delen på PID-regulato

Inlägg av danei »

Jag tycker fortfarande att det verkar lite bakvänt att begränsa en enskild reglerparameter. Det är ju när utsignalen går i taket som man får integrator uppvridning.
Användarvisningsbild
Icecap
Inlägg: 26636
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Någon som kan förklara integrerade delen på PID-regulato

Inlägg av Icecap »

Självklart ska man begränsa varje regleringsparameter för sig och sedan begränsa summan. Det kan uppstå situationer där en parameters "vilda utsväng" tar ut en annan parameters flipp medan slutresultatet ska hålla sig inom givna gränser.
danei
EF Sponsor
Inlägg: 27414
Blev medlem: 2 juni 2003, 14:21:34
Ort: Östergötland
Kontakt:

Re: Någon som kan förklara integrerade delen på PID-regulato

Inlägg av danei »

Jag har läst några reglerkurser, men den självklarheten har inte kommit upp någonsin. Den enda anledningen till att införa begränsningar är för att det finns begränsningar i utsignalen. Det medför att integratordelen kan öka väldigt mycket innan är värdet hunnit bli rätt. Men de övriga parametrarna ska man inte behöva begränsa om regulatorn är inställd vettigt.
Användarvisningsbild
Icecap
Inlägg: 26636
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Någon som kan förklara integrerade delen på PID-regulato

Inlägg av Icecap »

Och jag har inte läst något sådan, jag har bara lite vett.

Begränsningarna ska i grunden bara ha med att göra att t.ex. integrationsvariabeln inte overflower och går från t.ex. 32767 till -32768.

Ja, jag vet: man ska såklart ha en variabel som klarar hela möjliga spannet - men rent praktisk kan det vara så att parameterna kan bli sjuka innan man får trillat in allting rätt och då klarar begränsningarna detta.

Och kanske jag inte ska kalla det "begränsningar" men "overflow-kontroll" för att det ska framgå bättre vad jag menar.

Det totala output från regleringen kan man såklart lätt klippa, 100% är 100% och att regleringen ber om 1000% gör ju ingen nytta varför output lätt kan "hyvlas" av till att ge t.ex. 0-100%.
danei
EF Sponsor
Inlägg: 27414
Blev medlem: 2 juni 2003, 14:21:34
Ort: Östergötland
Kontakt:

Re: Någon som kan förklara integrerade delen på PID-regulato

Inlägg av danei »

Då är jag med. Jo den typen av begränsningar måste man ju ha.
Användarvisningsbild
Jan Almqvist
Inlägg: 1652
Blev medlem: 1 oktober 2013, 20:48:26
Ort: Orust

Re: Någon som kan förklara integrerade delen på PID-regulato

Inlägg av Jan Almqvist »

I en analog regulator utgör ju matningsspänningen en naturlig begränsning.

Är det inte en risk att man, i en mjukvaruregulator med utsignal i ändläge, integrerar iväg väldigt långt om man inte begränsar själva integreringen och att det sedan tar lång tid innan man kommer tillbaka?
Gimbal
Inlägg: 8663
Blev medlem: 20 april 2005, 15:43:53

Re: Någon som kan förklara integrerade delen på PID-regulato

Inlägg av Gimbal »

danei skrev:Jag tycker fortfarande att det verkar lite bakvänt att begränsa en enskild reglerparameter. Det är ju när utsignalen går i taket som man får integrator uppvridning.
Hm, jag brukar som sagt begränsa direkt på integrationen, men det kanske tål att funderas på ett varv till.

Vi tar ett exempel med PI-reglering.
Om man tänker sig en stor bassäng av något slag som ska fyllas och nivåregleras av en liten pump. Bassängen är tom och regleringen ger maxfart på pumpen, fyra timmar senare närmar man sig bör-värdet.

Utan några begränsningar så lär I-delen vara uppe i astronomiska siffror med en flera timmar lång översväng i släptåg.

Begränsar man I-delen till ett rimligt maxtal blir översvängen liten.

Men du menar alltså, om jag förstår rätt, att vi stoppar I-uppräkningen direkt när utsignalen når max :humm: med fördelen att I-delen blir ändå mindre uppskruvad. Det kanske inte är så dumt...
danei
EF Sponsor
Inlägg: 27414
Blev medlem: 2 juni 2003, 14:21:34
Ort: Östergötland
Kontakt:

Re: Någon som kan förklara integrerade delen på PID-regulato

Inlägg av danei »

Japp det var så jag menade.

Man kan få en integrator uppvridning även på en analog regulator.
Skriv svar