FB_HVACPIDCtrl_Ex

Universeller PID-Regler.

FB_HVACPIDCtrl_Ex 1:

Ein-Ausgänge

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 instanzieren. Ansonsten wird der instanzierte 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: FB_HVACPIDCtrl_Ex 2: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_Persistentist. 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 maximale 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

Funktionsbeschreibung

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, daß 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, daß 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, muß am Eingang bSetSyncValue ein erneutes TRUE-Signal angelegt werden. Ist der I-Anteil aktiv so sorgt der Regler dafür, daß dieser fest gehalten wird, sollte sich der Reglerausgang rY an den Grenzen rYMin oder rYMax befinden und noch weiter fallen bzw steigen wollen. Dieses Verfahren wird Anti-Wind-Up genannt unt 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

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, daß 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, daß sich unnötigerweise ein sehr hoher Integralanteil aufbaut, der bei einer Vorzeichenänderung der Regelabweichung erst wieder abgebaut werden muss und das Regelverhaten 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, daß 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äßt, 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 lrY durch 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 eimem 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äßt 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 letztenSPS-Zyklus + maximales Inkrement bzw. I-Anteil des letztenSPS-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:

FB_HVACPIDCtrl_Ex 3:

Aus der unterschiedlichen Berechnung der Regelabweichung bei direktem und indirektem Wirksinn ergibt sich dann folgendes Schaltverhalten bezogen auf den Istwert rX: