FUNCTION "FC15025_ZC_CONTADOR_TIEMPO" : Void
TITLE = FC15025_ZC_CONTADOR_TIEMPO
{ S7_Optimized_Access := 'TRUE' }
AUTHOR : HCR
FAMILY : ZeusControl
VERSION : 1.0
//Funcion contador de tiempo
   VAR_INPUT 
      Pulso1seg : Bool;   // Pulso de 1 segundo
      Iniciar : Bool;   // Orden iniciar contador
      Reset : Bool;   // Reset contador
   END_VAR

   VAR_IN_OUT 
      Contador : "UDT_ZC_CONTADOR_TIEMPO";
   END_VAR

   VAR CONSTANT 
      MAX_HORAS : UDInt := 10000000;   // Valor maximo de horas
   END_VAR


BEGIN
	REGION DESCRIPCION
	(*
	###### (C)Copyright ZeusControl 2023 - 2023
	
	---
	### Información del Sistema
	| Hardware Compatible | Entorno de Ingeniería |
	|---------------------|-----------------------|
	| PLC serie 1200/1500 | TIA Portal 18         |
	
	---
	> **Restricciones:** Ninguna.
	
	---
	### Descripción Funcional
	
	Función encargada de contar tiempo.
	
	---
	### Dependencias Requeridas
	| Tipo | Elementos |
	|------|-----------|
	| FC   | - |
	| FB   | - |
	| DB   | - |
	| UDT  | - |
	    
	---
	### Historial de Cambios
	| Versión  | Fecha      | Técnico | Cambios |
	|----------|------------|---------|---------|
	| 01.00.00 | 16.03.2023 | (HCR)   | Primera version. |
	| 01.00.01 | 25.07.2023 | (HCR)   | Se añade valor maximo DINT para limitar contador horas. En caso de alcanzar valor maximo, se resetea el contador de horas. |
	*)
	END_REGION DESCRIPCION
	
	
	//  ==========================================================================================================
	REGION GESTION_CONTADOR
	    
	    //  ==========================================================================================================
	    REGION RESET_CONTADOR
	        
	        IF #Reset OR #Contador.Hora >= #MAX_HORAS THEN
	            #Contador.Hora := #Contador.Minuto := #Contador.Segundo := 0;
	        END_IF;
	        
	    END_REGION RESET_CONTADOR
	    
	    
	    //  ==========================================================================================================
	    REGION GESTION_CONTADOR
	        
	        IF #Iniciar AND #Pulso1seg THEN
	            #Contador.#Segundo += 1;
	            IF #Contador.#Segundo >= 60 THEN
	                #Contador.#Segundo := 0;
	                #Contador.#Minuto += 1;
	                IF #Contador.#Minuto >= 60 THEN
	                    #Contador.#Minuto := 0;
	                    #Contador.Hora += 1;
	                END_IF;
	            END_IF;
	        END_IF;
	        
	    END_REGION RESET_CONTADOR
	    
	END_REGION
	
END_FUNCTION

