FB_NovRamReadWriteEx
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 NOVRAM geschrieben. Wurden gleichzeitig beide Eingänge: bRead und bWrite gesetzt, dann werden die Daten zuerst in das NOVRAM geschrieben und dann zurück gelesen. Der Unterschied zum Baustein FB_NovRamReadWrite ist, dass der Adressoffset im NOVRAM für Schreib- und Lesezugriffe angegeben werden kann. Außerdem überprüft der Baustein die erlaubte Zugriffsart auf den NOVRAM Speicher und kopiert wenn nötig die Daten byteweise in den NOVRAM Speicher, anstatt ein MEMCPY zu verwenden. Das NOVRAM 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 NOVRAM 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 NOVRAM zu schreiben oder aus dem NOVRAM zu lesen wird direkt auf den NOVRAM Speicher zugegriffen. Dadurch können die Daten im gleichen SPS-Zyklus geschrieben bzw. gelesen werden. Intern wird auch die maximale Bytelänge des NOVRAM ermittelt, und die maximale Länge der Daten, die gelesen oder geschrieben werden können, auf diese Länge begrenzt.
Eingänge
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
Name | Typ | Beschreibung |
---|---|---|
nDevId | UDINT | Die Geräte-Id einer NOVRAM-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 festgelegt. |
bRead | BOOL | Bei einer positiven Flanke an diesem Eingang wird der Baustein aktiviert und cbDestLen-Daten aus dem NOVRAM (ab dem Addressoffset NULL) in den Puffer mit der Adresse pDestAddr hineinkopiert. |
bWrite | BOOL | Bei einer positiven Flanke an diesem Eingang wird der Baustein aktiviert und cbSrcLen-Daten aus dem Puffer mit der Adresse pSrcAddr in das NOVRAM (ab dem Addressoffset NULL) hineinkopiert. |
cbSrcLen | UDINT | Die Bytelänge der Daten, die in das NOVRAM geschrieben werden sollen. |
cbDestLen | UDINT | Die Bytelänge der Daten, die aus dem NOVRAM gelesen werden sollen. |
pSrcAddr | PVOID | 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 | PVOID | Der Addresspointer auf einen Datenpuffer, in den die gelesenen NOV-RAM-Daten hineinkopiert werden sollen. |
nReadOffs | UDINT | Der Adressoffset im NOVRAM ab dem gelesen werden soll. |
nWriteOffs | UDINT | Der Adressoffset im NOVRAM ab dem geschrieben werden soll. |
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;
cbRead : UDINT;
cbWrite : UDINT;
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. |
cbRead | UDINT | Anzahl der erfolgreich gelesenen Datenbytes. |
cbWrite | UDINT | 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

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