# LGF_FileRead (FB / 1.0.1)

Übersicht

Autor: Simatic Systems Support

## Kurzbeschreibung

Dieser Funktionsbaustein bietet das Lesen von Daten als binärer / serialisierter Datenstrom aus Dateien, die auf der Speicherkarte der SPS im Ordner `UserFiles` abgelegt sind.

### Baustein Schnittstelle

| LGF_FileRead (FB) |
--- | --- | ---
Bool |  |  | execute |  | done |  |  | Bool
Bool |  |  | dataLengthMustMatch |  | busy |  |  | Bool
String |  |  | fileName |  | error |  |  | Bool
|  |  |  |  | status |  |  | Word
|  |  |  |  | dataLength |  |  | DInt
|  |  |  |  | diagnostics |  |  | LGF_typeDiagnostics
Array[*] of Byte |  |  | bufferByteArray |  |  | Array[*] of Byte
Variant |  |  | data |  |  | Variant

### Input Parameter

Bezeichner | Datentyp | Default Wert | Beschreibung
--- | --- | --- | ---
execute | Bool | FALSE | Steigende Flanke startet einmaliges Lesen der Datei
dataLengthMustMatch | Bool | FALSE | TRUE: Die Länge der Daten aus der Datei und der PLC muss übereinstimmen.
fileName | String | '' | Name der Datei inklusiv Pfad: `UserFiles/test.dat`

### Output Parameter

Bezeichner | Datentyp | Beschreibung
--- | --- | ---
done | Bool | TRUE: FB-Abarbeitung erfolgreich fertiggestellt
busy | Bool | TRUE: FB ist aktiv; neue Ausgabewerte können erwartet werden.
error | Bool | TRUE: Bei der Ausführung der Funktionalität ist ein Fehler aufgetreten
status | Word | 16#0000-16#7FFF: Status des FB / 16#8000-16#FFFF: Fehleridentifikation (siehe folgende Tabelle)
dataLength | DInt | Datenlänge die aus der Datei gelesen wurde (Serialisierte Länge von `data`)
diagnostics | LGF_typeDiagnostics | Diagnosestruktur zur Speicherung und Übertragung von Diagnoseinformationen von Blöcken über die Schnittstelle.

### In/Out Parameter

Bezeichner | Datentyp | Beschreibung
--- | --- | ---
bufferByteArray | Array[*] of Byte | Byte-Array-Puffer für Lesen / Schreiben aus / in Datei
data | Variant | Datensatz aus Datei gelesen

### Status & Error Meldungen

Code / Wert | Bezeichner / Beschreibung
--- | ---
16#0000 | STATUS_EXECUTION_FINISHED Ausführung ohne Fehler beendet
16#7000 | STATUS_NO_CALL Kein Job wird gerade verarbeitet
16#7001 | STATUS_FIRST_CALL Erster Aufruf nach Eingang eines neuen Auftrags (steigende Flanke 'execute')
16#7002 | STATUS_SUBSEQUENT_CALL Nachfolgender Aufruf bei aktiver Verarbeitung ohne weitere Angaben
16#8201 | ERR_BUFFER_LOWERBOUND Fehler: Untere Grenze des Pufferarrays Untere Grenze muss 0 sein
16#8202 | ERR_BUFFER_ARRAY_TO_SMALL_TO_COPY Fehler: Puffergröße kleiner als benötigte Größe für Daten
16#8401 | ERR_FILE_PATH Fehler: Dateipfad Fehler: der Dateipfad muss mit 'UserFiles/' beginnen.
16#8411 | ERR_FILE_SIZE_GRATER_THEN_DATA_SIZE Fehler: Dateilänge und Datenlänge stimmen nicht überein!
16#8412 | ERR_FILE_SIZE_LESS_THEN_DATA_SIZE Fehler: Dateilänge und Datenlänge stimmen nicht überein!
16#8600 | ERR_UNDEFINED_STATE Fehler aufgrund eines undefinierten Zustands im Zustandsautomaten
16#8601 | ERR_MOVE_BLK_VARIANT Fehler: Blockvariante verschieben (Puffer nach Daten) - siehe `diagnostics.subFunctionStatus`
16#8602 | ERR_DATA_SERIALIZE Fehler: Daten Serialisieren - siehe `diagnostics.subFunctionStatus`
16#8603 | ERR_DATA_DESERIALIZE Fehler: Daten Deserialisieren - siehe `diagnostics.subFunctionStatus`
16#8604 | ERR_FILE_READ_INIT Fehler: Datei von der SMC lesen - siehe `diagnostics.subFunctionStatus`
16#8605 | ERR_FILE_READ Fehler: Datei von SMC lesen - siehe `diagnostics.subFunctionStatus`

## Benutzer definierte Datentypen

### LGF_typeDiagnostics (UDT / V1.0.1)

Diagnosestruktur zur Speicherung und Übertragung von Diagnoseinformationen von Blöcken über die Schnittstelle.

Bezeichner | Datentyp | Default Wert | Beschreibung
--- | --- | --- | ---
status | Word | 16#0000 | Status des Bausteins oder Fehleridentifikation beim Auftreten des Fehlers
subfunctionStatus | Word | 16#0000 | Status oder Rückgabewert von aufgerufenen FB's, FC's und Systembausteinen
stateNumber | DInt | 0 | Zustand in der Zustandsmaschine des Blocks, in dem der Fehler aufgetreten ist

## Funktionsbeschreibung

Mit der Funktion `LGF_FileRead` kann eine Datei in den Datenhaushalt einer Variable an `data` eingelesen werden. Zum Lesen der Daten ist es notwendig diese zu deserialisieren, was die Funktion dem Anwender bereits abnimmt.
Zum Deserialisieren muss dafür ein externer Puffer in Form eines Byte Arrays verschaltet werden, der die Datenmenge aufnehmen kann, ist der Puffer zu klein wird ein Fehler ausgegeben.

Der Dateiname muss immer vollumfänglich zusammen mit dem Ordner Namen und der Datei Erweiterung in folgendem Format angegeben werden: `UserFiles/test.dat`

## Änderungshistorie

Version & Datum | Änderungsbeschreibung
--- | ---
| 1.0.0 | Simatic Systems Support
| 19.02.2023 | First released version
| 1.0.1 | Simatic Systems Support
| 29.04.2025 | Add missing text in constant area