FB_HVAC2PointCtrlSequence

FB_HVAC2PointCtrlSequence 1:

Anwendung

Dieser Funktionsbaustein stellt einen 2-Punkt-Sequenzregler dar. Er dient zur sequenziellen stufigen Regelung von unstetigen Aggregaten. Er kann z.B. bei Kesselkaskaden und bei Sequenzen von Kältemaschine oder Rückkühlwerken zur Regelung der Leistungsstufen verwendet werden. Für jede Leistungsstufe wird eine Instanz des Funktionsbausteins verwendet.

FB_HVAC2PointCtrlSequence 2:

Der FB_HVAC2PointCtrlSequence kann z.B. in einer Reglersequenz mit den anderen Sequenzreglern aus der TcHVAC.lib eingesetzt werden.

Je nach Anwendung kann es vorkommen, dass zum Erreichen einer Regelgröße mehrere Stellglieder (Stufen) verwendet werden, die in einer so genannten Regelsequenz arbeiten. In der unten dargestellten Regelsequenz werden vier Stufen über den jeweiligen Ausgang bOut = TRUE des FB_HVAC2PointCtrlSequence freigegeben. Bei aktiver Regelung ist immer nur einer der 2Punkt-Sequenzregler aktiv. Die Ausgänge der nicht aktiven 2-Punkt Sequenzregler werden fixiert. Das bedeutet in Abhängigkeit des Wirksinns bDirection des einzelnen Reglers entweder das bOut = TRUE oder FALSE ist.

Wenn die Wirkung der aktiven Stufe im eingeschalteten Zustand nicht ausreicht, schaltet der aktive 2Punktregler auf den in der Reglersequenz rechts oder links benachbarten 2Punkt-Sequenzregler über iCurrentSequence um. Dieser übernimmt damit die Regelung/Steuerung der Stufen. Der zuvor aktive Regler verharrt je nach Wirksinn in der Endlage bOut = TRUE oder FALSE.

Übertragungsfunktion des internen I-Übertragungsglied

Übertragungsfunktion des internen I-Übertragungsglied

FB_HVAC2PointCtrlSequence 3:

Mit der internen AND-Verknüpfung des I-Übertragungsglieds bestehend aus (tCtrl_I_Ti_HighLimit, tCtrl_I_Ti_LowLimit, rCtrl_I_HighLimit, rCtrl_I_LowLimit, st2PointCtrlSequence.rCtrl_I_Out) und den Verzögerungszeiten tDelayIncreaseSequence/tDelayDecreaseSequence wird das Umschalten in der Regelsequenz über iCurrentSequence nach rechts oder links gesteuert. Welcher Sequenzregler gerade aktiv ist, wird durch bActiveCtrl = TRUE (iCurrentSequence = iMyNumberInSequence) angezeigt.

Das I-Übertragungsglied und die Zeitglieder der Verzögerungszeiten tDelayIncreaseSequence/tDelayDecreaseSequence werden aktiviert, wenn

bActiveCtrl = TRUEAND
( (*Decrease*)
(
rX
> st2PointCtrlSequence.rW_MaxAND ((iMyNumberInSequence <= 1) = FALSE) AND
(
(bDirection = TRUEANDbOut = TRUE) OR
(bDirection = FALSEANDbOut = FALSE)
)
)
OR
( (*Increase*)
rX < st2PointCtrlSequence.rW_MinAND((iMyNumberInSequence >= iNumberOfSequences) = FALSE) AND
(
(bDirection = FALSEANDbOut = TRUE) OR
(bDirection = TRUEANDbOut = FALSE)
)
)
)

Nachdem das I-Übertragungsglied (st2PointCtrlSequence.rCtrl_I_Out Ausgang des internen I-Übertragungsgliedes) UND die Zeitglieder der Verzögerungszeiten tDelayIncreaseSequence/tDelayDecreaseSequence aktiviert wurden, wird das Umschalten in der Regelsequenz über iCurrentSequence nach rechts oder links folgendermaßen gesteuert:

iCurrentSequence = iCurrentSequence - 1 wenn st2PointCtrlSequence.rCtrl_I_Out <= st2PointCtrlSequence.rCtrl_I_LowLimitUNDst2PointCtrlSequence.tRemainingTimeDecreaseSequence = T#0s.

