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 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.
Någon som kan förklara integrerade delen på PID-regulator?
Re: Någon som kan förklara integrerade delen på PID-regulato
Re: Någon som kan förklara integrerade delen på PID-regulato
Det finns bara en sorts sekund.

Nej, variabeln ska inte vara statisk, den ändrar värde varje varv i loopen.Al_Bundy skrev: Så du menar att jag måste summera alla fel i en statisk variabel? Typ som jag redan gör nu?
Om du läser i tråden så behöver du inte ens komma på det själv.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.
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: 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.
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.Al_Bundy skrev: Ja. Jag funderar på ha ett marxvärde för integralen. Det kan vara skonsamt för processorn.
Re: Någon som kan förklara integrerade delen på PID-regulato
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?
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.
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?

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;
Re: Någon som kan förklara integrerade delen på PID-regulato
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?
Måste man inte deklarera den först?
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".)
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;
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
(Sen tycker ju jag att du borde ändra kommentaren "fel värde" till "felet". D.v.s. "wrong value" till "error".)
Re: Någon som kan förklara integrerade delen på PID-regulato
Jo. Det fungerar.
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?
Det görs automatisk. När e blir negativ så minskas sumIntegral.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".)
Jag vet. Jag är inte expert på engelska

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 igenDet ä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.

Re: Någon som kan förklara integrerade delen på PID-regulato
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.
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.
Kod: Markera allt
static long sumIntegral =+ e; // sumIntegral = e
static long sumIntegral += e; // sumIntegral = sumIntegral + e
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.
Re: Någon som kan förklara integrerade delen på PID-regulato
Fint. Så den får inte blir större än 100, men det är helt ok att den blir -1285473954673478?Al_Bundy skrev: Det görs automatisk. När e blir negativ så minskas sumIntegral.
Om du kollar att den inte blir större än MAX bör du alltså också kolla att den inte blir mindre än -MAX.
Re: Någon som kan förklara integrerade delen på PID-regulato
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.
Re: Någon som kan förklara integrerade delen på PID-regulato
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.
Re: Någon som kan förklara integrerade delen på PID-regulato
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.
Re: Någon som kan förklara integrerade delen på PID-regulato
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%.
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%.
Re: Någon som kan förklara integrerade delen på PID-regulato
Då är jag med. Jo den typen av begränsningar måste man ju ha.
- 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
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?
Ä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?
Re: Någon som kan förklara integrerade delen på PID-regulato
Hm, jag brukar som sagt begränsa direkt på integrationen, men det kanske tål att funderas på ett varv till.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.
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

Re: Någon som kan förklara integrerade delen på PID-regulato
Japp det var så jag menade.
Man kan få en integrator uppvridning även på en analog regulator.
Man kan få en integrator uppvridning även på en analog regulator.