Skip to main content

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.