Info |
---|
PID-Regler (ohne und mit anti-wind-up) |
Funktionsbeschreibung
Status | ||||
---|---|---|---|---|
|
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
Zugrundeliegender Modulbaustein
→Zugrundeliegende Modulbausteine
Status | ||||
---|---|---|---|---|
|
→
Code
Status | ||||
---|---|---|---|---|
|
Der Custom-Logik-Code dieses Logik-Moduls lautet wie folgt:
Einfache Variante
Codeblock |
---|
{
"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
Codeblock |
---|
{
"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" ] ]
} |