PID-Regler (ohne und mit anti-wind-up)
Funktionsbeschreibung
REVIEW ERFORDERLICH Ziel eines Reglers ist es, einen Ist-Wert an einen Soll-Wert heranzuführen und dann den Soll-Wert zu halten.
Es gibt unterschiedliche Arten von Regler. Ein PID-Regler ist eine Kombination von drei Reglertypen, nämlich
einem Proportionalregler (welcher primär die Differenz zwischen Ist-und Sollwert misst und daher sehr direkt auf Abweichungen reagiert [→ “Berücksichtigung der Abweichung”]),
einem Integralregler (welcher basierend auf Vergangenheitswerten das Ergebnis des P-Reglers optimiert und eher langfristig wirkt [→ “Aufsummierung der Abweichung”]) ,
einem Differenzialregler (welcher - basierenden auf Veränderungen des Ist-Wertes - versucht, die Zukunft zu antizipieren [→ “Reaktion auf Änderungen der Abweichung”]).
Das Logik-Modul PID awu enthält zusätzlich noch eine sog. Anti-Wind-Up-Funktion. Damit wird vermieden, dass der I-Regler die Stellgrösse über- oder unterschreitet.
Eingänge
Soll (float): Soll-Wert
Ist (float): Ist-Wert.
Kp (float): Proportional-Term.
Ki (float): Integral-Term.
Kd (float): Differential-Term.
(nur PID awu) Untergrenze (float): Kleinster möglicher Wert der Stellgröße
(nur PID awu) Obergrenze (float): Größter möglicher Wert der Stellgröße
(Optional) Inhibit 1-n (boolean): (Optionale) Sperreingänge, lösen die →Abbruchfunktion aus.
(Optional) Trigger 1-n (boolean): (Optionale) Triggereingänge, lösen die →Triggerfunktion aus.
Ausgänge
Stell (float): Stellgröße.
Hinweise
Grundlagenwissen zur PID-Regelung
Nicht wissenschaftliche Erklärung (beachte auch den ersten Kommentar)
Praktische Anwendungsbeispiele
Temperaturregelung
Zugrundeliegende Modulbausteine
FORTGESCHRITTENE
→
Code
EXPERTEN
Der Custom-Logik-Code dieses Logik-Moduls lautet wie folgt:
Einfache Variante
{ "Level": [ [ "$Reference", "float", 0 ], [ "$Controlled", "float", 0 ], [ "$Manipulate", "float", 0 ], [ "$Kp", "float", 0 ], [ "$Ki", "float", 0 ], [ "$Kd", "float", 0 ], [ "$VAR<Inhibit?>", "bool", false ] ], "Module": [ [ "Break", [ "$VAR<Inhibit?>" ] ], [ "PID controller", "$Reference", "$Controlled", "$Manipulate", "$Kp", "$Ki", "$Kd" ] ], "Input": [ [ "Soll", "Soll-Wert", "$Reference", "c" ], [ "Ist", "Ist-Wert", "$Controlled", "a" ], [ "Kp", "Proportional-Term", "$Kp", "c" ], [ "Ki", "Integral-Term", "$Ki", "c" ], [ "Kd", "Diverential-Term", "$Kd", "c" ], [ "Inhibit", "INHIBIT", "$VAR<Inhibit?>", "u" ] ], "Output": [ [ "Stell", "Stellgröße", "$Manipulate", "a" ] ] }
Variante mit Anti-Wind-Up
{ "Level": [ [ "$Reference", "float", 0 ], [ "$Controlled", "float", 0 ], [ "$Manipulate", "float", 0 ], [ "$Kp", "float", 0 ], [ "$Ki", "float", 0 ], [ "$Kd", "float", 0 ], [ "$LowerLimit", "float", 0 ], [ "$UpperLimit", "float", 100 ], [ "$VAR<Inhibit?>", "bool", false ] ], "Module": [ [ "Break", [ "$VAR<Inhibit?>" ] ], [ "PID_awu", "$Reference", "$Controlled", "$Manipulate", "$Kp", "$Ki", "$Kd", "$LowerLimit", "$UpperLimit" ] ], "Input": [ [ "Soll", "Soll-Wert", "$Reference", "c" ], [ "Ist", "Ist-Wert", "$Controlled", "a" ], [ "Kp", "Proportional-Term", "$Kp", "c" ], [ "Ki", "Integral-Term", "$Ki", "c" ], [ "Kd", "Diverential-Term", "$Kd", "c" ], [ "Untergrenze", "Kleinster möglicher Wert der Stellgröße", "$LowerLimit", "c" ], [ "Obergrenze", "Größter möglicher Wert der Stellgröße", "$UpperLimit", "c" ], [ "Inhibit", "INHIBIT", "$VAR<Inhibit?>", "u" ] ], "Output": [ [ "Stell", "Stellgröße", "$Manipulate", "a" ] ] }
Kommentar hinzufügen