FB_BARReadFacadeElementList

Mit Hilfe dieses Bausteines lassen sich Daten für Fassadenelemente (Fenster) aus einer vordefinierten Excel-Tabelle im csv-Format in die Liste der Fassadenelemente importieren. Zusätzlich werden die importierten Daten auf Plausibilität überprüft und Fehler in eine Log-Datei geschrieben.
VAR_INPUT
bStart : BOOL;
sDataFile : STRING;
sLogFile : STRING;
sNetId : STRING;
bStart: Eine TRUE-Flanke an diesem Eingang startet den Lesevorgang.
sDataFile: Enthält den Pfad- und Dateinamen der zu öffnenden Daten-Datei. Diese muss in Excel als Dateityp "CSV (Trennzeichen-getrennt) (*.csv)" abgespeichert worden sein. Öffnet man die Datei mit einem einfachen Text-Editor, so müssen die Werte durch Semikolons getrennt dargestellt sein. Beispiel für einen Eintrag: sDataFile:= 'C:\Projects\FacadeElements.csv'
sLogFile: dto. Log-File für die auflaufenden Fehler. Diese Datei wird bei jeder neuen Bausteinaktivierung überschrieben, so dass nur aktuelle Fehler enthalten sind.
sNetId: Hier kann ein String mit der AMS Net Id des TwinCAT-Rechners angegeben werden, auf dem die Dateien geschrieben/gelesen werden sollen. Für den lokalen Rechner kann auch ein Leerstring angegeben werden.
![]() | Die Speicherung der Daten kann nur auf dem Steuerungsrechner selbst und den Rechnern erfolgen, die mit dem Steuerungsrechner per ADS verbunden sind. Verweise auf lokale Festplatten dieser Rechner sind möglich, nicht jedoch auf verbundene Netzwerkfestplatten. |
VAR_OUTPUT
bBusy : BOOL;
bError : BOOL;
udiErrorId : UDINT;
uiAmountOfSetsRead : UINT;
bBusy: Dieser Ausgang steht auf TRUE, solange Elemente aus der Datei ausgelesen werden.
bError: Dieser Ausgang wird auf TRUE geschaltet, wenn die eingetragenen Parameter fehlerhaft sind oder wenn ein Datei- Schreib- bzw. Lesefehler aufgetreten ist.
udiErrorId: Enthält den Fehlercode des zuletzt aufgetretenen Fehlers. Siehe Fehlercodes bzw. ADS_Fehlercodes.
uiAmountOfSetsRead: Anzahl der gelesenen Datensätze
VAR_IN_OUT
arrFacadeElement : ARRAY[1..iColumnsPerFacade, 1..iRowsPerFacade] OF ST_BARFacadeElement;
arrFacadeElement: Liste von Fassadenelementen.
Excel-Tabelle
Das folgende Beispiel zeigt die Excel-Tabelle mit den Einträgen der Fensterelemente.
Alle Textfelder sind frei beschreibbar, wichtig sind die grün markierten Felder, wobei dort jede Zeile einen Datensatz kennzeichnet.
Folgende Regeln sind zu beachten:
- Ein Datensatz muss immer mit einem '@' beginnen.
- Die Indizes IndexColumn und IndexRow müssen innerhalb der definierten Grenzen liegen, siehe Liste von Fassadenelementen. Mit diesen Indizes wird direkt beschrieben, in welches Fassadenelement der Liste arrFacadeElements die Daten des Satzes hineingelegt werden.
- Fensterbreite und Fensterhöhe müssen größer Null sein
- Die Eck-Koordinaten P1x und P1y müssen größer oder gleich Null sein.
- Jedes Fensterelement muss einer Gruppe 1..255 zugeordnet sein.
- Die Gesamtgröße der Tabelle darf systembedingt 65534 Bytes nicht überschreiten.
- Die Tabelle muss in Excel als Dateityp "CSV (Trennzeichen-getrennt) (*.csv)" abgespeichert worden sein.
Es ist nicht notwendig, alle Fensterelemente zu beschreiben, die per Definition bzw. Deklaration möglich wären. Bevor die neue Liste eingelesen wird, löscht der Baustein die gesamte alte Liste im Programm. Alle Elemente, welche dann nicht durch Einträge in der Excel-Tabelle beschrieben werden, haben reine Null-Einträge und sind dadurch als nicht-vorhanden gekennzeichnet und auch nicht auswertbar, da der Baustein zur Verschattungskorrektur, FB_BARSunProtectionEx, Elemente mit Gruppeneintrag '0' nicht annimmt.
Log-Datei
Bei jedem Start des Lesebausteines wird die Logdatei neu beschrieben und der alte Inhalt gelöscht. Ist die Log-Datei nicht vorhanden, so wird sie zunächst automatisch erstellt. Die Log-Datei enthält dann entweder eine OK Meldung oder eine Auflistung aller aufgetretenen Fehler. Fehler, welche mit dem Öffnen, Beschreiben oder Schließen der Logdatei selbst in Zusammenhang stehen, können nicht mitgeschrieben werden. Daher ist immer auch der Ausgang udiErrorId des Lesebausteines zu beachten, welcher den letzten Fehlercode anzeigt. Da im Ablauf des Lesens die Log-Datei immer als Letztes geschlossen wird, ist ein entsprechender Hinweis im Fehlerfall gewährleistet.
Programmbeispiel
In diesem Beispiel wird bei PLC-Start die Variable bInit zunächst auf TRUE gesetzt. Damit erhält der Eingang bStart am Baustein fbReadFacadeElementList einmalig eine steigende Flanke, welcher den Lesevorgang auslöst. Gelesen wird die Datei "FacadeElements.csv", welche sich im Ordner "C:\Projects\" befindet. In demselben Ordner wird dann die Logdatei "Logfile.txt" hinterlegt. Ist diese Logdatei noch nicht vorhanden wird sie erstellt, andernfalls wird der bestehende Inhalt überschrieben. Das Lesen und Schreiben erfolgt auf demselben Rechner, auch dem sich auch die PLC befindet. Das wird durch den Eingang sNetID = '' (=lokal) definiert. Alle Daten werden in die im Programm deklarierte Liste arrFacadeElement geschrieben. Solange gelesen und geschrieben wird ist der Ausgang bBusy auf TRUE. Der zuletzt auftretende Fehler wird an udiErrorId angezeigt, bError steht dann auf TRUE. Die Anzahl der gefundenen und gelesenen Datenzeilen wird an uiAmountOfSetsRead zur Kontrolle angezeigt.
In die folgende Excel Liste wurden die markierten Fehler "eingebaut". Dadurch ergibt sich das gezeigte Log-File:
Der erste Fehler ist im Datensatz 2 und ein Index-Fehler, da "0" nicht erlaubt ist.
Der nächste Fehler in Datensatz 6 wurde nach Validierung der Daten mit dem intern genutzten Baustein FB_BARShadingObjectsEntry gefunden und daher näher mit einer Fehlernummer versehen, welche unter Fehlercodes näher aufgeschlüsselt wird. Der dritte und der vierte Fehler trat ebenfalls nach der internen Validierung auf. Wichtig hierbei ist, dass sich die Datensatz-Nummern (hier 22 und 24) nicht nach den eingetragenen Nummern in der Liste, sondern nach den tatsächlichen laufenden Nummern richten: eingelesen wurden hier lediglich 30 Datensätze.
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 |