Cómo conservar el valor de un contador IEC en un PLC SIMATIC tras un fallo de alimentación

Para mantener el valor de conteo de un bloque contador IEC (CTU, CTD o CTUD) en un controlador SIMATIC S7 después de una pérdida de tensión o un reinicio de la CPU, debe evitarse que las variables internas del bloque de instancia o los parámetros de entrada sobrescriban el último valor registrado con un cero predeterminado. El método más robusto y de menor impacto en el programa consiste en implementar un contador personalizado mediante una variable entera almacenada en un bloque de datos (DB) remanente, incrementada o decrementada mediante una instrucción de suma/resta activada por un flanco de subida. Como alternativa directa para contadores IEC estándar, se puede reescribir el valor remanente guardado en la variable actual durante el ciclo de arranque de la CPU (OB100 o bit de primer ciclo).

Tabla de contenido

Causa técnica: comportamiento de los contadores IEC frente al reinicio de la CPU

Un bloque de función de contador IEC estándar (como CTU) almacena su valor de conteo actual (CV) dentro de la estructura de datos de su bloque de instancia asociado.

Cuando la CPU de un PLC SIMATIC experimenta una interrupción de energía y ejecuta posteriormente un arranque en frío o en caliente (STOP a RUN), se presentan dos comportamientos según la configuración de memoria:

  1. Si el bloque de instancia no está configurado como remanente: Las variables del contador se reinician a sus valores iniciales por defecto (0), perdiendo la cuenta acumulada antes de la falla.
  2. Si se copia el valor CV a una variable de DB remanente pero se mantiene la lógica IEC estándar: Al reanudarse la ejecución del programa, el bloque de función CTU evalúa su estado interno inicializado en 0. En el primer ciclo de escaneo, el bloque sobrescribe la variable del DB remanente con su valor actual inicializado (0), eliminando el dato histórico almacenado.

Para preservar la información de conteo, la lógica de control debe gestionar directamente la suma sobre un espacio de memoria remanente o forzar la precarga del valor guardado en el bloque de contador antes de que este ejecute su primera evaluación de entrada.

Requisitos previos

Antes de implementar una solución de conteo remanente en STEP 7 o TIA Portal, asegúrese de cumplir con los siguientes puntos:

  • Controlador SIMATIC S7 (S7-300, S7-400, S7-1200 o S7-1500) configurado en el proyecto de ingeniería.
  • Entorno de programación STEP 7 v5.x o TIA Portal (STEP 7 Professional/Basic).
  • Un bloque de datos global (DB) creado en el proyecto con la propiedad de Remanencia (Retain) habilitada para las variables de proceso.
  • Definición de la lógica de reinicio (Reset) o valor de preselección para la puesta a cero del contador.

Método 1: Contador personalizado basado en DB remanente e instrucción de flanco

Se utiliza mejor cuando: Se busca una solución limpia, transparente y fácil de diagnosticar que no dependa de la inicialización de bloques de función IEC ni de rutinas complejas en el arranque de la CPU.

Procedimiento

  1. Abra el editor de bloques y cree un bloque de datos global (por ejemplo, DB_Contadores).
  2. En la tabla de variables del DB, cree una variable de tipo entero (INT o DINT) denominada Valor_Actual.
  3. Asegúrese de que la casilla de la columna Remanencia (Retain) esté activada para la variable Valor_Actual.
  4. En el bloque de programa principal (OB1), programe la detección de flanco de subida (P_TRIG o instrucción de flanco de señal) asignada a la entrada física de conteo.
  5. Conecte la salida del flanco a una función de adición (ADD para conteo ascendente) o sustracción (SUB para conteo descendente):

    • IN1: DB_Contadores.Valor_Actual
    • IN2: 1 (o la constante de incremento deseada)
    • OUT: DB_Contadores.Valor_Actual
      6. Para la función de comparación (equivalente a la salida Q de un CTU), utilice un bloque comparador (CMP >=) evaluando si DB_Contadores.Valor_Actual es mayor o igual al valor límite asignado (PV).
      7. Para la función de reinicio (Reset), utilice la señal de borrado para ejecutar una instrucción de movimiento (MOVE) transfiriendo el valor 0 hacia la variable DB_Contadores.Valor_Actual.

Plaintext

Entrada_Conteo      Bit_Memoria_Flanco
-------| |-------------------(P)-------------------[ ADD ]
                                                  IN1: DB_Contadores.Valor_Actual
                                                  IN2: 1
                                                  OUT: DB_Contadores.Valor_Actual

Resultado esperado: Cada pulso de entrada incrementa en 1 el valor almacenado en el DB remanente. Tras un corte de energía, la CPU conserva el valor de Valor_Actual intacto y reanuda el conteo desde el último número registrado.

