FB_HVACMUX_REAL_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.
Beispiele zu eCtrlMode = eHVACCtrlMode_Auto
- Ist bDirection = FALSE AND iNumberOfValues = 12 und es liegt eine steigende Flanke an bEdgeNewValue an, dann inkrementiert iValueNumber. Ist iValueNumber = 6, so ist rValueOut = rValue6. Ist iValueNumber= iNumberOfValues(12) und es liegt eine steigende Flanke an bEdgeNewValue an, dann ist iValueNumber = 1 und somit rValueOut = rValue1.
- Ist bDirection = TRUE AND iNumberOfValues = 8 und es liegt eine steigende Flanke an bEdgeNewValue an, dann dekrementiert iValueNumber. Ist rValueNumber = 5, so ist rValueOut = rValue5. Ist iValueNumber= 1 und es liegt eine steigende Flanke an bEdgeNewValue an, dann ist iValueNumber = iNumberOfValues(8) und somit rValueOut = rValue8.
Das Startverhalten der Ausgänge iValueNumber und rValueOut sieht folgendermaßen aus:
- Ist bDirection = FALSE ANDiNumberOfValues > 0, so ist iValueNumber = 1 und damit rValueOut = rValue1.
- Ist bDirection = TRUE ANDiNumberOfValues = 12, so ist iNumberOfValues = 12 und damit rValueOut = rValue12.
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 rValueOut = rValue7 ist.
Das Startverhalten der Ausgänge iValueNumber und rValueOut sieht folgendermaßen aus:
- Ist iManualValue = 13, so ist iValueNumber = 13 und rValueOut = rValue13.
- Ist iManualValue = 0, so ist iValueNumber = 0 und rValueOut = 0.
Hinweis | |
Eine sich häufig ändernde Variable darf nicht an die VAR_IN_OUT-Variablen rValue1-n angelegt werden, wenn eDataSecurityType = eHVACDataSecurityType_Persistent ist. Dieses würde zu einem frühzeitigen Verschleiß des Speichermediums der Steuerung führen. Wenn sich die VAR_IN_OUT-Variablen rValue1-n 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 rValueOut und iValueNumber konstant auf 0 gesetzt.
iNumberOfValues: Gibt die Anzahl der Variablen rValue1-16 an, die über rValueOut ausgegeben werden können. Ist iNumberOfValues = 8, so bewegt sich der Ausgang iValueNumber zwischen 1 und 8. Es werden dann für die Ausgabe rValueOut die Variablen rValue1 bis rValue8 berücksichtigt (siehe Funktionsbeschreibung MUX).
iNumberOfValues bestimmt das Startverhalten der Ausgänge rValueOut und iValueNumber (siehe Funktionsbeschreibung MUX).
iNumberOfValues wird in der Betriebsart eCtrlMode = eHVACCtrlMode_Manual nicht berücksichtigt.
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 rValueOut = rValue6. Ist iValueNumber= iNumberOfValues und es liegt eine steigende Flanke an bEdgeNewValue an, dann ist iValueNumber = 1 und somit rValueOut = rValue1.
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 rValueOut = rValue5. Ist iValueNumber= 1 und es liegt eine steigende Flanke an bEdgeNewValue an, dann ist iValueNumber = iNumberOfValues(12) und somit rValueOut = rValue12.
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 rValueOut bestimmt (siehe Funktionsbeschreibung MUX).
bDirection = TRUE bedeutet, dass iValueNumber in absteigender Form von iNumberOfValues nach 1 dekrementiert wird und dadurch den Ausgabewert rValueOut 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 (siehe E_HVACCtrlMode).
Ist die Betriebsart eCtrlMode = eHVACCtrlMode_Auto, so wird die Variable iManualValue nicht berücksichtigt.
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 rValue15 wird dann über rValueOut 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 rValueOut = 0.
VAR_OUTPUT
rValueOut : REAL;
bActive : BOOL;
bEdgeNewValueOut : BOOL;
iValueNumber : INT;
bError : BOOL;
eErrorCode : E_HVACErrorCodes;
rValueOut: Über rValueOut wird der Wert der Variablen rValue1-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 rValueOut = rValue6. Ist iValueNumber= iNumberOfValues und es liegt eine steigende Flanke an bEdgeNewValue an, dann ist iValueNumber = 1 und somit rValueOut = rValue1.
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 rValueOut = rValue5. Ist iValueNumber= 1 und es liegt eine steigende Flanke an bEdgeNewValue an, dann ist iValueNumber = iNumberOfValues(12) und somit rValueOut = rValue12.
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 rValueOut = rValue7 ist.
Das Startverhalten des Ausgangs rValueOut 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 rValueOut = rValue1.
- eCtrlMode = eHVACCtrlMode_Auto AND bDirection = TRUE AND iNumberOfValues = 12, so ist iNumberOfValues = 12 und rValueOut = rValue12.
- eCtrlMode = eHVACCtrlMode_Manual AND iManualValue = 13, so ist iValueNumber = 13 und rValueOut = rValue13.
- eCtrlMode = eHVACCtrlMode_Manual AND iManualValue = 0, so ist iValueNumber = 0 und rValueOut = 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 rValueX an, deren Inhalt in der Ausgangsvariablen rValueOut 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. rValueOut 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 16 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
rValue1-16 : REAL;
rValue1-16: Mittels der Variablen rValue1 bis rValue16 wird der Wert der Ausgangsvariablen rValueOut bestimmt. Ist iValueNumber = 6, so ist rValueOut = iValue6.
Ist iNumberOfValues = 8, so bewegt sich der Ausgang iValueNumber zwischen 1 und 8. Es werden dann für die Ausgabe rValueOut die Variablen rValue1 bis rValue8 berücksichtigt, wenn die Betriebsart eCtrlMode = eHVACCtrlMode_Auto ist (siehe Funktionsbeschreibung MUX). Die Variable wird persistent gespeichert.
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 |