{
    S7_Author := "HCR";
    S7_BlockComment := "MLC_3WU";
    S7_BlockNumber := "2841";
    S7_BlockTitle := "MLC_3Zb";
    S7_EditorMode := "SCL";
    S7_Family := "ZeusControl";
    S7_IECCheck := "TRUE";
    S7_Optimized := "TRUE";
    S7_Version := "1.0"
}
FUNCTION "FC2841_ZC_TQ_AE_MUX" : Void
    VAR_INPUT
        Arranque : Bool;
    END_VAR
    VAR_TEMP
        for_mux : Int;
        t_Index : Int;
        t_oldIndex : Int;
        t_N_MAX : Int;
        t_CambioDesdeHMI : Bool;
        t_CambioDesdeMux : Bool;
    END_VAR

    { S7_Language := "SCL" }
    NETWORK
        REGION DESCRIPCION
        (*
        ###### (C)Copyright ZeusControl 2020 - 2026
        
        ---
        ### Información del Sistema
        | Hardware Compatible | Entorno de Ingeniería |
        |---------------------|-----------------------|
        | PLC serie 1200/1500 | TIA Portal 18         |
        
        ---
        > **Restricciones:** Ninguna.
        
        - - -
        ### Descripción Funcional
        El bloque implementa la gestión de multiplexado estático para el dispositivo tanque aire esteril, exponiendo la matriz de equipos de la planta a los sistemas de supervisión SCADA Clásicos (WinCC Professional) sin necesidad de acceso indexado nativo.
        
        Funcionalidades principales de la arquitectura:
        - En el primer arranque del PLC (`#Arranque`), inicializa a `0` los índices (`Index` y `oldIndex`) de todos los canales de multiplexado.
        - Validación de los límites del índice de cada multiplexado frente a la constante `N_MAX_DISP_TQ_AE`.
        - Detección de cambio de índice (`Index <> oldIndex`) para cargar la estructura completa del equipo seleccionado (`DB2041_TQ_AE.TQ_AE[X]`) en la interfaz del multiplexor.
        - Transferencia continua de datos de Solo Lectura (estados, valores actuales, alarmas) desde el PLC hacia el SCADA.
        - Transferencia bidireccional segura de datos de Escritura (consignas, configuraciones y modos) evaluando máscaras de cambios (`CambioDesdeHMI` vs `CambioDesdeMux`) para evitar sobrescrituras accidentales.
        - Gestión de comandos (Resets, pulsadores) con auto-reseteo para evitar el efecto rebote.
        - Caso especial de índice `0`: carga la estructura `TQ_AE[0]` (reservada y vacía) para limpiar la pantalla del SCADA.
        
        > ** Restricciones: ** Exclusivo para SCADAs sin soporte de indexación directa.
        
        - - -
        ### Dependencias Requeridas
        | Tipo | Elementos |
        |------|-----------|
        | FC   | - |
        | FB   | - |
        | DB   | `DB2041_TQ_AE` |
        | UDT  | `ZC_DISP_TQ_AE`, `ZC_DISP_MUX_TQ_AE` | 
        ---
        ### Historial de Cambios
        | Versión  | Fecha      | Técnico | Cambios |
        |----------|------------|---------|---------|
        | 01.00.00 | 10.07.2026 | (ABH)   | Primera versión extraído a FC independiente. Refactorizacion de multiplexado para su uso solo en WinCC Professional.|
        *)
        END_REGION DESCRIPCION
        
        
        REGION COMPROBACION_N_MAX
            
            //  Si no hay Scada declarados, salimos del bloque inmediatamente
            IF "N_MAX_SCADA" <= 0 THEN
                RETURN;
            END_IF;
            
            //  Traspaso de N_MAX a variable temporal para evitar fallos de compilacion
            #t_N_MAX := "N_MAX_SCADA";
            
        END_REGION COMPROBACION_N_MAX
        
        
        REGION MULTIPLEXADO
            
            //  ===========================================================================================================
            //  Al arranque del PLC, ponemos a 0 todos los indices de los multiplexados
            IF #Arranque THEN
                FOR #for_mux := 1 TO #t_N_MAX DO
                    "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].Index :=
                    "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldIndex := 0;
                END_FOR;
            END_IF;
            
            //  ===========================================================================================================
            //  Gestion de multiplexado
            FOR #for_mux := 1 TO #t_N_MAX DO
                
                //  ===============================================================================================================
                //  Antes de iniciar la logica del multiplexado, revisamos los limites
                REGION LIMITES
                    
                    //  ===========================================================================================================
                    //  Limites
                    IF "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].Index < 0 THEN
                        "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].Index := 0;
                    END_IF;
                    IF "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].Index > "N_MAX_DISP_TQ_AE" THEN
                        "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].Index := "N_MAX_DISP_TQ_AE";
                    END_IF;
                    
                END_REGION LIMITES
                
                
                REGION INDICES
                    
                    //  Pasamos el indice a variable temporal para evisar cambios no deseados
                    #t_Index := "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].Index;
                    #t_oldIndex := "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldIndex;
                    
                END_REGION INDICES
                
                
                IF "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].Habilitar THEN
                    
                    //  ===========================================================================================================
                    //  Gestionamos solo los tipos 
                    IF #t_Index > 0 THEN
                        
                        REGION CARGA_INICIAL
                            
                            //  ===========================================================================================================
                            //  Al detectar un cambio en el indice del dispositivo, cargamos los valores del dispositivo que tenga el indice.
                            IF #t_Index <> #t_oldIndex THEN
                                
                                //  Traspaso de dispositivos al multiplexado
                                "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE := "DB2041_TQ_AE".TQ_AE[#t_Index];
                                "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE := "DB2041_TQ_AE".TQ_AE[#t_Index];
                                
                                //  ===========================================================================================================
                                //  Valor anterior del indice
                                "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldIndex := #t_Index;
                                
                            END_IF;
                            
                        END_REGION CARGA_INICIAL
                        
                        
                        REGION DATOS_LECTURA
                            
                            //  ===========================================================================================================
                            //  Movimiento de datos gestionados en FC
                            IF NOT "DB2041_TQ_AE".TQ_AE[#t_Index].Estado_AutoMan THEN
                                "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Orden_Manual := "DB2041_TQ_AE".TQ_AE[#t_Index].Orden_Manual;
                            END_IF;
                            "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Hmi_Estado := "DB2041_TQ_AE".TQ_AE[#t_Index].Hmi_Estado;
                            "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Orden_Produccion := "DB2041_TQ_AE".TQ_AE[#t_Index].Orden_Produccion;
                            "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Orden_CIP := "DB2041_TQ_AE".TQ_AE[#t_Index].Orden_CIP;
                            "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Orden_Vaciado := "DB2041_TQ_AE".TQ_AE[#t_Index].Orden_Vaciado;
                            "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Alarma_PresionBaja := "DB2041_TQ_AE".TQ_AE[#t_Index].Alarma_PresionBaja;
                            "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Alarma_PresionAlta := "DB2041_TQ_AE".TQ_AE[#t_Index].Alarma_PresionAlta;
                            "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Alarma_Configuracion := "DB2041_TQ_AE".TQ_AE[#t_Index].Alarma_Configuracion;
                            "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Salida_ValvulaVenteo := "DB2041_TQ_AE".TQ_AE[#t_Index].Salida_ValvulaVenteo;
                            "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Salida_ValvulaEsteril := "DB2041_TQ_AE".TQ_AE[#t_Index].Salida_ValvulaEsteril;
                            "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Salida_ValvulaDucha := "DB2041_TQ_AE".TQ_AE[#t_Index].Salida_ValvulaDucha;
                            "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Aux_DuchaFlipActivo := "DB2041_TQ_AE".TQ_AE[#t_Index].Aux_DuchaFlipActivo;
                            "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Aux_DuchaFlopActivo := "DB2041_TQ_AE".TQ_AE[#t_Index].Aux_DuchaFlopActivo;
                            "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Aux_DuchaFlanco := "DB2041_TQ_AE".TQ_AE[#t_Index].Aux_DuchaFlanco;
                            "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Aux_DuchaSalidaFlip := "DB2041_TQ_AE".TQ_AE[#t_Index].Aux_DuchaSalidaFlip;
                            "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Aux_DuchaSalidaFlop := "DB2041_TQ_AE".TQ_AE[#t_Index].Aux_DuchaSalidaFlop;
                            "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Aux_oldOrdenManual := "DB2041_TQ_AE".TQ_AE[#t_Index].Aux_oldOrdenManual;
                            "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Aux_oldAutoMan := "DB2041_TQ_AE".TQ_AE[#t_Index].Aux_oldAutoMan;
                            "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Estado_ValorPresion := "DB2041_TQ_AE".TQ_AE[#t_Index].Estado_ValorPresion;
                            "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Tiempos_AlarmaMaxPresion := "DB2041_TQ_AE".TQ_AE[#t_Index].Tiempos_AlarmaMaxPresion;
                            "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Tiempos_AlarmaMinPresion := "DB2041_TQ_AE".TQ_AE[#t_Index].Tiempos_AlarmaMinPresion;
                            "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Tiempos_DuchaTiempoFlip := "DB2041_TQ_AE".TQ_AE[#t_Index].Tiempos_DuchaTiempoFlip;
                            "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Tiempos_DuchaTiempoFlop := "DB2041_TQ_AE".TQ_AE[#t_Index].Tiempos_DuchaTiempoFlop;
                            "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Config_GrupoAlarma := "DB2041_TQ_AE".TQ_AE[#t_Index].Config_GrupoAlarma;
                            
                        END_REGION DATOS_LECTURA
                        
                        
                        REGION DATOS_ESCRITURA
                            
                            REGION GESTION_CAMBIOS_DINAMICOS
                                
                                //  Estado auto/manual
                                IF "DB2041_TQ_AE".TQ_AE[#t_Index].Estado_AutoMan <> "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE.Estado_AutoMan THEN
                                    "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Estado_AutoMan := "DB2041_TQ_AE".TQ_AE[#t_Index].Estado_AutoMan;
                                    "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE.Estado_AutoMan := "DB2041_TQ_AE".TQ_AE[#t_Index].Estado_AutoMan;
                                ELSIF "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Estado_AutoMan <> "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE.Estado_AutoMan THEN
                                    "DB2041_TQ_AE".TQ_AE[#t_Index].Estado_AutoMan := "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Estado_AutoMan;
                                    "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE.Estado_AutoMan := "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Estado_AutoMan;
                                END_IF;
                                
                                //  Ordenes (Respetando el diseño original del usuario)
                                IF "DB2041_TQ_AE".TQ_AE[#t_Index].Orden_Manual <> "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE.Orden_Manual THEN
                                    "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Orden_Manual := "DB2041_TQ_AE".TQ_AE[#t_Index].Orden_Manual;
                                    "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE.Orden_Manual := "DB2041_TQ_AE".TQ_AE[#t_Index].Orden_Manual;
                                ELSIF "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Orden_Manual <> "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE.Orden_Manual THEN
                                    "DB2041_TQ_AE".TQ_AE[#t_Index].Orden_Manual := "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Orden_Manual;
                                    "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE.Orden_Manual := "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Orden_Manual;
                                END_IF;
                                
                            END_REGION GESTION_CAMBIOS_DINAMICOS
                            
                            
                            REGION GESTION_CAMBIOS_CONFIG
                                
                                //  Marca auxiliar para indicar que el cambio es desde HMI
                                #t_CambioDesdeHMI :=
                                ("DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE.Config_Habilitar <> "DB2041_TQ_AE".TQ_AE[#t_Index].Config_Habilitar)
                                OR ("DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE.Config_HabilitarAlarmas <> "DB2041_TQ_AE".TQ_AE[#t_Index].Config_HabilitarAlarmas)
                                OR ("DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE.Config_PresionMaxTrabajo <> "DB2041_TQ_AE".TQ_AE[#t_Index].Config_PresionMaxTrabajo)
                                OR ("DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE.Config_PresionMinTrabajo <> "DB2041_TQ_AE".TQ_AE[#t_Index].Config_PresionMinTrabajo)
                                OR ("DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE.Config_PresionMaxAlarma <> "DB2041_TQ_AE".TQ_AE[#t_Index].Config_PresionMaxAlarma)
                                OR ("DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE.Config_PresionMinAlarma <> "DB2041_TQ_AE".TQ_AE[#t_Index].Config_PresionMinAlarma)
                                OR ("DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE.Tiempos_SetPointAlarmaMaxPresion <> "DB2041_TQ_AE".TQ_AE[#t_Index].Tiempos_SetPointAlarmaMaxPresion)
                                OR ("DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE.Tiempos_SetPointAlarmaMinPresion <> "DB2041_TQ_AE".TQ_AE[#t_Index].Tiempos_SetPointAlarmaMinPresion)
                                OR ("DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE.Tiempos_SetPointFlipDucha <> "DB2041_TQ_AE".TQ_AE[#t_Index].Tiempos_SetPointFlipDucha)
                                OR ("DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE.Tiempos_SetPointFlopDucha <> "DB2041_TQ_AE".TQ_AE[#t_Index].Tiempos_SetPointFlopDucha);
                                
                                //  Marca auxiliar para indicar que el cambio es desde MUX SCADA
                                #t_CambioDesdeMux :=
                                ("DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Config_Habilitar <> "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE.Config_Habilitar)
                                OR ("DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Config_HabilitarAlarmas <> "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE.Config_HabilitarAlarmas)
                                OR ("DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Config_PresionMaxTrabajo <> "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE.Config_PresionMaxTrabajo)
                                OR ("DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Config_PresionMinTrabajo <> "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE.Config_PresionMinTrabajo)
                                OR ("DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Config_PresionMaxAlarma <> "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE.Config_PresionMaxAlarma)
                                OR ("DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Config_PresionMinAlarma <> "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE.Config_PresionMinAlarma)
                                OR ("DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Tiempos_SetPointAlarmaMaxPresion <> "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE.Tiempos_SetPointAlarmaMaxPresion)
                                OR ("DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Tiempos_SetPointAlarmaMinPresion <> "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE.Tiempos_SetPointAlarmaMinPresion)
                                OR ("DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Tiempos_SetPointFlipDucha <> "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE.Tiempos_SetPointFlipDucha)
                                OR ("DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Tiempos_SetPointFlopDucha <> "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE.Tiempos_SetPointFlopDucha);
                                
                            END_REGION GESTION_CAMBIOS_CONFIG
                            
                            
                            REGION TRASPASO_DATOS
                                
                                IF #t_CambioDesdeHMI THEN
                                    
                                    // Carga al Mux
                                    "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Config_Habilitar := "DB2041_TQ_AE".TQ_AE[#t_Index].Config_Habilitar;
                                    "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Config_HabilitarAlarmas := "DB2041_TQ_AE".TQ_AE[#t_Index].Config_HabilitarAlarmas;
                                    "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Config_PresionMaxTrabajo := "DB2041_TQ_AE".TQ_AE[#t_Index].Config_PresionMaxTrabajo;
                                    "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Config_PresionMinTrabajo := "DB2041_TQ_AE".TQ_AE[#t_Index].Config_PresionMinTrabajo;
                                    "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Config_PresionMaxAlarma := "DB2041_TQ_AE".TQ_AE[#t_Index].Config_PresionMaxAlarma;
                                    "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Config_PresionMinAlarma := "DB2041_TQ_AE".TQ_AE[#t_Index].Config_PresionMinAlarma;
                                    "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Tiempos_SetPointAlarmaMaxPresion := "DB2041_TQ_AE".TQ_AE[#t_Index].Tiempos_SetPointAlarmaMaxPresion;
                                    "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Tiempos_SetPointAlarmaMinPresion := "DB2041_TQ_AE".TQ_AE[#t_Index].Tiempos_SetPointAlarmaMinPresion;
                                    "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Tiempos_SetPointFlipDucha := "DB2041_TQ_AE".TQ_AE[#t_Index].Tiempos_SetPointFlipDucha;
                                    "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Tiempos_SetPointFlopDucha := "DB2041_TQ_AE".TQ_AE[#t_Index].Tiempos_SetPointFlopDucha;
                                    
                                    // Carga a Old
                                    "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE.Config_Habilitar := "DB2041_TQ_AE".TQ_AE[#t_Index].Config_Habilitar;
                                    "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE.Config_HabilitarAlarmas := "DB2041_TQ_AE".TQ_AE[#t_Index].Config_HabilitarAlarmas;
                                    "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE.Config_PresionMaxTrabajo := "DB2041_TQ_AE".TQ_AE[#t_Index].Config_PresionMaxTrabajo;
                                    "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE.Config_PresionMinTrabajo := "DB2041_TQ_AE".TQ_AE[#t_Index].Config_PresionMinTrabajo;
                                    "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE.Config_PresionMaxAlarma := "DB2041_TQ_AE".TQ_AE[#t_Index].Config_PresionMaxAlarma;
                                    "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE.Config_PresionMinAlarma := "DB2041_TQ_AE".TQ_AE[#t_Index].Config_PresionMinAlarma;
                                    "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE.Tiempos_SetPointAlarmaMaxPresion := "DB2041_TQ_AE".TQ_AE[#t_Index].Tiempos_SetPointAlarmaMaxPresion;
                                    "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE.Tiempos_SetPointAlarmaMinPresion := "DB2041_TQ_AE".TQ_AE[#t_Index].Tiempos_SetPointAlarmaMinPresion;
                                    "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE.Tiempos_SetPointFlipDucha := "DB2041_TQ_AE".TQ_AE[#t_Index].Tiempos_SetPointFlipDucha;
                                    "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE.Tiempos_SetPointFlopDucha := "DB2041_TQ_AE".TQ_AE[#t_Index].Tiempos_SetPointFlopDucha;
                                    
                                ELSIF #t_CambioDesdeMux THEN
                                    
                                    // Carga al PLC
                                    "DB2041_TQ_AE".TQ_AE[#t_Index].Config_Habilitar := "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Config_Habilitar;
                                    "DB2041_TQ_AE".TQ_AE[#t_Index].Config_HabilitarAlarmas := "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Config_HabilitarAlarmas;
                                    "DB2041_TQ_AE".TQ_AE[#t_Index].Config_PresionMaxTrabajo := "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Config_PresionMaxTrabajo;
                                    "DB2041_TQ_AE".TQ_AE[#t_Index].Config_PresionMinTrabajo := "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Config_PresionMinTrabajo;
                                    "DB2041_TQ_AE".TQ_AE[#t_Index].Config_PresionMaxAlarma := "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Config_PresionMaxAlarma;
                                    "DB2041_TQ_AE".TQ_AE[#t_Index].Config_PresionMinAlarma := "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Config_PresionMinAlarma;
                                    "DB2041_TQ_AE".TQ_AE[#t_Index].Tiempos_SetPointAlarmaMaxPresion := "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Tiempos_SetPointAlarmaMaxPresion;
                                    "DB2041_TQ_AE".TQ_AE[#t_Index].Tiempos_SetPointAlarmaMinPresion := "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Tiempos_SetPointAlarmaMinPresion;
                                    "DB2041_TQ_AE".TQ_AE[#t_Index].Tiempos_SetPointFlipDucha := "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Tiempos_SetPointFlipDucha;
                                    "DB2041_TQ_AE".TQ_AE[#t_Index].Tiempos_SetPointFlopDucha := "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Tiempos_SetPointFlopDucha;
                                    
                                    // Carga a Old
                                    "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE.Config_Habilitar := "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Config_Habilitar;
                                    "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE.Config_HabilitarAlarmas := "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Config_HabilitarAlarmas;
                                    "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE.Config_PresionMaxTrabajo := "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Config_PresionMaxTrabajo;
                                    "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE.Config_PresionMinTrabajo := "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Config_PresionMinTrabajo;
                                    "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE.Config_PresionMaxAlarma := "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Config_PresionMaxAlarma;
                                    "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE.Config_PresionMinAlarma := "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Config_PresionMinAlarma;
                                    "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE.Tiempos_SetPointAlarmaMaxPresion := "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Tiempos_SetPointAlarmaMaxPresion;
                                    "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE.Tiempos_SetPointAlarmaMinPresion := "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Tiempos_SetPointAlarmaMinPresion;
                                    "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE.Tiempos_SetPointFlipDucha := "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Tiempos_SetPointFlipDucha;
                                    "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE.Tiempos_SetPointFlopDucha := "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE.Tiempos_SetPointFlopDucha;
                                    
                                END_IF;
                                
                            END_REGION TRASPASO_DATOS
                            
                        END_REGION DATOS_ESCRITURA
                        
                    ELSE
                        
                        //  ===========================================================================================================
                        //  En caso de que el indice sea 0, movemos el valor de la AE[0] que no se usa para escribir el index.
                        "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].TQ_AE := "DB2041_TQ_AE".TQ_AE[0];
                        "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldTQ_AE := "DB2041_TQ_AE".TQ_AE[0];
                        
                        //  Actualizacion de estado anterior
                        "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldIndex := 0;
                        
                    END_IF;
                    
                ELSE
                    
                    //  Multiplexado no habilitado
                    "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].Index :=
                    "DB2841_TQ_AE_MUX".Mux.Scada[#for_mux].oldIndex := 0;
                    
                END_IF;
                
            END_FOR;
            
        END_REGION MULTIPLEXADO
        
    END_NETWORK
END_FUNCTION
