FB_MemRingBufferEx

FB_MemRingBufferEx 1:

Mit dem Funktionsbaustein FB_MemRingBufferEx können Datensätze unterschiedlicher Länge in einen Ringpuffer geschrieben oder die vorher geschriebenen Datensätze aus dem Ringpuffer ausgelesen werden. Die geschriebenen Datensätze werden nach dem FIFO-Prinzip in der gleichen Reihenfolge ausgelesen, in der sie vorher in den Ringpuffer geschrieben wurden. D.h. beim Lesen werden zuerst die ältesten Einträge ausgelesen. Der Pufferspeicher wird dem Funktionsbaustein über die pBuffer / cbBuffer-Eingangsvariablen zur Verfügung gestellt. Das Schreiben/Lesen der Datensätze wird durch Aktionsaufrufe gesteuert.

Dieser Funktionsbaustein ähnelt in der Funktion dem FB_MemRingBuffer-Funktionsbaustein. Beim Lesen der Datensätze kopiert der FB_MemRingBuffer die Daten in eine externe Puffervariable. Der FB_MemRingBufferEx liefert aber nur eine Referenz auf den Datensatz (Adresspointer/Länge). Die Applikation muss dann die Daten für die Weiterverarbeitung selber umkopieren.

Der Funktionsbaustein besitzt folgende Aktionen:

FB_MemRingBufferEx 2: Eingänge

VAR_INPUT
    pWrite   : POINTER TO BYTE;
    cbWrite  : UDINT;
    pBuffer  : POINTER TO BYTE;
    cbBuffer : UDINT;
END_VAR

Name

Typ

Beschreibung

pWrite

ARRAY OF 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 cbWrite-Datenbytes daraus entnommen werden können.

cbWrite

UDINT

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

pBuffer

ARRAY OF BYTE

Adresse einer SPS-Variablen (z.B. ARRAY[...] OF BYTES) die vom Funktionsbaustein als Pufferspeicher benutzt werden soll. Die Adresse kann mit dem ADR-Operator ermittelt werden.

cbBuffer

UDINT

Maximale Bytegröße der SPS-Variablen die als Pufferspeicher benutzt werden soll. Die Größe kann mit dem SIZEOF-Operator ermittelt werden.

FB_MemRingBufferEx 3: Ausgänge

VAR_OUTPUT
    bOk    : BOOL;
    pRead  : POINTER TO BYTE;
    cbRead : UDINT; 
    nCount : UDINT;
    cbSize : UDINT;
    cbFree : UDINT;
END_VAR

Name

Typ

Beschreibung

bOk

BOOL

Liefert TRUE, wenn ein neuer Datensatz erfolgreich hinzugefügt oder entfernt werden konnte und FALSE beim Puffer-Überlauf oder wenn keine Einträge im Puffer mehr vorhanden sind.

pRead

BYTE

Diese Variable liefert nach dem Aufruf der Aktion: A_GetHead beim Erfolg (bOk=TRUE) eine Referenz (Adresspointer) auf den ältesten Datensatz im Ringpuffer. Es wird Null zurückgeliefert, wenn keine Datensätze mehr im Ringpuffer vorhanden sind.

cbRead

UDINT

Diese Variable liefert nach dem Aufruf der Aktion: A_GetHead beim Erfolg (bOk=TRUE) die Länge vom ältesten Datensatz im Ringpuffer. Es wird Null zurückgeliefert, wenn keine Datensätze mehr im Ringpuffer vorhanden sind.

nCount

UDINT

Liefert die aktuelle Anzahl der gepufferten Datensätze.

cbSize

UDINT

Liefert die aktuelle Anzahl der belegten Datenbytes im Puffer. Die Anzahl der belegten Datenbytes ist immer größer als die tatsächliche Anzahl der geschriebenen Value-Daten. Jeder Datensatz wird um zusätzliche Informationen ergänzt, um ihn später lokalisieren zu können.

cbFree

UDINT

Liefert nach dem Aufruf der Aktion: A_GetFreeSize die Bytegröße des größten freien Speichersegments im Puffer. Die Datensätze müssen auf kontinuierlichen Adressen im Pufferspeicher vorhanden sein da der Funktionsbaustein Referenz auf die Datensätze zurückliefert. Dies führt automatisch zu Segmentierung am Pufferende. Dieser Speicher kann nicht verwendet werden, wenn der neue Datensatz größer ist als das freie Segment am Pufferende.

Beispiel:

Siehe: Beispiel: Memory-Ring FiFo (FB_MemRingBufferEx).

Voraussetzungen

Entwicklungsumgebung

Zielplattform

Einzubindende SPS-Bibliotheken (Kategoriegruppe)

TwinCAT v3.1.0

PC oder CX (x86, x64, Arm®)

Tc2_Utilities (System)