FB_HVACMUX_INT_16

FB_HVACMUX_INT_16 1:

Anwendung

Anwendung

Der Funktionsbaustein beinhaltet zwei verschiedene Typen von Multiplexern jeweils für die Betriebsart eHVACCtrlMode_Autobzw.eHVACCtrlMode_Manual. Diese Auswahl wird mit Hilfe des Enums eCtrlMode vorgenommen.
Es müssen vorab die folgenden Bedingungen erfüllt sein:

bEnable = TRUEANDbError = 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 = FALSEANDiNumberOfValues = 12 und es liegt eine steigende Flanke an bEdgeNewValue an, dann inkrementiert iValueNumber. 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 dementsprechend iValueOut = iValue1.

- Ist bDirection = TRUEANDiNumberOfValues = 8 und es liegt eine steigende Flanke an bEdgeNewValue an, dann dekrementiert iValueNumber. 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 dementsprechend iValueOut = iValue8.

Das Startverhalten der Ausgänge iValueNumber und iValueOut sieht folgendermaßen aus:

- Ist bDirection = FALSEANDiNumberOfValues > 0, so ist iValueNumber = 1 und damit iValueOut = iValue1.

- Ist bDirection = TRUEANDiNumberOfValues = 12, so ist iNumberOfValues = 12 und damit iValueOut = iValue12.

Beipiele 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 somit iValueOut = iValue13.

- Ist iManualValue = 0, so ist iValueNumber = 0 und somit iValueOut = 0.

Hinweis

Eine sich häufig ändernde Variable darf nicht an die VAR_IN_OUT-Variablen iValue1-16 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-16 häufig ändern und nicht persistent abgelegt werden sollen, muss eDataSecurityType = eDataSecurityType_Idle sein.

Anwendungsbeispiel

Download

Benötigte Bibliothek

tchvac.zip

TcHVAC.lib

VAR_INPUT

eDataSecurityType : E_HVACDataSecurityType;
bEnable           : BOOL;
iNumberOfValues   : INT;              1..16
bEdgeNewValue     : BOOL;
bDirection        : BOOL;
eCtrlMode         : E_HVACCtrlMode;
iManualValue      : INT;              0..16

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_HVACMUX_INT_16 2: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 Anwendung
iNumberOfValues
bestimmt das Startverhalten der Ausgänge iValueOut und iValueNumber, siehe Anwendung
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 in- oder dekrementiert iValueNumber.
Ist bEnable = TRUEANDbError = FALSEANDeCtrlMode = eHVACCtrlMode_AutoANDbDirection = FALSEANDiNumberOfValues > 0 und es liegt eine steigende Flanke an bEdgeNewValue, dann inkrementiert iValueNumber. Ist iValueNumber = 6, so ist iValueOut = iValue6. Ist iValueNumber= iNumberOfValues und es liegt eine steigende Flanke an bEdgeNewValue an, dann ist iValueNumber = 1 und somitiValueOut = iValue1.
Ist bEnable = TRUEANDbError = FALSEANDeCtrlMode = eHVACCtrlMode_AutoANDbDirection = TRUEANDiNumberOfValues = 12 und es liegt eine steigende Flanke an bEdgeNewValue, dann dekrementiert iValueNumber. 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 = iValue12.
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 Anwendung
bDirection
= TRUE bedeutet, dass iValueNumber in absteigender Form von iNumberOfValues nach 1 dekrementiert und dadurch den Ausgabewert iValueOut bestimmt, siehe Anwendung
bDirection wird in der Betriebsart eCtrlMode = eHVACCtrlMode_Manual nicht berücksichtigt.

eCtrlMode: Mittels des Enums wird die Betriebsart des Funktionsbausteins vorgegeben, siehe Anwendung
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_ManualANDbEnable = TRUEANDbError = FALSEANDiManualValue = 15, so ist iValueNumber = 15. Der Inhalt der Variable iValue15 wird dann über iValueOut ausgegeben, siehe Anwendung.
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 dementsprechend 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 = TRUEANDbError = FALSEANDeCtrlMode = eHVACCtrlMode_AutoANDbDirection = FALSEANDiNumberOfValues > 0 und es liegt eine steigende Flanke an bEdgeNewValue, dann inkrementiert iValueNumber. Ist iValueNumber = 6, so ist iValueOut = iValue6. Ist iValueNumber= iNumberOfValues und es liegt eine steigende Flanke an bEdgeNewValue an, dann ist iValueNumber = 1 und somitiValueOut = iValue1.
Ist bEnable = TRUEANDbError = FALSEANDeCtrlMode = eHVACCtrlMode_AutoANDbDirection = TRUEANDiNumberOfValues = 12 und es liegt eine steigende Flanke an bEdgeNewValue, dann dekrementiert iValueNumber. 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 = iValue12.
Ist bEnable = TRUEANDbError = FALSEANDeCtrlMode = 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 = TRUEANDbError = FALSEAND

- eCtrlMode = eHVACCtrlMode_AutoANDbDirection = FALSEANDiNumberOfValues > 0, so ist iValueNumber = 1 und iValueOut = iValue1.

- eCtrlMode = eHVACCtrlMode_AutoANDbDirection = TRUEANDiNumberOfValues = 12, so ist iNumberOfValues = 12 und iValueOut = iValue12.

- eCtrlMode = eHVACCtrlMode_ManualANDiManualValue = 13, so ist iValueNumber = 13 und iValueOut = iValue13.

- eCtrlMode = eHVACCtrlMode_ManualANDiManualValue = 0, so ist iValueNumber = 0 und iValueOut = 0.

bActive: bActive wird TRUE , wenn

1. bEnable = TRUEANDbError = FALSEANDeCtrlMode = eHVACCtrlMode_Auto ist.

2. bEnable = TRUEANDbError = FALSEANDeCtrlMode = eHVACCtrlMode_ManualANDiManualValue > 0 ist.

bEdgeNewValueOut: Ist für einen SPS-Zyklus TRUE, wenn bEnable = TRUEANDbError = FALSEANDiValueNumber 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 16 nicht überschreiten.

FB_HVACMUX_INT_16 3:

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

VAR_IN_OUT

iValue1-16        : INT;           

iValue1-16: Mittels der Variablen iValue1 bis iValue16 wird der Wert der Ausgangsvariable 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 Anwendung