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 NOV-RAM geschrieben. Wurden gleichzeitig beide Eingänge: bRead und bWrite gesetzt, dann werden die Daten zuerst in das NOV-RAM geschrieben und dann zurück gelesen. Der Unterschied zum Baustein FB_NovRamReadWrite ist, dass der Adressoffset im NOV-RAM für Schreib- und Lesezugriffe angegeben werden kann. Außerdem überprüft der Baustein die erlaubte Zugriffsart auf den NOV-RAM Speicher und kopiert wenn nötig die Daten byteweise in den NOV-RAM Speicher anstatt ein MEMCPY zu verwenden. Das NOV-RAM 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 NOV-RAM 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 NOV-RAM zu schreiben oder aus dem NOV-RAM zu lesen wird direkt auf den NOV-RAM Speicher zugegriffen. Dadurch können die Daten im gleichen SPS-Zyklus geschrieben bzw. gelesen werden. Intern wird auch die maximale Bytelänge des NOV-RAM ermittelt, und die maximale Länge der Daten, die gelesen oder geschrieben werden können, auf diese Länge begrenzt.

VAR_INPUT

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

nDevId: Die Geräte-Id einer NOV-RAM-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 Manager festgelegt.

bRead: Bei einer positiven Flanke an diesem Eingang wird der Baustein aktiviert und cbDestLen-Daten aus dem NOV-RAM (ab dem Adressoffset nReadOffs) in den Puffer mit der Adresse pDestAddr hineinkopiert.

bWrite: Bei einer positiven Flanke an diesem Eingang wird der Baustein aktiviert und cbSrcLen-Daten aus dem Puffer mit der Adresse pSrcAddr in das NOV-RAM (ab dem Adressoffset nWriteOffs) hineinkopiert.

cbSrcLen: : Die Bytelänge der Daten, die in das NOV-RAM geschrieben werden sollen.

cbDestLen: Die Bytelänge der Daten, die aus dem NOV-RAM gelesen werden sollen.

pSrcAddr: 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: Der Addresspointer auf einen Datenpuffer, in den die gelesenen NOV-RAM-Daten hineinkopiert werden sollen.

nReadOffs: Der Adressoffset im NOV-RAM ab dem gelesen werden soll.

nWriteOffs: Der Adressoffset im NOV-RAM ab dem geschrieben werden soll.

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

VAR_OUTPUT

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

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

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

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

cbRead: Anzahl der erfolgreich gelesenen Datenbytes.

cbWrite: 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 2:

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)