iCurrentSequence = iCurrentSequence + 1 wenn st2PointCtrlSequence.rCtrl_I_Out >= st2PointCtrlSequence.rCtrl_I_HighLimitUNDst2PointCtrlSequence.tRemainingTimeIncreaseSequence = T#0s.

Verhalten der Ausgänge von vier FB_HVAC2PointCtrlSequence in einer Regelsequenz

FB_HVAC2PointCtrlSequence 4:
FB_HVAC2PointCtrlSequence_1
FB_HVAC2PointCtrlSequence 5:

In der oben dargestellten Regelsequenz von vier FB_HVAC2PointCtrlSequence-Reglern darf es bei der Vergabe von iMyNumberInSequence (1,2,3,4) und iNumberOfSequence (4) keine Lücke in der Folge geben, da ansonsten das automatische Umschalten der Regler vom aktiven auf den in der Regelsequenz rechts oder links benachbarten Regler nicht funktioniert.

FB_HVAC2PointCtrlSequence 6:

Ist bEnable =FALSEODERbError = TRUEODER (e2PointCtrlMode =eHVAC2PointCtrlMode_On_BMSODEReHVAC2PointCtrlMode_On_OPODEReHVAC2PointCtrlMode_Off_BMSODEReHVAC2PointCtrlMode_Off_OP), so ist das automatische Umschalten der Regler vom aktiven auf den in der Regelsequenz rechts oder links benachbarten Regler weiterhin in Betrieb. Daher ist der Umschaltbetrieb immer aktiv. Mit bActiveCtrl = TRUE wird der aktive Funktionsbaustein angezeigt. Außerdem wird in Abhängigkeit der Regelabweichung rE das Rauf- oder Runterschalten der Sequenz über iCurrentSequence direkt ausgeführt. Wenn rX >= rW, dann ist iCurrentSequence = iCurrentSequence - 1. Wenn rX < rW, dann ist iCurrentSequence = iCurrentSequence + 1.

Anwendungsbeispiel

Download

Benötigte Bibliothek

tchvac.zip

TcHVAC.lib

VAR_INPUT

eDataSecurityType  : E_HVACDataSecurityType;
bSetDefault        : BOOL;                               
bEnable            : BOOL;
e2PointCtrlMode    : E_HVAC2PointCtrlMode;
bDirection         : BOOL;
rW                 : REAL;
rX                 : REAL;
iNumberOfSequences : INT;              1..32 
iMyNumberInSequence: INT;              1..32
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 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_HVAC2PointCtrlSequence 7: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 ist der 2-Punkt-Sequenzregler deaktiviert. Die Überprüfung der Variablen iNumberOfSequences, iMyNumberInSequence, iCurrentSequence und tTi_Ctrl_I ist dennoch aktiv. Falls dort ein Fehler auftritt, so wird dieses mit bError = TRUE angezeigt und kann nach Behebung des Fehlers mit bReset quittiert werden.

FB_HVAC2PointCtrlSequence 8:

Ist bEnable =FALSEODERbError = TRUEODER (e2PointCtrlMode =eHVAC2PointCtrlMode_On_BMSODEReHVAC2PointCtrlMode_On_OPODEReHVAC2PointCtrlMode_Off_BMSODEReHVAC2PointCtrlMode_Off_OP), so ist das automatische Umschalten der Regler vom aktiven auf den in der Regelsequenz rechts oder links benachbarten Regler weiterhin in Betrieb. Daher ist der Umschaltbetrieb immer aktiv. Mit bActiveCtrl = TRUE wird der aktive Funktionsbaustein angezeigt. Außerdem wird in Abhängigkeit der Regelabweichung rE das Rauf- oder Runterschalten der Sequenz über iCurrentSequence direkt ausgeführt. Wenn rX >= rW, dann ist iCurrentSequence = iCurrentSequence - 1. Wenn rX < rW, dann ist iCurrentSequence = iCurrentSequence + 1.

e2PointCtrlMode: Enum, welches die Betriebsart des 2-Punkt-Sequenzreglers vorgibt. Ist bEnable = TRUEANDbError = FALSE, so kann der Ausgang bOut direkt über das Enum ein- oder ausgeschaltet werden. Beim Starten der PLC ist e2PointCtrlMode = eHVAC2PointCtrlMode_Auto_BMS.
Das Rauf- oder Runterschalten der Sequenz über iCurrentSequence ist nicht abhängig von der Betriebsart e2PointCtrlMode des 2-Punkt-Sequenzreglers.

