PID Regler mit I=0 betreiben

Vertipper

Level-2
Beiträge
44
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich nutze für eine Regelung den PID Baustein aus der Util Lib.
Dieser hat als Eingangsparameter keinen I-Wert sondern Tn als "Reset Time".

Zum Einstellen des Proportionalanteils möchte ich aber den I-Teil auf Null lassen was bei diesem Baustein nicht funktioniert.
Wenn ich 0 eingebe wird überhaupt nicht geregelt und bei einem Wert >0 rennt der Regler davon.
Ist mit diesem Baustein keine reine Proportionalregelung möglich ?

Gibt es vielleicht einen anderen PID Baustein in irgendeiner Lib ?

Bei Codesys 2 habe ich immer den CTRL_PI aus der Oscat-basic-333 Lib genutzt, weiss aber nicht ob das mit eCockpit weiterhin so problemlos läuft.
 
Hallo Vertipper,

in der WagoAppBuildingHVAC gibt es den Baustein FbPIDController. Bei diesem PID-Regler können einzelne Regelparameter auf 0 gesetzt werden. Z.B. typConfigPIDController.rTn := 0; um einen PD-Regler zu erhalten.
 
Hallo,
ich nutze für eine Regelung den PID Baustein aus der Util Lib.
Dieser hat als Eingangsparameter keinen I-Wert sondern Tn als "Reset Time".

Zum Einstellen des Proportionalanteils möchte ich aber den I-Teil auf Null lassen was bei diesem Baustein nicht funktioniert.
Wenn ich 0 eingebe wird überhaupt nicht geregelt und bei einem Wert >0 rennt der Regler davon.
Ist mit diesem Baustein keine reine Proportionalregelung möglich ?

Gibt es vielleicht einen anderen PID Baustein in irgendeiner Lib ?

Bei Codesys 2 habe ich immer den CTRL_PI aus der Oscat-basic-333 Lib genutzt, weiss aber nicht ob das mit eCockpit weiterhin so problemlos läuft.


Hallo Vertipper


Ich hatte immer Probleme mit diesen fertigen Bausteinen der Gebäudetechnik.

Ich würde selbst einen FB schreiben. Proportionalregelung ist relativ simpel.
Zudem kennst du nachher den Prozess und die Herleitung.


Variablen:

r_soll (sollprozesswert)
r_ist (Istprozesswert)
r_c (verstärkungskoeffizient)
r_dir (regelrichtung)

r_dt (realwert in ms der zykluszeit)

r_dy:real;
r_y:real;

(y für den gewünschten Regelwert)


r_dy := (r_soll - r_ist) * r_c * r_dir * r_dt/1000;
r_y := r_y + r_dy;

r_dir = -1 oder 1
r_c < 1
r_dt = z.B. 20


Dann würde ich noch beschränkungen einbauen wie r_soll_max und min

IF r_soll > r_soll_max then
r_soll := r_soll_max;
end_if

Damit verhinderst du einen über-/unterlauf.

Du kannst die Formel erweitern mit einem Term der 2. Ordnung. (Verbessert die Beschleunigung und das langsame herantasten)

Ich würde sicher eine Überlegung machen, wie schnell du regeln möchtest (wieviel y pro sekunde), bei welcher Solldiferenz?
Damit kannst du den Koeffizienten berechnen.


Freundliche Grüsse
 
Zurück
Oben