FB_BA_SeqLink
Dieser Baustein stellt die übergeordnete Steuereinheit dar, die vorgibt, welcher Sequenzregler gerade aktiv ist.
Der Datenaustausch zwischen dem Steuerbaustein FB_BA_SeqLink und den Sequenzreglern FB_BA_SeqCtrl erfolgt über die Strukturvariable stSeqLink.
Funktionsbeschreibung
Startverhalten
Eine TRUE-Signal am Eingang bEn aktiviert die komplette Sequenzregelung. Der Baustein wird zunächst denjenigen Sequenzregler aktiv schalten, welcher an usiStartSeq benannt ist. Alle anderen Sequenzregler richten Ihren Ausgabewert nach der Rangordnung des aktiven Reglers, siehe FB_BA_SeqCtrl. Der Startregler wird beim Sequenz-Start einmalig auf seinen Wert lrSyncVal gesetzt.
Um ein "vernünftiges" Einregeln der gesamten Regelsequenz zu ermöglichen, wird der Startregler mindestens für die Zeit udiIniSwiOvrDly lang aktiv gehalten, d.h. in dieser Zeit findet kein Umschalten auf eine anderen Regler dieser Sequenz statt.
Umschaltverhalten
Erreicht ein Sequenzregler seinem Maximal- oder Minimalwert, so wird je nach Regler-Wirksinn auf den nächsten Regler in der Rangfolge umgeschaltet, sofern der Istwert den Sollwert des nächsten Reglers unterschreitet bzw. überschreitet.
Dabei werden 4 Fälle unterschieden:
- Der noch aktive Regler hat direkten Wirksinn (Kühlen) und befindet sich auf seinem Maximalwert: Es wird in der Rangfolge der nächst höhere Regler gewählt, wenn der Istwert den Sollwert dieses Reglers überschreitet.
- Der noch aktive Regler hat direkten Wirksinn (Kühlen) und befindet sich auf seinem Minimalwert: Es wird in der Rangfolge der nächst niedrigere Regler gewählt, wenn der Istwert den Sollwert dieses Reglers unterschreitet.
- Der noch aktive Regler hat indirekten Wirksinn (Heizen) und befindet sich auf seinem Maximalwert: Es wird in der Rangfolge der nächst niedrigere Regler gewählt, wenn der Istwert den Sollwert dieses Reglers unterschreitet.
- Der noch aktive Regler hat indirekten Wirksinn (Heizen) und befindet sich auf seinem Minimalwert: Es wird in der Rangfolge der nächst höhere Regler gewählt, wenn der Istwert den Sollwert dieses Reglers überschreitet.
Abschaltverhalten
Wird einem Regler der Sequenz seine Freigabe weggenommen oder geht er in Störung, so ist er für die gesamte Sequenz nicht mehr verfügbar.
Handelt es sich dabei nicht um den vorher aktiven Regler, so kann es, je nachdem welche Stellgröße dieser Regler ausgegeben hat, zu einer Temperaturänderung kommen, die durch die Reglersequenz nach Möglichkeit wieder ausgeglichen wird.
Handelt es sich jedoch um den aktiven Regler, dessen Freigabe weg genommen wird, so muss auf den nächst "sinnvollen" umgeschaltet werden. Der Sequenz-Link-Baustein geht dabei nach folgenden Regeln vor:
- Der gerade deaktivierte Regler hatte direkten Wirksinn (Kühlen)
- Es gibt einen betriebsbereiten Regler mit höherer Ordnungszahl → auf den nächst höheren betriebsbereiten Regler schalten. Es gibt nur einen betriebsbereiten Regler mit niedrigerer Ordnungszahl → auf den nächst niedrigeren betriebsbereiten Regler schalten. Es gibt keinen betriebsbereiten Regler mehr → Störmeldung.
- Der gerade deaktivierte Regler hatte indirekten Wirksinn (Heizen)
- Es gibt einen betriebsbereiten Regler mit niedrigerer Ordnungszahl → auf den nächst niedrigeren betriebsbereiten Regler schalten. Es gibt nur einen betriebsbereiten Regler mit höherer Ordnungszahl → auf den nächst höheren betriebsbereiten Regler schalten. Es gibt keinen betriebsbereiten Regler mehr → Störmeldung.
Zuschaltverhalten
Wird ein Regler der Sequenz hinzugefügt, so ist er in jedem Fall zunächst inaktiv und wird, je nach Wirksinn und Positionierung im Sinne der Sequenzreihenfolge, seinen Minimal- bzw. Maximalwert ausgeben. Die daraus resultierende Temperaturänderung wird durch die Reglersequenz nach Möglichkeit wieder ausgeglichen.
Fehlererkennung
Folgende Fehler werden durch den Sequenz-Link-Baustein erkannt:
- Es existieren mindestens zwei Regler mit derselben Ordnungszahl, die der Sequenz zugeordnet sind.
- Es wurde in der Reglerfolge mehr als nur ein Wechsel von indirektem auf direkten Wirksinn (Heizen auf Kühlen) festgestellt.
- In der Reglerfolge sind die Sollwerte der Regler nicht monoton steigend.
- Der Regler, welcher durch den Eingang usiStartSeq als Startregler definiert wurde, existiert nicht bzw. ist nicht dieser Sequenz zugeordnet (es wird dann der nächstgültige Regler gewählt).
- Es wurde ein Startregler mit der Ordnungszahl 0 bzw. größer der maximal zulässigen Anzahl Regler festgelegt (es wird dann der nächstgültige Regler gewählt).
Nur der erste Fehler lässt den Sequenz-Link-Baustein in Störung gehen bzw. sperrt seine Abarbeitung (=FALSE). bSeqActv Keiner der zugehörigen Regler ist dann mehr aktiv und alle Regler geben die Stellgröße "0" aus. Der Baustein ist nicht aktiv:
Alle anderen Fehler werden zwar auch durch bErr=TRUE angezeigt, haben jedoch eine Fehlernummer (udiErrId), die sie lediglich als Warnung kennzeichnen.
Ein-Ausgänge
VAR_INPUT
bEn : BOOL;
usiStartCtrl : USINT;
udiIniSwiOvrDly : UDINT;
lrX : LREAL
bEn: Aktivierung des Sequenzreglers
usiStartSeq: Ordnungszahl des Sequenzreglers, welcher bei der Gesamt-Aktivierung der Start-Regler sein soll.
udiIniSwiOvrDly: Wie eingangs bereits erwähnt, benötigt eine Sequenzregelung am Anfang eine gewisse Zeit um sich mit dem Startregler einzuregeln. Der Startregler bleibt für mindestens die Zeit udiIniSwiOvrDly [s] in der Sequenz aktiv, bis andere Kriterien auf einen anderen Regler schalten lassen. Siehe auch "Startverhalten" und "Umschaltverhalten".
lrX: Istwert der Regelung
VAR_IN_OUT
stSeqLink : ST_BA_SeqLink;
stSeqLink: Daten- und Befehlsstruktur zwischen den einzelnen Sequenzreglern und dem Steuerbaustein FB_BA_SeqLink . Über diese Struktur empfängt der Sequenz-Link-Baustein alle relevanten Daten der Sequenzregler und teilt diesen gleichzeitig mit, welcher der aktive ist.
Tragen mehrere Sequenzregler dieselbe Nummer (usiMyNum), so wird dies erkannt und als Fehler sowohl am Sequenzregler als auch am Steuerbaustein ausgegeben. |
VAR_OUTPUT
usiCurCtrl : USINT;
bSeqActv : BOOL;
bNotRead : BOOL;
bNoneOp : BOOL;
udiRemTiIniSwiOvrDly : UDINT;
bErr : BOOL;
udiErrId : UDINT;
udiErrArg : UDINT;
usiCurCtrl: Ordnungszahl des aktuell aktiven Sequenzreglers. Ist keiner aktiv, so wird hier 0 ausgegeben.
bSeqActv: Der Sequenzbaustein ist freigegeben (bEn) und hat keinen abschaltenden Fehler, siehe Fehlererkennung.
bNotRead: Jeder Sequenzregler übermittelt dem Steuerbaustein Daten über die Struktur stSeqLink. Solange noch keine Daten übermittelt wurden - dies ist beim Einschalten der SPS der Fall - steht dieser Ausgang auf TRUE.
bNoneOp: Dieser Ausgang wird auf TRUE geschaltet, wenn keiner der Sequenzregler seine eigene Freigabe (bEn=TRUE) hat.
bErr: Dieser Ausgang wird auf TRUE geschaltet, wenn die eingetragenen Parameter fehlerhaft sind. Dieser Baustein stellt im Fehlerfall seine Abarbeitung u.U. nicht ein, siehe Fehlererkennung.
udiErrId / udiErrArg: Enthält die Fehlernummer und das Fehlerargument. Siehe Fehlercodes.
Voraussetzungen
Entwicklungsumgebung | Zielsystem | erforderliche Bibliothek | erforderliches Supplement |
---|---|---|---|
TwinCAT 2.11 R3/x64 | PC/CX | TcBA-Bibliothek ab V1.0.0 | TS8040 | TwinCAT Building Automation ab V1.0.0 |
Siehe auch: