GET_NAMED_MEMORY-Baustein

Kurz-Information

Name

GET_NAMED_MEMORY

→POE-Typ

→Funktion

Kategorie

Standard (non-safe), MemoryEnh, Baustein mit interner Fehlerdiagnose

Konform zur →IEC-Norm

(Plus) nicht in IEC-Norm vorgesehen

Grafische Schnittstelle

Verfügbar ab

Version 1.38.0 (für Neuron Power Engineer) und Version 2.3.1602 von Neuron RTS max - Anfangsvariante
(Warnung) Dieser Baustein wird nur für die integrierte SPS unterstützt.

Version 1.109.0 (für Neuron Power Engineer) und Version 3.19.0 von Neuron RTS max: liefert die Referenz auf gleichen Speicherbereich wie GET_NAMED_MEMORY_RETAIN
(Warnung) Dieser Baustein wird nur für die integrierte SPS und die Plattformen WindowsX86 und LinuxX86 unterstützt.

Version 3.2.2 (für Bibliothek Standard) – Erweiterung: Referenz auf STRING und CHAR für den Ergebniswert; liefert die Referenz auf anderen Speicherbereich als GET_NAMED_MEMORY_RETAIN

Version 3.8.0 (für Bibliothek Standard (non-safe)): Baustein in diese Bibliothek verschoben

Funktionalität

Der Baustein liefert die →Referenz auf einen Speicherbereich, dessen Namen Sie am Eingang NAME eingeben.

Beim ersten Aufruf des Bausteins wird der angeforderte Speicher im dynamischen Speicher des Zielsystems (Heap) allokiert und eine Referenz darauf geliefert. Der durch den Ergebniswert referenzierte Speicherbereich wird bei der Anforderung mit 0 initialisiert. Bei jedem weiteren Aufruf des Bausteins wird eine Referenz auf den bereits allokierten Speicher geliefert.
Bei einem →Kaltstart oder →Warmstart der Anwendung wird ein allokierter Speicher automatisch freigegeben.

Da zusätzlich zum Namen des Speicherbereichs auch Typinformationen des Ergebniswerts gespeichert werden, ist es nur zulässig, den Aufruf des Bausteins auf der rechten Seite des Zuweisungsoperators ":=" für →Zuweisungen auf eine Referenz-Variable zu verwenden. Die Größe des Speicherbereichs ergibt sich aus dem Datentyp der Referenz-Variable.

Eingänge, Ausgänge, Ergebniswert

 

Bezeichner

→Datentyp

Beschreibung

Eingänge:

NAME

STRING

Name des Speicherbereichs

Ausgänge:

RC

USINT

Ergebniscode der Zuweisung:

  • 16#00: erfolgreiche Zuweisung

  • 16#01: Fehler, dass nicht genügend Speicher verfügbar ist

  • 16#02: Der angeforderte Datentyp stimmt nicht überein.

  • 16#FF: Der Dienst ist nicht verfügbar.

Ergebniswert:

eine →Referenz auf die folgenden Datentypen:
REALLREALUSINTUINTUDINTULINTSINTINTDINTLINTTIMEBOOLBYTEWORDDWORDLWORDSTRINGCHARDATE_AND_TIMEDATETIME_OF_DAY oder ein →anwenderdefinierter Datentyp
Einschränkung: Bei →ARRAY-Datentypen sind nur eindimensionale Arrays zulässig.

typisierte Referenz auf den angeforderten Speicherbereich oder NULL

Der Eingang EN und der Ausgang ENO sind für den →Aufruf des Bausteins verfügbar. Siehe "Ausführungssteuerung: EN, ENO" für Informationen zum Eingang EN und zum Ausgang ENO.

Informieren Sie sich unter:

Interne Fehlerdiagnose für Baustein

Der Baustein prüft die folgenden Fehlerfälle:

  • Es ist kein weiterer Speicher auf dem Zielsystem mehr verfügbar.

  • Der Datentyp der Variable, auf die zugewiesen wird, stimmt nicht mit dem Datentyp des Speicherbereichs überein.

  • Der RTSSMem-Systemdienst wurde nicht geladen.

In einem solchen Fehlerfall wird der Ausgang ENO des Bausteins auf den Wert FALSE (oder eine Entsprechung) zurückgesetzt. Zusätzlich liefert der Ausgang RC den entsprechenden Ergebniscode (siehe die vorhergehende Tabelle unter RC) und der Baustein selbst liefert NULL (als Ergebniswert).

Beispiel für Verwendung im ST-Editor

Verwendungsbeispiel des GET_NAMED_MEMORY-Bausteins
PROGRAM GET_NAMED_MEMORY_TEST
    VAR
        r_data : REF_TO DWORD;
        r_other : REF_TO DWORD;
        r_invalid : REF_TO LWORD;
        
        eno_data : BOOL := FALSE;
        eno_other : BOOL := FALSE;
        eno_invalid : BOOL := FALSE;
        rc_data : USINT := 0;
        rc_other : USINT := 0;
        rc_invalid : USINT := 0;
        
    END_VAR
    r_data := GET_NAMED_MEMORY(NAME := 'data', ENO => eno_data, rc => rc_data);
    IF eno_data THEN
        r_data^ := 16#01020304;
    END_IF;
    
    r_other := GET_NAMED_MEMORY(NAME := 'data', ENO => eno_other, rc => rc_other);
    IF eno_data AND eno_other THEN
        /* 'r_data_other' now refers to the same memory area as 'r_data' */
    END_IF;
    
    r_invalid := GET_NAMED_MEMORY(NAME := 'data', ENO => eno_invalid, rc => rc_invalid);
    /* 'r_data_invalid' is 'NULL' because types do not match; 'ENO' is 'FALSE', 'rc' has value '16#02' */
END_PROGRAM

Neuron empfiehlt, den GET_NAMED_MEMORY-Baustein für jeden anzufordernden Speicherbereich höchstens einmal aufzurufen. Einerseits kann das Zeitverhalten bei der Speicheranforderung unvorhersehbar sein, andererseits kann das Ermitteln des bereits allokierten Speicherbereichs einen längeren Zeitraum in Anspruch nehmen. Das folgende Beispiel demonstriert die einmalige Verwendung:

Empfohlene Verwendungsweise des GET_NAMED_MEMORY-Bausteins
PROGRAM GET_NAMED_MEMORY_RECOMMENDED
    VAR
      r : REF_TO BYTE := NULL;
      rc : USINT := 16#FF;
    END_VAR
    IF r = NULL THEN
        r := GET_NAMED_MEMORY(NAME := 'sample', ENO => ENO, RC => rc);
    END_IF;
    IF ENO THEN
        /* code using the reference to the allocated byte */
        r^ := 16#AF;
    END_IF;
END_PROGRAM

Bei der Erstellung Ihrer Anwendung im ST-Editor erstellen Sie den Aufruf eines Bausteins, indem Sie den laut Syntax erforderlichen Text eintippen oder die Inhaltshilfe verwenden.