FB_GetDPRAMInfoEx

FB_GetDPRAMInfoEx 1:

Der Funktionsbaustein FB_GetDPRAMInfoEx ermittelt den Addresspointer und die konfigurierte Größe des NOV/DP-RAM einer Feldbuskarte. Der Addresspointer kann z.B. dazu benutzt werden, um direkt auf das NOV-RAM der Fcxxx-0002 (Beckhoff) Karten oder DPRAM der von TwinCAT nicht unterstützen Karten (Dritthersteller) schreiben oder lesend zugreifen zu können. Die Karte muss vorher im TwinCAT-System als allgemeines NOV/DP-RAM konfiguriert werden.

Der Ausgang stInfo liefert neben der Adresse (pCardAddress) und der Größe (iCardMemSize) des NOV/DP-RAM auch die Art des Zugriffs (eAccessType).

Wenn das NOV/DP-RAM keinen speziellen Zugriff (BYTE oder WORD aligned) erfordert, können im SPS-Programm die MEMCPY-, MEMSET-oder MEMCMP-Funktionen benutzt werden, um auf einen beliebigen Speicheroffset schreibend/lesend zugreifen zu können. Erfordert das NOV/DP-RAM einen speziellen Zugriff (BYTE-oder WORD-aligned), dann darf nur mit passender Datengröße zugegriffen werden. Hierfür sollte der FB_NovRamReadWriteEx verwendet werden.

VAR_INPUT
    nDevId      :    UDINT; (*Device id of the FCxxxx or other DPRAM card (Map the FC card as generic DPRAM/NOVRAM card im System Manager first)*)
    bExecute    :    BOOL; (*Rising edge starts function block execution*)
    tTimeOut    :    TIME; (*Max. timeout for this command*)
END_VAR

nDevId: Die Geräte-Id einer NOV/DP-RAM-Karte. Über die Id wird die Karte spezifiziert, deren Informationen gelesen werden sollen. Die Geräte-Ids werden während der Hardware-Konfiguration vom TwinCAT System festgelegt.

bExecute: Bei einer positiven Flanke an diesem Eingang wird der Baustein aktiviert.

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

VAR_OUTPUT
    bBusy     :    BOOL;
    bError    :    BOOL;
    nErrid    :    UDINT;
    stInfo    :    ST_NovRamAddrInfoEx;
END_VAR

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

bError: Dieser Ausgang wird gesetzt, wenn ein Fehler bei der Ausführung auftritt.

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

stInfo: Eine Struktur mit der Adresse und Größe des NOV/DP-RAM (Typ: ST_NovRamAddrInfoEx)

Beispiel

In MAIN wird ein Pointer auf einen BYTE deklariert. Dieser Pointer wird beim Programmstart mit der Adresse des NOV-/DP-RAM initialisiert. Durch Referenzieren des Pointers kann auf das NOV-/DP-RAM schreibend oder lesend zugegriffen werden.

PROGRAM MAIN
VAR
    nDevId       : UDINT := 1; //device 1, see ID of NOV/DP-RAM device
    pNOVRAM      : POINTER TO BYTE;
    cbNOVRAM     : DWORD;
    fbGetInfo    : FB_GetDPRAMInfoEx;
    bInit        : BOOL := FALSE;
    eAccessType  : E_IOACCESSTYPE;
    bByteAccess  : BOOL;
    bWordAccess  : BOOL;
    bDWordAccess : BOOL;
END_VAR

IF NOT bInit THEN
    fbGetInfo(
        nDevId   := nDevId,
        bExecute := TRUE,
        tTimeOut := T#5S
    );

    IF NOT fbGetInfo.bBusy THEN
        IF NOT fbGetInfo.bError THEN
            pNOVRAM     := fbGetInfo.stInfo.pCardAddress;
            cbNOVRAM    := fbGetInfo.stInfo.iCardMemSize;
            eAccessType := fbGetInfo.stInfo.eAccessType;

            bDWordAccess := FALSE;
            bByteAccess  := FALSE;
            bWordAccess  := FALSE;

            CASE eAccessType OF
                eIOAccess_Default:
                    bDWordAccess := TRUE;
                    //access via MEMCPY,  MEMSET,  MEMCMP possible
                eIOAccess_Byte:
                    bByteAccess := TRUE;
                    //access via POINTER to BYTE possible
                eIOAccess_WordSwap:
                    bWordAccess := TRUE;
                    //access via POINTER to WORD +
                    //swapping of high and low byte possible
            END_CASE

            bInit := TRUE;
        END_IF
        fbGetInfo(bExecute := FALSE);
    END_IF
END_IF

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)