FB_HVACMUX_INT_16

Der Funktionsbaustein beinhaltet zwei verschiedene Typen von Multiplexern, jeweils für die Betriebsart eHVACCtrlMode_Auto bzw. eHVACCtrlMode_Manual. Diese Auswahl wird mit Hilfe des Enums eCtrlMode vorgenommen.
Es müssen vorab die folgenden Bedingungen erfüllt sein:
bEnable = TRUE AND bError = FALSE
Bei eCtrlMode = eHVACCtrlMode_Auto wird durch die Variable bDirection bestimmt, ob bei der Verwendung des Eingangs bEdgeNewValue die Ausgangsvariable iValueNumber in- bzw. dekrementiert wird. Wenn bDirection = FALSE ist, wird inkrementiert, wenn bDirection = TRUE ist, wird dekrementiert.
Bei eCtrlMode = eHVACCtrlMode_Manual wird durch den Wert der Variable iManualValue der Ausgang iValueNumber bestimmt. Die Variablen iNumberOfValues, bEdgeNewValue und bDirection werden in dieser Betriebsart nicht berücksichtigt.
Der Ausgang iValueNumber zeigt immer die Nummer der Variablen iValueX an, deren Inhalt in der Ausgangsvariablen iValueOut ausgegeben wird.
Beipiele zu eCtrlMode = eHVACCtrlMode_Auto
- Ist bDirection = FALSE AND iNumberOfValues = 12 und es liegt eine steigende Flanke an bEdgeNewValue an, dann wird iValueNumber inkrementiert. Ist iValueNumber = 6, so ist iValueOut = iValue6. Ist iValueNumber= iNumberOfValues(12) und es liegt eine steigende Flanke an bEdgeNewValue an, dann ist iValueNumber = 1 und somit iValueOut = iValue1.
- Ist bDirection = TRUE AND iNumberOfValues = 8 und es liegt eine steigende Flanke an bEdgeNewValue an, dann wird iValueNumber dekrementiert. Ist iValueNumber = 5, so ist iValueOut = iValue5. Ist iValueNumber= 1 und es liegt eine steigende Flanke an bEdgeNewValue an, dann ist iValueNumber = iNumberOfValues(8) und somit iValueOut = iValue8.
Das Startverhalten der Ausgänge iValueNumber und iValueOut sieht folgendermaßen aus:
- Ist bDirection = FALSE AND iNumberOfValues > 0, so ist iValueNumber = 1 und iValueOut = iValue1.
- Ist bDirection = TRUE AND iNumberOfValues = 12, so ist iNumberOfValues = 12 und iValueOut = iValue12.
Beispiele zu eCtrlMode = eHVACCtrlMode_Manual
- Der Wert von iValueNumber wird von iManualValue bestimmt. Ist iManualValue = 7, so ist iValueNumber = 7 und dieses bedeutet dann, dass iValueOut = iValue7 ist.
Das Startverhalten der Ausgänge iValueNumber und iValueOut sieht folgendermaßen aus:
- Ist iManualValue = 13, so ist iValueNumber = 13 und iValueOut = iValue13.
- Ist iManualValue = 0, so ist iValueNumber = 0 und iValueOut = 0.
Hinweis | |
Eine sich häufig ändernde Variable darf nicht an die VAR_IN_OUT-Variablen iValue1-8 angelegt werden, wenn eDataSecurityType = eHVACDataSecurityType_Persistentist. Dieses würde zu einem frühzeitigen Verschleiß des Speichermediums der Steuerung führen. Wenn sich die VAR_IN_OUT-Variablen iValue1-8 häufig ändern und nicht persistent abgelegt werden sollen, muss eDataSecurityType = eDataSecurityType_Idle sein. |
VAR_INPUT
eDataSecurityType : E_HVACDataSecurityType;
bEnable : BOOL;
iNumberOfValues : INT;
bEdgeNewValue : BOOL;
bDirection : BOOL;
eCtrlMode : E_HVACCtrlMode;
iManualValue : INT;
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. |
bEnable: Über ein TRUE wird der Funktionsbaustein freigegeben. Ist bEnable = FALSE, so wird iValueOut und iValueNumber konstant auf 0 gesetzt.
iNumberOfValues: Gibt die Anzahl der Variablen iValue1-16 an, die über iValueOut ausgegeben werden können. Ist iNumberOfValues = 8, so bewegt sich der Ausgang iValueNumber zwischen 1 und 8. Es werden dann für die Ausgabe iValueOut die Variablen iValue1 bis iValue8 berücksichtigt (siehe Funktionsbeschreibung MUX).
iNumberOfValues bestimmt das Startverhalten der Ausgänge iValueOut und iValueNumber.
iNumberOfValues wird in der Betriebsart eCtrlMode = eHVACCtrlMode_Manual nicht berücksichtigt (siehe Funktionsbeschreibung MUX).
iNumberOfValues darf 1 nicht unterschreiten und 16 nicht überschreiten. Ansonsten wird mit bError = TRUE ein Fehler angezeigt und die Abarbeitung des Funktionsbausteins wird gestoppt.
bEdgeNewValue: Liegt eine steigende Flanke an bEdgeNewValue, dann wird iValueNumber in- oder dekrementiert.
Ist bEnable = TRUE AND bError = FALSE AND eCtrlMode = eHVACCtrlMode_Auto AND bDirection = FALSE AND iNumberOfValues > 0 und es liegt eine steigende Flanke an bEdgeNewValue, dann wird iValueNumber inkrementiert. Ist iValueNumber = 6, so ist iValueOut = iValue6. Ist iValueNumber= iNumberOfValues und es liegt eine steigende Flanke an bEdgeNewValue an, dann ist iValueNumber = 1 und somit iValueOut = iValue1.
Ist bEnable = TRUE AND bError = FALSE AND eCtrlMode = eHVACCtrlMode_Auto AND bDirection = TRUE AND iNumberOfValues = 12 und es liegt eine steigende Flanke an bEdgeNewValue, dann wird iValueNumber dekrementiert. Ist iValueNumber = 5, so ist iValueOut = iValue5. Ist iValueNumber= 1 und es liegt eine steigende Flanke an bEdgeNewValue an, dann ist iValueNumber = iNumberOfValues(12) und somit iValueOut = iValue6.
bEdgeNewValue wird in der Betriebsart eCtrlMode = eHVACCtrlMode_Manual nicht berücksichtigt.
bDirection: bDirection bestimmt den Wirksinn des Funktionsbausteins.
bDirection = FALSE bedeutet, dass iValueNumber in aufsteigender Form von 1 nach iNumberOfValues inkrementiert und dadurch den Ausgabewert iValueOut bestimmt (siehe Funktionsbeschreibung MUX).
bDirection = TRUE bedeutet, dass iValueNumber in absteigender Form von iNumberOfValues nach 1 dekrementiert wird und dadurch den Ausgabewert iValueOut bestimmt (siehe Funktionsbeschreibung MUX).
bDirection wird in der Betriebsart eCtrlMode = eHVACCtrlMode_Manual nicht berücksichtigt.
eCtrlMode: Mittels des Enums wird die Betriebsart des Funktionsbausteins vorgegeben.
Ist die Betriebsart eCtrlMode = eHVACCtrlMode_Auto, so wird die Variable iManualValue nicht berücksichtigt (siehe E_HVACCtrlMode).
Ist die Betriebsart eCtrlMode = eHVACCtrlMode_Manual, so werden die Variablen iNumberOfValues, bEdgeNewValue und bDirection nicht berücksichtigt.
iManualValue: Ist die Betriebsart eCtrlMode = eHVACCtrlMode_Manual AND bEnable = TRUE AND bError = FALSE AND iManualValue = 15, so ist iValueNumber = 15. Der Inhalt der Variable iValue15 wird dann über iValueOut ausgegeben (siehe Funktionsbeschreibung MUX).
iManualValue wird nur in der Betriebsart eCtrlMode = eHVACCtrlMode_Manual berücksichtigt. Der Wert von iValueNumber wird von iManualValue bestimmt. iManualValue sollte im Bereich von 0 und 16 liegen. Unterschreitet iManualValue den Wert 0, so wird über iValueNumber eine 0 ausgegeben. Überschreitet iManualValue den Wert 16, so wird über iValueNumber eine 16 ausgegeben. Ist iManualValue = 0, so ist iValueNumber = 0 und iValueOut = 0.
VAR_OUTPUT
iValueOut : INT;
bActive : BOOL;
bEdgeNewValueOut : BOOL;
iValueNumber : INT;
bError : BOOL;
eErrorCode : E_HVACErrorCodes;
iValueOut: Über iValueOut wird der Wert der Variablen iValue1-16 ausgegeben.
Ist bEnable = TRUE AND bError = FALSE AND eCtrlMode = eHVACCtrlMode_Auto AND bDirection = FALSE AND iNumberOfValues > 0 und es liegt eine steigende Flanke an bEdgeNewValue, dann wird iValueNumber inkrementiert. Ist iValueNumber = 6, so ist iValueOut = iValue6. Ist iValueNumber= iNumberOfValues und es liegt eine steigende Flanke an bEdgeNewValue an, dann ist iValueNumber = 1 und somit iValueOut = iValue1.
Ist bEnable = TRUE AND bError = FALSE AND eCtrlMode = eHVACCtrlMode_Auto AND bDirection = TRUE AND iNumberOfValues = 12 und es liegt eine steigende Flanke an bEdgeNewValue, dann wird iValueNumber dekrementiert. Ist iValueNumber = 5, so ist iValueOut = iValue5. Ist iValueNumber= 1 und es liegt eine steigende Flanke an bEdgeNewValue an, dann ist iValueNumber = iNumberOfValues(12) und somit iValueOut = iValue7.
Ist bEnable = TRUE AND bError = FALSE AND eCtrlMode = eHVACCtrlMode_Manual, so wird der Wert von iValueNumber von iManualValue bestimmt. Ist iManualValue = 7, so ist iValueNumber = 7 und dieses bedeutet dann, dass iValueOut = iValue7 ist.
Das Startverhalten des Ausgangs iValueOut sieht folgendermaßen aus, wenn bEnable = TRUE AND bError = FALSE AND eCtrlMode = eHVACCtrlMode_Auto AND bDirection = FALSE AND iNumberOfValues > 0, so ist iValueNumber = 1 und iValueOut = iValue1.
- eCtrlMode = eHVACCtrlMode_Auto AND bDirection = TRUE AND iNumberOfValues = 12, so ist iNumberOfValues = 12 und iValueOut = iValue12.
- eCtrlMode = eHVACCtrlMode_Manual AND iManualValue = 13, so ist iValueNumber = 13 und iValueOut = iValue13.
- eCtrlMode = eHVACCtrlMode_Manual AND iManualValue = 0, so ist iValueNumber = 0 und iValueOut = 0.
bActive: bActive wird TRUE, wenn
1. bEnable = TRUE AND bError = FALSE AND eCtrlMode = eHVACCtrlMode_Auto ist.
2. bEnable = TRUE AND bError = FALSE AND eCtrlMode = eHVACCtrlMode_Manual AND iManualValue > 0 ist.
bEdgeNewValueOut: Ist für einen SPS-Zyklus TRUE, wenn bEnable = TRUE AND bError = FALSE AND iValueNumber seinen Wert ändert.
iValueNumber: Der Ausgang iValueNumber zeigt immer die Nummer der Variablen iValueX an, deren Inhalt in der Ausgangsvariablen iValueOut ausgegeben wird.
Bei eCtrlMode = eHVACCtrlMode_Auto wird durch die Variable bDirection bestimmt, ob bei der Verwendung des Eingangs bEdgeNewValue die Ausgangsvariable iValueNumber in- bzw. dekrementiert wird. Wenn bDirection = FALSE ist, wird inkrementiert, wenn bDirection = TRUE ist, wird dekrementiert.
Bei eCtrlMode = eHVACCtrlMode_Manual wird der Wert von iValueNumber von iManualValue bestimmt.
bError: Der Ausgang signalisiert mit einem TRUE, dass ein Fehler anliegt und ein falscher Parameter an der Variable iNumberOfValues anliegt. iValueOut und iValueNumber werden konstant auf 0 gesetzt und das Enum eErrorCode zeigt die Fehlernummer an. Nach Behebung des Fehlers muss die Meldung bError nicht quittiert werden.
eErrorCode: Liefert bei einem gesetzten bError-Ausgang die Fehlernummer. Folgender Fehler kann in diesem Funktionsbaustein vorkommen:
eHVACErrorCodes_InvalidParam_iNumberOfValues: Es liegt ein fehlerhafter Wert an iNumberOfValues an. iNumberOfValues darf 1 nicht unterschreiten und 8 nicht überschreiten.
![]() | Um in der SPS an die Fehlernummern des Enums zu gelangen, kann eErrorCode einer Variablen vom Datentyp WORD zugewiesen werden. |
VAR_IN_OUT
iValue1-16 : INT;
iValue1-16: Mittels der Variablen iValue1 bis iValue16 wird der Wert der Ausgangsvariablen iValueOut bestimmt. Ist iValueNumber = 6, so ist iValueOut = iValue6.
Ist iNumberOfValues = 8, so bewegt sich der Ausgang iValueNumber zwischen 1 und 8. Es werden dann für die Ausgabe iValueOut die Variablen iValue1 bis iValue8 berücksichtigt, wenn die Betriebsart eCtrlMode = eHVACCtrlMode_Auto ist (siehe Funktionsbeschreibung MUX).
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 |