FB_BARFacadeElementEntry
Dieser Baustein dient zur Verwaltung aller Fassadenelemente (Fenster) einer Fassade, welche global in einer Liste von Fassadenelementen hinterlegt ist. Er soll die Eingabe der Elementinformationen - auch im Hinblick auf die Nutzung der Target-Visualisierung - erleichtern. Eine schematische Darstellung der Objekte mit Beschreibung der Koordinaten ist unter Verschattungskorrektur: Grundlagen und Definitionen gegeben.
Die Deklaration der Fassadenelemente erfolgt in den globalen Variablen als zweidimensionales Feld über die Fensterspalten (Columns) und -reihen (Rows):
VAR_GLOBAL
arrFacadeElement : ARRAY[1..iColumnsPerFacade, 1..iRowsPerFacade] OF ST_BARFacadeElement;
END_VAR
Jedes einzelne Element arrFacadeElement trägt die Informationen für jeweils ein Fassadenelement (ST_BARFacadeElement). Dazu gehören die Gruppenzugehörigkeit, die Abmessungen (Breite, Höhe) und die Koordinaten der Eckpunkte. Der Baustein greift dabei über die IN-OUT-Variable arrFacadeElement direkt auf dieses Feld zu.
Anmerkung: Die Tatsache, dass die Koordinaten der Eckpunkte 2 bis 4 Ausgangswerte sind, ergibt sich daraus, dass sie aus den Eingabeparametern gebildet werden und für die Verwendung in einer Visualisierung zur Verfügung stehen sollen:
Alle Angaben in Meter!
lrCorner2X = lrCorner1X
lrCorner2Y = lrCorner1Y + lrWindowHeight (Fensterhöhe)
lrCorner3X = lrCorner1X + lrWindowWidth (Fensterbreite)
lrCorner3Y = lrCorner2Y
lrCorner4X = lrCorner1X + lrWindowWidth (Fensterbreite)
lrCorner4Y = lrCorner1Y
Die Verwendung des Bausteines erfolgt in drei Schritten:
- Auslesen
- Ändern
- Schreiben
Auslesen
Mit den Einträgen an iColumn und iRow wird das entsprechende Element aus der Liste, arrFacadeElement[iColumn,iRow], ausgewählt. Eine steigende Flanke an bRead liest folgende Daten aus dem Listenelement aus:
- usiGroup Gruppenzugehörigkeit,
- lrCorner1X X-Koordinate des Eckpunktes1 in Meter
- lrCorner1Y Y-Koordinate des Eckpunktes1 in Meter
- lrWindowWidth Fensterbreite in Meter
- lrWindowHeight Fensterhöhe in Meter
Diese werden dann den entsprechenden Eingangsvariablen des Bausteines zugewiesen, der daraus nach dem oben erläuterten Zusammenhang die Koordinaten der Eckpunkte 2-4 als Ausgangsvariablen errechnet. Wichtig ist hierbei, dass im Schritt des Auslesens die Eingangswerte nicht überschrieben werden. So lassen sich alle Werte zunächst in einer Visualisierung anzeigen.
Ändern
In einem nächsten Programmschritt können dann die aufgeführten Eingabewerte verändert werden. Die eingegebenen Werte werden dabei ständig auf Plausibilität überprüft. Der Ausgang bValid zeigt an, ob die Werte gültig sind (bValid=TRUE). Sollte dies nicht der Fall sein, wird am Ausgang udiErrorId ein entsprechender Fehlercode ausgegeben. Siehe auch unten "Fehler (bValid=FALSE)".
Schreiben
Mit einer positiven Flanke an bWrite werden die parametrierten Daten in das Listenelement mit dem Index nId geschrieben, unabhängig davon, ob sie gültige Werte darstellen oder nicht. Daher ist innerhalb der Elementstruktur ST_BARFacadeElement ebenfalls ein Plausibilitätsbit bValue vorhanden, das genau diese Information an den Baustein FB_BARShadingCorrection / FB_BARShadingCorrectionSouth weiterreicht und dort Fehlberechnungen vorbeugt.
Fehler (bValid=FALSE)
Der Baustein FB_BARShadingCorrection / FB_BARShadingCorrectionSouth, welcher beurteilt, ob alle Fenster einer Gruppe verschattet sind, wird nur dann seine Aufgabe ausführen, wenn alle Fenster der betrachteten Gruppe gültige Einträge haben.
Das bedeutet:
- usiGroup muss größer als 0 sein
- lrCorner1X muss größer oder gleich 0.0 sein
- lrCorner1Y muss größer oder gleich 0.0 sein
- lrWindowWidth muss größer als 0 sein
- lrWindowHeight muss größer als 0 sein
Ist eines dieser Kriterien nicht erfüllt, so wird dies als Falscheingabe interpretiert und bValid am Bausteinausgang von FB_BARFacadeElementEntry sowie im Fensterelement ST_BARFacadeElement auf FALSE gesetzt.
Sind hingegen alle Einträge eines Fassadenelementes Null, wird es als gültiges, gewollt ausgelassenes Fassadenelement angesehen:
Bei einer Fassade von 6x4 Fenstern wären hier die Elemente Fenster (2,1), Fenster (3,5) und Fenster (4,4) Leerelemente.
VAR_INPUT
eDataSecurityType : E_HVACDataSecurityType;
iColumn : INT;
iRow : INT;
bWrite : BOOL;
bRead : BOOL;
usiGroup : USINT;
lrCorner1X : LREAL;
lrCorner1Y : LREAL;
lrWindowWidth : LREAL;
lrWindowHeight : LREAL;
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. |
iColumn: Spalten-Index des gewählten Elementes auf der Fassade. Dies bezieht sich auf die Auswahl eines Feldelementes des unter der IN-OUT-Variablen arrFacadeElement angelegten Arrays.
iRow: dto. Reihen-Index. iRow und iColumn dürfen nicht Null sein! Das ergibt sich aus der Felddefinition, siehe oben.
bRead: Mit einer positiven Flanke an diesem Eingang werden die Informationen des gewählten Elementes, arrFacadeElement[iColumn,iRow] in den Baustein gelesen und den Eingangsvariablen usiGroup bis rWindowHeightzugewiesen. Daraus ergeben sich dann die Ausgangsvariablen rCorner2X bis rCorner4Y. Sind zu Zeitpunkt des Auslesens schon Daten an den Eingängen usiGroup bis rWindowHeight angelegt, so werden die zuvor ausgelesenen Daten sofort mit diesen überschrieben.
bWrite: Eine positive Flanke schreibt die eingegebenen sowie errechneten Werte in das gewählte Feldelement arrFacadeElement[iColumn,iRow].
usiGroup: Gruppenzugehörigkeit,
lrCorner1X: X-Koordinate des Eckpunktes1 in Meter.
lrCorner1Y: Y-Koordinate des Eckpunktes1 in Meter.
lrWindowWidth: Fensterbreite in Meter.
lrWindowHeight: Fensterhöhe in Meter.
VAR_OUTPUT
lrCorner2X : LREAL;
lrCorner2Y : LREAL;
lrCorner3X : LREAL;
lrCorner3Y : LREAL;
lrCorner4X : LREAL;
lrCorner4Y : LREAL;
bValid : BOOL;
udiErrorId : UDINT;
lrCorner2X: Ermittelte X-Koordinate des Eckpunktes 2 des Fensters in Meter. Siehe "Anmerkung" oben.
lrCorner2Y: Ermittelte Y-Koordinate des Eckpunktes 2 des Fensters in Meter. Siehe "Anmerkung" oben.
lrCorner3X: Ermittelte X-Koordinate des Eckpunktes 3 des Fensters in Meter. Siehe "Anmerkung" oben.
lrCorner3Y: Ermittelte Y-Koordinate des Eckpunktes 3 des Fensters in Meter. Siehe "Anmerkung" oben.
lrCorner4X: Ermittelte X-Koordinate des Eckpunktes 4 des Fensters in Meter. Siehe "Anmerkung" oben.
lrCorner4Y: Ermittelte Y-Koordinate des Eckpunktes 4 des Fensters in Meter. Siehe "Anmerkung" oben.
bValid: Ergebnis Kontrolle für die eingegebenen Werte.
udiErrorId: Enthält den Fehlercode, sollten die eingetragenen Werte nicht in Ordnung sein. Siehe Fehlercodes.
VAR_IN_OUT
arrFacadeElement : ARRAY[1..iColumnsPerFacade, 1..iRowsPerFacade] OF ST_BARFacadeElement;
arrFacadeElement: Liste von Fassadenelementen.
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 |