Skip to main content

Conservar datos con variables persistentes

Las variables persistentes conservan su valor cuando se vuelve a cargar la aplicación, después de una descarga, un inicio en caliente o un inicio en frío.

Se requiere un área de memoria no volátil especial en el controlador para extender la vida útil, por ejemplo, como NVRAM o UPS. Hacer una copia de seguridad de los datos en dicho almacenamiento no requiere tiempo adicional, lo que es una ventaja sobre la retención de datos con el Administrador de persistencia. Si el controlador no ofrece soporte de hardware, los datos generalmente se almacenan en un archivo. Luego, los datos se conservan si apaga el controlador correctamente. Sin embargo, en el caso de un corte de energía o un "tirón del enchufe", los datos se perderán.

conducta

retención de valor

  • Terminación no controlada

  • Comienzo en caliente llamando al comando restablecer cálido

  • Arranque en frío llamando al comando Restablecer frío

  • Descarga la aplicación de nuevo

  • Cargando la aplicación de arranque

reinicialización en

  • llamando al comando restablecer el origen

Por lo tanto, las variables persistentes solo se reinicializan si restablece el controlador al estado de entrega, por ejemplo, si usa el comando En línea → Restablecer origen Seleccione.

Si, por el contrario, vuelve a cargar la aplicación, los datos persistentes se conservan si es posible. Eso depende de cuán profundos fueron los cambios. Cambiar el nombre de la aplicación siempre conduce a una reinicialización completa. Los cambios en las implementaciones nunca conducen a una reinicialización: la persistencia de los datos se conserva por completo. Los cambios en las declaraciones conducen a una inicialización de las nuevas variables solo si las variables existentes son persistentes, cuando cambia las declaraciones para que la lista de variables persistentes permanezca consistente. Este es el caso cuando agrega una nueva variable o elimina una existente. Pueden ocurrir inconsistencias si edita y cambia los identificadores o tipos de datos de variables persistentes previamente declaradas.

Mecanismo al descargar una aplicación o cargar una aplicación de arranque

Si edita la lista de variables en el editor de persistencia, hace que la lista de variables no se guarde como se muestra en el editor, sino que se edite automáticamente antes de guardarse.

En el procesamiento posterior, una variable que eliminó se reemplaza con una variable de marcador de posición con la misma huella de memoria. Esto significa que las siguientes variables conservan sus direcciones en la imagen del proceso. Además, cualquier variable que agregue se moverá al final de la lista. El posprocesamiento puede neutralizar los cambios que conducirían a la pérdida de persistencia. Pero crea espacios que ocupan memoria adicional.

Al cargar la aplicación, el valor CRC de la lista de variables y la longitud de la lista (número de variables) se almacenan en el controlador. Al volver a cargar la aplicación, el nuevo valor de prueba se compara con el valor de prueba actual en el controlador. Luego, la lista de variables se compara sucesivamente hasta la longitud especificada. Si ha editado una declaración (por ejemplo, el nombre o el tipo de datos), la variable se reinicializa. De lo contrario, se conserva su valor. Cuando la aplicación se vuelve a cargar, CODESYS comprueba si la lista de variables declarada en el editor de persistencia sigue siendo coherente con la lista de variables que ya se encuentra en el controlador.

El mecanismo funciona bien cuando las variables mismas no cambian significativamente. Los cambios excesivos en los identificadores y los tipos de datos continúan provocando la reinicialización y la pérdida de persistencia. Por lo tanto, si anticipa cambios frecuentes en función de las necesidades de su aplicación, generalmente no se recomienda una lista de este tipo. Además, en el caso de un cambio en línea después de un cambio de tipo de datos, una variable persistente es menos robusta que una variable con una vida útil normal.

Básicamente, después de un tiempo, debe limpiar la lista variable de espacios y el comando Reordenar la lista y limpiar las lagunas Correr. Sin embargo, después de la limpieza, la lista ya no coincide con la lista del controlador y ha desencadenado una inicialización de todas las variables persistentes. Se pierde la persistencia de todas las variables.

Sugerencia

En versiones anteriores a V3.5 SP1, los cambios en el editor de persistencia siempre conducen a una reinicialización.

Guardar datos a través del administrador de recetas

Para limpiar la lista de variables persistentes globales sin perder su persistencia, puede guardar los datos en una receta usando el administrador de recetas. En el administrador de recetas se genera una lista para todas las variables de la lista de variables persistentes y, al mismo tiempo, el controlador guarda sus valores actuales como una receta. Luego seleccione el comando Reordenar la lista y limpiar las lagunas y luego descargar de nuevo. Si ahora el comando Restaurar valores de receta se selecciona, se restauran los valores guardados en la receta.

Cambiar una declaración existente en la lista de variables persistentes

Si cambia el nombre o el tipo de datos de una variable, esto se interpreta como una nueva declaración y provoca una reinicialización de las variables en el próximo cambio en línea o carga de una aplicación. Para tipos de datos complejos, se produce un cambio cuando se agrega un nuevo componente o cuando cambia el tipo de una variable de INT a UINT en la profundidad de una estructura utilizada utilizada, por ejemplo.

Básicamente, los tipos de datos complejos definidos por el usuario no son adecuados para la gestión en una lista de variables persistentes, ya que incluso los pequeños cambios hacen que la variable se inicialice con todos los componentes.

Asignación doble de memoria en rutas de instancia

Puede conservar variables globales o variables declaradas localmente en un programa o bloque de funciones. Para hacer esto, agregue la palabra clave a la declaración PERSISTENT. Además, agregue la ruta de la instancia a esta variable en la lista de variables globales persistentes. Para hacer esto, seleccione el comando en el editor de persistencia Agregar todas las rutas de instancias.

La persistencia está garantizada a través del siguiente mecanismo:

  • Se determina en qué tareas cíclicas se accede a la variable.

  • Al final de la primera tarea cíclica (en cada ciclo), la variable se copia a la lista de variables globales persistentes.

  • Después de reiniciar el controlador, el valor se copia de la variable persistente a la variable normal.

La desventaja de este mecanismo es que la memoria se asigna tanto en el punto de declaración como en el punto de la ruta de la instancia. Esta variable persistente ocupa doble Espacio de almacenamiento. Además, los datos se copian en ambas ubicaciones en cada ciclo. Esto puede llevar mucho tiempo, especialmente cuando se trata de valores grandes y estructurados.

Ubicación de memoria para instancias de bloques de funciones persistentes

Una instancia de bloque de funciones siempre está completamente en la memoria. Esto es necesario para que el mismo código pueda funcionar en diferentes instancias. Si ahora sólo una variable en un bloque de función con PERSISTENT está marcado, la instancia del bloque de funciones se almacena completamente con todas las variables en la memoria remanente, aunque solo una variable se trata como persistente. Sin embargo, la memoria no volátil no está disponible en la misma medida que la memoria principal.

Un bloque de funciones que tiene un puntero a una instancia en la SRAM como variable no se almacena en la memoria segura.

Importar de CoDeSys V2.3-proyectos

Cuando abres un CoDeSys V2.3 proyecto para importarlo a CODESYS V3, las declaraciones de variables persistentes no se conservan. Debe revisar las declaraciones y crearlas nuevamente en una lista de variables globales persistentes separada.