FB_BA_ShdObjEntry

Dieser Baustein dient zur Verwaltung aller Verschattungselemente einer Fassade, welche global in einer Liste von Verschattungselementen hinterlegt sind. Er soll die Eingabe der Elementinformationen - auch im Hinblick auf die Nutzung einer Visualisierung - erleichtern. Eine schematische Darstellung der Objekte mit Beschreibung der Koordinaten ist unter Verschattungskorrektur: Grundlagen und Definitionen gegeben.
Die Deklaration der Verschattungselemente erfolgt in den globalen Variablen:
VAR_GLOBAL
arrShdObj : ARRAY[1..Param.uiMaxShdObj] OF ST_BA_ShdObj;
END_VAR
Jedes einzelne Element arrShdObj[1] bis arrShdObj [uiMaxShdObj] trägt die Informationen für jeweils ein Verschattungselement (ST_BA_ShdObj). Dies sind neben dem gewählten Verschattungstyp (Viereck oder Kugel) die jeweils dazugehörigen Koordinaten. Im Falle eines Vierecks sind es die Eckpunkte (rP1x, rP1y, rP1z), (rP2x, rP2y, rP2z), (rP3x, rP3y, rP3z) und (rP4x, rP4y, rP4z) und im Falle einer Kugel der Mittelpunkt (rMx, rMy, rMz) und der Radius rRads. Zusätzlich kann über die Eingänge udiBegMth und udiEndMth die Phase der Verschattung definiert werden, was bei Objekten, wie z.B. Bäume, die im Winter kein Laub tragen, wichtig ist.
Der Baustein greift dabei über die IN-OUT-Variable arrShdObj direkt auf das Feld dieser Informationen zu.
Anmerkung: Die Tatsache, dass die Vierecks Koordinaten rP2x, rP2z, rP4x, rP4y, und rP4z Ausgangswerte sind, ergibt sich daraus, dass sie aus den Eingabeparametern gebildet werden:
rP2x = rP1x; rP2z = rP1z; rP4x = rP3x; rP4y = rP1y; rP4z = rP3z;
Das schränkt die Eingabe eines Vierecks so weit ein, dass die seitlichen Kanten senkrecht auf dem Boden stehen (rP2x = rP1x und rP4x = rP3x), dass das Viereck keine Neigung hat (rP2z = rP1z und rP4z = rP3z) und nur nach "oben" also in positive y-Richtung eine unterschiedliche Höhe haben kann (rP4y = rP1y).
Die Verwendung des Bausteines erfolgt in drei Schritten:
- Auslesen
- Ändern
- Schreiben
Auslesen
Mit dem Eintrag an udiId wird das entsprechende Element aus der Liste, arrShdObj[iId], ausgewählt. Eine steigende Flanke an bRd liest die Daten aus. Diese Werte werden den Ein- und Ausgangsvariablen des Bausteines zugewiesen. Es handelt sich hierbei um die Eingangswerte rP1x, rP1y, rP1z, rP2y, rP3x, rP3y, rP3z, rMx, rMy, rMz, rRads und dem Objekt-Enumerator eType und um die Ausgangswerte rP2x, rP2z, rP4x, rP4y, und rP4z. 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. Wenn am Eingang eType über den Wert "eObjectTypeTetragon" die Verwendung eines Vierecks vorgewählt ist, ergeben sich die Ausgangswerte rP2x, rP2z, rP4x, rP4y, und rP4z aus den eingegebenen Koordinaten des Vierecks, siehe oben.
Die eingegebenen Werte werden ständig auf Plausibilität überprüft. Der Ausgang bErr zeigt an, ob die Werte gültig sind (bErr=FALSE). Wenn der Wert ungültig ist, wird am Ausgang sErrDescr eine entsprechende Fehlermeldung ausgegeben.
Wird ein Viereck definiert, müssen lediglich die Eingänge rP1x, rP1y, rP1z, rP2y, rP3x, rP3y und rP3z beschrieben werden, die Eingänge rMx, rMy, rMz und rRads brauchen nicht verknüpft zu werden. Im Falle einer Kugeldefinition müssen nur rMx, rMy, rMz und rRads beschrieben werden und die Viereckkoordinaten können unverknüpft bleiben
Schreiben
Mit einer positiven Flanke an bWrt werden die parametrierten Daten in das Listenelement mit dem Index udiId geschrieben, unabhängig davon, ob sie gültige Werte darstellen oder nicht. Daher ist innerhalb der Elementstruktur ST_BA_ShdObj ein Plausibilitätsbit bVld vorhanden, das genau diese Information an den Baustein FB_BA_ShdCorr weiterreicht und dort Fehlberechnungen vorbeugt.
Diese Vorgehensweise soll nur als Vorschlag angesehen werden. Es ist natürlich auch möglich, den Baustein ganz normal in einem Schritt zu parametrieren und die eingetragenen Werte mit einer steigenden Flanke an bWrt in das entsprechende Listenelement zu schreiben.
VAR_INPUT
udiId : UDINT;
bRd : BOOL;
bWrt : BOOL;
rP1x : REAL;
rP1y : REAL;
rP1z : REAL;
rP2y : REAL;
rP3x : REAL;
rP3y : REAL;
rP3z : REAL;
rMx : REAL;
rMy : REAL;
rMz : REAL;
rRads : REAL;
udiBegMth : UDINT;
udiEndMth : UDINT;
eType : E_BA_ShdObjType;
udiId: Index des gewählten Elementes. Dies bezieht sich auf die Auswahl eines Feldelementes des unter der IN-OUT-Variablen arrShdObj angelegten Arrays. Die Variable udiId darf nicht Null sein! Das ergibt sich aus der Felddefinition, welche mit 1 beginnt. Eine fehlerhafte Eingabe wird jedoch erkannt und als solche an bErr/sErrDescr angezeigt.
bRd: Mit einer positiven Flanke an diesem Eingang werden die Informationen des gewählten Elementes, arrShdObj[udiId] in den Baustein gelesen und den Eingangsvariablen rP1x bis eType sowie den Ausgangsvariablen rP2x bis rP4z zugewiesen. Sind zu diesem Zeitpunkt schon Daten an den Eingängen rP1x bis eType angelegt, so werden die zuvor ausgelesenen Daten sofort mit diesen überschrieben.
bWrt: Eine positive Flanke schreibt die an den Eingängen rP1x bis eType angelegten sowie die ermittelten und den Ausgängen rP2x bis rP4z zugewiesenen Werte in das gewählte Feldelement arrShdObj[udiId].
rP1x: X-Koordinate des Punktes 1 des Verschattungselementes (Viereck) [m].
rP1y: Y-Koordinate des Punktes 1 des Verschattungselementes (Viereck) [m].
rP1z: Z-Koordinate des Punktes 1 des Verschattungselementes (Viereck) [m].
rP2y: Y-Koordinate des Punktes 2 des Verschattungselementes (Viereck) [m].
rP3x: X-Koordinate des Punktes 3 des Verschattungselementes (Viereck) [m].
rP3y: Y-Koordinate des Punktes 3 des Verschattungselementes (Viereck) [m].
rP3z: Z-Koordinate des Punktes 3 des Verschattungselementes (Viereck) [m].
rMx: X-Koordinate des Mittelpunktes des Verschattungselementes (Kugel) [m].
rMy: Y-Koordinate des Mittelpunktes des Verschattungselementes (Kugel) [m].
rMz: Z-Koordinate des Mittelpunktes des Verschattungselementes (Kugel) [m].
rRads: Radius des Verschattungselementes (Kugel) [m].
udiBegMth: Anfang der Verschattungsperiode (Monatszahl).
udiEndMth: Ende der Verschattungsperiode (Monatszahl).
eType: Gewählter Elementtyp: Viereck oder Kugel (Siehe E_BA_ShdObjType).
Bemerkung zur Verschattungsperiode:
Die Monatseinträge dürfen nicht 0 und größer 12 sein, andernfalls sind alle Kombinationen möglich.
Beispiele:
Beginn=1, Ende=1: Verschattung im Januar.
Beginn=1, Ende=5: Verschattung von Anfang Januar bis Ende Mai.
Beginn=11, Ende=5: Verschattung von Anfang November bis Ende Mai (des folgenden Jahres).
VAR_OUTPUT
rP2x : REAL;
rP2z : REAL;
rP4x : REAL;
rP4y : REAL;
rP4z : REAL;
bErr : BOOL;
sErrDescr : T_MAXSTRING;
rP2x: Ermittelte X-Koordinate des Punktes 2 des Verschattungselementes (Viereck) [m]. Siehe "Anmerkung" oben.
rP2z: Ermittelte Z-Koordinate des Punktes 2 des Verschattungselementes (Viereck) [m]. Siehe "Anmerkung" oben.
rP4x: Ermittelte X-Koordinate des Punktes 4 des Verschattungselementes (Viereck) [m]. Siehe "Anmerkung" oben.
rP4y: Ermittelte Y-Koordinate des Punktes 4 des Verschattungselementes (Viereck) [m]. Siehe "Anmerkung" oben.
rP4z: Ermittelte Z-Koordinate des Punktes 4 des Verschattungselementes (Viereck) [m]. Siehe "Anmerkung" oben.
bErr: Ergebnis der Plausibilitätskontrolle für die eingegebenen Werte. In Bezug auf ein Viereck gilt, dass der Innenwinkel 360° beträgt und die Punkte in einer Ebene liegen und vor der betrachteten Fassade liegen. Bei einer Kugel muss der Mittelpunkt ebenfalls vor der Fassade liegen und der Radius muss größer Null sein.
sErrDescr: Enthält die Fehlerbeschreibung.
Fehlerbeschreibung |
---|
01: Fehler: Der Eingang udiId liegt außerhalb der zulässigen Grenzen 1..uiMaxShdObj. |
02 Fehler: Die Summe der Winkel des Vierecks ist nicht 360°. Das bedeutet, dass die Eckpunkte nicht in der Reihenfolge P1, P2, P3 und P4 sondern P1, P3, P2 und P4 sind. Dies ergibt ein über Kreuz geschlagenes Viereck. |
03: Fehler: Die Eckpunkte des Vierecks liegen nicht auf derselben Ebene. |
04: Fehler: Die z-Komponente von P1 ist kleiner Null. Damit läge dieser Eckpunkt hinter der Fassade. |
05: Fehler: Die z-Komponente von P3 ist kleiner Null. Damit läge dieser Eckpunkt hinter der Fassade. |
06: Fehler: P1 ist gleich P2. Damit ist das eingetragene Objekt kein Viereck. |
07: Fehler: P1 ist gleich P3. Damit ist das eingetragene Objekt kein Viereck. |
08: Fehler: P1 ist gleich P4. Damit ist das eingetragene Objekt kein Viereck. |
09: Fehler: P2 ist gleich P3. Damit ist das eingetragene Objekt kein Viereck. |
10: Fehler: P2 ist gleich P4. Damit ist das eingetragene Objekt kein Viereck. |
11: Fehler: P3 ist gleich P4. Damit ist das eingetragene Objekt kein Viereck. |
12: Fehler: Der eingetragene Radius ist gleich Null. |
13: Fehler: Die z-Komponente des Kugelmittelpunktes ist kleiner Null. Damit läge dieser Punkt hinter der Fassade. |
14: Fehler: Fehler Objekttyp eType - weder Viereck noch Kugel. |
15: Fehler: Fehler Monatseingabe. |
VAR_IN_OUT
arrShdObj : ARRAY[1..Param.uiMaxShdObj] OF ST_BA_ShdObj;
arrShdObj: Liste der Verschattungsobjekte.
Voraussetzungen
Entwicklungsumgebung | Erforderliche SPS-Bibliothek |
---|---|
TwinCAT ab v3.1.4024.7 | Tc3_BA ab v1.1.6.0 |