Skip to main content

Retain-Daten im Shared Memory

Einige Produkte beinhalten (aufgrund fehlender allgemeingültiger Speichermöglichkeiten) keine automatische Anbindung von Retain-Daten aus der Applikation in der Steuerung. Es gibt aber einen existierenden Mechanismus im Laufzeitsystem durch eine Anbindung über ein Shared Memory (SHM), der durch entsprechende Konfiguration dafür genutzt werden kann.

Die Nutzung ist beispielsweise mit folgenden CODESYS Control SL-Produkten möglich:

  • CODESYS Control​ for Linux

  • CODESYS Control for Linux ARM

  • CODESYS Control for Linux ARM64

  • CODESYS Control for Raspberry Pi

  • CODESYS Control for BeagleBone

Versionshinweis: Die Mindestversion des CODESYS Control SL-Produkts ist V4.4.0.0 (CODESYS Control Version 3.5.17.30)

Grundsätzlich erfolgt die Aktivierung der "Retains" über SHM durch folgende Einstellungen in /etc/CODESYSControl_User.cfg auf dem Zielgerät:

[CmpApp]
 RetainType.Applications=InSHM
[CmpRetain]
 Retain.SHM.Size=0x1FFFF        ; Total size of remanent memory in bytes
 Retain.SHM.Name=MyRetainMemory ; Optional (Default: "RetainMemory")

Nach einem Neustart erzeugt das Laufzeitsystem dann eine Shared-Memory-Datei mit dem konfigurierten Namen unter /dev/shm. Durch Mappen dieser Datei kann der Speicher auf eine beliebige nicht-flüchtige Datei umgeleitet werden, beispielsweise durch folgende Kommandos:

sudo touch /dev/shm/MyRetainMemory
sudo mount -o bind /var/opt/MyRetainMemory /dev/shm/MyRetainMemory

Wichtig

Der Zugriff auf die Datei erfolgt zyklisch entsprechend der in der SPS-Applikation eingestellten Zykluszeit. Die SHM-Datei sollte deshalb auf keinen Fall auf eine Datei in einem Flash-basierten Dateisystem umgeleitet werden, da sonst die Gefahr besteht, dass der Speicher zerstört wird.

Retain-Daten double-buffered im Shared Memory

Optional kann für Retain-Daten im Shared Memory ein Double-Buffering aktiviert werden. Dadurch werden die Retain-Daten redundant in zwei Speicherbereichen abgelegt.

Die Aktivierung erfolgt über folgende zusätzliche Einstellung in der Datei /etc/CODESYSControl_User.cfg:

[CmpRetain]
Retain.DoubleBufferEnabled=1

Durch diese Einstellung veröffentlicht das Laufzeitsystem zwei neue Events, die über den Eventmechanismus des Extension Package genutzt werden können.

Für weitere Informationen zum Eventmechanismus siehe: Eventmechanismus

Das im Beispiel-Package Extention Package Example enthaltene Pythonskript retain_mirror.py zeigt, wie ein einkanaliger Doublebuffer-Mechanismus über die Events gesteuert werden könnte.