FB_FileRead

FB_FileRead 1:

Mit dem Funktionsbaustein FB_FileRead kann der Inhalt einer bereits geöffneten Datei ausgelesen werden. Die Datei muss vor einem Lesezugriff im entsprechenden Modus geöffnet worden sein. Dabei ist neben dem FOPEN_MODEREAD auch das passende Format (FOPEN_MODEBINARY oder FOPEN_MODETEXT) wichtig, um das gewünschte Resultat zu erzielen.

FB_FileRead 2:

Dieser Funktionsbaustein ist nur bedingt für ein Logging in Echtzeit geeignet.
Für eine gute Performance empfehlen wir die Verwendung des kostenpflichtigen Produkts TF3500 TwinCAT Analytics Logger.

FB_FileRead 3: Eingänge

VAR_INPUT
    sNetId     : T_AmsNetId;
    hFile      : UINT;
    pReadBuff  : PVOID;
    cbReadLen  : UDINT;
    bExecute   : BOOL;
    tTimeout   : TIME := DEFAULT_ADS_TIMEOUT;
END_VAR

Name

Typ

Beschreibung

sNetId

T_AmsNetId

String, der die AMS-Netzwerkkennung des Zielgerätes enthält, an das der ADS-Befehl gerichtet wird (Typ: T_AmsNetId).

hFile

UINT

Datei-Handle, welches beim Aufruf des Funktionsbausteins FB_FileOpen erzeugt wurde.

pReadBuff

PVOID

Adresse des Puffers, in den die Daten gelesen werden sollen. Der Puffer kann eine Einzelvariable, ein Array oder eine Struktur sein, dessen Adresse mit dem ADR-Operator ermittelt werden kann.

cbReadLen

UDINT

Anzahl der zu lesenden Bytes

bExecute

BOOL

Durch eine steigende Flanke an diesem Eingang wird der Funktionsbaustein aktiviert.

tTimeout

TIME

Gibt die Timeout-Zeit an, die bei der Ausführung des ADS-Kommandos nicht überschritten werden darf.

FB_FileRead 4: Ausgänge

VAR_OUTPUT
    bBusy  : BOOL;
    bError : BOOL;
    nErrId : UDINT;
    cbRead : UDINT;    
    bEOF   : BOOL;
END_VAR

Name

Typ

Beschreibung

bBusy

BOOL

Bei der Aktivierung des Funktionsbausteins wird dieser Ausgang auf TRUE gesetzt und bleibt gesetzt, bis eine Rückmeldung erfolgt. Solange bBusy = TRUE ist, kann kein neuer Befehl ausgeführt werden.

bError

BOOL

Wenn bei der Ausführung des Befehls ein Fehler auftritt, wird dieser Ausgang gesetzt, nachdem der bBusy-Ausgang zurückgesetzt wurde.

nErrId

UDINT

Liefert bei einem gesetzten bError-Ausgang den ADS-Fehlercode oder den befehlsspezifischen Fehlercode.

cbRead

UDINT

Anzahl der aktuell gelesenen Bytes

bEOF

BOOL

Dieser Ausgang wird gesetzt, wenn das Dateiende erreicht worden ist und keine weiteren Datenbytes gelesen werden konnten (cbRead=0). Dieser Ausgang wird nicht gesetzt, wenn noch Datenbytes gelesen werden konnten (cbRead>0).

Befehlerspezifischer Fehlercode

Mögliche Ursache

0x703

Invalid or unknown file handle.

0x70A

No memory for read buffer.

0x70E

File was opened with wrong method (e.g. with obsolete FILEOPEN function block).

Beispiel für den Aufruf des Bausteins in ST:

Beispiel für den Aufruf des Bausteins in FBD:

PROGRAM Test
VAR
    fbFileRead        : FB_FileRead;
    hFile             : UINT;
    bFileRead         : BOOL;
    bFileReadBusy     : BOOL;
    bFileReadError    : BOOL;
    nFileReadErrorId  : UDINT;
    nFileReadCount    : UDINT;
    bFileReadEOF      : BOOL;
    fileData          : ARRAY[0..9] OF BYTE;
END_VAR
FB_FileRead 5:

Nach steigender Flanke von bExecute und erfolgreicher Ausführung des Lese-Befehls, befinden sich in FILEDATA die aktuell gelesenen Bytes der Datei. Wie viele Bytes beim jeweils letzten Lesevorgang tatsächlich gelesen wurden, kann anhand des Parameters cbRead ermittelt werden.

Voraussetzungen

Entwicklungsumgebung

Zielplattform

Einzubindende SPS-Bibliotheken (Kategoriegruppe)

TwinCAT v3.1.0

PC oder CX (x86, x64, ARM)

Tc2_System (System)