FUNCTION "FC2840_ZC_TQ_MUX" : Void
TITLE = FC2840_ZC_TQ_MUX
{ S7_Optimized_Access := 'TRUE' }
AUTHOR : HCR
FAMILY : ZeusControl
VERSION : 1.0
//Funcion de gestion multiplexado dispositivo tanque.
   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


BEGIN
	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, 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`.
	- Detección de cambio de índice (`Index <> oldIndex`) para cargar la estructura completa del equipo seleccionado (`DB2040_TQ.TQ[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[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   | `DB2040_TQ` |
	| UDT  | `ZC_DISP_TQ`, `ZC_DISP_MUX_TQ` | 
	---
	### Historial de Cambios
	| Versión  | Fecha      | Técnico | Cambios |
	|----------|------------|---------|---------|
	| 01.00.00 | 02.07.2026 | (HCR)   | Primera versión.|
	| 01.01.00 | 08.07.2026 | (ABH)   | 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
	            "DB2040_TQ".Mux.Scada[#for_mux].Index :=
	            "DB2040_TQ".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 "DB2040_TQ".Mux.Scada[#for_mux].Index < 0 THEN
	                "DB2040_TQ".Mux.Scada[#for_mux].Index := 0;
	            END_IF;
	            IF "DB2040_TQ".Mux.Scada[#for_mux].Index > "N_MAX_DISP_TQ" THEN
	                "DB2040_TQ".Mux.Scada[#for_mux].Index := "N_MAX_DISP_TQ";
	            END_IF;
	            
	        END_REGION LIMITES
	        
	        
	        //  Traspaso de limites a variable temporal para evitar cambios no deseados
	        REGION INDICES
	            
	            //  Pasamos el indice a variable temporal para evisar cambios no deseados
	            #t_Index := "DB2040_TQ".Mux.Scada[#for_mux].Index;
	            #t_oldIndex := "DB2040_TQ".Mux.Scada[#for_mux].oldIndex;
	            
	        END_REGION INDICES
	        
	        
	        IF "DB2040_TQ".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
	                        "DB2040_TQ".Mux.Scada[#for_mux].TQ := "DB2040_TQ".TQ[#t_Index];
	                        
	                        //  ===========================================================================================================
	                        //  Valor anterior del indice
	                        "DB2040_TQ".Mux.Scada[#for_mux].oldIndex := #t_Index;
	                        
	                    END_IF;
	                    
	                END_REGION CARGA_INICIAL  
	                
	                
	                REGION DATOS_LECTURA
	                    
	                    //  ===========================================================================================================
	                    //  Movimiento de datos gestionados en FC
	                    "DB2040_TQ".Mux.Scada[#for_mux].TQ.Hmi_Estado := "DB2040_TQ".TQ[#t_Index].Hmi_Estado;
	                    IF NOT "DB2040_TQ".TQ[#t_Index].Estado_AutoMan THEN
	                        "DB2040_TQ".Mux.Scada[#for_mux].TQ.Orden_ConsignaManualVolumen := "DB2040_TQ".TQ[#t_Index].Orden_ConsignaManualVolumen;
	                    END_IF;
	                    "DB2040_TQ".Mux.Scada[#for_mux].TQ.Estado_TanqueVacio := "DB2040_TQ".TQ[#t_Index].Estado_TanqueVacio;
	                    "DB2040_TQ".Mux.Scada[#for_mux].TQ.Estado_TanqueLleno := "DB2040_TQ".TQ[#t_Index].Estado_TanqueLleno;
	                    "DB2040_TQ".Mux.Scada[#for_mux].TQ.Estado_PocisionAltura := "DB2040_TQ".TQ[#t_Index].Estado_PocisionAltura;
	                    "DB2040_TQ".Mux.Scada[#for_mux].TQ.Estado_NivelBajo := "DB2040_TQ".TQ[#t_Index].Estado_NivelBajo;
	                    "DB2040_TQ".Mux.Scada[#for_mux].TQ.Estado_NivelAlto := "DB2040_TQ".TQ[#t_Index].Estado_NivelAlto;
	                    "DB2040_TQ".Mux.Scada[#for_mux].TQ.Estado_BocaHombre := "DB2040_TQ".TQ[#t_Index].Estado_BocaHombre;
	                    "DB2040_TQ".Mux.Scada[#for_mux].TQ.Estado_Mezcla := "DB2040_TQ".TQ[#t_Index].Estado_Mezcla;
	                    "DB2040_TQ".Mux.Scada[#for_mux].TQ.Alarmas_NivelBajo := "DB2040_TQ".TQ[#t_Index].Alarmas_NivelBajo;
	                    "DB2040_TQ".Mux.Scada[#for_mux].TQ.Alarmas_NivelAlto := "DB2040_TQ".TQ[#t_Index].Alarmas_NivelAlto;
	                    "DB2040_TQ".Mux.Scada[#for_mux].TQ.Alarmas_BocaHombre := "DB2040_TQ".TQ[#t_Index].Alarmas_BocaHombre;
	                    "DB2040_TQ".Mux.Scada[#for_mux].TQ.Alarmas_General := "DB2040_TQ".TQ[#t_Index].Alarmas_General;
	                    "DB2040_TQ".Mux.Scada[#for_mux].TQ.Alarmas_Capacidad := "DB2040_TQ".TQ[#t_Index].Alarmas_Capacidad;
	                    "DB2040_TQ".Mux.Scada[#for_mux].TQ.Vis_ConsignaTemperatura := "DB2040_TQ".TQ[#t_Index].Vis_ConsignaTemperatura;
	                    "DB2040_TQ".Mux.Scada[#for_mux].TQ.Aux_MemOrdenAgitador := "DB2040_TQ".TQ[#t_Index].Aux_MemOrdenAgitador;
	                    "DB2040_TQ".Mux.Scada[#for_mux].TQ.Aux_MemOrdenTemperatura := "DB2040_TQ".TQ[#t_Index].Aux_MemOrdenTemperatura;
	                    "DB2040_TQ".Mux.Scada[#for_mux].TQ.Aux_MemOrdenProducto := "DB2040_TQ".TQ[#t_Index].Aux_MemOrdenProducto;
	                    "DB2040_TQ".Mux.Scada[#for_mux].TQ.Aux_MemEstadoCIP := "DB2040_TQ".TQ[#t_Index].Aux_MemEstadoCIP;
	                    "DB2040_TQ".Mux.Scada[#for_mux].TQ.Aux_CipOK := "DB2040_TQ".TQ[#t_Index].Aux_CipOK;
	                    "DB2040_TQ".Mux.Scada[#for_mux].TQ.Orden_ParoControlAgitador := "DB2040_TQ".TQ[#t_Index].Orden_ParoControlAgitador;
	                    "DB2040_TQ".Mux.Scada[#for_mux].TQ.Orden_ParoControlTemp := "DB2040_TQ".TQ[#t_Index].Orden_ParoControlTemp;
	                    "DB2040_TQ".Mux.Scada[#for_mux].TQ.Orden_Temperatura := "DB2040_TQ".TQ[#t_Index].Orden_Temperatura;
	                    "DB2040_TQ".Mux.Scada[#for_mux].TQ.Orden_Agitacion := "DB2040_TQ".TQ[#t_Index].Orden_Agitacion;
	                    "DB2040_TQ".Mux.Scada[#for_mux].TQ.Orden_CIP := "DB2040_TQ".TQ[#t_Index].Orden_CIP;
	                    "DB2040_TQ".Mux.Scada[#for_mux].TQ.Orden_Producto := "DB2040_TQ".TQ[#t_Index].Orden_Producto;
	                    "DB2040_TQ".Mux.Scada[#for_mux].TQ.Orden_TipoProducto := "DB2040_TQ".TQ[#t_Index].Orden_TipoProducto;
	                    "DB2040_TQ".Mux.Scada[#for_mux].TQ.Orden_ConsignaAgitador := "DB2040_TQ".TQ[#t_Index].Orden_ConsignaAgitador;
	                    "DB2040_TQ".Mux.Scada[#for_mux].TQ.Estado_Tanque := "DB2040_TQ".TQ[#t_Index].Estado_Tanque;
	                    "DB2040_TQ".Mux.Scada[#for_mux].TQ.Estado_Producto1 := "DB2040_TQ".TQ[#t_Index].Estado_Producto1;
	                    "DB2040_TQ".Mux.Scada[#for_mux].TQ.Estado_Producto2 := "DB2040_TQ".TQ[#t_Index].Estado_Producto2;
	                    "DB2040_TQ".Mux.Scada[#for_mux].TQ.Estado_Volumen := "DB2040_TQ".TQ[#t_Index].Estado_Volumen;
	                    "DB2040_TQ".Mux.Scada[#for_mux].TQ.Estado_Presion := "DB2040_TQ".TQ[#t_Index].Estado_Presion;
	                    "DB2040_TQ".Mux.Scada[#for_mux].TQ.Estado_Altura := "DB2040_TQ".TQ[#t_Index].Estado_Altura;
	                    "DB2040_TQ".Mux.Scada[#for_mux].TQ.Estado_ValorNivelPresion := "DB2040_TQ".TQ[#t_Index].Estado_ValorNivelPresion;
	                    "DB2040_TQ".Mux.Scada[#for_mux].TQ.Estado_ValorTemperatura := "DB2040_TQ".TQ[#t_Index].Estado_ValorTemperatura;
	                    "DB2040_TQ".Mux.Scada[#for_mux].TQ.Tiempo_TiempoProducto := "DB2040_TQ".TQ[#t_Index].Tiempo_TiempoProducto;
	                    "DB2040_TQ".Mux.Scada[#for_mux].TQ.Tiempo_TiempoLimpio := "DB2040_TQ".TQ[#t_Index].Tiempo_TiempoLimpio;
	                    "DB2040_TQ".Mux.Scada[#for_mux].TQ.Tiempo_RetTanqueVacio := "DB2040_TQ".TQ[#t_Index].Tiempo_RetTanqueVacio;
	                    "DB2040_TQ".Mux.Scada[#for_mux].TQ.Tiempo_RetTanqueLleno := "DB2040_TQ".TQ[#t_Index].Tiempo_RetTanqueLleno;
	                    "DB2040_TQ".Mux.Scada[#for_mux].TQ.Tiempo_AgitadorONActual := "DB2040_TQ".TQ[#t_Index].Tiempo_AgitadorONActual;
	                    "DB2040_TQ".Mux.Scada[#for_mux].TQ.Tiempo_AgitadorOFFActual := "DB2040_TQ".TQ[#t_Index].Tiempo_AgitadorOFFActual;
	                    "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_HabilitarCalculoVol := "DB2040_TQ".TQ[#t_Index].Config_HabilitarCalculoVol;
	                    "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_HabilitarAlarmas := "DB2040_TQ".TQ[#t_Index].Config_HabilitarAlarmas;
	                    "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_HabilitarAgitador := "DB2040_TQ".TQ[#t_Index].Config_HabilitarAgitador;
	                    "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_GrupoAlarma := "DB2040_TQ".TQ[#t_Index].Config_GrupoAlarma;
	                    
	                    
	                    
	                END_REGION DATOS_LECTURA
	                
	                
	                REGION DATOS_ESCRITURA
	                    
	                    REGION GESTION_CAMBIOS_DINAMICOS
	                        
	                        //  ===========================================================================================================
	                        //  Estado Auto/Manual
	                        IF "DB2040_TQ".TQ[#t_Index].Estado_AutoMan <> "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Estado_AutoMan THEN
	                            //  Cambio desde HMI
	                            "DB2040_TQ".Mux.Scada[#for_mux].TQ.Estado_AutoMan := "DB2040_TQ".TQ[#t_Index].Estado_AutoMan;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Estado_AutoMan := "DB2040_TQ".TQ[#t_Index].Estado_AutoMan;
	                        ELSIF "DB2040_TQ".Mux.Scada[#for_mux].TQ.Estado_AutoMan <> "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Estado_AutoMan THEN
	                            //  Cambio desde Multiplexado
	                            "DB2040_TQ".TQ[#t_Index].Estado_AutoMan := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Estado_AutoMan;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Estado_AutoMan := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Estado_AutoMan;
	                        END_IF;
	                        
	                        //  ===========================================================================================================
	                        //  Orden Volumen Manual
	                        IF "DB2040_TQ".TQ[#t_Index].Orden_ConsignaManualVolumen <> "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Orden_ConsignaManualVolumen THEN
	                            //  Cambio desde HMI
	                            "DB2040_TQ".Mux.Scada[#for_mux].TQ.Orden_ConsignaManualVolumen := "DB2040_TQ".TQ[#t_Index].Orden_ConsignaManualVolumen;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Orden_ConsignaManualVolumen := "DB2040_TQ".TQ[#t_Index].Orden_ConsignaManualVolumen;
	                        ELSIF "DB2040_TQ".Mux.Scada[#for_mux].TQ.Orden_ConsignaManualVolumen <> "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Orden_ConsignaManualVolumen THEN
	                            //  Cambio desde Multiplexado
	                            "DB2040_TQ".TQ[#t_Index].Orden_ConsignaManualVolumen := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Orden_ConsignaManualVolumen;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Orden_ConsignaManualVolumen := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Orden_ConsignaManualVolumen;
	                        END_IF;
	                        
	                        //  ===========================================================================================================
	                        // Estado Tanque Nuevo
	                        IF "DB2040_TQ".TQ[#t_Index].Estado_TanqueNuevo <> "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Estado_TanqueNuevo THEN
	                            //  Cambio desde HMI
	                            "DB2040_TQ".Mux.Scada[#for_mux].TQ.Estado_TanqueNuevo := "DB2040_TQ".TQ[#t_Index].Estado_TanqueNuevo;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Estado_TanqueNuevo := "DB2040_TQ".TQ[#t_Index].Estado_TanqueNuevo;
	                        ELSIF "DB2040_TQ".Mux.Scada[#for_mux].TQ.Estado_TanqueNuevo <> "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Estado_TanqueNuevo THEN
	                            //  Cambio desde Multiplexado
	                            "DB2040_TQ".TQ[#t_Index].Estado_TanqueNuevo := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Estado_TanqueNuevo;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Estado_TanqueNuevo := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Estado_TanqueNuevo;
	                        END_IF;
	                        
	                        //  ===========================================================================================================
	                        // Estado Producto Nuevo
	                        IF "DB2040_TQ".TQ[#t_Index].Estado_ProductoNuevo <> "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Estado_ProductoNuevo THEN
	                            //  Cambio desde HMI
	                            "DB2040_TQ".Mux.Scada[#for_mux].TQ.Estado_ProductoNuevo := "DB2040_TQ".TQ[#t_Index].Estado_ProductoNuevo;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Estado_ProductoNuevo := "DB2040_TQ".TQ[#t_Index].Estado_ProductoNuevo;
	                        ELSIF "DB2040_TQ".Mux.Scada[#for_mux].TQ.Estado_ProductoNuevo <> "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Estado_ProductoNuevo THEN
	                            //  Cambio desde Multiplexado
	                            "DB2040_TQ".TQ[#t_Index].Estado_ProductoNuevo := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Estado_ProductoNuevo;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Estado_ProductoNuevo := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Estado_ProductoNuevo;
	                        END_IF;
	                        
	                        //  ===========================================================================================================
	                        // Orden Cambio Estado
	                        IF "DB2040_TQ".TQ[#t_Index].Orden_CambioEstado <> "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Orden_CambioEstado THEN
	                            //  Cambio desde HMI
	                            "DB2040_TQ".Mux.Scada[#for_mux].TQ.Orden_CambioEstado := "DB2040_TQ".TQ[#t_Index].Orden_CambioEstado;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Orden_CambioEstado := "DB2040_TQ".TQ[#t_Index].Orden_CambioEstado;
	                        ELSIF "DB2040_TQ".Mux.Scada[#for_mux].TQ.Orden_CambioEstado <> "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Orden_CambioEstado THEN
	                            //  Cambio desde Multiplexado
	                            "DB2040_TQ".TQ[#t_Index].Orden_CambioEstado := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Orden_CambioEstado;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Orden_CambioEstado := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Orden_CambioEstado;
	                            "DB2040_TQ".Mux.Scada[#for_mux].TQ.Orden_CambioEstado := FALSE;
	                        END_IF;
	                        
	                        //  ===========================================================================================================
	                        // Orden Cambio Producto 1
	                        IF "DB2040_TQ".TQ[#t_Index].Orden_CambioProd1 <> "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Orden_CambioProd1 THEN
	                            //  Cambio desde HMI
	                            "DB2040_TQ".Mux.Scada[#for_mux].TQ.Orden_CambioProd1 := "DB2040_TQ".TQ[#t_Index].Orden_CambioProd1;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Orden_CambioProd1 := "DB2040_TQ".TQ[#t_Index].Orden_CambioProd1;
	                        ELSIF "DB2040_TQ".Mux.Scada[#for_mux].TQ.Orden_CambioProd1 <> "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Orden_CambioProd1 THEN
	                            //  Cambio desde Multiplexado
	                            "DB2040_TQ".TQ[#t_Index].Orden_CambioProd1 := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Orden_CambioProd1;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Orden_CambioProd1 := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Orden_CambioProd1;
	                            "DB2040_TQ".Mux.Scada[#for_mux].TQ.Orden_CambioProd1 := FALSE;
	                        END_IF;
	                        
	                        //  ===========================================================================================================
	                        // Orden Cambio Producto 2
	                        IF "DB2040_TQ".TQ[#t_Index].Orden_CambioProd2 <> "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Orden_CambioProd2 THEN
	                            //  Cambio desde HMI
	                            "DB2040_TQ".Mux.Scada[#for_mux].TQ.Orden_CambioProd2 := "DB2040_TQ".TQ[#t_Index].Orden_CambioProd2;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Orden_CambioProd2 := "DB2040_TQ".TQ[#t_Index].Orden_CambioProd2;
	                        ELSIF "DB2040_TQ".Mux.Scada[#for_mux].TQ.Orden_CambioProd2 <> "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Orden_CambioProd2 THEN
	                            //  Cambio desde Multiplexado
	                            "DB2040_TQ".TQ[#t_Index].Orden_CambioProd2 := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Orden_CambioProd2;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Orden_CambioProd2 := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Orden_CambioProd2;
	                            "DB2040_TQ".Mux.Scada[#for_mux].TQ.Orden_CambioProd2 := FALSE;
	                        END_IF;
	                        
	                    END_REGION GESTION_CAMBIOS_DINAMICOS
	                    
	                    
	                    REGION GESTION_CAMBIOS_CONFIG
	                        
	                        //  Marca auxiliar para indicar que el cambio es desde HMI
	                        //  Comparamos el dispositivo original con el dispositivo real, para detectar cambios desde PLC o desde HMI
	                        #t_CambioDesdeHMI :=
	                        ("DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_HabilitarControlTemp <> "DB2040_TQ".TQ[#t_Index].Config_HabilitarControlTemp)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_TipoControlTemperatura <> "DB2040_TQ".TQ[#t_Index].Config_TipoControlTemperatura)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_TipoAgitacionTiempo <> "DB2040_TQ".TQ[#t_Index].Config_TipoAgitacionTiempo)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_TipoAgitacionVelocidad <> "DB2040_TQ".TQ[#t_Index].Config_TipoAgitacionVelocidad)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_ConsignaTemperatura <> "DB2040_TQ".TQ[#t_Index].Config_ConsignaTemperatura)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_HisteresisTemperatura <> "DB2040_TQ".TQ[#t_Index].Config_HisteresisTemperatura)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_VolumenMinControlTemp <> "DB2040_TQ".TQ[#t_Index].Config_VolumenMinControlTemp)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_VolumenMaxControlTemp <> "DB2040_TQ".TQ[#t_Index].Config_VolumenMaxControlTemp)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_VolumenMinControlAgitador <> "DB2040_TQ".TQ[#t_Index].Config_VolumenMinControlAgitador)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_VolumenMaxControlAgitador <> "DB2040_TQ".TQ[#t_Index].Config_VolumenMaxControlAgitador)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_VolumenTanqueVacio <> "DB2040_TQ".TQ[#t_Index].Config_VolumenTanqueVacio)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_VolumenTanqueLleno <> "DB2040_TQ".TQ[#t_Index].Config_VolumenTanqueLleno)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_VelocidadMinAgitador <> "DB2040_TQ".TQ[#t_Index].Config_VelocidadMinAgitador)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_VelocidadMaxAgitador <> "DB2040_TQ".TQ[#t_Index].Config_VelocidadMaxAgitador)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_VelocidadFijaAgitador <> "DB2040_TQ".TQ[#t_Index].Config_VelocidadFijaAgitador)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_CapacidadTanque <> "DB2040_TQ".TQ[#t_Index].Config_CapacidadTanque)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_DiametroCilindro <> "DB2040_TQ".TQ[#t_Index].Config_DiametroCilindro)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_AlturaCilindro <> "DB2040_TQ".TQ[#t_Index].Config_AlturaCilindro)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_DiametroConoInferior <> "DB2040_TQ".TQ[#t_Index].Config_DiametroConoInferior)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_AnguloCono <> "DB2040_TQ".TQ[#t_Index].Config_AnguloCono)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_AlturaCono <> "DB2040_TQ".TQ[#t_Index].Config_AlturaCono)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_HabilitarCalculoVol <> "DB2040_TQ".TQ[#t_Index].Config_HabilitarCalculoVol)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_HabilitarAlarmas <> "DB2040_TQ".TQ[#t_Index].Config_HabilitarAlarmas)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_HabilitarAgitador <> "DB2040_TQ".TQ[#t_Index].Config_HabilitarAgitador)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_GrupoAlarma <> "DB2040_TQ".TQ[#t_Index].Config_GrupoAlarma)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Tiempo_AgitadorONConsigna <> "DB2040_TQ".TQ[#t_Index].Tiempo_AgitadorONConsigna)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Tiempo_AgitadorOFFConsigna <> "DB2040_TQ".TQ[#t_Index].Tiempo_AgitadorOFFConsigna);
	                        
	                        //  Marca auxiliar para indicar que el cambio es desde MUX SCADA
	                        //  Comparamos el dispositivo original con el multiplexado, para detectar cambios desde multiplexado
	                        #t_CambioDesdeMux :=
	                        ("DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_HabilitarControlTemp <> "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_HabilitarControlTemp)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_TipoControlTemperatura <> "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_TipoControlTemperatura)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_TipoAgitacionTiempo <> "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_TipoAgitacionTiempo)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_TipoAgitacionVelocidad <> "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_TipoAgitacionVelocidad)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_ConsignaTemperatura <> "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_ConsignaTemperatura)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_HisteresisTemperatura <> "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_HisteresisTemperatura)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_VolumenMinControlTemp <> "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_VolumenMinControlTemp)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_VolumenMaxControlTemp <> "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_VolumenMaxControlTemp)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_VolumenMinControlAgitador <> "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_VolumenMinControlAgitador)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_VolumenMaxControlAgitador <> "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_VolumenMaxControlAgitador)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_VolumenTanqueVacio <> "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_VolumenTanqueVacio)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_VolumenTanqueLleno <> "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_VolumenTanqueLleno)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_VelocidadMinAgitador <> "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_VelocidadMinAgitador)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_VelocidadMaxAgitador <> "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_VelocidadMaxAgitador)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_VelocidadFijaAgitador <> "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_VelocidadFijaAgitador)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_CapacidadTanque <> "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_CapacidadTanque)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_DiametroCilindro <> "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_DiametroCilindro)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_AlturaCilindro <> "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_AlturaCilindro)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_DiametroConoInferior <> "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_DiametroConoInferior)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_AnguloCono <> "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_AnguloCono)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_AlturaCono <> "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_AlturaCono)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_HabilitarCalculoVol <> "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_HabilitarCalculoVol)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_HabilitarAlarmas <> "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_HabilitarAlarmas)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_HabilitarAgitador <> "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_HabilitarAgitador)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_GrupoAlarma <> "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_GrupoAlarma)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].TQ.Tiempo_AgitadorONConsigna <> "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Tiempo_AgitadorONConsigna)
	                        OR ("DB2040_TQ".Mux.Scada[#for_mux].TQ.Tiempo_AgitadorOFFConsigna <> "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Tiempo_AgitadorOFFConsigna);
	                        
	                    END_REGION GESTION_CAMBIOS_CONFIG
	                    
	                    
	                    REGION TRASPASO_DATOS
	                        
	                        IF #t_CambioDesdeHMI THEN
	                            
	                            //  Al detectar un cambio desde el HMI, cargamos sus valores de nuevo al multiplexado
	                            "DB2040_TQ".Mux.Scada[#for_mux].TQ.Estado_AutoMan := "DB2040_TQ".TQ[#t_Index].Estado_AutoMan;
	                            "DB2040_TQ".Mux.Scada[#for_mux].TQ.Orden_ConsignaManualVolumen := "DB2040_TQ".TQ[#t_Index].Orden_ConsignaManualVolumen;
	                            "DB2040_TQ".Mux.Scada[#for_mux].TQ.Estado_TanqueNuevo := "DB2040_TQ".TQ[#t_Index].Estado_TanqueNuevo;
	                            "DB2040_TQ".Mux.Scada[#for_mux].TQ.Estado_ProductoNuevo := "DB2040_TQ".TQ[#t_Index].Estado_ProductoNuevo;
	                            
	                            "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_HabilitarControlTemp := "DB2040_TQ".TQ[#t_Index].Config_HabilitarControlTemp;
	                            "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_TipoControlTemperatura := "DB2040_TQ".TQ[#t_Index].Config_TipoControlTemperatura;
	                            "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_TipoAgitacionTiempo := "DB2040_TQ".TQ[#t_Index].Config_TipoAgitacionTiempo;
	                            "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_TipoAgitacionVelocidad := "DB2040_TQ".TQ[#t_Index].Config_TipoAgitacionVelocidad;
	                            "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_ConsignaTemperatura := "DB2040_TQ".TQ[#t_Index].Config_ConsignaTemperatura;
	                            "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_HisteresisTemperatura := "DB2040_TQ".TQ[#t_Index].Config_HisteresisTemperatura;
	                            "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_VolumenMinControlTemp := "DB2040_TQ".TQ[#t_Index].Config_VolumenMinControlTemp;
	                            "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_VolumenMaxControlTemp := "DB2040_TQ".TQ[#t_Index].Config_VolumenMaxControlTemp;
	                            "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_VolumenMinControlAgitador := "DB2040_TQ".TQ[#t_Index].Config_VolumenMinControlAgitador;
	                            "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_VolumenMaxControlAgitador := "DB2040_TQ".TQ[#t_Index].Config_VolumenMaxControlAgitador;
	                            "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_VolumenTanqueVacio := "DB2040_TQ".TQ[#t_Index].Config_VolumenTanqueVacio;
	                            "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_VolumenTanqueLleno := "DB2040_TQ".TQ[#t_Index].Config_VolumenTanqueLleno;
	                            "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_VelocidadMinAgitador := "DB2040_TQ".TQ[#t_Index].Config_VelocidadMinAgitador;
	                            "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_VelocidadMaxAgitador := "DB2040_TQ".TQ[#t_Index].Config_VelocidadMaxAgitador;
	                            "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_VelocidadFijaAgitador := "DB2040_TQ".TQ[#t_Index].Config_VelocidadFijaAgitador;
	                            "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_CapacidadTanque := "DB2040_TQ".TQ[#t_Index].Config_CapacidadTanque;
	                            "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_DiametroCilindro := "DB2040_TQ".TQ[#t_Index].Config_DiametroCilindro;
	                            "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_AlturaCilindro := "DB2040_TQ".TQ[#t_Index].Config_AlturaCilindro;
	                            "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_DiametroConoInferior := "DB2040_TQ".TQ[#t_Index].Config_DiametroConoInferior;
	                            "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_AnguloCono := "DB2040_TQ".TQ[#t_Index].Config_AnguloCono;
	                            "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_AlturaCono := "DB2040_TQ".TQ[#t_Index].Config_AlturaCono;
	                            "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_HabilitarCalculoVol := "DB2040_TQ".TQ[#t_Index].Config_HabilitarCalculoVol;
	                            "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_HabilitarAlarmas := "DB2040_TQ".TQ[#t_Index].Config_HabilitarAlarmas;
	                            "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_HabilitarAgitador := "DB2040_TQ".TQ[#t_Index].Config_HabilitarAgitador;
	                            "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_GrupoAlarma := "DB2040_TQ".TQ[#t_Index].Config_GrupoAlarma;
	                            "DB2040_TQ".Mux.Scada[#for_mux].TQ.Tiempo_AgitadorONConsigna := "DB2040_TQ".TQ[#t_Index].Tiempo_AgitadorONConsigna;
	                            "DB2040_TQ".Mux.Scada[#for_mux].TQ.Tiempo_AgitadorOFFConsigna := "DB2040_TQ".TQ[#t_Index].Tiempo_AgitadorOFFConsigna;
	                            
	                            //  Actualizamos el estado original para configuraciones
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Estado_AutoMan := "DB2040_TQ".TQ[#t_Index].Estado_AutoMan;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Orden_ConsignaManualVolumen := "DB2040_TQ".TQ[#t_Index].Orden_ConsignaManualVolumen;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Estado_TanqueNuevo := "DB2040_TQ".TQ[#t_Index].Estado_TanqueNuevo;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Estado_ProductoNuevo := "DB2040_TQ".TQ[#t_Index].Estado_ProductoNuevo;
	                            
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_HabilitarControlTemp := "DB2040_TQ".TQ[#t_Index].Config_HabilitarControlTemp;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_TipoControlTemperatura := "DB2040_TQ".TQ[#t_Index].Config_TipoControlTemperatura;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_TipoAgitacionTiempo := "DB2040_TQ".TQ[#t_Index].Config_TipoAgitacionTiempo;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_TipoAgitacionVelocidad := "DB2040_TQ".TQ[#t_Index].Config_TipoAgitacionVelocidad;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_ConsignaTemperatura := "DB2040_TQ".TQ[#t_Index].Config_ConsignaTemperatura;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_HisteresisTemperatura := "DB2040_TQ".TQ[#t_Index].Config_HisteresisTemperatura;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_VolumenMinControlTemp := "DB2040_TQ".TQ[#t_Index].Config_VolumenMinControlTemp;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_VolumenMaxControlTemp := "DB2040_TQ".TQ[#t_Index].Config_VolumenMaxControlTemp;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_VolumenMinControlAgitador := "DB2040_TQ".TQ[#t_Index].Config_VolumenMinControlAgitador;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_VolumenMaxControlAgitador := "DB2040_TQ".TQ[#t_Index].Config_VolumenMaxControlAgitador;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_VolumenTanqueVacio := "DB2040_TQ".TQ[#t_Index].Config_VolumenTanqueVacio;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_VolumenTanqueLleno := "DB2040_TQ".TQ[#t_Index].Config_VolumenTanqueLleno;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_VelocidadMinAgitador := "DB2040_TQ".TQ[#t_Index].Config_VelocidadMinAgitador;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_VelocidadMaxAgitador := "DB2040_TQ".TQ[#t_Index].Config_VelocidadMaxAgitador;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_VelocidadFijaAgitador := "DB2040_TQ".TQ[#t_Index].Config_VelocidadFijaAgitador;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_CapacidadTanque := "DB2040_TQ".TQ[#t_Index].Config_CapacidadTanque;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_DiametroCilindro := "DB2040_TQ".TQ[#t_Index].Config_DiametroCilindro;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_AlturaCilindro := "DB2040_TQ".TQ[#t_Index].Config_AlturaCilindro;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_DiametroConoInferior := "DB2040_TQ".TQ[#t_Index].Config_DiametroConoInferior;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_AnguloCono := "DB2040_TQ".TQ[#t_Index].Config_AnguloCono;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_AlturaCono := "DB2040_TQ".TQ[#t_Index].Config_AlturaCono;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_HabilitarCalculoVol := "DB2040_TQ".TQ[#t_Index].Config_HabilitarCalculoVol;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_HabilitarAlarmas := "DB2040_TQ".TQ[#t_Index].Config_HabilitarAlarmas;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_HabilitarAgitador := "DB2040_TQ".TQ[#t_Index].Config_HabilitarAgitador;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_GrupoAlarma := "DB2040_TQ".TQ[#t_Index].Config_GrupoAlarma;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Tiempo_AgitadorONConsigna := "DB2040_TQ".TQ[#t_Index].Tiempo_AgitadorONConsigna;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Tiempo_AgitadorOFFConsigna := "DB2040_TQ".TQ[#t_Index].Tiempo_AgitadorOFFConsigna;
	                            
	                        ELSIF #t_CambioDesdeMux THEN
	                            
	                            //  Al detectar un cambio desde el MUX, cargamos sus valores al dispositivo
	                            "DB2040_TQ".TQ[#t_Index].Estado_AutoMan := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Estado_AutoMan;
	                            "DB2040_TQ".TQ[#t_Index].Orden_ConsignaManualVolumen := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Orden_ConsignaManualVolumen;
	                            "DB2040_TQ".TQ[#t_Index].Estado_TanqueNuevo := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Estado_TanqueNuevo;
	                            "DB2040_TQ".TQ[#t_Index].Estado_ProductoNuevo := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Estado_ProductoNuevo;
	                            
	                            "DB2040_TQ".TQ[#t_Index].Config_HabilitarControlTemp := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_HabilitarControlTemp;
	                            "DB2040_TQ".TQ[#t_Index].Config_TipoControlTemperatura := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_TipoControlTemperatura;
	                            "DB2040_TQ".TQ[#t_Index].Config_TipoAgitacionTiempo := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_TipoAgitacionTiempo;
	                            "DB2040_TQ".TQ[#t_Index].Config_TipoAgitacionVelocidad := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_TipoAgitacionVelocidad;
	                            "DB2040_TQ".TQ[#t_Index].Config_ConsignaTemperatura := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_ConsignaTemperatura;
	                            "DB2040_TQ".TQ[#t_Index].Config_HisteresisTemperatura := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_HisteresisTemperatura;
	                            "DB2040_TQ".TQ[#t_Index].Config_VolumenMinControlTemp := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_VolumenMinControlTemp;
	                            "DB2040_TQ".TQ[#t_Index].Config_VolumenMaxControlTemp := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_VolumenMaxControlTemp;
	                            "DB2040_TQ".TQ[#t_Index].Config_VolumenMinControlAgitador := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_VolumenMinControlAgitador;
	                            "DB2040_TQ".TQ[#t_Index].Config_VolumenMaxControlAgitador := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_VolumenMaxControlAgitador;
	                            "DB2040_TQ".TQ[#t_Index].Config_VolumenTanqueVacio := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_VolumenTanqueVacio;
	                            "DB2040_TQ".TQ[#t_Index].Config_VolumenTanqueLleno := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_VolumenTanqueLleno;
	                            "DB2040_TQ".TQ[#t_Index].Config_VelocidadMinAgitador := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_VelocidadMinAgitador;
	                            "DB2040_TQ".TQ[#t_Index].Config_VelocidadMaxAgitador := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_VelocidadMaxAgitador;
	                            "DB2040_TQ".TQ[#t_Index].Config_VelocidadFijaAgitador := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_VelocidadFijaAgitador;
	                            "DB2040_TQ".TQ[#t_Index].Config_CapacidadTanque := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_CapacidadTanque;
	                            "DB2040_TQ".TQ[#t_Index].Config_DiametroCilindro := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_DiametroCilindro;
	                            "DB2040_TQ".TQ[#t_Index].Config_AlturaCilindro := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_AlturaCilindro;
	                            "DB2040_TQ".TQ[#t_Index].Config_DiametroConoInferior := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_DiametroConoInferior;
	                            "DB2040_TQ".TQ[#t_Index].Config_AnguloCono := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_AnguloCono;
	                            "DB2040_TQ".TQ[#t_Index].Config_AlturaCono := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_AlturaCono;
	                            "DB2040_TQ".TQ[#t_Index].Config_HabilitarCalculoVol := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_HabilitarCalculoVol;
	                            "DB2040_TQ".TQ[#t_Index].Config_HabilitarAlarmas := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_HabilitarAlarmas;
	                            "DB2040_TQ".TQ[#t_Index].Config_HabilitarAgitador := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_HabilitarAgitador;
	                            "DB2040_TQ".TQ[#t_Index].Config_GrupoAlarma := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_GrupoAlarma;
	                            "DB2040_TQ".TQ[#t_Index].Tiempo_AgitadorONConsigna := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Tiempo_AgitadorONConsigna;
	                            "DB2040_TQ".TQ[#t_Index].Tiempo_AgitadorOFFConsigna := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Tiempo_AgitadorOFFConsigna;
	                            
	                            //  Actualizamos el estado original para configuraciones
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Estado_AutoMan := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Estado_AutoMan;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Orden_ConsignaManualVolumen := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Orden_ConsignaManualVolumen;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Estado_TanqueNuevo := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Estado_TanqueNuevo;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Estado_ProductoNuevo := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Estado_ProductoNuevo;
	                            
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_HabilitarControlTemp := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_HabilitarControlTemp;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_TipoControlTemperatura := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_TipoControlTemperatura;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_TipoAgitacionTiempo := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_TipoAgitacionTiempo;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_TipoAgitacionVelocidad := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_TipoAgitacionVelocidad;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_ConsignaTemperatura := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_ConsignaTemperatura;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_HisteresisTemperatura := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_HisteresisTemperatura;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_VolumenMinControlTemp := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_VolumenMinControlTemp;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_VolumenMaxControlTemp := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_VolumenMaxControlTemp;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_VolumenMinControlAgitador := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_VolumenMinControlAgitador;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_VolumenMaxControlAgitador := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_VolumenMaxControlAgitador;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_VolumenTanqueVacio := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_VolumenTanqueVacio;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_VolumenTanqueLleno := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_VolumenTanqueLleno;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_VelocidadMinAgitador := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_VelocidadMinAgitador;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_VelocidadMaxAgitador := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_VelocidadMaxAgitador;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_VelocidadFijaAgitador := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_VelocidadFijaAgitador;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_CapacidadTanque := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_CapacidadTanque;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_DiametroCilindro := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_DiametroCilindro;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_AlturaCilindro := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_AlturaCilindro;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_DiametroConoInferior := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_DiametroConoInferior;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_AnguloCono := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_AnguloCono;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_AlturaCono := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_AlturaCono;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_HabilitarCalculoVol := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_HabilitarCalculoVol;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_HabilitarAlarmas := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_HabilitarAlarmas;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_HabilitarAgitador := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_HabilitarAgitador;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Config_GrupoAlarma := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Config_GrupoAlarma;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Tiempo_AgitadorONConsigna := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Tiempo_AgitadorONConsigna;
	                            "DB2040_TQ".Mux.Scada[#for_mux].oldTQ.Tiempo_AgitadorOFFConsigna := "DB2040_TQ".Mux.Scada[#for_mux].TQ.Tiempo_AgitadorOFFConsigna;
	                            
	                        END_IF;
	                        
	                    END_REGION TRASPASO_DATOS
	
	                END_REGION DATOS_ESCRITURA
	                
	            ELSE
	                
	                //  ===========================================================================================================
	                //  En caso de que el indice sea 0, movemos el valor de la EA[0] que no se usa para escribir el index.
	                "DB2040_TQ".Mux.Scada[#for_mux].TQ := "DB2040_TQ".TQ[0];
	                "DB2040_TQ".Mux.Scada[#for_mux].oldTQ := "DB2040_TQ".TQ[0];
	                
	                //  Actualizacion de estado anterior
	                "DB2040_TQ".Mux.Scada[#for_mux].oldIndex := 0;
	                
	            END_IF;
	            
	        ELSE
	            
	            //  Multiplexado no habilitado
	            "DB2040_TQ".Mux.Scada[#for_mux].Index :=
	            "DB2040_TQ".Mux.Scada[#for_mux].oldIndex := 0;
	            
	        END_IF;
	        
	    END_FOR;
	    
	END_REGION MULTIPLEXADO
	
END_FUNCTION