FB_HVAC2PointCtrlSequence 9:

Ist bEnable =FALSEODERbError = TRUEODER (e2PointCtrlMode =eHVAC2PointCtrlMode_On_BMSODEReHVAC2PointCtrlMode_On_OPODEReHVAC2PointCtrlMode_Off_BMSODEReHVAC2PointCtrlMode_Off_OP), so ist das automatische Umschalten der Regler vom aktiven auf den in der Regelsequenz rechts oder links benachbarten Regler weiterhin in Betrieb. Daher ist der Umschaltbetrieb immer aktiv. Mit bActiveCtrl = TRUE wird der aktive Funktionsbaustein angezeigt. Außerdem wird in Abhängigkeit der Regelabweichung rE das Rauf- oder Runterschalten der Sequenz über iCurrentSequence direkt ausgeführt. Wenn rX >= rW, dann ist iCurrentSequence = iCurrentSequence - 1. Wenn rX < rW, dann ist iCurrentSequence = iCurrentSequence + 1.

bDirection: Mit bDirection wird der Wirksinn des internen 2 Punkt Reglers bestimmt. FALSE = Heizbetrieb; TRUE = Kühlbetrieb.

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

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

iNumberOfSequences: Anzahl der Regler in der Sequenz. Ist iNumberOfSequences <= 0, so wird ein Fehler ausgegeben und mit bError = TRUE angezeigt. Die Anzahl der Teilnehmer in einer Sequenz wird von dem aktiven Sequenzregler über iCurrentSequence nicht überschritten.

iMyNumberInSequence: Die eigene Nummer des 2Punkt-Reglers in der Sequenz. Ist iMyNumberInSequence > iNumberOfSequencesORiMyNumberInSequence <= 0, so wird ein Fehler ausgegeben und mit bError = TRUE angezeigt.

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

VAR_OUTPUT

bOut                : BOOL;
bActiveCtrl         : BOOL;
b_rW_Max            : BOOL;
b_rW_Min            : BOOL;
rE                  : REAL;
e2PointCtrlState    : E_HVAC2PointCtrlMode;
st2PointCtrlSequence: ST_HVAC2PointCtrlSequence;
bError              : BOOL;
eErrorCode          : E_HVACErrorCodes;

bOut: Ausgang des 2-Punkt-Sequenzreglers.

bOut wird TRUE, wenn

1.
bEnable = TRUEANDbError = FALSEAND
( e2PointCtrlMode = eHVAC2PointCtrlMode_Auto_BMSORe2PointCtrlMode = eHVAC2PointCtrlMode_Auto_OP ) AND
bActiveCtrl
= TRUEAND
(
(bDirection = TRUEAND ( rX > st2PointCtrlSequence.rW_Max )) OR ( bDirection = FALSEAND ( rX < st2PointCtrlSequence.rW_Min ))
)

2.
bEnable = TRUEANDbError = FALSEAND
( e2PointCtrlMode = eHVAC2PointCtrlMode_Auto_BMSORe2PointCtrlMode = eHVAC2PointCtrlMode_Auto_OP ) AND
(
( bDirection = TRUEAND ( iCurrentSequence < iMyNumberInSequence )) OR ( bDirection = FALSEAND ( iCurrentSequence > iMyNumberInSequence ))
)

3.
bEnable = TRUEANDbError = FALSEAND
( e2PointCtrlMode = eHVAC2PointCtrlMode_On_BMSORe2PointCtrlMode = eHVAC2PointCtrlMode_On_OP )

bOut wird FALSE, wenn

1.
bEnable = FALSEORbError = TRUE

2.
bEnable = TRUEANDbError = FALSEAND
( e2PointCtrlMode = eHVAC2PointCtrlMode_Auto_BMSORe2PointCtrlMode = eHVAC2PointCtrlMode_Auto_OP ) AND
bActiveCtrl
= TRUEAND
(
( bDirection = TRUEAND ( rX < st2PointCtrlSequence.rW_Min )) OR ( bDirection = FALSEAND ( rX > st2PointCtrlSequence.rW_Max ))
)

