Skip to main content

Conservar datos en la memoria compartida

Algunos productos no incluyen una conexión automática para retener datos de la aplicación en el controlador (debido a la falta de opciones de almacenamiento generalmente válidas). Sin embargo, existe un mecanismo existente en el sistema de tiempo de ejecución mediante una conexión a través de memoria compartida (SHM) que se puede utilizar para este propósito con una configuración respectiva.

El uso es posible, por ejemplo, con los siguientes CODESYS Control productos SL:

  • CODESYS Control​ for Linux

  • CODESYS Control for Linux ARM

  • CODESYS Control for Linux ARM64

  • CODESYS Control for Raspberry Pi

  • CODESYS Control for BeagleBone

Nota de versión: La versión mínima de la CODESYS Control El producto SL es V4.4.0.0 (CODESYS Control versión 3.5.17.30)

Básicamente, las "retenciones" se habilitan a través de SHM mediante la siguiente configuración en /etc/CODESYSControl_User.cfg en el dispositivo de destino:

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

Después de un reinicio, el sistema de tiempo de ejecución crea un archivo de memoria compartida con el nombre configurado en /dev/shm. Al mapear este archivo, la memoria se puede redirigir a cualquier archivo no volátil, por ejemplo, mediante los siguientes comandos:

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

Importante

Se accede al archivo de forma cíclica según el tiempo de ciclo establecido en la aplicación del PLC. Por lo tanto, el archivo SHM nunca debe redirigirse a un archivo en un sistema de archivos basado en flash, de lo contrario, existe el riesgo de que se destruya la memoria.

Conserve los datos con doble búfer en la memoria compartida

Opcionalmente, se puede habilitar el almacenamiento en búfer doble para retener los datos en la memoria compartida. De este modo, los datos retenidos se almacenan de forma redundante en dos

La siguiente configuración adicional del archivo /etc/CODESYSControl_User.cfg se usa para habilitar esta función:

[CmpRetain]
Retain.DoubleBufferEnabled=1

Con esta configuración, el sistema de ejecución publica dos nuevos eventos que se pueden usar mediante el mecanismo uniforme del paquete de extensión.

Para obtener más información sobre el mecanismo de eventos, consulte lo siguiente: Mecanismo de eventos

El script de Python retain_mirror.py incluido en el Ejemplo de paquete de extensión muestra cómo se puede controlar un mecanismo de doble búfer de un solo canal mediante eventos.