Verificación: Monitoree la variable DB_Contadores.Valor_Actual en una tabla de observación (VAT), aplique pulsos de entrada, pase la CPU a modo STOP, desenergice el equipo y confirme al arrancar en RUN que el valor numérico no ha cambiado.

Método 2: Recarga del valor remanente durante la rutina de arranque (OB100)

Se utiliza mejor cuando: Se requiere mantener la estructura estándar del bloque de función de contador IEC (CTU) existente en el programa sin reescribir la lógica de comparación.

Procedimiento

  1. Defina una variable dentro de un DB global configurado con propiedad Remanente (por ejemplo, DB_Remanente.Valor_Guardado).
  2. En la llamada del bloque de función CTU en el ciclo principal (OB1), asigne la variable DB_Remanente.Valor_Guardado al parámetro de salida de conteo actual CV.
  3. Inserte o configure el bloque de organización de arranque de la CPU (OB100 - Startup).
  4. Dentro del OB100 (o utilizando el bit de marcas del sistema FirstScan / "First scan"), habilite la carga del valor remanente previa mediante la señal de carga del contador:

    • Asigne el valor guardado previamente DB_Remanente.Valor_Guardado a la entrada del valor de preselección (PV) del bloque o transfiera el valor registrado a la memoria interna del contador antes de la primera exploración del ciclo principal.
      5. En la lógica de control del CTU, asegúrese de que la entrada de reinicio (RESET) permanezca en nivel bajo (FALSE) durante la ejecución del OB100.

Resultado esperado: El bloque de organización de arranque intercepta el inicio de la CPU y restaura el valor que tenía el contador antes de la desconexión de energía.

Verificación: Force un evento de reinicio de la CPU y compruebe en el visor del bloque CTU que el parámetro CV no regresa a 0 al entrar a modo RUN.

Comparación de métodos

CriterioMétodo 1: Contador personalizado en DBMétodo 2: Recarga en OB100Complejidad de códigoMuy baja (Bloques ADD + Flanco)Media (Requiere sincronizar OB100 y OB1)Uso de memoriaMínimo (Solo variables del DB)Requiere bloques de instancia e interfaz IECRiesgo de sobrescrituraNulo (La memoria conserva su estado)Medio (Si el pulso de Reset se activa en arranque)PortabilidadAlta (Encapsulamiento en FC/FB)Depende del tipo de CPU y gestión de bloques IEC

Verificación

El procedimiento de conservación remanente del valor de conteo se considera exitoso cuando:

  • El valor de la variable de conteo mantiene exactamente el mismo número antes y después de un ciclo completo de apagado y encendido (Power Cycle) de la fuente de alimentación del PLC.
  • Los pulsos de entrada recibidos inmediatamente después del arranque incrementan la cuenta partiendo del valor recuperado y no desde cero.
  • Las instrucciones de comparación asociadas responden correctamente activando las salidas de proceso cuando se alcanza el valor límite de preselección.

Limitaciones y precauciones operativas

  • Límite de ciclos de escritura en memoria no volátil: Asegúrese de que las variables de conteo estén ubicadas en la memoria RAM respaldada por batería o memoria de retención del PLC, y no en áreas de memoria Flash de escritura de sistema, para evitar el desgaste prematuro de la memoria de programa.
  • Evaluación de flancos tras el arranque: Al utilizar el Método 1, asegúrese de que la marca de memoria empleada para la instrucción de flanco de subida no genere un conteo falso (falso positivo) durante el primer ciclo de escaneo tras restablecer la energía.

Preguntas frecuentes

¿Por qué el contador IEC CTU vuelve a cero si asigné su salida CV a un DB remanente?

Porque el bloque de función CTU ejecuta internamente su lógica de código en el primer ciclo de escaneo. Como el estado de su bloque de instancia interno no retenido se inicializa en cero, la ejecución del bloque sobrescribe el valor asignado en la variable del DB remanente con un 0.

¿Se pueden crear funciones reutilizables para este tipo de contadores?

Sí. Se puede crear un bloque de función (FB) o una función (FC) personalizada que contenga la lógica de flanco y suma, guardando el estado en un DB de instancia remanente y almacenándolo en la biblioteca global de STEP 7 o TIA Portal para su reutilización en cualquier proyecto.

¿Cómo se comporta un contador rápido de hardware (HSC) en comparación con un contador por software CTU?

Los contadores rápidos de hardware (High-Speed Counters - HSC) integrados en las CPUs SIMATIC procesan impulsos de alta frecuencia fuera del ciclo de escaneo del programa. Para recuperar la cuenta en un HSC tras una pérdida de energía, se deben utilizar las instrucciones de control del sistema (como CTRL_HSC) en el bloque de arranque OB100 para escribir el valor remanente en el registro NEW_CV y activar la bandera de actualización CV.

Artículos relacionados

Etiquetas relacionadas

Code: C316

6 respuestas