3.
bEnable = TRUEANDbError = FALSEAND
( e2PointCtrlMode = eHVAC2PointCtrlMode_Auto_BMSORe2PointCtrlMode = eHVAC2PointCtrlMode_Auto_OP ) AND
(
( bDirection = TRUEAND ( iCurrentSequence > iMyNumberInSequence )) OR ( bDirection = FALSEAND ( iCurrentSequence < iMyNumberInSequence ))
)

4.
bEnable = TRUEANDbError = FALSEAND
( e2PointCtrlMode = eHVAC2PointCtrlMode_Off_BMSORe2PointCtrlMode = eHVAC2PointCtrlMode_Off_OP )

bActiveCtrl: bActiveCtrl zeigt mit einem TRUE an, dass der Funktionsbaustein der aktive in der Sequenz ist. bActiveCtrl wird TRUE, wenn bEnable = TRUE, bError = FALSEANDiCurrentSequence = iMyNumberInSequence ist.

b_rW_Max: b_rW_Max wird TRUE, wenn rX > st2PointCtrlSequence.rW_Max ist.

b_rW_Min: b_rW_Min wird TRUE, wenn rX < st2PointCtrlSequence.rW_Min ist.

rE: Regelabweichung: rE = rW - rX

e2PointCtrlState: Enum, welches den Status der Betriebsart e2PointCtrlModedes 2-Punkt-Sequenzreglers anzeigt

st2PointCtrlSequence: Die Struktur zeigt diverse Status, Ein- und Ausgänge des Funktionsbausteins an. Außerdem werden die verbleibenden Zeiten der VAR_IN_OUT-Variablen tDelayIncreaseSequence und tDelayDecreaseSequence ausgegeben, wenn deren Funktion aktiv ist. Über st2PointCtrlSequence.rCtrl_I_Out wird das Ausgangssignal des internes I-Übertragungsglied angezeigt.

st2PointCtrlSequence.tRemainingTimeIncreaseSequence: Verbleibende Zeit der Verzögerungszeit tDelayIncreaseSequence.

st2PointCtrlSequence.tRemainingTimeDecreaseSequence: Verbleibende Zeit der Verzögerungszeit tDelayDecreaseSequence.

st2PointCtrlSequence.rX: Status von rX

st2PointCtrlSequence.rW_Max: st2PointCtrlSequence.rW_Max := rW + rW_HighLimit - obere Sollwertgrenze nach dessen Überschreitung durch rX das interne I-Übertragungsglied und die Zeitglieder der Verzögerungszeiten tDelayIncreaseSequence/tDelayDecreaseSequence aktiviert bzw. deaktiviert werden können, siehe Übertragungsfunktion des internen I-Übertragungsglied in diesem Dokument

st2PointCtrlSequence.rW_Min: st2PointCtrlSequence.rW_Min := rW - rW_LowLimit - untere Sollwertgrenze nach dessen Unterschreitung durch rX das interne I-Übertragungsglied und die Zeitglieder der Verzögerungszeiten tDelayIncreaseSequence/tDelayDecreaseSequence aktiviert bzw. deaktiviert werden können, siehe Übertragungsfunktion des internen I-Übertragungsglied in diesem Dokument

st2PointCtrlSequence.rE: Regelabweichung: rE = rW - rX

st2PointCtrlSequence.rCtrl_I_HighLimit: Oberer Grenzwert an dem die Integration des internen I-Übertragungsgliedes angehalten wird. st2PointCtrlSequence.rCtrl_I_HighLimit = rCtrl_I_HighLimit

st2PointCtrlSequence.rCtrl_I_LowLimit: Unterer Grenzwert an dem die Integration des internen I-Übertragungsgliedes angehalten wird. st2PointCtrlSequence.rCtrl_I_Low = rCtrl_I_LowLimit * (-1)

st2PointCtrlSequence.rCtrl_I_Out: Ausgang des internen I-Übertragungsgliedes.
Ist st2PointCtrlSequence.rCtrl_I_Out = st2PointCtrlSequence.rCtrl_I_HighLimitODER
st2PointCtrlSequence.rCtrl_I_LowLimit
UND
entweder st2PointCtrlSequence.tRemainingTimeIncreaseSequenceODER
st2PointCtrlSequence.tRemainingTimeDecreaseSequence
= T#0sUND
ist bActive = TRUE, so wird die Nummer des aktiven Reglers iCurrentSequence in Abhängigkeit von bDirection um eins erhöht oder erniedrigt.

st2PointCtrlSequence.e2PointCtrlState: siehe e2PointCtrlState

