FB_GetDPRAMInfo

FB_GetDPRAMInfo 1:

Der Funktionsbaustein FB_GetDPRAMInfo 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ützten Karten (Dritthersteller) schreibend oder lesend zugreifen zu können. Die Karte muss vorher in TwinCAT System als allgemeines NOV/DP-RAM konfiguriert werden. Im SPS-Programm können dann die MEMCPY-, MEMSET- oder MEMCMP-Funktionen benutzt werden um auf einen beliebigen Speicheroffset schreibend/lesend zugreifen zu können.

Wenn das NOV/DP-RAM einen speziellen Zugriff (z.B. BYTE, aligned WORD) erfordert gibt dieser Funktionsbaustein einen Service Not Supported (16#701) Fehler zurück. In diesem Fall kann der Baustein FB_NovRamReadWriteEx verwendet werden um Daten aus dem NOV/DP-RAM zu lesen oder Daten in das NOV/DP-RAM zu schreiben. Z.B. das NOV-RAM vom CX9000 erlaubt nur BYTE-Zugriffe, so dass in diesem Falle der Baustein FB_NovRamReadWriteEx verwendet werden sollte.

VAR_INPUT

VAR_INPUT
    nDevId     : UDINT;
    bExecute   : BOOL; 
    tTimeOut   : TIME := DEFAULT_ADS_TIMEOUT; 
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

VAR_OUTPUT
    bBusy     : BOOL;
    bError    : BOOL;
    nErrId    : UDINT;
    stInfo    : ST_NovRamAddrInfo;
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.

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

Beispiel:

In MAIN wird ein Pointer auf eine Instanz der ST_NOVRAM-Strukturvariablen deklariert. Dieser Pointer wird beim Programmstart mit der Adresse des NOV-/DP-RAM initialisiert. Durch Referenzieren des Pointers kann auf die einzelnen Strukturelemente (und das NOV-/DP-RAM) schreibend oder lesend zugegriffen werden.


TYPE ST_NOVRAM :
STRUCT
    dwParam_0 : DWORD;
    dwParam_1 : DWORD;
    dwParam_2 : DWORD;
    dwParam_3 : DWORD;

    cbSize : DWORD;
    wCounter : WORD;
    func : BYTE;
    sMsg : STRING(20);

    (* ...other NOV-/DP-RAM variables *)
END_STRUCT
END_TYPE
PROGRAM MAIN
VAR
    pNOVRAM      : POINTER TO ST_NOVRAM;
    cbNOVRAM     : DWORD;
    fbGetInfo    : FB_GetDPRAMInfo;
    state        : INT := 0;
    bInit        : BOOL := FALSE;
    timer        : TON;
    bReset       : BOOL;
END_VAR
CASE state OF
0:
    IF NOT bInit THEN
        state := 1;
    END_IF

1:
    fbGetInfo( bExecute := FALSE ); (* reset fb *)
 fbGetInfo( nDevId:= 3,
    bExecute:= TRUE, (* start fb execution *)
 tTimeOut:= T#10s );
    state := 2;
2:
    fbGetInfo( bExecute := FALSE );
    IF NOT fbGetInfo.bBusy THEN
        IF NOT fbGetInfo.bError THEN
            IF fbGetInfo.stInfo.pCardAddress <> 0 THEN
                pNOVRAM := fbGetInfo.stInfo.pCardAddress;
                cbNOVRAM := fbGetInfo.stInfo.iCardMemSize;
                bInit := TRUE;
                state := 0; (* ready, go to the idle step *)
         ELSE
                state := 100; (* error *)
         END_IF
        ELSE
            state := 100; (* error *)
     END_IF
    END_IF

100:
    ; (* error, stay here *)
END_CASE


IF bInit THEN
 (* read from or write to NOV-/DP-RAM*)
 IF bReset THEN (* reset all bytes to 0 *)
     bReset := FALSE;
        MEMSET( pNOVRAM, 0, cbNOVRAM );
    END_IF

    timer( IN := TRUE, PT := T#1s );
    IF timer.Q THEN
        timer( IN := FALSE );
        pNOVRAM^.dwParam_0 := pNOVRAM^.dwParam_0 + 1;
        pNOVRAM^.dwParam_1 := pNOVRAM^.dwParam_1 - 1;
    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)