FB_HVACPIDCtrl_Ex

Universeller PID-Regler.
Der PID-Regler ist ein Standardregler für Applikationen der Heizungs- und Klimatechnik. Er kann zur Regelung von Temperaturen, Drücken, Volumenströmen oder der Luftfeuchte verwendet werden. Die Werte für Ti und Tv können auf Null gesetzt werden. Dadurch ist eine P, PI oder PD Charakteristik des Reglers einstellbar. Der Regler besitzt eine Anti-Reset-Windup-Funktion. Diese verhindert bei einer fortwährend anstehenden Regelabweichung das andauernde Aufintegrieren. Zusätzlich zum FB_HVACPIDCtrl bietet der Regler eine Steigungsbegrenzung am Ausgang.
Passiv-Verhalten (bEnable = FALSE oder bError = TRUE)
Die Ausgänge werden wie folgt gesetzt:
rY | 0,0 |
rXW | 0,0 |
bMaxLimit | FALSE |
bMinLimit | FALSE |
bDecLimit | FALSE |
bIncLimit | FALSE |
bActive | FALSE |
bARWactive | FALSE |
b2Ptactive | FALSE |
Im Fehlerfall steht bError auf TRUE - eErrorCode gibt den aktuellen Fehlercode an. Die internen Werte für P-, I-, und D-Anteil werden auf 0 gesetzt, ebenso die Werte für den I- und D-Anteil vom vorhergehenden Zyklus. Damit wird die Stellgröße bei einem Neustart im ersten Zyklus "sauber", das heißt ohne Vergangenheitswerte berechnet.
Aktiv-Verhalten (bEnable = TRUE und bError = FALSE)
Im ersten Zyklus werden I- und D-Anteil wie bereits erwähnt ohne Vergangenheitswerte berechnet und somit "sauber" aufgestartet. Ein positives Signal an bSetSyncValue setzt den I-Anteil so, dass die Stellgröße den Wert rSyncValue annimmt. Diese Methode kann, wenn bEnable und bSetSyncValue gleichzeitig gesetzt werden, zum Setzen eines Initialwertes genutzt werden, von dem aus die Regelung "losläuft". Ist der I-Anteil nicht aktiv, so wird der D-Anteil entsprechend gesetzt. Zu beachten ist, dass intern nur die steigende Flanke von bSetSyncValue ausgewertet wird, handelt es sich doch um eine Setz-Aktion. Für ein erneutes Synchronisieren, etwa auf einen Übergabewert, muss am Eingang bSetSyncValue ein erneutes TRUE-Signal angelegt werden. Ist der I-Anteil aktiv so sorgt der Regler dafür, daß dieser festgehalten wird, sollte sich der Reglerausgang rY an den Grenzen rYMin oder rYMax befinden und noch weiter fallen bzw. steigen wollen. Dieses Verfahren wird Anti-Reset-Windup genannt und trägt dafür Sorge, dass der I-Anteil immer nur so groß ist, dass die Stellgröße bei entsprechender Regelabweichung sofort wieder Werte innerhalb der Grenzen annehmen kann, ohne dass ein zu groß gewordener Integralanteich zunächst noch abgebaut werden muss.
Wirksinn
Mit bDirection = FALSE wird der Wirksinn des Reglers so umgekehrt, dass eine Regelabweichung kleiner als 0 eine Stellgrößenänderung ins Positive bewirkt. Dies wird dadurch erreicht, dass die Regelabweichung negativ berechnet wird:
bDirection | rXW (Regelabweichung) | Wirksinn |
TRUE | lrX-lrW (Istwert-Sollwert) | direkt (Kühlen) |
FALSE | lrW-lrX (Sollwert-Istwert) | indirekt (Heizen) |
Anti-Reset-Windup bei Erreichen des Maximal- bzw Minimalwertes
Erreicht der Regler am Ausgang seine Obergrenze und ist die Regelabweichung weiterhin positiv, so wird der Integralanteil sich so lange weiter erhöhen, bis die Regelabweichung wieder kleiner oder gleich Null ist. Dies kann dazu führen, dass sich unnötigerweise ein sehr hoher Integralanteil aufbaut, der bei einer Vorzeichenänderung der Regelabweichung erst wieder abgebaut werden muss und das Regelverhalten träge macht. Das gleiche gilt auch bei Erreichen des Minimalwertes am Ausgang bei einer weiterhin negativen Regelabweichung.
Um diesem vorzubeugen wird bei einem Austritt aus dem Regelbereich der I-Anteil so gesetzt, dass er in Addition mit dem P- und D-Anteil den jeweiligen Grenzwert lrYmin oder lrYMax am Stellausgang erreicht.
Die weitere Berechnung der P- I- und D-Werte wird dann so lange unterbrochen, bis das Vorzeichen der Regelabweichung wieder einen Eintritt in den Regelbereich zulässt, d.h. bei einem Verharren an der Maximalgrenze und eine Regelabweichung kleiner als 0.0 bzw. bei einem Verharren an der Minimalgrenze und eine Regelabweichung größer als 0.0.
Auch im SPS-Zyklus des Wiedereintrittes wird der Ausgang lrYdurch Manipulation des I-Anteiles so gesetzt, dass er sich nicht sprunghaft in den Regelbereich bewegt, sondern von der Grenze des vorher gehenden Verharrens aus anfängt sich zu ändern.
Steigungsbegrenzung
Ist der Regler schneller eingestellt, als das Stellglied, so kann dieses dem Regler nicht folgen, was zu einem Schwingverhalten führen kann. Daher gibt es die Möglichkeit die Steigung der Stellgröße zu begrenzen.
Als Maß dafür gelten die Zeiten:
tMinToMax: Steigungsbegrenzung des Reglerausgangs für Anstieg: tMinToMax in Sekunden bezogen auf eine Änderung von rYMin auf rYMax.
tMaxToMin: Steigungsbegrenzung des Reglerausgangs für Abfall: tMaxToMin in Sekunden bezogen auf eine Änderung von rYMax auf rYMin.
Hieraus lässt sich jeweils die Maximale Änderung pro SPS-Zyklus - das maximale Inkrement oder Dekrement - errechnen.
Ist die berechnete Änderung des Stellsignals über einen SPS-Zyklus nun höher als die unter tMinToMax bzw. tMaxToMin eingestellte, so wird das Stellsignal lediglich um das maximale Inkrement oder Dekrement erhöht bzw. erniedrigt.
Der I-Anteil wird dabei intern auf dieselbe Art nachgeführt ( I-Anteil des letzten SPS-Zyklus + maximales Inkrement bzw. I-Anteil des letzten SPS-Zyklus - maximales Dekrement).
Totzone
Ein Wert von rDeadRange> 0.0 gibt die Funktion der Totzone frei. Ist der Absolutwert der Regelabweichung dann kleiner als 1/2 rDeadRange, so ist die Neutrale Zone aktiv und P-, I- und D-Anteil werden nicht weiter berechnet, was zu einem gleich bleibenden Stellsignal führt. Erst wenn die Regelabweichung wieder größer wird, werden die Anteile neu berechnet und das Ausgangssignal des Reglers ändert dich wieder.
Durch diese Funktion sollen unnötig viele Stellimpulse vermieden werden.
Zweipunkt-Regelverhalten
Sind die Regelparameterlr rKp, tTn, tTv und tTd auf 0.0 bzw. t#0s gesetzt, so hat der Regler per Definition ein Zweipunkt-Verhalten.
Die Totzone rDeadRange definiert dabei die Hysterese. Das Schalten auf den Maximalwert am Ausgang rY erfolgt grundsätzlich, wenn die Regelabweichung rXW größer als die Hälfte des Hysteresewertes rDeadRange ist - auf den Minimalwert wird immer dann geschaltet, wenn die Regelabweichung rXW kleiner als die negative Hälfte der Hysterese rDeadRange wird:
Aus der unterschiedlichen Berechnung der Regelabweichung bei direktem und indirektem Wirksinn ergibt sich dann folgendes Schaltverhalten bezogen auf den Istwert rX:
- direkter Wirksinn (Kühlen): Regelabweichung = Istwert-Sollwert rXW = rX-rW