st2PointCtrlSequence.iNumberOfSequences: siehe iNumberOfSequences

st2PointCtrlSequence.iMyNumberInSequence: siehe iMyNumberInSequence

st2PointCtrlSequence.iCurrentSequence: siehe iCurrentSequence

st2PointCtrlSequence.bEnable: siehe bEnable

st2PointCtrlSequence.bError: siehe bError

st2PointCtrlSequence.bOut: siehe bOut

st2PointCtrlSequence.bActiveCtrl: siehe bActiveCtrl

st2PointCtrlSequence.b_rW_Max: siehe b_rW_Max

st2PointCtrlSequence.b_rW_Min: siehe b_rW_Min

bError: Der Ausgang signalisiert mit einem TRUE, dass ein Fehler anliegt und ein falscher Parameter an einer der Variablen iNumberOfSequences, iMyNumberInSequence oder iCurrentSequence anliegt. Nach Behebung des Fehlers muss die Meldung bError mit bReset quittiert werden. Das Enum eErrorCode zeigt die Fehlernummer an. Ist bError = TRUE, so wird der Ausgang bOut = FALSE.

FB_HVAC2PointCtrlSequence 10:

Ist bEnable =FALSEODERbError = TRUEODER (e2PointCtrlMode =eHVAC2PointCtrlMode_On_BMSODEReHVAC2PointCtrlMode_On_OPODEReHVAC2PointCtrlMode_Off_BMSODEReHVAC2PointCtrlMode_Off_OP), so ist das automatische Umschalten der Regler vom aktiven auf den in der Regelsequenz rechts oder links benachbarten Regler weiterhin in Betrieb. Daher ist der Umschaltbetrieb immer aktiv. Mit bActiveCtrl = TRUE wird der aktive Funktionsbaustein angezeigt. Außerdem wird in Abhängigkeit der Regelabweichung rE das Rauf- oder Runterschalten der Sequenz über iCurrentSequence direkt ausgeführt. Wenn rX >= rW, dann ist iCurrentSequence = iCurrentSequence - 1. Wenn rX < rW, dann ist iCurrentSequence = iCurrentSequence + 1.

eErrorCode:Liefert bei einem gesetzten bError-Ausgang die Fehlernummer. Folgende Fehler können in diesem Funktionsbaustein vorkommen: eHVACErrorCodes_Error_iMyNumberInSequence, eHVACErrorCodes_Error_iNumberOfSequences, eHVACErrorCodes_Error_iCurrentSequences

FB_HVAC2PointCtrlSequence 11:

Um in der SPS an die Fehlernummern des Enums zu gelangen, kann eErrorCode einer Variablen vom Datentyp WORD zugewiesen werden.eHVACErrorCodes_Error_iNumberOfSequences = 27 eHVACErrorCodes_Error_iMyNumberInSequence = 28 eHVACErrorCodes_Error_iCurrentSequences = 29

VAR_IN_OUT

rW_HighLimit            : REAL;
rW_LowLimit             : REAL;
tDelayIncreaseSequence  : TIME;
tDelayDecreaseSequence  : TIME;
tCtrl_I_Ti_HighLimit    : TIME;
tCtrl_I_Ti_LowLimit     : TIME;
rCtrl_I_HighLimit       : REAL;
rCtrl_I_LowLimit        : REAL;
iCurrentSequence        : INT;

rW_HighLimit: Positiver Wert der oberen Grenze der Regelabweichung. st2PointCtrlSequence.rW_Max =rW_Max := rW + rW_HighLimit.
Die Variable wird persistent gespeichert. Voreingestellt auf 5.

rW_LowLimit: Positiver Wert der unteren Grenze der Regelabweichung. st2PointCtrlSequence.rW_Min =rW_Min := rW - rW_LowLimit.
Die Variable wird persistent gespeichert. Voreingestellt auf 5.

tDelayIncreaseSequence: Verzögerungszeit nach deren Ablauf iCurrentSequence um 1 erhöht wird, siehe Übertragungsfunktion des internen I-Übertragungsglied in diesem Dokument. Die Variable wird persistent gespeichert. Voreingestellt auf 5min.

tDelayDecreaseSequence: Verzögerungszeit nach deren Ablauf iCurrentSequence um 1 erniedrigt wird, siehe Übertragungsfunktion des internen I-Übertragungsglied in diesem Dokument. Die Variable wird persistent gespeichert. Voreingestellt auf 5min.

