FB_FileRingBuffer

FB_FileRingBuffer 1:

Mit dem Funktionsbaustein FB_FileRingBuffer können Datensätze unterschiedlicher Länge in eine Ringpufferdatei geschrieben oder die vorher geschriebenen Datensätze aus der Ringpufferdatei ausgelesen werden. Die geschriebenen Datensätze werden nach dem FIFO-Prinzip in der gleichen Reihenfolge ausgelesen, in der sie vorher in die Ringpufferdatei geschrieben wurden. D.h. beim Lesen werden zuerst die ältesten Einträge ausgelesen. Das Öffnen/Schließen/Schreiben/Lesen der Datensätze wird durch Aktionsaufrufe gesteuert. Der Funktionsbaustein besitzt folgende Aktionen:

Beim Öffnen der Ringpufferdatei wird bei einer existierenden Datei zuerst der Dateiheader gelesen. Bei einer Ringpufferdatei, die vorher fehlerfrei geschlossen wurde, muss das Bit 0 im Header.status.Bit 0 = Null sein. Bei einem anderen Wert wird angenommen, dass die Datei vorher nicht richtig geschlossen wurde und die korrupte Datei durch eine neue leere Datei ersetzt sowie das Header.status.Bit 1 = 1 gesetzt (file corrupted). Beim Schließen der Datei wird das Header.status.Bit 0 = 0 gesetzt und der komplette Dateiheader in der Datei aktualisiert.

FB_FileRingBuffer 2: Eingänge

VAR_INPUT
    sNetId     : T_AmsNetId := '';
    sPathName  : T_MaxString := 'c:\Temp\data.dat';
    ePath      : E_OpenPath := PATH_GENERIC;
    nID        : UDINT := 0;
    cbBuffer   : UDINT := 16#100000;
    bOverwrite : BOOL := FALSE;
    pWriteBuff : POINTER TO BYTE;
    cbWriteLen : UDINT;
    pReadBuff  : POINTER TO BYTE;
    cbReadLen  : UDINT;
    tTimeout   : TIME := DEFAULT_ADS_TIMEOUT;
END_VAR

Name

Typ

Beschreibung

sNetID

T_AmsNetID

Hier kann ein String mit der Netzwerkadresse des TwinCAT-Rechners angegeben werden, dessen Verzeichnis durchsucht werden soll. Für den lokalen Rechner kann auch ein Leerstring angegeben werden.

sPathName

T_MaxString

Enthält den Pfad- und Dateinamen der zu öffnenden Pufferdatei (Typ: T_MaxString). Hinweis: Der Pfad kann nur auf das lokale File System des Rechners zeigen! Das bedeutet, Netzwerkpfade können hier nicht angegeben werden!.

ePath

E_OpenPath

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

nID

UDINT

Benutzerdefinierter 32 Bit Wert. Dieser Wert wird beim Öffnen einer neuen Datei in die Datei gespeichert und kann z.B. zur Versionsüberprüfung der Pufferdatei benutzt werden.

cbBuffer

UDINT

Max. Bytegröße der zu öffnenden Pufferdatei. Dieser Parameter wird beim Erstellen der Datei in dem Dateiheader gespeichert und wird beim erneuten Öffnen derselben Datei überprüft. Sie können nur Dateien erneut öffnen, die mit der gleichen max. Puffergröße erstellt wurden. D.h. Sie können nicht eine Datei mit einer kleineren Puffergröße erstellen, mit Datensätzen füllen und mit einer größeren Puffergröße erneut öffnen. Wenn die Überprüfung der max. Puffergröße fehlschlägt wird automatisch eine neue Datei mit der neuen Puffergröße erstellt und geöffnet. Zusätzlich wird das Bit 1 (file corrupted) in dem Datei-Header-Status gesetzt.

bOverwrite

BOOL

Schreibverhalten beim Erreichen der max. Dateipuffergröße. Bei TRUE an diesem Eingang werden die ältesten Einträge überschrieben, wenn die max. Dateipuffergröße bereits erreicht wurde (es werden so lange Einträge gelöscht bis die freie Puffergröße ausreichend ist um den neuen Eintrag zu speichern). Beim FALSE an diesem Eingang wird ein Pufferüberlauf beim Erreichen der max. Dateipuffergröße als Fehler gemeldet.

pWriteBuff

BYTE

Adresse der SPS-Variablen oder einer Puffervariablen, die die zu schreibenden Value-Daten enthält. Die Adresse kann mit dem ADR-Operator ermittelt werden. Der Programmierer ist selbst dafür verantwortlich die Puffervariable so zu dimensionieren, dass cbWriteLen-Datenbytes daraus entnommen werden können.

cbWriteLen

UDINT

Anzahl der zu schreibenden Value-Datenbytes ( Bei Stringvariablen inklusive der abschließenden Null ).

pReadBuff

BYTE

Adresse der SPS-Variablen oder einer Puffervariablen in welche die gelesenen Value-Daten hineinkopiert werden sollen. Die Adresse kann mit dem ADR-Operator ermittelt werden. Der Programmierer ist selbst dafür verantwortlich die Puffervariable so zu dimensionieren, dass diese cbReadLen-Datenbytes aufnehmen kann. Die Bytegröße der Puffervariablen muss größer oder gleich der Größe des zu lesenden Datensatzes sein.

cbReadLen

UDINT

Anzahl der zu lesenden Value-Datenbytes. Bei einer zu kleinen Puffergröße werden keine Daten kopiert, der Funktionsbaustein meldet einen Puffer-Underflow-Fehler und die benötigte Puffergröße für den nächsten zu lesenden Datensatz wird am cbReturn-Ausgang zurückgeliefert.

tTimeout

TIME 

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

FB_FileRingBuffer 3: Ausgänge

VAR_OUTPUT
    bBusy     : BOOL;
    bError    : BOOL;
    nErrId    : UDINT;
    cbReturn  : UDINT;
    stHeader  : ST_FileRBufferHead;
END_VAR

Name

Typ

Beschreibung

bBusy

BOOL

Bei der Aktivierung des Funktionsbausteins wird dieser Ausgang gesetzt und bleibt gesetzt, bis eine Rückmeldung erfolgt.

bError

BOOL

Sollte ein Fehler bei der Übertragung des Kommandos erfolgen, dann wird dieser Ausgang gesetzt, nachdem der bBusy-Ausgang zurückgesetzt wurde.

nErrId

UDINT

Liefert bei einem gesetzten bError-Ausgang die ADS-Fehlernummer.

cbReturn

UDINT

Anzahl der erfolgreich gelesenen Value-Datenbytes. Beim Lesepuffer-Underflow-Fehler liefert dieser Ausgang die benötigte Lesepuffer-Bytegröße.

stHeader

ST_FileRBufferHead

Ringpuffer-Dateiheader/-Status.

Beispiel:

Siehe: Beispiel: Datei-Ring-FiFo (FB_FileRingBuffer).

Voraussetzungen

Entwicklungsumgebung

Zielplattform

Einzubindende SPS-Bibliotheken (Kategoriegruppe)

TwinCAT v3.1.0

PC oder CX (x86, x64, Arm®)

Tc2_Utilities (System)