- indirekter Wirksinn (Heizen): Regelabweichung = Istwert-Sollwert rXW = rW-rX

VAR_INPUT
eDataSecurityType : E_HVACDataSecurityType;
bSetDefault : BOOL;
bEnable : BOOL;
rW : REAL;
rX : REAL;
tTaskCycleTime : TIME;
uiCycleCall : UINT;
bSetSyncValue : BOOL;
eDataSecurityType:Wenn eDataSecurityType:= eHVACDataSecurityType_Persistent ist, werden die persistenten VAR_IN_OUT-Variablen des Funktionsbausteins bei einer Wertänderung im Flash des Rechners abgelegt. Dafür ist es zwingend erforderlich den Funktionsbaustein FB_HVACPersistentDataHandling einmalig im Hauptprogramm, das zyklisch aufgerufen wird, zu instanziieren. Ansonsten wird der instanziierte FB intern nicht freigegeben.
Eine Wertänderung kann vom Gebäudeleitsystem, einem lokalen Bediengerät oder von einem Schreibzugriff von TwinCAT aus erfolgen. Beim Neustart des Rechners werden die gesicherten Daten automatisch vom Flash in den RAM zurück gelesen.
Anwendungsbeispiel: example_persistent.zip
Bei eDataSecurityType:= eHVACDataSecurityType_Idle werden die persistent deklarierten Variablen nicht spannungsausfallsicher gespeichert.
Hinweis | |
Eine sich zyklisch ändernde Variable darf niemals mit der IN_OUT-Variablen eines Funktionsbausteins verbunden werden, wenn eDataSecurityType:= eHVACDataSecurityType_Persistent ist. Es würde zu einem frühzeitigen Verschleiß des Flashspeichers führen. |
bSetDefault: Wenn die Variable TRUE ist, werden die Default-Werte der VAR_IN_OUT Variablen übernommen.
bEnable: Regleraktivierung. Im Moment der Aktivierung reagiert der Regler unmittelbar auf die Regelabweichung, ohne interne Synchronisation auf einen Wert.
rW: Sollwert
rX: Istwert
tTaskCycleTime: Zykluszeit, mit der der Funktionsbaustein aufgerufen wird. Diese entspricht der Task-Zykluszeit der aufrufenden Task, wenn der Baustein in jedem Zyklus aufgerufen wird.
uiCycleCall: Aufrufzyklus des Bausteines als Vielfaches der Zykluszeit. Ein Nulleintrag wird automatisch als uiCycleCall =1 gewertet.
Beispiel: tTaskCycleTime = 20ms, uiCycleCall =10 -> Der Regelalgorithmus wird alle 200ms aufgerufen. Damit werden aber auch nur alle 200ms die Ausgänge aktualisiert.
bSetSyncValue: Mit einer steigenden Flanke am Eingang bSetSyncValue wird die Stellgröße rY auf den Wert rSyncValue (VAR_IN_OUT) gesetzt. Dazu wird intern der I-Anteil verändert. Ist der I-Anteil nicht gegeben (PD-Regler), so wird der D-Anteil verändert.
VAR_OUTPUT
rY : REAL;
rXW : REAL;
bMaxLimit : BOOL;
bMinLimit : BOOL;
bDecLimit : BOOL;
bIncLimit : BOOL;
bActive : BOOL;
bARWactive : BOOL;
b2Ptactive : BOOL;
bError : BOOL;
eErrorCode : E_HVACErrorCodes;
rY: Stellgröße. Bereich durch rYMin und rYMax eingeschränkt.
rXW: Regelabweichung (Berechnung abhängig vom Wirksinn)
bMaxLimit: Die Stellgröße hat ihren oberen Grenzwert erreicht.
bMinLimit: Die Stellgröße hat ihren unteren Grenzwert erreicht.
bDecLimit: Die Stellgrößen-Steigung hat ihren Grenzwert für das maximale Abfallen erreicht, siehe tMaxToMin (VAR_IN_OUT).
bIncLimit: Die Stellgrößen-Steigung hat ihren Grenzwert für den maximalen Anstieg erreicht, siehe tMinToMax (VAR_IN_OUT).
bActive: Der Regler ist aktiv, das heißt freigegeben (bEnable = TRUE) und nicht im Fehlerzustand (bError = FALSE).
bARWactive: Anti-Reset-Windup-Funktion ist aktiv.
b2Ptactive: Das Zweipunktverhalten des Reglers ist aktiv.
bError: Dieser Ausgang wird auf TRUE geschaltet, wenn die eingetragenen Parameter fehlerhaft sind.
eErrorCode: Enthält den befehlsspezifischen Fehlercode (siehe E_HVACErrorCodes).
VAR_IN_OUT
rDeadRange : REAL;
rSyncValue : REAL;
bDirection : BOOL;
rKp : REAL;
tTi : TIME;
tTv : TIME;
tTd : TIME;
rYMin : REAL;
rYMax : REAL;
tMinToMax : TIME;
tMaxToMin : TIME;
rDeadRange: Um unnötiges Verfahren und damit frühzeitiges Verschleißen der Ventile oder Klappenantriebe zu vermeiden, kann für Die Regelabweichung eine Totzone eingestellt werden. Ist der Betrag der Regelabweichung kleiner als die Hälfte der Totzone rDeadRange, so wird die P-I-D-Berechnung und damit der Stellausgang rY "eingefroren". Die Variable wird persistent gespeichert. Voreingestellt auf 0.
rSyncValue: Mit einer steigenden Flanke am Eingang bSync wird die Stellgröße rY auf diesen Wert gesetzt. Dazu wird intern der I-Anteil verändert. Ist der I-Anteil nicht gegeben (PD-Regler), so wird der D-Anteil verändert. Die Variable wird persistent gespeichert. Voreingestellt auf 0.
bDirection: Mit dem Parameter bDirection kann der Wirksinn des Reglers verändert werden. Ist bDirection TRUE, ist der direkte Wirksinn für einen Kühlbetrieb des Reglers aktiv. Wenn bDirection FALSE ist, ist der indirekte Wirksinn des Reglers für den Heizbetrieb aktiviert. Die Variable wird persistent gespeichert. Voreingestellt auf 0.
rKp: Proportionalfaktor Verstärkung. Wirkt nur auf den P-Anteil. Die Variable wird persistent gespeichert. Voreingestellt auf 1,0.
tTi: Integrierzeit [s]. Der I-Anteil korrigiert die verbleibende Regelabweichung nach der Korrektur des P-Anteils. Je kleiner die tTi eingestellt wird, desto schneller korrigiert der Regler. Ist die Zeit zu kurz, wird der Regelkreis instabil. Um den Integrationsanteil zu vermindern, sind größere tTi-Zeiten einzugeben. Die Nachstellzeit sollte größer als die Verfahrzeit des Ventil- oder Klappenantriebes gewählt werden. Ein Nullwert an diesem Parameter schaltet den I-Anteil ab. Die Variable wird persistent gespeichert. Voreingestellt auf 30s.
tTv: Vorhaltezeit [s]. Je größer tTv ist, desto stärker korrigiert der Regler. Eine zu große Zeit führt zu einem instabilen Regelkreis. In normalen Anwendungen der Gebäudeautomation wird häufig nur ein PI-Regler verwendet. Ein Nullwert an diesem Parameter schaltet den D-Anteil ab. Die Variable wird persistent gespeichert. Voreingestellt auf 0s.
tTd: Dämpfungszeit [s]. Die Variable wird persistent gespeichert. Voreingestellt auf 0s.
rYMin / rYMax: Begrenzen den Arbeitsbereich des Reglers. Einige andere Funktionsbausteine z.B. Sequenzer erfordern einen symmetrischen (- 100 bis +100) Stellbereich. Bei einer Kaskadenstruktur bestimmt der Arbeitsbereich des Führungsreglers den Sollwert des Folgereglers. Zum Beispiel 15° bis 25° als Begrenzung des Zulufttempertursollwerts einer Abluft- Zuluftkaskadenregelung. Die Variablen werden persistent gespeichert. rYMin voreingestellt auf 0. rYMax voreingestellt auf 100.
tMinToMax: Steigungsbegrenzung [s] des Reglerausgangs für Anstieg: tMinToMax in Sekunden bezogen auf eine Änderung von rYMin auf rYMax. Die Variable wird persistent gespeichert. Voreingestellt auf 0s.
tMaxToMin: Steigungsbegrenzung [s] des Reglerausgangs für Abfall: tMaxToMin in Sekunden bezogen auf eine Änderung von rYMax auf rYMin. Die Variable wird persistent gespeichert. Voreingestellt auf 0s.
Voraussetzungen
Entwicklungsumgebung | erforderliche Bibliothek | Erforderliche Function |
---|---|---|
TwinCAT 3.1 ab Build 4022.16 | Tc2_HVAC V3.3.1.0 | TF8000 | TC3 HVAC V1.0.0.0 |