FB_FileOpen

FB_FileOpen 1:

Der Funktionsbaustein legt eine neue Datei an bzw. öffnet eine bereits bestehende Datei zur weiteren Bearbeitung.

FB_FileOpen 2: Eingänge

VAR_INPUT
    sNetId     : T_AmsNetId;
    sPathName  : T_MaxString;
    nMode      : DWORD;
    ePath      : E_OpenPath := PATH_GENERIC;
    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).

sPathName

T_MaxString

Speicherpfad und Dateiname der zu öffnenden Datei. Der Pfad kann nur auf das lokale Dateisystem des Rechners zeigen. Netzwerkpfade können hier nicht angegeben werden (Typ: T_MaxString).

nMode

DWORD

Modus für das Öffnen der Datei.

ePath

E_OpenPath

Über diesen Eingang kann ein TwinCAT-Systempfad auf dem Zielgerät zum Öffnen der Datei angewählt werden (Typ: E_OpenPath).

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.

Vordefinierte Öffnungsmodi für nMode

Modus für das Öffnen der Datei. Die nachfolgend aufgeführten Codes sind die verschiedenen Öffnungsmodi, die bereits in der Bibliothek als Konstanten vordefiniert sind, und dem Baustein dementsprechend symbolisch übergeben werden können. Die Öffnungsmodi können durch ODER‑Verknüpfung kombiniert werden. Die Öffnungsmodi können auf ähnliche Weise wie die Öffnungsmodi der fopen-Funktion in C bzw. C++ kombiniert werden.

Modi

Beschreibung

FOPEN_MODEREAD

r: Öffnet eine Datei zum Lesen. Wenn die Datei nicht gefunden werden kann oder nicht existiert, wird ein Fehler zurückgeliefert.

FOPEN_MODEWRITE

w: Öffnet eine leere Datei zum Schreiben. Wenn die Datei bereits existiert, dann wird sie überschrieben.

FOPEN_MODEAPPEND

a: Öffnet eine Datei zum Schreiben am Ende der Datei (anhängen). Wenn die Datei nicht existiert, wird zuerst eine neue angelegt.

FOPEN_MODEREAD OR FOPEN_MODEPLUS

r+: Öffnet eine Datei zum Lesen und zum Schreiben. Die Datei muss existieren.

FOPEN_MODEWRITE OR FOPEN_MODEPLUS

w+: Öffnet eine leere Datei zum Lesen und zum Schreiben. Wenn die Datei bereits existiert, dann wird sie überschrieben.

FOPEN_MODEAPPEND OR FOPEN_MODEPLUS

a+: Öffnet eine Datei zum Lesen und zum Schreiben am Ende der Datei (anhängen). Wenn die Datei nicht existiert, wird zuerst eine neue angelegt. Dazu muss der Speicherpfad bekannt sein, ansonsten erscheint der Fehler 1804. Alle Schreiboperationen werden immer am Ende einer Datei ausgeführt, wenn diese Datei in dem Modi a oder a+ geöffnet wurde. Der Dateizeiger kann mit FB_FileSeek versetzt werden, er wird aber beim Schreiben immer zuerst ans Ende der Datei bewegt. D. h. existierende Daten können nicht überschrieben werden.

FOPEN_MODEBINARY

b: Öffnet die Datei im Binär-Mode

FOPEN_MODETEXT

t: Öffnet die Datei im Text-Mode

FB_FileOpen 3: Ausgänge

VAR_OUTPUT
    bBusy  : BOOL;
    bError : BOOL;
    nErrId : UDINT;
    hFile  : UINT;(* file handle *)
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.

hFile

UINT

Enthält, nach erfolgreichem Öffnen, das erzeugte File-Handle für die Datei.

Dieses Handle wird dann an die anderen File-Funktionsbausteine als Kennung für die zu bearbeitete Datei übergeben.

Fehlercodes für hFile

Befehlsspezifischer Fehlercode

Mögliche Ursache

0x703

Unbekannter oder ungültiger nMode oder ePath Parameter.

0x70C

Datei nicht gefunden. Ungültiger Dateiname oder Dateipfad.

0x716

Keine weiteren freien File-Handles.

Information:

Bei dem Öffnungsmodus dürfen maximal 3 Parameter mit ODER verknüpft werden:

Mode = [ Parameter1 ] OR [ Parameter2 ] OR [ Paramerter3 ]
Parameter1 darf nur einen unterstehenden Wert haben:

Parameter2 darf nur einen unterstehenden Wert haben:

Parameter3 darf nur einen unterstehenden Wert haben:

Wenn kein Binär- oder Text-Mode angegeben wurde, öffnet die Datei in einem Mode der durch eine Betriebssystemvariable festgelegt ist. In den meisten Fällen öffnet die Datei dann im Text-Mode. Eine eindeutige Aussage ist jedoch nicht möglich. Es ist sinnvoll den Text oder Binärmode immer anzugeben. Diese Systemvariable kann nicht in der SPS geändert werden!
Daraus ergeben sich folgende zulässige Kombinationen:

Textdatei Öffnungsmodi

Binärdatei Öffnungsmodi

FOPEN_MODEREAD OR FOPEN_MODETEXT

FOPEN_MODEREAD OR FOPEN_MODEBINARY

FOPEN_MODEWRITE OR FOPEN_MODETEXT

FOPEN_MODEWRITE OR FOPEN_MODEBINARY

FOPEN_MODEAPPEND OR FOPEN_MODETEXT

FOPEN_MODEAPPEND OR FOPEN_MODEBINARY

FOPEN_MODEREAD OR FOPEN_MODEPLUS OR FOPEN_MODETEXT

FOPEN_MODEREAD OR FOPEN_MODEPLUS OR FOPEN_MODEBINARY

FOPEN_MODEWRITE OR FOPEN_MODEPLUS OR FOPEN_MODETEXT

FOPEN_MODEWRITE OR FOPEN_MODEPLUS OR FOPEN_MODEBINARY

FOPEN_MODEAPPEND OR FOPEN_MODEPLUS OR FOPEN_MODETEXT

FOPEN_MODEAPPEND OR FOPEN_MODEPLUS OR FOPEN_MODEBINARY

Alle anderen Kombinationen sind falsch. Beispiele für unzulässige Öffnungsmodi:
FOPEN_MODEBINARY OR FOPEN_MODETEXT
FOPEN_MODEWRITE OR FOPEN_MODEAPPEND

Beispiel für den Aufruf des Bausteins in ST:

Beispiel für den Aufruf des Bausteins in FBD:

PROGRAM Test
VAR
    fbFileOpen      : FB_FileOpen;
    bFileOpen       : BOOL;
    bFileOpenBusy   : BOOL;
    bFileOpenError  : BOOL;
    nFileOpenErrId  : UDINT;
    hFile           : UINT;
END_VAR
FB_FileOpen 4:

Hierbei soll die Datei TestFile2.txt im Root-Verzeichnis des Laufwerks C: im Textmode angelegt bzw. überschrieben werden.

Voraussetzungen

Entwicklungsumgebung

Zielplattform

Einzubindende SPS-Bibliotheken (Kategoriegruppe)

TwinCAT v3.1.0

PC oder CX (x86, x64, ARM)

Tc2_System (System)