You are on page 1of 9

Remanencia de datos en un Beckhoff CX9010

El Beckhoff CX9010 es en realidad un PC embebido con procesador ARM


que ejecuta Windows CE. Esta configuracin le otorga ventajas frente a
un PLC convencional, entre las que destacan una mayor conectividad y
accesibilidad. Sin embargo tambin existen inconvenientes. Cuando
apagamos un PLC no nos preocupa qu pasar si hay un corte de
corriente, es algo con lo que se cuenta en su diseo. Sin embargo un PC
requiere un apagado de forma controlada, para evitar prdida de datos.
Si el CX9010 sufre un corte de alimentacin puede que los ltimos datos
que estemos manejando se pierdan... si no tomamos las precauciones
adecuadas.

Para realizar la remanencia de datos en el CX9010, Beckhoff nos ofrece


dos alternativas. La primera es escribir en la memoria flash que usa a
modo de disco duro. Mediante el bloque de funcin
FB_WritePersistentData podremos almacenar nuestras variables. El
inconveniente es que si se produce una cada de tensin en medio de un
proceso de escritura puede haber corrupcin de datos, adems de tener
en cuenta que no podemos abusar de la escritura en memoria flash ya
que puede sufrir desgaste por machacar demasiado la misma zona de
memoria. La segunda alternativa, que ser la que desarrolle a
continuacin, consiste en usar el dispositivo NOV/DP-RAM que viene
integrado en el CX9010.

Cuando hacemos la configuracin del PLC, al auto detectar los


componentes que tiene conectados con el TwinCAT System Manager,
aparece un dispositivo NOV/DP-RAM. Este dispositivo consiste en una
memoria flash ROM que no tiene limitacin de ciclos de escritura, y est
asistido por un condensador integrado en el chip NOVRAM que garantiza
la energa suficiente para hacer una escritura de los datos remanentes,
aunque se corte la alimentacin.
La direccin de memoria y la longitud de la NOVRAM aparecen en la
pestaa 'DPRAM genrico', y para el CX9010 tiene un tamao de 131
072 bytes (128 kbytes).

El primer paso es crear las variables que se almacenarn en la NOVRAM,


las cuales hay que declararlas como salidas, como ejemplo voy a crear
el entero doble POSICION_NO_VOLATIL. Se pueden declarar
estructuras de datos si es necesario.
En mi aplicacin no necesito que se realice una escritura de datos en
cada ciclo de autmata, as que voy a crear un programa vaco en el
TwinCAT PLC Control (si se hace en lenguaje ST poner simplemente un
';') que se ejecutar en una tarea con un tiempo de ejecucin largo, y al
que le asignar la escritura de las variables remanentes en la NOVRAM.
Creo el programa vaco llamado 'SECUNDARIO':

Ahora vamos a aadir una tarea adicional al PLC, vamos a la pestaa


Resources del PLC Control y abrimos la Task configuration. En el rbol
de tareas, sobre Task configuration pulsamos el botn derecho del ratn
y seleccionamos Append Task.
Le damos un nombre a la tarea, en mi caso la he llamado
SECUNDARIA y le asignamos un tiempo de ejecucin. Para mi
aplicacin 1 segundo (1000 ms) es suficiente.

En el rbol de tareas, sobre la tarea recin creada, con el botn derecho


del ratn seleccionaremos 'Append Program Call'.

Y seleccionamos el programa vaco creado anteriormente.


Ya tenemos la tarea secundaria configurada. Compilamos el programa
para que el System Manager actualice la configuracin del programa.

Ahora vamos al TwinCAT System Manager y bajo PLC - Configuracin


vemos que aparece nuestro programa y las dos tareas.

Si desplegamos las tareas se observa que la variable


POSICION_NO_VOLATIL est asignada a la tarea Standard.
Pinchamos sobre la variable POSICION_NO_VOLATIL y la arrastramos
sobre las salidas de la tarea SECUNDARIA.

Con esto conseguimos que la escritura en la variable


POSICION_NO_VOLATIL est asignada al ciclo de la tarea
SECUNDARIA. Ahora tenemos que vincular la variable remanente con
una salida asignada al dispositivo NOVRAM, as que lo desplegamos,
pulsamos con el botn derecho sobre las salidas y seleccionamos
'Insertar variable...'
Le damos un nombre cualquiera y es importante especificarle el mismo
tipo de variable que deseamos vincularle. Como
POSICION_NO_VOLATIL es un DINT selecciono INT32 (puede
confundir un poco que las denominaciones de los tipos de datos no sean
idnticas al que tienen las variables en su declaracin).

Ahora hay que vincular la variable que acabamos de crear para ello
pulsamos el botn 'Vinculado a...' y seleccionamos la variable
POSICION_NO_VOLATIL.
Ya estn las variables vinculadas.

Ahora solo falta un detalle ms. Es necesario marcar la casilla 'Auto Init
linked PLC Outputs' para que al arrancar el PLC lea el valor almacenado
previamente (sincronizacin).
Activamos la configuracin recin creada y listo, cuando asignemos un
valor a POSICION_NO_VOLATIL estaremos seguros de que
sobrevivir a una prdida de alimentacin.

NOTA: podemos utilizar la variable POSICION_NO_VOLATIL desde la


tarea Standard o cualquier otra tarea, aunque no la tenga asignada, es
un proceso transparente para el programador.

Una advertencia final: no est permitido declarar las variables


remanentes que guardemos en la NOVRAM como VAR_PERSISTENT o
VAR_RETAIN.

Antes de acabar quiero agradecer al tcnico de Beckhoff sus pacientes


explicaciones.

You might also like