GET_NAMED_MEMORY_RETAIN-Baustein

Derzeit ist der GET_NAMED_MEMORY_RETAIN-Baustein analog zum GET_NAMED_MEMORY-Baustein, wobei GET_NAMED_MEMORY_RETAIN die Referenz auf einen anderen Speicherbereich als GET_NAMED_MEMORY liefert (siehe " Beispiel mit Referenz auf anderen Speicherbereich ").

Beachten Sie: Der GET_NAMED_MEMORY_RETAIN-Baustein liefert die →Referenz auf einen →gepufferten Speicherbereich, dessen Namen Sie am Eingang NAME eingeben . Mit Hilfe des SAVE_ALL_NAMED_MEMORY_RETAIN-Bausteins oder SAVE_NAMED_MEMORY_RETAIN-Bausteins ist es möglich, alle gepufferten Speicherbereiche oder nur einen in den permanenten Speicher zu speichern.
Standardmäßig wird die entsprechende Datei im Unterverzeichnis PLC des logi.RTS-Installationsverzeichnisses abgelegt. Falls Sie die Ablage in einem anderem Verzeichnis bevorzugen, kontaktieren Sie Ihren Systemintegrator und bitten Sie darum, die Konfiguration des Systemdiensts zu ändern.

Kurz-Information

Name

GET_NAMED_MEMORY_RETAIN

→POE-Typ

→Funktion

Kategorie

IEC-Baustein, MemoryEnh, Baustein mit interner Fehlerdiagnose

Konform zur →IEC-Norm

images/s/b2ic8e/9012/1ca6q62/_/images/icons/emoticons/add.svg nicht in IEC-Norm vorgesehen

Grafische Schnittstelle

images/download/attachments/429719685/GET_NAMED_MEMORY_RETAIN-version-2-modificationdate-1561969469957-api-v2.png

Verfügbar ab

  • Version 1.53.0 (für logi.CAD 3) und Version 3.0.8 bzw. 2.3.1801 von logi.RTS
    images/s/b2ic8e/9012/1ca6q62/_/images/icons/emoticons/warning.svg 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
    images/s/b2ic8e/9012/1ca6q62/_/images/icons/emoticons/warning.svg 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: breitere Schnittstelle; liefert die Referenz auf anderen Speicherbereich als GET_NAMED_MEMORY

Beispiel mit Referenz auf anderen Speicherbereich

Das folgende Beispiel enthält 2 Programminstanzen: eine schreibt einen Konfigurationswert in einen gepufferten Speicherbereich mit einem Namen, die andere liest ihn aus:

CONFIGURATION LocalConfiguration
RESOURCE local ON BuiltInPlc { ON_CHANNEL := LocalChannel }
TASK DefaultTask(INTERVAL := TIME#500ms, PRIORITY := 38229);
PROGRAM ProgramInstance1 WITH DefaultTask :
Program1;
PROGRAM ProgramInstance2 WITH DefaultTask :
Program2;
END_RESOURCE
END_CONFIGURATION

Da der Programmtyp Program2 fälschlicherweise GET_NAMED_MEMORY() verwendet, um den benannten Speicherbereich anzufordern. wird eine andere Referenz als erwartet geliefert:

PROGRAM Program1
VAR
ReferenceToInteger : REF_TO INT;
END_VAR
 
ReferenceToInteger := GET_NAMED_MEMORY_RETAIN('IntegerBlock');
IF ReferenceToInteger <> NULL THEN
ReferenceToInteger^ := 42;
END_IF;
END_PROGRAM
 
PROGRAM Program2
VAR
ReferenceToInteger : REF_TO INT;
END_VAR
ReferenceToInteger := GET_NAMED_MEMORY('IntegerBlock');
IF ReferenceToInteger <> NULL THEN
/* The following assertion will fail since 'Program2' erroneously requested
* a named memory block that is NOT retained, thus gets a different block
* than 'Program1'. For this reason, the value stored in the block is not '42' as
* expected, but the initial value of zero...
*/
Assert(ReferenceToInteger^ = 42);
END_IF;
END_PROGRAM

Um das Problem zu beheben, müssen Sie den Aufruf GET_NAMED_MEMORY() durch den Aufruf GET_NAMED_MEMORY_RETAIN() ersetzen.