GET_NAMED_MEMORY-Baustein

Kurz-Information

NameGET_NAMED_MEMORY
→POE-Typ→Funktion
KategorieIEC-Baustein, 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 logi.CAD 3 ) und Version 2.3.1602 von logi.RTS
    (warning) Dieser Baustein wird nur für die integrierte SPS unterstützt.
  • Version 1.109.0 (für logi.CAD 3 ) und Version 3.19.0 von logi.RTS: liefert die Referenz auf gleichen Speicherbereich wie GET_NAMED_MEMORY_RETAIN
    (warning) 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

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→DatentypBeschreibung
Eingänge:NAMESTRING

Name des Speicherbereichs

Ausgänge:RCUSINT

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:
REALLREALUSINTUINTUDINTULINTSINTINTDINTLINTTIMEBOOLBYTEWORDDWORDLWORD, STRING, CHARDATE_AND_TIMEDATETIME_OF_DAY oder ein →anwenderdefinierter Datentyp
Einschränkung: Bei →ARRAY-Datentypen sind nur ein-dimensionale 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.

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

Es wird empfohlen, 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.