FB_HVACI_CtrlStep

FB_HVACI_CtrlStep 1:

Der Funktionsbaustein dient zur sequenziellen Folgesteuerung von Leistungserzeugern.

In Verbindung mit der Leistungsstufentabelle FB_HVACPowerRangeTable kann der Leistungsstufenregler für die Regelung mehrerer Heizkessel, Kältemaschinen oder Rückkühlwerke eingesetzt werden.

Das Hoch- oder Runterschalten in die nächst höhere oder niedrigere Leistungsstufe erfolgt über ein Integral (rW - rX) und einer Zeitverzögerung. Zuerst muss der Temperaturistwert rX einen Schwellwert rW_High / rW_Low über- oder unterschritten haben. Anschließend startet das Integral. Wird an dem Ausgang rI_Ctrl der obere oder untere Grenzwert (rIntegralHigh / rIntegralLow) erreicht, so wird ein Zeitglied gestartet, nach dessen Ablauf (udiSecRT_DelayHigh / udiSecRT_DelayLow)der Ausgang iStep in- oder dekrementiert wird, siehe Programmablaufdarstellung als Diagramm

FB_HVACI_CtrlStep 2:

Eine eingestellte Integrationszeit udiSecTiHigh/udiSecTiLow = 60 Sekunden heißt, dass das I-Übertragungsglied sich um ein Kelvin pro Minute ändert. Bei einer Regelabweichung rE = 5 hat der Ausgang des I-Übertragungsgliedes rI_Ctrl nach einer Minute den Wert 5. Beispiel: bDirection = FALSE; udiSecTiLow = 60; rE = 2; rIntegralLow = 10
Bei der bleibenden Regelabweichung von 2 und der unteren Integralgrenze von 10 ist nach 5 Minuten rI_Ctrl = rIntegralLow. Dieses hat zur Folge, dass ein Zeitglied mit der Verzögerungszeit udiSecDelayLow gestartet wird. Nach dessen Ablauf (udiSecRT_DelayHigh / udiSecRT_DelayLow) wird der Ausgang iStep um 1 inkrementiert und das I-Übertragungsglied und die Zeitverzögerungen werden zurückgesetzt.

FB_HVACI_CtrlStep 3:

iStep wird für einen SPS-Zyklus auf 1 gesetzt, wenn bEnable = TRUE, bError = FALSE, eCtrlMode = eHVACCtrlMode_AutoANDiNumberOfStepInProfile > 0 ist.

Bedingungen

Das I-Übertragungsglied wird freigegeben, wenn

