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.
Eingänge
VAR_INPUT
nDevId : UDINT;
bExecute : BOOL;
tTimeOut : TIME := DEFAULT_ADS_TIMEOUT;
END_VAR
Name | Typ | Beschreibung |
---|---|---|
nDevId | UDINT | Die Geräte-Id einer NOV/DPRAM-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 | BOOL | Bei einer positiven Flanke an diesem Eingang wird der Baustein aktiviert. |
tTimeOut | TIME | Gibt die Timeout-Zeit an, die bei der Ausführung des Kommandos/Funktion nicht überschritten werden darf. |
Ausgänge
VAR_OUTPUT
bBusy : BOOL;
bError : BOOL;
nErrId : UDINT;
stInfo : ST_NovRamAddrInfoEx;
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. |
stInfo | Eine Struktur mit der Adresse und Größe des NOV/DP-RAM. |
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) |