tCtrl_I_Ti_HighLimit: Integrationszeit für das obere Limit des internen I-Übertragungsgliedes, siehe Übertragungsfunktion des internen I-Übertragungsglied in diesem Dokument. tCtrl_I_Ti_HighLimit muss > T#0s sein. Die Variable wird persistent gespeichert. Voreingestellt auf 10min.

tCtrl_I_Ti_LowLimit: Integrationszeit für das untere Limit des internen I-Übertragungsgliedes, siehe Übertragungsfunktion des internen I-Übertragungsglied in diesem Dokument. tCtrl_I_Ti_LowLimit muss > T#0s sein. Die Variable wird persistent gespeichert. Voreingestellt auf 10min.

rCtrl_I_HighLimit: Positiver Wert für das obere Limit an dem die Integration des internen I-Übertragungsgliedes angehalten wird (ARW-Maßnahme, anti-reset-windup), siehe Übertragungsfunktion des internen I-Übertragungsglied in diesem Dokument. Die Variable wird persistent gespeichert. Voreingestellt auf 10.

rCtrl_I_LowLimit: Negativer Wert für das untere Limit an dem die Integration des internen I-Übertragungsgliedes angehalten wird (ARW-Maßnahme, anti-reset-windup), siehe Übertragungsfunktion des internen I-Übertragungsglied in diesem Dokument. Die Variable wird persistent gespeichert. Voreingestellt auf -10.

iCurrentSequence: Nummer des aktiven Reglers in der Sequenz (0..32). Die Anzahl der Teilnehmer in einer Sequenz iNumberOfSequences wird von dem aktiven Sequenzregler über iCurrentSequence nicht überschritten.
Ist iCurrentSequence > iNumberOfSequences oder iCurrentSequence < 0, so wird mit bError = TRUE ein Fehler angezeigt.
Das Rauf- oder Runterschalten der Sequenz über iCurrentSequence in Abhängigkeit der Regelabweichung rE findet dann statt, wenn der Funktionsbaustein aktiv in der Sequenz ist bActiveCtrl = TRUE.

1. iCurrentSequence = iCurrentSequence - 1 wenn st2PointCtrlSequence.rCtrl_I_Out >= st2PointCtrlSequence.rLimit_Ctrl_I_MinUNDst2PointCtrlSequence.tRemainingTimeDecreaseSequence = T#0sUNDbActiveCtrl = TRUE

2. iCurrentSequence = iCurrentSequence + 1 wenn st2PointCtrlSequence.rCtrl_I_Out >= st2PointCtrlSequence.rLimit_Ctrl_I_MaxUNDst2PointCtrlSequence.tRemainingTimeIncreaseSequence = T#0sUNDbActiveCtrl = TRUE

FB_HVAC2PointCtrlSequence 12:

iCurrentSequence darf in einer Regelsequenz von außen nicht kontinuierlich beschrieben werden damit das automatische Umschalten der Regler vom aktiven auf den in der Regelsequenz rechts oder links benachbarten Regler funktioniert. Beim Starten einer Regelsequenz muss festgelegt werden welcher Sequenzregler aktiv ist. iCurrentSequence muss dazu für einen SPS-Zyklus beschrieben werden und > 0 und <= iNumberOfSequences sein.

FB_HVAC2PointCtrlSequence 13:

Ist bEnable =FALSEODERbError = TRUEODER (e2PointCtrlMode =eHVAC2PointCtrlMode_On_BMSODEReHVAC2PointCtrlMode_On_OPODEReHVAC2PointCtrlMode_Off_BMSODEReHVAC2PointCtrlMode_Off_OP), so ist das automatische Umschalten der Regler vom aktiven auf den in der Regelsequenz rechts oder links benachbarten Regler weiterhin in Betrieb. Daher ist der Umschaltbetrieb immer aktiv. Mit bActiveCtrl = TRUE wird der aktive Funktionsbaustein angezeigt. Außerdem wird in Abhängigkeit der Regelabweichung rE das Rauf- oder Runterschalten der Sequenz über iCurrentSequence direkt ausgeführt. Wenn rX >= rW, dann ist iCurrentSequence = iCurrentSequence - 1. Wenn rX < rW, dann ist iCurrentSequence = iCurrentSequence + 1.