bEnable = TRUE AND NOT bError AND eCtrlMode = eHVACCtrlMode_Auto AND NOT bBlock
(
(rX >= rW_High AND ((iStep > 0 AND NOT bDirection) OR (iStep < iNumberOfStepInProfile AND bDirection))
OR
(rX < rW_Low AND ((iStep < iNumberOfStepInProfile AND NOT bDirection) OR (iStep > 0 ANDbDirection))
)

ist. Ist rI_Ctrl =rIntegralHigh / rIntegralLow, so werden die Zeitglieder der Verzögerungszeiten udiSecDelayHigh / udiSecDelayLow aktiviert. Nach Ablauf einer der Verzögerungszeiten udiSecRT_DelayHigh / udiSecRT_DelayLow werden die Stufen der Leistungsstufensequenz folgendermaßen gesteuert:

iStep = iStep + 1 wenn

(rX < rW_Low AND iStep < iNumberOfStepInProfile AND NOT bDirection)
OR
(rX >= rW_High AND iStep < iNumberOfStepInProfile AND bDirection)

iStep = iStep - 1 wenn

(rX < rW_Low AND iStep > 0 AND bDirection)
OR
(rX >= rW_High AND iStep > 0 AND NOT bDirection)

FB_HVACI_CtrlStep 4:

Nach jeder Änderung von iStep wird das I-Übertragungsglied und die internen Zeitverzögerungen (udiSecDelayLow, udiSecDelayHigh) zurückgesetzt.

Übertragungsfunktion des I-Übertragungsglied (I_Ctrl)

FB_HVACI_CtrlStep 5:

Programmablaufplan

FB_HVACI_CtrlStep 6:

Programmablaufdarstellung als Diagramm

FB_HVACI_CtrlStep 7:

Verhalten der verschiedenen Variablen

FB_HVACI_CtrlStep 8:

Im Bild ist dargestellt wann welche Variablen wie zum Einsatz kommen.

VAR_INPUT

eDataSecurityType       : E_HVACDataSecurityType;
bSetDefault             : BOOL;
bEnable                 : BOOL;
rW                      : REAL;
rX                      : REAL;
eCtrlMode               : E_HVACCtrlMode;
iManualStep             : INT;
bStepUp                 : BOOL;
bStepDown               : BOOL;
bDirection              : BOOL;
iNumberOfStepInProfile  : INT;
bBlock                  : BOOL;
bReset                  : 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: Über ein TRUE wird der Funktionsbaustein freigegeben. Ist bEnable = FALSE, so wird iStep konstant auf 0 gesetzt. Die Überprüfung der Variable iNumberOfStepInProfile ist weiterhin aktiv. Falls dort ein Fehler auftritt, so wird dieses mit bError = TRUE angezeigt und kann nach Behebung des Fehlers mit bReset quittiert werden.

rW: Mit der Variablen rW wird der Sollwert übergeben.

rX: Mit der Variablen rX wird der Istwert übergeben.

eCtrlMode: Enum, welches die Betriebsart des Funktionsbausteins vorgibt (siehe E_HVACCtrlMode). Ist bEnable = TRUE AND bError = FALSE AND eCtrlMode = eHVACCtrlMode_Manual AND iNumberOfStepInProfile > 0, so kann der Wert des Ausgangs iStep über iManualStep vorgeben werden. Beim Starten der PLC ist eCtrlMode = eHVACCtrlMode_Auto.

iManualStep: Ist die Betriebsart eCtrlMode = eHVACCtrlMode_Manual AND bEnable = TRUE AND bError = FALSE AND iNumberOfStepInProfile > 0, so kann der Wert des Ausgangs iStep über iManualStep vorgeben werden. Der Eingabebereich von iManualStep kann maximal den Wert von iNumberOfStepInProfile haben und minimal 0 sein.

bStepUp: Ist bEnable = TRUE AND bError = FALSE AND eCtrlMode = eHVACCtrlMode_Auto AND bBlock=FALSE, so kann über eine steigende Flanke an dem Eingang bStepUp der Wert des Ausgangs iStep um 1 erhöht werden. Dieses kann so oft wiederholt werden bis iStep = iNumberOfStepInProfile ist.

bStepDown: Ist bEnable = TRUE AND bError = FALSE AND eCtrlMode = eHVACCtrlMode_Auto AND bBlock=FALSE, so kann über eine steigende Flanke an dem Eingang bStepDown der Wert des Ausgangs iStep um 1 erniedrigt werden. Dieses kann so oft wiederholt werden bis iStep = 0 ist.

bDirection: Mit bDirection wird der Wirksinn des Funktionsbausteins bestimmt. FALSE = Heizbetrieb; TRUE = Kühlbetrieb

iNumberOfStepInProfile: Anzahl der Stufen in der Leistungsstufensequenz. iNumberOfStepInProfile kann minimal 0 und maximal g_iMaxNumberOfSteps sein. Werden die Grenzwerte nicht eingehalten, so wird ein Fehler ausgegeben und mit bError = TRUE angezeigt und iStep wird = 0.

bBlock: Mittels der Eingangsvariablen bBlock kann die Regelung des Funktionsbausteins entweder frei gegeben werden oder der Ausgang iStep wird auf den Wert der Variablen iNumberOfStepInProfile fixiert.

Ist bEnable = TRUE AND bError = FALSE AND eCtrlMode = eHVACCtrlMode_Auto AND bBlock=FALSE, so ist das I-Übertragungsglied und die internen Zeitglieder zur Steuerung des Ausgangs iStep frei gegeben.

Ist bEnable = TRUE AND bError = FALSE AND eCtrlMode = eHVACCtrlMode_Auto AND bBlock=TRUE, so ist das I-Übertragungsglied und die internen Zeitglieder gesperrt und iStep = iNumberOfStepInProfile.

bReset: Eingang zur Quittierung der Störungen nach deren Behebung. Intern wird auf eine steigende Flanke reagiert.

VAR_OUTPUT

iStep               : INT;
rI_Ctrl             : REAL;
rE                  : REAL;
rW_High             : REAL;
rW_Low              : REAL;
b_rW_High           : BOOL;
b_rW_Low            : BOOL;
udiSecRT_DelayHigh  : UDINT;
udiSecRT_DelayLow   : UDINT;
bError              : BOOL;
eErrorCode          : E_HVACErrorCodes;

iStep: Mit der Ausgangsvariablen iStep wird die Stufe in einer Leistungsstufensequenz angegeben. Beim Aufstarten des Funktionsbausteins ist iStep = 1, wenn bEnable = TRUE, bError = FALSE, eCtrlMode = eHVACCtrlMode_Auto AND iNumberOfStepInProfile > 0 ist. iStep kann maximal den Wert von iNumberOfStepInProfile erreichen und minimal 0 sein.

Der Wert von iStep kann manuell über iManualStep vorgegeben werden, wenn bEnable = TRUE, bError = FALSE AND eCtrlMode = eHVACCtrlMode_Manual ist.

Über die Eingangsvariablen bStepUp / bStepDown kann der Wert von iStep in- oder dekrementiert werden, wenn bEnable = TRUE, bError = FALSE, eCtrlMode = eHVACCtrlMode_Auto AND bBlock = FALSE ist.

Ist bEnable = TRUE, bError = FALSE, eCtrlMode = eHVACCtrlMode_Auto AND bBlock = FALSE und der Wert von iStep hat sich geändert, so werden die Verzögerungszeitglieder und das I-Übertragungsglied zurückgesetzt.

Ist bEnable = TRUE, bError = FALSE, eCtrlMode = eHVACCtrlMode_Auto, bBlock = FALSE AND iNumberOfStepInProfile > 0, der Ausgang des I-Übertragungsglieds rI_Ctrl =rIntegralHigh oder rIntegralLow und eine der Verzögerungszeiten tRemainingTimeDelayHigh / tRemainingTimeDelayLow =T#0s, so wird der Ausgang iStep folgendermaßen gesteuert:

iStep = iStep + 1 wenn

(rX < rW_Low AND iStep < iNumberOfStepInProfile AND NOT bDirection)
OR
(rX >= rW_High AND iStep < iNumberOfStepInProfile AND bDirection) ist.

iStep = iStep - 1 wenn

(rX < rW_Low AND iStep > 0 AND bDirection)
OR
(rX >= rW_High AND iStep > 0 AND NOT bDirection) ist, siehe Programmablaufplan

Ist bEnable = TRUE AND bError = FALSE AND eCtrlMode = eHVACCtrlMode_Auto AND bBlock=TRUE, so sind die internen Zeitglieder und das I-Übertragungsglied gesperrt und iStep = iNumberOfStepInProfile.

rI_Ctrl: Ausgang des I-Übertragungsgliedes.
Ist rI_Ctrl >= rIntegralHigh oder rIntegralLow und tRemainingTimeDelayHigh oder tRemainingTimeDelayLow = T#0s, so wird über iStep die Nummer der Stufen um eins erhöht oder erniedrigt. Anschließend wird das I-Übertragungsglied und die Zeitglieder für das Hoch- und Runterschalten zurück gesetzt, so dass das Hoch- oder Runterschalten neu gestartet werden, siehe Programmablaufplan.

rE: Regelabweichung mit der das interne I-Übertragungsglied arbeitet: rE = rW - rX

rW_High: rW_High := rW + rHysteresisHigh - obere Sollwertgrenze nach dessen Überschreitung durch rX zuerst das I-Übertragungsglied aktiviert wird und anschließend das Zeitglied der Verzögerungszeit udiSecDelayHigh, siehe Funktionsbeschreibung oder Verhalten verschiedener Variablen.

rW_Low: rW_Low := rW - rHysteresisLow - untere Sollwertgrenze nach dessen Unterschreitung durch rX zuerst das I-Übertragungsglied aktiviert wird und anschließend das Zeitglied der Verzögerungszeit udiSecDelayLow, siehe Funktionsbeschreibung oder Verhalten verschiedener Variablen.

b_rW_High: b_rW_High wird TRUE, wenn rX > rW_High ist.

b_rW_Low: b_rW_Low wird TRUE, wenn rX < rW_Low ist.

udiSecRT_DelayHigh: Verbleibende Zeit der Verzögerungszeit udiSecDelayHigh.

udiSecRT_DelayLow: Verbleibende Zeit der Verzögerungszeit udiSecDelayLow.

bError: Der Ausgang signalisiert mit einem TRUE, dass ein Fehler anliegt und ein falscher Parameter an der Variable iNumberOfStepInProfile anliegt. iStep wird konstant auf 0 gesetzt und das Enum eErrorCode zeigt die Fehlernummer an. Nach Behebung des Fehlers muss die Meldung bError mit bReset quittiert werden.

eErrorCode:Liefert bei einem gesetzten bError-Ausgang die Fehlernummer (siehe E_HVACErrorCodes). Folgender Fehler kann in diesem Funktionsbaustein vorkommen: eHVACErrorCodes_InvalidParam_NumberOfStepInProfile.

FB_HVACI_CtrlStep 9:

Um in der SPS an die Fehlernummern des Enums zu gelangen, kann eErrorCode einer Variablen vom Datentyp WORD zugewiesen werden. eHVACErrorCodes_Error_iNumberOfStepInProfil= 32

VAR_IN_OUT

rHysteresisHigh       : REAL;
rHysteresisLow        : REAL;
udiSecDelayHigh       : UDINT;
udiSecDelayLow        : UDINT;
udiSecTiHigh          : UDINT;
udiSecTiLow           : UDINT;
rIntegralHigh         : REAL;
rIntegralLow          : REAL;

rHysteresisHigh: Positiver Wert der oberen Grenze der Regelabweichung, siehe Funktionsbeschreibung oder Verhalten verschiedener Variablen. rW_High := rW + rHysteresisHigh. Die Variable wird persistent gespeichert. Voreingestellt auf 5.

rHysteresisLow: Positiver Wert der unteren Grenze der Regelabweichung, siehe Funktionsbeschreibung oder Verhalten verschiedener Variablen. rW_Low := rWrHysteresisLow. Die Variable wird persistent gespeichert. Voreingestellt auf 5.

udiSecDelayHigh: Verzögerungszeit (0..g_udiMaxSec) nach deren Ablauf iStep in- oder dekrementiert, siehe Funktionsbeschreibung oder Verhalten verschiedener Variablen. Die Variable wird persistent gespeichert. Voreingestellt auf 300s.

udiSecDelayLow: Verzögerungszeit (0..g_udiMaxSec) nach deren Ablauf iStep in- oder dekrementiert, siehe Funktionsbeschreibung oder Verhalten verschiedener Variablen. Die Variable wird persistent gespeichert. Voreingestellt auf 300s.

udiSecTiHigh: Integrationszeit (0..g_udiMaxSec) für das obere Limit des I-Übertragungsgliedes in Sekunden, siehe Funktionsbeschreibung oder Verhalten verschiedener Variablen. udiSecTiHigh muss > 0 sein. Ansonsten wird intern mit dem Default-Wert oder dem letzten gültigen Variablenwert gearbeitet. Die Variable wird persistent gespeichert. Voreingestellt auf 60s.

udiSecTiLow: Integrationszeit (0..g_udiMaxSec) für das untere Limit des I-Übertragungsgliedes, siehe Funktionsbeschreibung oder Verhalten verschiedener Variablen. udiSecTiLow muss > 0 sein. Ansonsten wird intern mit dem Default-Wert oder dem letzten gültigen Variablenwert gearbeitet. Die Variable wird persistent gespeichert. Voreingestellt auf 60s.

rIntegralHigh: Positiver Wert für das obere Limit an dem die Integration des I-Übertragungsgliedes angehalten wird (Anti-Reset-Windup-Maßnahme) und eine der Verzögerungszeiten startet, siehe Funktionsbeschreibung oder Verhalten verschiedener Variablen. Die Variable wird persistent gespeichert. Voreingestellt auf 15.

rIntegralLow: Positiver Wert für das untere Limit an dem die Integration des I-Übertragungsgliedes angehalten wird (Anti-Reset-Windup-Maßnahme) und eine der Verzögerungszeiten startet, siehe Funktionsbeschreibung oder Verhalten verschiedener Variablen. Die Variable wird persistent gespeichert. Voreingestellt auf 15.

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