Gå til innhold

Realisere PI-regulator i CoDeSys


Anbefalte innlegg

Hei!

Jeg skal realisere en PI-regulator i CoDeSys. Det skal benyttes strukturert tekst og den skal realiseres kun ved hjelp av aritmetikk og timere. Jeg skjønner forsåvidt Proporsjonaldelen, men sliter litt med å lage Integraldelen. Er det noen som har noen tips? :) 

Lenke til kommentar
Videoannonse
Annonse

Integraldelen er bare en summasjon for hver iterasjon.

FUNCTION_BLOCK discPI
VAR_INPUT
	rSp	: REAL; // Settpunkt
	rY	: REAL; // Målt verdi
END_VAR
VAR_OUTPUT
	rU	: REAL; // Regulatorpådrag
END_VAR
VAR
	error	: REAL;
	
	Kp		: REAL := 1;
	Ti		: REAL := 30;
	Ts		: REAL := 0.1; // Samplingstid i sekunder
	sampler		: TON;
	
	
	P		: REAL;
	I		: REAL;
	prev_I		: REAL;
END_VAR

sampler.IN := NOT sampler.Q;
sampler.PT := REAL_TO_TIME(Ts*1000);
sampler();

IF sampler.Q THEN
	error := rSp - rY; // Beregn avvik
	
	P := Kp * error; // Proporsjonaldel
	I := prev_I + Kp * Ts / Ti * error; // Integrator
	prev_I := I;
	
	rU := P + I;
END_IF

Husk at du også må stoppe integratoren (summeringen) etter hvert for å unngå integrator-windup. Bumpless transfer må du også ta hensyn til når du går fra auto til manuell og motsatt.

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