FB_HVACTemperatureSensorEx2
Anwendung
Dieser Funktionsbaustein dient zur Erfassung und Weiterverarbeitung von Temperaturwerten wie z.B. für die Fühlertypen PT100, PT200, PT1000, NI100, NI120, NI1000, NI1000Tk5000. Der Funktionsbaustein FB_HVACTemperatureSensorEx2 ist abgestimmt auf die Busklemmen KL3201/02/04, KL3222, KL3228 und KL3208-0010. Diese Busklemmen können entweder vorkonfiguriert bestellt oder softwaremäßig auf den entsprechenden Fühlertypen eingestellt werden.
Über die Eingangsvariable iRawValue wird der Temperaturrohwert entweder in 1/10 oder 1/100°C dem Funktionsbaustein übergeben und über rPresentValue als Fließkommazahl ausgeben. iRawValue kann z.B. direkt mit dem Temperaturrohwert der folgenden Busklemmen verknüpft werden: KL3201/02/04, KL3222, KL3228 und KL3208-0010.
Der Ausgabewert rPresentValue ist abhängig von einer der beiden folgenden Glättungsfunktionen:
= 0: := (( / iConversionFactor rPresentValue iRawValue 10 + ) - rPresentValueOld) / + rPresentValueOld; rOffset rSmoothFactor
= 1: := (( / iConversionFactor rPresentValue iRawValue 100 + ) - rPresentValueOld) / + rPresentValueOld; rOffset rSmoothFactor
rPresentValueOld ist der Wert von rPresentValue, der einen SPS-Zyklus vorher ausgegeben wurde. Wenn bEnable = TRUE wird, so ist für einen SPS-Zyklus rPresentValue = rPresentValueOld. Ist bErrorSensor = TRUE, der Fehler behoben und bErrorSensor = FALSE, so ist für einen SPS-Zyklus rPresentValue = rPresentValueOld.
Über die Eingangsvariable byStatusRawValue wird der Status des angeschlossenen Temperatursensors überwacht und im Fehlerfall über die Variable bErrorSensor der Steuerung zurück geliefert. byStatusRawValue kann z.B. direkt mit dem Statusbyte der folgenden Busklemmen verknüpft werden: KL3201/02/04, KL3222, KL3228 und KL3208-0010.
Mit rHighLimit/rLowLimit können Temperaturgrenzwerte festgelegt werden.
Im Gegensatz zum FB_HVACTemperatureSensor hat dieser Funktionsbaustein die Eingangsvariable bEnable, die von Nutzen ist, wenn die Sensorenkennlinien in den Busklemmen KL3201/02/04, KL3222, KL3228 und KL3208-0010 aus der SPS heraus über den Funktionsbaustein FB_HVACConfigureKL32xx eingestellt werden sollen. Der Filter 2. Ordnung im FB_HVACTemperatureSensor wird in diesem Funktionsbaustein durch die oben beschriebene Glättungsfunktion ersetzt. Der Ausgang bErrorSensor ist neu und ersetzt die beiden Ausgänge bErrorShortCircuit/bErrorBrokenSensor. Diese Ausgänge sind aber weiterhin im Errorbyte udiError vorhanden.
Im Gegensatz zum FB_HVACTemperatureSensorEx können an diesem Funktionsbaustein Sensoren mit dem Temperaturrohwert 1/10 oder 1/100°C übergeben werden.
VAR_INPUT
eDataSecurityType : E_HVACDataSecurityType;
bSetDefault : BOOL;
bEnable : BOOL;
iRawValue : INT;
byStatusRawValue : BYTE;
iConversionFactor : INT; 0..1
bEnableLimitCtrl : BOOL;
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: 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: Freigabe des Bausteins, wenn bEnable = TRUE ist. Ist bEnable = FALSE, so wird am Ausgang rPresentValue der Wert von rReplacementValue ausgegeben. Sämtliche Störmeldungen und bInvalidParameter werden auf FALSE gesetzt. Wenn bEnable = TRUE wird, so ist für einen SPS-Zyklus rPresentValue = rPresentValueOld.
iRawValue: Rohwert des Temperaturfühlers entweder in 1/10 oder 1/100°C von der Busklemme.
byStatusRawValue: Statusbyte des Temperaturfühlers von der Busklemme. Dient zur Fehlerdiagnose, z.B. Drahtbruch oder Kurzschluss. Ist die KL32xx auf Widerstandsmessung (Ω) eingestellt, so gibt es keine Fehlerdiagnose.
iConversionFactor: Umrechnungsfaktor für den Ausgabewert rPresentValue.
iConversionFactor = 0: rPresentValue := ((iRawValue / 10 + rOffset) - rPresentValueOld) / rSmoothFactor + rPresentValueOld;
iConversionFactor = 1: rPresentValue := ((iRawValue / 100 + rOffset) - rPresentValueOld) / rSmoothFactor + rPresentValueOld;
Wird an iConversionFactor ein Wert ausserhalb seines Bereiches von 0 bis 1 angegeben, so wird dieses mit bErrorConversionFactor = TRUE signalisiert.
bEnableLimitCtrl: Freigabe für die Limit-Überwachung rHighLimit und rLowLimit
bReset: Quittierungseingang bei einem Fehler mit einer steigenden Flanke an bReset. In Abhängigkeit der Betriebsart iTemperatureSensorMode werden Fehler entweder mit bReset oder automatisch quittiert.
VAR_OUTPUT
rPresentValue : REAL;
bErrorGeneral : BOOL;
udiError : UDINT;
bErrorSensor : BOOL;
bErrorHighLimit : BOOL;
bErrorLowLimit : BOOL;
bErrorConversionFactor: BOOL;
bInvalidParameter : BOOL;
rPresentValue: Temperaturausgabevariable mit zwei Nachkommastellen.
Nach folgender Formel wird der Wert für rPresentValue berechnet und ausgegeben:
iConversionFactor = 0: rPresentValue := ((iRawValue / 10 + rOffset) - rPresentValueOld) / rSmoothFactor + rPresentValueOld;
iConversionFactor = 1: rPresentValue := ((iRawValue / 100 + rOffset) - rPresentValueOld) / rSmoothFactor + rPresentValueOld;
rPresentValueOld ist der Wert von rPresentValue, der einen SPS-Zyklus vorher ausgegeben wurde. Wenn bEnable = TRUE wird, so ist für einen SPS-Zyklus rPresentValue = rPresentValueOld. Ist bErrorSensor = TRUE, der Fehler behoben und bErrorSensor = FALSE, so ist für einen SPS-Zyklus rPresentValue = rPresentValueOld.
Ist bErrorSensor = TRUE, dann ist der Wert von rPresentValue abhängig von der Betriebsart iTemperatureSensorMode.
bErrorGeneral: Die Störungsmeldung bErrorGeneral wird TRUE, sobald eine der Störmeldungen bErrorHighLimit, bErrorLowLimit oder bErrorSensor = TRUE ist. Der Wert der Ausgangsvariable rPresentValue ist dann abhängig von der Betriebsart iTemperatureSensorMode und wird frei gegeben, wenn die Störung behoben ist und je nach Betriebsart iTemperatureSensorMode mit bReset quittiert wurde.
udiError: Liefert alle Fehlermeldungen und Warnungen,
udiError.1 := bInvalidParameter
udiError.2 := bErrorGeneral
udiError.3 := bErrorHighLimit
udiError.4 := bErrorLowLimit
udiError.5 := bErrorShortCircuit
udiError.6 := bErrorBrokenSensor
udiError.7 := bErrorSensor
udiError.8 := bErrorConversionFactor
byError.5 := bErrorShortCircuit: Fehler, Kurzschluss an dem angeschlossenem Temperatursensor. Nach Behebung des Fehlers wird die Meldung in Abhängigkeit der Betriebsart iTemperatureSensorMode entweder mit bReset oder automatisch quittiert.
byError.6 := bErrorBrokenSensor:Fehler, Drahtbruch an dem angeschlossenem Temperatursensor. Nach Behebung des Fehlers wird die Meldung in Abhängigkeit der Betriebsart iTemperatureSensorMode entweder mit bReset oder automatisch quittiert.
bErrorSensor: Wird TRUE, wenn byError.5 / bErrorShortCircuit oder byError.6 / bErrorBrokenSensor = TRUE ist. Nach Behebung des Fehlers wird die Meldung in Abhängigkeit der Betriebsart iTemperatureSensorMode entweder mit bReset oder automatisch quittiert. Ist bErrorSensor = TRUE, der Fehler behoben und bErrorSensor = FALSE, so ist für einen SPS-Zyklus rPresentValue = rPresentValueOld.
bErrorHighLimit: Warnung oberer Grenzwert überschritten, wird TRUE wenn rPresentValue >= rHighLimit ist. Die Warnung, dass der obere Grenzwert überschritten ist, kann erst quittiert werden, wenn rPresentValue <= rHighLimit -1.0 für die Zeitdauer von 5 Sekunden ist. Die Warnung wird in Abhängigkeit der Betriebsart iTemperatureSensorMode entweder mit bReset oder automatisch quittiert.
bErrorLowLimit: Warnung unterer Grenzwert unterschritten, wird TRUE wenn rPresentValue <= rLowLimit ist. Die Warnung, dass der untere Grenzwert unterschritten ist, kann erst quittiert werden, wenn rPresentValue >= rLowLimit +1.0 für die Zeitdauer von 5 Sekunden ist. Die Warnung wird in Abhängigkeit der Betriebsart iTemperatureSensorMode entweder mit bReset oder automatisch quittiert.
bErrorConversionFactor: Wird an iConversionFactor ein Wert ausserhalb seines Bereiches von 0 bis 1 angegeben, so wird dieses mit bErrorConversionFactor = TRUE signalisiert. Die Meldung ist nach Behebung der Ursache nicht quittierungspflichtig.
bInvalidParameter: Zeigt an, dass ein falscher Parameter an einer der Variablen rHighLimit, rLowLimit, rSmoothFactor, iConversionFactor oder iTemperatureSensorMode anliegt. Eine falsche Parameterangabe führt nicht zum Stillstand des Bausteins, siehe Beschreibung der Variablen. Nach Behebung der falschen Parameterangabe wird die Meldung bInvalidParameter in Abhängigkeit der Betriebsart iTemperatureSensorMode entweder mit bReset oder automatisch quittiert.
VAR_IN_OUT
rOffset : REAL;
rHighLimit : REAL;
rLowLimit : REAL;
rReplacementValue : REAL;
rSmoothFactor : REAL;
iTemperatureSensorMode:INT;
rOffset: Temperaturabgleich in Kelvin. Die Variable wird persistent gespeichert. Voreingestellt auf 0.
rHighLimit: Oberer Grenzwert. Die Variable wird persistent gespeichert. Voreingestellt auf 120.
Wenn rPresentValue >= rHighLimit, dann wird der Ausgang bErrorHighLimit gesetzt. rHighLimit muss größer sein als rLowLimit.
Liegt ein nicht korrekter Variablenwert an dann wird, wenn vorhanden, der letzte gültige Variablenwert genommen. Wenn kein gültiger letzter Wert vorliegt, dann wird mit dem Default-Wert weitergearbeitet. bInvalidParameter wird bei falscher Parameterangabe gesetzt.
rLowLimit: Unterer Grenzwert. Die Variable wird persistent gespeichert. Voreingestellt auf -60.
Wenn rPresentValue <= rLowLimit, dann wird der Ausgang bErrorLowLimit gesetzt.
Liegt ein nicht korrekter Variablenwert an dann wird, wenn vorhanden, der letzte gültige Variablenwert genommen. Wenn kein gültiger letzter Wert vorliegt, dann wird mit dem Default-Wert weitergearbeitet. bInvalidParameter wird bei falscher Parameterangabe gesetzt.
rReplacementValue: Ersatzwert, der bei den Fehlern bErrorShortCircuit und bErrorBrokenSensor an den Ausgang rPresentValue ausgegeben wird, wenn die Betriebsart iTemperatureSensorMode = 0 oder iTemperatureSensorMode = 2 ausgewählt ist.
Die Variable wird persistent gespeichert. Voreingestellt auf 0.
rSmoothFactor: Glättungsfaktor (>=1) für den Ausgabewert rPresentValue.
Die Variable wird persistent gespeichert. Voreingestellt auf 100.
Nach folgender Formel wird der Wert für rPresentValue berechnet und ausgegeben:
iConversionFactor = 0: rPresentValue := ((iRawValue / 10 + rOffset) - rPresentValueOld) / rSmoothFactor + rPresentValueOld;
iConversionFactor = 1: rPresentValue := ((iRawValue / 100 + rOffset) - rPresentValueOld) / rSmoothFactor + rPresentValueOld;
rPresentValueOld ist der Wert von rPresentValue, der einen SPS-Zyklus zuvor ausgegeben wurde.
Liegt ein nicht korrekter Variablenwert an rSmoothFactor an, dann wird, wenn vorhanden, der letzte gültige Variablenwert genommen. Wenn kein gültiger letzter Wert vorliegt, dann wird mit dem Default-Wert weitergearbeitet. bInvalidParameter wird bei falscher Parameterangabe gesetzt.
iTemperatureSensorMode: Gibt die Betriebsart des Bausteines vor.
iTemperatureSensorMode = 0: Wenn bErrorSensor = TRUE, dann ist rPresentValue = rReplacementValue. Nach Behebung des Fehlers muss der Funktionsbaustein durch eine steigende Flanke an der Eingangsvariablen bReset quittiert werden.
iTemperatureSensorMode = 1: Wenn bErrorSensor = TRUE, dann wird an der Ausgangsvariablen rPresentValue der zuletzt gültige Temperaturwert, der 10 Sekunden vorher anstand, ausgegeben. Nach Behebung des Fehlers muss dieser durch eine steigende Flanke an der Eingangsvariablen bReset quittiert werden.
iTemperatureSensorMode = 2 : Wenn bErrorShortCircuit oder bErrorBrokenSensor = TRUE, dann ist rPresentValue = rReplacementValue. Nach Behebung des Fehlers quittiert sich der Funktionsbaustein automatisch.
iTemperatureSensorMode = 3: Wenn bErrorSensor = TRUE, dann wird an der Ausgangsvariable rPresentValue der zuletzt gültige Temperaturwert, der 10 Sekunden vorher anstand, ausgegeben. Nach Behebung des Fehlers quittiert sich der Funktionsbaustein automatisch.
Liegt ein nicht korrekter Variablenwert an iTemperatureSensorMode an, dann wird mit dem Default-Wert weitergearbeitet. bInvalidParameter wird bei falscher Parameterangabe gesetzt.
Die Variable wird persistent gespeichert. Voreingestellt auf 3.