{
    S7_Author := "ABH";
    S7_BlockComment := "MLC_3x7";
    S7_BlockNumber := "15026";
    S7_BlockTitle := "MLC_4P4";
    S7_EditorMode := "SCL";
    S7_Family := "ZeusControl";
    S7_IECCheck := "TRUE";
    S7_Optimized := "TRUE";
    S7_Version := "1.0"
}
FUNCTION "FC15026_ZC_PULSADOR" : Void
    VAR_INPUT
        { S7_MLC := "MLC_4b4" }
        Pulso1Seg : Bool;
        { S7_MLC := "MLC_mg" }
        SP_Tiempo : Int;
        { S7_MLC := "MLC_xH" }
        TrazaCategoria : Int;
        { S7_MLC := "MLC_4gi" }
        TrazaIdProceso : Int;
        { S7_MLC := "MLC_5CY" }
        TrazaIdPulsador : Int;
        { S7_MLC := "MLC_54A" }
        Usuario : String;
        { S7_MLC := "MLC_mR" }
        FechaHoraActual : DTL;
    END_VAR
    VAR_IN_OUT
        { S7_MLC := "MLC_3Aq" }
        Pulsador : _.UDT_ZC_PULSADOR;
    END_VAR

    { S7_Language := "SCL" }
    NETWORK
        REGION DESCRIPCION
        (*
        ###### (C)Copyright ZeusControl 2025 - 2026
        
        ---
        ### 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 la gestión temporizada de los pulsadores virtuales provenientes del sistema HMI o sistema externo, integrando el registro automático de cada acción en el sistema de trazabilidad.
        
        En ella se realizan las siguientes acciones:
            - Evalúa continuamente si existe una orden activa desde el HMI o desde sistema externo y si el pulsador dispone del permiso de ejecución necesario.
            - Incrementa un temporizador interno auxiliar mediante un pulso de un segundo hasta alcanzar el tiempo de retardo configurado.
            - Una vez superado el tiempo de retardo:
                - Registra el evento en el buffer invocando la función FC8_ZC_TRAZA_REGISTRO, asignando la categoría específica de pulsadores, el identificador, el usuario y la marca de tiempo.
                - Activa la señal de confirmación de orden hacia la lógica del PLC.
                - Resetea automáticamente la marca de activación del HMI.
            - Reinicia a cero el tiempo acumulado del pulsador en caso de perder el permiso de ejecución o si la orden del HMI se cancela antes de finalizar el temporizador.
        
        ---
        ### Dependencias Requeridas
        | Tipo | Elementos |
        |------|-----------|
        | FC   | `FC8_ZC_TRAZA_REGISTRO` |
        | FB   | - |
        | DB   | - |
        | UDT  | `UDT_ZC_PULSADOR` |
            
        ---
        ### Historial de Cambios
        | Versión  | Fecha      | Técnico | Cambios |
        |----------|------------|---------|---------|
        | 01.00.00 | 14.03.2025 | (ABH) | Primera version. |
        | 01.01.00 | 08.07.2026 | (ABH) | Se implementa orden externa. |
        *)
        END_REGION DESCRIPCION
        
        
        //  ==========================================================================================================
        REGION GESTION_PULSADOR
            
            //  Reset orden PLC
            #Pulsador.Plc := FALSE;
            
            //  Con permiso y con la orden desde HMI, contamos el tiempo para activar la orden de PLC
            IF (#Pulsador.Hmi OR #Pulsador.Remoto) AND #Pulsador.Permiso THEN
                
                IF #Pulso1Seg AND #Pulsador.AuxTiempo < #SP_Tiempo THEN
                    #Pulsador.AuxTiempo += 1;
                END_IF;
                
                IF #Pulsador.AuxTiempo >= #SP_Tiempo THEN
                    
                    //  Registramos la trazabilidad de la pulsacion del boton
                    "FC8_ZC_TRZ_REGISTRO"(FechaHora := #FechaHoraActual,
                                            Registrar := 1,
                                            Categoria := #TrazaCategoria,
                                            User := #Usuario,
                                            CodInt_1 := #TrazaIdProceso,
                                            CodInt_2 := #TrazaIdPulsador,
                                            CodInt_3 := 0,
                                            CodInt_4:= 0,
                                            CodInt_5:= 0,
                                            CodReal_1 := 0.0,
                                            CodReal_2 := 0.0);
                    
                    //  Activacion de orden PLC y reset orden HMI
                    #Pulsador.Plc := TRUE;
                    #Pulsador.Hmi := 
                    #Pulsador.Remoto := FALSE;
                    
                END_IF;
                
            END_IF;
            
        END_REGION GESTION_PULSADOR
        
        
        //  ==========================================================================================================
        REGION RESET_DATOS
            
            //  Sin orden desde HMI o si no tenemos permiso, reseteamos el tiempo del pulsador
            IF (NOT #Pulsador.Hmi AND NOT #Pulsador.Remoto) OR NOT #Pulsador.Permiso THEN
                #Pulsador.AuxTiempo := 0;
            END_IF;
            
        END_REGION RESET_DATOS
        
        
    END_NETWORK
END_FUNCTION
