FB_GetDPRAMInfoEx
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) |