FB_NovRamReadWriteEx

FB_NovRamReadWriteEx 1:

Der Funktionsbaustein FB_NovRamReadWriteEx greift aus einem SPS-Programm auf das NOV-RAM zu (z.B. der FCxxxx-0002 Feldbuskarten, CX9000 NOV-RAM etc.). Bei einer steigenden Flanke am bRead oder bWrite-Eingang wird der Funktionsbaustein aktiviert und eine entsprechende Anzahl Datenbytes aus dem NOV-RAM gelesen bzw. in das NOVRAM geschrieben. Wurden gleichzeitig beide Eingänge: bRead und bWrite gesetzt, dann werden die Daten zuerst in das NOVRAM geschrieben und dann zurück gelesen. Der Unterschied zum Baustein FB_NovRamReadWrite ist, dass der Adressoffset im NOVRAM für Schreib- und Lesezugriffe angegeben werden kann. Außerdem überprüft der Baustein die erlaubte Zugriffsart auf den NOVRAM Speicher und kopiert wenn nötig die Daten byteweise in den NOVRAM Speicher, anstatt ein MEMCPY zu verwenden. Das NOVRAM vom CX9000 erlaubt z.B. nur Byte-Zugriffe und der Baustein FB_NovRamReadWrite würde in diesem Fall einen Fehler zurückliefern.

Bemerkungen:

Um den Addresspointer auf das NOVRAM zu ermitteln, wird von dem FB_NovRamReadWriteEx-Funktionsbaustein intern eine Instanz des ADSREAD-Funktionsbausteines verwendet. Dieser Addresspointer wird aber nur beim ersten Aufruf des FB_NovRamReadWriteEx-Funktionsbausteins und bei einer Änderung von nDevId neu ermittelt. Dafür werden mehrere SPS-Zyklen benötigt. Um die Daten in das NOVRAM zu schreiben oder aus dem NOVRAM zu lesen wird direkt auf den NOVRAM Speicher zugegriffen. Dadurch können die Daten im gleichen SPS-Zyklus geschrieben bzw. gelesen werden. Intern wird auch die maximale Bytelänge des NOVRAM ermittelt, und die maximale Länge der Daten, die gelesen oder geschrieben werden können, auf diese Länge begrenzt.

FB_NovRamReadWriteEx 2: Eingänge

VAR_INPUT
    nDevId     : UDINT;
    bRead      : BOOL;
    bWrite     : BOOL;
    cbSrcLen   : UDINT;
    cbDestLen  : UDINT;
    pSrcAddr   : PVOID;
    pDestAddr  : PVOID;
    nReadOffs  : UDINT;
    nWriteOffs : UDINT;
    tTimeOut   : TIME := DEFAULT_ADS_TIMEOUT;
END_VAR

Name

Typ

Beschreibung

nDevId

UDINT

Die Geräte-Id einer NOVRAM-Karte. Über die Id wird das NOVRAM einer FCxxxx-0002 Karte spezifiziert, auf das mit dem Funktionsbaustein schreibend oder lesend zugegriffen werden soll. Die Geräte-Ids werden während der Hardware-Konfiguration vom TwinCAT-System festgelegt.

bRead

BOOL

Bei einer positiven Flanke an diesem Eingang wird der Baustein aktiviert und cbDestLen-Daten aus dem NOVRAM (ab dem Addressoffset NULL) in den Puffer mit der Adresse pDestAddr hineinkopiert.

bWrite

BOOL

Bei einer positiven Flanke an diesem Eingang wird der Baustein aktiviert und cbSrcLen-Daten aus dem Puffer mit der Adresse pSrcAddr in das NOVRAM (ab dem Addressoffset NULL) hineinkopiert.

cbSrcLen

UDINT

Die Bytelänge der Daten, die in das NOVRAM geschrieben werden sollen.

cbDestLen

UDINT

Die Bytelänge der Daten, die aus dem NOVRAM gelesen werden sollen.

pSrcAddr

PVOID

Der Addresspointer auf einen Datenpuffer mit den Daten, die in das NOV-RAM geschrieben werden sollen. Der Addresspointer kann mit dem ADR-Operator ermittelt werden.

pDestAddr

PVOID

Der Addresspointer auf einen Datenpuffer, in den die gelesenen NOV-RAM-Daten hineinkopiert werden sollen.

nReadOffs

UDINT

Der Adressoffset im NOVRAM ab dem gelesen werden soll.

nWriteOffs

UDINT

Der Adressoffset im NOVRAM ab dem geschrieben werden soll.

tTimeOut

TIME

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

FB_NovRamReadWriteEx 3: Ausgänge

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

Name

Typ

Beschreibung

bBusy

BOOL

Bei der Aktivierung des Funktionsbausteins wird dieser Ausgang gesetzt und bleibt gesetzt, bis die Ausführung abgeschlossen wurde.

bError

BOOL

Sollte ein Fehler bei der Ausführung erfolgen, dann wird dieser Ausgang gesetzt.

nErrId

UDINT

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

cbRead

UDINT

Anzahl der erfolgreich gelesenen Datenbytes.

cbWrite

UDINT

Anzahl der erfolgreich geschriebenen Datenbytes.

Beispiel:

PROGRAM MAIN
VAR
    fbNovRamReadWrite : FB_NovRamReadWriteEx;
    bRead             : BOOL;
    bWrite            : BOOL;
    fromNovRam        : ARRAY[1..100] OF BYTE;
    toNovRam          : ARRAY[1..100] OF BYTE;
    bBusy             : BOOL;
    bError            : BOOL;
    nErrID            : UDINT;
    cbRead            : UDINT;
    cbWrite           : UDINT;
    readOffs          : UDINT :=0;
    writeOffs         : UDINT:=0;
    cbToWrite         : UDINT := 100;
    cbToRead          : UDINT := 100;
END_VAR
FB_NovRamReadWriteEx 4:

Im Beispiel wurden bei einer steigenden Flanke am bRead-Eingang 100 Byte Daten aus dem NOV-RAM ausgelesen und in das Array fromNovRam hineinkopiert.

Voraussetzungen

Entwicklungsumgebung

Zielplattform

IO-Hardware

Einzubindende SPS-Bibliotheken (Kategoriegruppe)

TwinCAT v3.1.0

PC oder CX (x86)

FCxxxx cards mit NOV-RAM (FCxxxx-0002)

Tc2_IoFunctions (IO)