Operator: ADR
Der Operator ist eine Erweiterung der Norm IEC 61131-3.
ADR
liefert die 32-Bit-Adresse (oder gegebenenfalls die 64-Bit-Adresse) seines Arguments zurück. Diese Adresse können Sie an Herstellerfunktionen übergeben oder innerhalb des Projekts einem Pointer zuweisen.
Syntax
VAR <address name> : DWORD | LWORD | POINTER TO < basis data type> | __XWORD ; END_VAR <address name> := ADR( <variable name> );
FUNCTION_BLOCK FB_Adress VAR piAddress1: POINTER TO INT; iVar1 : INT := 5; lwAddress2 : LWORD; iVar2 : INT := 10; xwAddress3 : _XWORD; iVar3 : INT; END_VAR piAddress1 := ADR(iVar1); // piNumber is assigned to address of iVar1 lwAddress2 := ADR(iVar2); // works for 64 bit run time system xwAddress3 := ADR(iVar3); // works for 32 bit and 64 bit systems
Wichtig
Im Unterschied zu CoDeSys V2.3 können Sie den ADR
-Operator mit Funktions-, Programm-, Funktionsbaustein- und Methodennamen verwenden. ADR
ersetzt damit den INDEXOF
-Operator.
Beachten Sie bei der Verwendung von Funktionspointern Folgendes: Sie können Funktionspointer zwar an externe Bibliotheken weitergeben, es gibt jedoch keine Möglichkeit, einen Funktionspointer innerhalb von CODESYS aufzurufen! Um einen Systemaufruf (Laufzeitsystem) zu ermöglichen, müssen Sie die entsprechende Objekteigenschaft (Registerkarte Übersetzen) für das Funktionsobjekt setzen.
Achtung
Wenn Sie einen Online-Change anwenden, können sich die Inhalte von Adressen verschieben. Dadurch könnten POINTER TO
-Variablen auf einen ungültigen Speicherbereich zeigen. Um Probleme zu vermeiden, sollten Sie sicherstellen, dass der Wert von Pointern in jedem Zyklus aktualisiert wird.
Achtung
Pointer-TO
-Variablen von Funktionen und Methoden sollten Sie nicht an den Aufrufer zurückgeben oder globalen Variablen zuweisen.