Gå til innhold
🎄🎅❄️God Jul og Godt Nyttår fra alle oss i Diskusjon.no ×

PID regulator i strukturert tekst


Anbefalte innlegg

Videoannonse
Annonse
Skrevet (endret)

Integralet er egentlig bare området under en kurve hvor tiden er X-aksen og reguleringsavviket er Y-aksen.

Dermed blir omtrent slik:

integral := integral + error;

Integraltiden er invers av integral-forsterkningen:

Ti := 1/ki

 

Men du må ta i betraktning at integralet nå oppdateres hvert scan / hver syklus. Du kommer til å få overflow veldig fort. Det jeg har gjort tidligere er følgende:

VAR                           
	error		: REAL;		//Reguleringsavvik
	derivative	: REAL;		//D
	integral    : REAL;		//Integral
	ki			: REAL;		//I-gain
END_VAR

VAR_INPUT
	clk		    : BOOL; 	//Denne brukes for å ikke kjøre PID-instruksjonen kontinuerlig. Kan eventuelt bruke positiv flanke på CP til EN.
	PV			: REAL;	
	SP			: REAL;
	kp			: REAL;		//P-gain
	kd			: REAL;		//D-gain
	Ti			: REAL;		//I-tid
END_VAR

VAR_OUTPUT
	out			: REAL;
END_VAR

 //Integral-gain er invers av I-tid.
 ki := 1.0/Ti  
//Sjekk om det er stigende flanke på clk-input
IF clk AND (clk <> clk_last) THEN
	error := SP - PV;
	derivative := error - error_last;
	integral := integral + error;
	out := ((kp*error)+(ki*integral)+(kd*derivative));
END_IF;

clk_last := clk
error_last := error;

Det er 3-4 år siden jeg drev på med dette sist, så det kan hende at syntaksen er litt ute å sykler. Men prinsippet er at man ikke oppdaterer PID-regulatoren hvert scan. Ting har en tendens til å gå veggimellom hvis dette oppdateres like fort som programmet utføres. 
Merk også at jeg bruker integral-forsterkning for å finne pådraget. Integralforsterkningen er det motsatte av integraltid, så jeg har egentlig bare invertert integraltiden for å finne integralforsterkningen. Det er enklere slik, syns jeg. Jeg har også kalt det D-gain, men det er det samme som D-tid. Kd = Td, så det spilller ingen rolle sånn sett. Alle tidsenheter er i sekund.

Så må du vurdere om du skal ha begrensinger på størrelser i regulatoren og filter på D-leddet. Det kommer til å gå bananas med det samme du starter reguleringen siden endring fra ~0 til en annen størrelse er ganske stor. Erfaringsmessig så fungerer dem ganske bra når man har investert litt tid på finpuss på filter og begrensninger. 

Endret av Nedward
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...