GET_NAMED_MEMORY-Baustein
Kurz-Information
Name | GET_NAMED_MEMORY |
---|---|
→POE-Typ | →Funktion |
Kategorie | IEC-Baustein, MemoryEnh, Baustein mit interner Fehlerdiagnose |
Konform zur →IEC-Norm | nicht in IEC-Norm vorgesehen |
Grafische Schnittstelle | |
Verfügbar ab |
|
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:
|
Ergebniswert: | – |
eine →Referenz auf die folgenden Datentypen: REAL , LREAL , USINT , UINT , UDINT , ULINT , SINT , INT , DINT , LINT , TIME , BOOL , BYTE , WORD , DWORD , LWORD , STRING , CHAR , , DATE , oder ein →anwenderdefinierter DatentypEinschrä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
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:
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.