{
    S7_BlockNumber := "50";
    S7_EditorMode := "SCL";
    S7_IECCheck := "TRUE";
    S7_Optimized := "TRUE";
    S7_Version := "0.1"
}
FUNCTION "FC50_MAIN" : Void
    VAR_INPUT
        { S7_MLC := "MLC_3wR" }
        CPU_MarcasCiclo : Byte;
        { S7_MLC := "MLC_3Se" }
        CPU_MarcasSistema : Byte;
        { S7_MLC := "MLC_4gv" }
        RedProfinet : HW_IOSYSTEM;
        { S7_MLC := "MLC_45H" }
        SegGeneralDisp : Bool;
    END_VAR

    { S7_Language := "SCL" }
    NETWORK
        REGION DESCRIPCION
        (*
        ###### (C)Copyright ZeusControl 2026 - 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 central para la organizacion de llamadas previas al programa de usuario.
        
        En ella se realizan las siguientes acciones:
        
        - Llamada a FC sistema.
        - Llamada a gestor dispositivos
        - Llamada a dispositivos
        - Llamada a multiplexados
        
        ---
        ### Dependencias Requeridas
        | Tipo | Elementos |
        |------|-----------|
        | FC   | - |
        | FB   | - |
        | DB   | - |
        | UDT  | - |
        
        ---
        ### Historial de Cambios
        | Versión  | Fecha      | Técnico | Cambios |
        |----------|------------|---------|---------|
        | 01.00.00 | 21.07.2026 | (ABH)   | Primera version. |
        *)
        END_REGION DESCRIPCION
        
        
        //  ==========================================================================================================
        REGION PRE_PROGRAMA
            
            //  ==========================================================================================================
            REGION SISTEMA
                
                //  Llamada a marcas de sistema
                "FC1_ZC_SISTEMA"(CPU_MarcasCiclo := "Clock_Byte",
                                 CPU_MarcasSistema := "System_Byte",
                                 RedProfinet := "Local~PROFINET_IO-System");
                
                //  Llamada a utilizades
                "DB15994_ZC_INICIALIZAR_DISP"();
                "DB15995_ZC_BUSCAR_DIR"();
                
            END_REGION SISTEMA
            
            
            //  ==========================================================================================================
            REGION FAT
                
                //  Llamada a bloques FAT
                //  Si tenemos la marca activada, salimos del bloque sin ejecutar nada mas para poder realizar
                //  las pruebas de señales de los cuadros.
                IF "DB1_SYS".FAT THEN
                    
                    "DB15990_FAT_DI"();
                    "DB15991_FAT_DO"();
                    "DB15992_FAT_AI"();
                    "DB15993_FAT_AO"();
                    
                    RETURN;
                END_IF;
         
            END_REGION FAT
            
            
            //  ==========================================================================================================
            REGION DISPOSITIVOS
                
                //  ==========================================================================================================
                REGION LLAMADA_GESTOR_DISPOSITIVOS
                    
                    //  Gestor dispositivos
                    "FC9_DISPOSITIVOS"();
                    
                END_REGION LLAMADA_GESTOR_DISPOSITIVOS
                
                
                //  ==========================================================================================================
                REGION LLAMADA_ED
                    
                    //  Gestion multiplexado
                    "FC2800_ZC_ED_MUX"("DB1_SYS".ARRANQUE);
                    
                    //  Gestion dispositivo
                    "FC2000_ZC_ED"(Pulso1seg := "DB1_SYS".Pulso1seg,
                                   Simulacion := "DB1_SYS".SIM,
                                   UsuarioActual := "DB1_SYS".Usuario.Actual,
                                   FechaHoraActual := "DB1_SYS".FechaHoraActual);
                    
                END_REGION LLAMADA_ED
                
                
                //  ==========================================================================================================
                REGION LLAMADA_EA
                    
                    //  Gestion multiplexado
                    "FC2801_ZC_EA_MUX"("DB1_SYS".ARRANQUE);
                    
                    //  Gestion dispositivo
                    "FC2001_ZC_EA"(Pulso1seg := "DB1_SYS".Pulso1seg,
                                   Simulacion := "DB1_SYS".SIM,
                                   Arranque := "DB1_SYS".ARRANQUE,
                                   Ack := "DB1_SYS".ACK,
                                   UsuarioActual := "DB1_SYS".Usuario.Actual,
                                   FechaHoraActual := "DB1_SYS".FechaHoraActual);
                END_REGION LLAMADA_EA
                
                
                //  ==========================================================================================================
                REGION LLAMADA_SD
                    
                    //  Gestion multiplexado
                    "FC2805_ZC_SD_MUX"("DB1_SYS".ARRANQUE);
                    
                    //  Gestion dispositivo
                    "FC2005_ZC_SD"(Pulso1seg := "DB1_SYS".Pulso1seg,
                                   Simulacion := "DB1_SYS".SIM,
                                   Arranque := "DB1_SYS".ARRANQUE,
                                   Ack := "DB1_SYS".ACK,
                                   SeguridadesOK := #SegGeneralDisp,
                                   UsuarioActual := "DB1_SYS".Usuario.Actual,
                                   FechaHoraActual := "DB1_SYS".FechaHoraActual);
                    
                END_REGION LLAMADA_SD
                
                
                //  ==========================================================================================================
                REGION LLAMADA_SA
                    
                    //  Gestion multiplexado
                    "FC2806_ZC_SA_MUX"("DB1_SYS".ARRANQUE);
                    
                    //  Gestion dispositivo
                    "FC2006_ZC_SA"(Ack := "DB1_SYS".ACK,
                                   SeguridadesOK := #SegGeneralDisp,
                                   UsuarioActual := "DB1_SYS".Usuario.Actual,
                                   FechaHoraActual := "DB1_SYS".FechaHoraActual);
                    
                END_REGION LLAMADA_SA
                
                
                //  ==========================================================================================================
                REGION LLAMADA_V
                    
                    //  Gestion multiplexado
                    "FC2810_ZC_V_MUX"(Arranque := "DB1_SYS".ARRANQUE,
                                      SeguridadesOK := TRUE);
                    
                    //  Gestion dispositivo
                    "FC2010_ZC_V"(Pulso1seg := "DB1_SYS".Pulso1seg,
                                  Simulacion := "DB1_SYS".SIM,
                                  Arranque := "DB1_SYS".ARRANQUE,
                                  Ack := "DB1_SYS".ACK,
                                  SeguridadesOK := #SegGeneralDisp,
                                  UsuarioActual := "DB1_SYS".Usuario.Actual,
                                  FechaHoraActual := "DB1_SYS".FechaHoraActual);
                    
                END_REGION LLAMADA_V
                
                
                //  ==========================================================================================================
                REGION LLAMADA_M
                    
                    //  Gestion multiplexado
                    "FC2815_ZC_M_MUX"(Arranque := "DB1_SYS".ARRANQUE,
                                      SeguridadesOk := TRUE);
                    
                    //  Gestion dispositivo
                    "FC2015_ZC_M"(Pulso1seg := "DB1_SYS".Pulso1seg,
                                  Simulacion := "DB1_SYS".SIM,
                                  Ack := "DB1_SYS".ACK,
                                  SeguridadesOK := #SegGeneralDisp,
                                  UsuarioActual := "DB1_SYS".Usuario.Actual,
                                  FechaHoraActual := "DB1_SYS".FechaHoraActual);
                    
                END_REGION LLAMADA_M
                
                
                //  ==========================================================================================================
                REGION LLAMADA_M_VF
                    
                    //  Gestion multiplexado
                    "FC2816_ZC_M_VF_MUX"(Arranque := "DB1_SYS".ARRANQUE,
                                         SeguridadesOK := TRUE);
                    
                    //  Gestion dispositivo
                    "FC2016_ZC_M_VF"(Pulso1seg := "DB1_SYS".Pulso1seg,
                                     Simulacion := "DB1_SYS".SIM,
                                     Arranque := "DB1_SYS".ARRANQUE,
                                     Ack := "DB1_SYS".ACK,
                                     SeguridadesOK := #SegGeneralDisp,
                                     UsuarioActual := "DB1_SYS".Usuario.Actual,
                                     FechaHoraActual := "DB1_SYS".FechaHoraActual);
                    
                END_REGION LLAMADA_M_VF
                
                
                //  ==========================================================================================================
                REGION LLAMADA_M_SINA
                    
                    //  Gestion multiplexado
                    "FC2817_ZC_M_SINA_MUX"(Arranque := "DB1_SYS".ARRANQUE,
                                           SeguridadesOk := TRUE);
                    
                    //  Gestion dispositivo
                    "DB2717_INST_M_SINA"(Pulso1seg := "DB1_SYS".Pulso1seg,
                                         Simulacion := "DB1_SYS".SIM,
                                         Arranque := "DB1_SYS".ARRANQUE,
                                         Ack := "DB1_SYS".ACK,
                                         SeguridadesOK := #SegGeneralDisp,
                                         UsuarioActual := "DB1_SYS".Usuario.Actual,
                                         FechaHoraActual := "DB1_SYS".FechaHoraActual);
                    
                END_REGION LLAMADA_M_SINA
                
                
                //  ==========================================================================================================
                REGION LLAMADA_TQ
                    
                    //  Gestion multiplexado
                    "FC2840_ZC_TQ_MUX"("DB1_SYS".ARRANQUE);
                    
                    
                END_REGION LLAMADA_TQ
                
                
                //  ==========================================================================================================
                REGION LLAMADA_TQ_AE
                    
                    //  Gestion multiplexado
                    "FC2841_ZC_TQ_AE_MUX"(Arranque := "DB1_SYS".ARRANQUE);
                    
                    //  Gestion dispositivo
                    "FC2041_ZC_TQ_AE"(Pulso1seg := "DB1_SYS".Pulso1seg,
                                      Arranque := "DB1_SYS".ARRANQUE,
                                      Ack := "DB1_SYS".ACK,
                                      UsuarioActual := "DB1_SYS".Usuario.Actual,
                                      FechaHoraActual := "DB1_SYS".FechaHoraActual);
                    
                END_REGION LLAMADA_TQ_AE
                
                
                //  ==========================================================================================================
                REGION LLAMADA_TOT
                    
                    //  Gestion multiplexado
                    "FC2825_ZC_TOT_MUX"(Arranque := "DB1_SYS".ARRANQUE);
                    
                    //  Gestion dispositivo
                    "FC2025_ZC_TOT"(Pulso100ms := "DB1_SYS".Pulso1seg,
                                    Simulacion := "DB1_SYS".SIM,
                                    Arranque := "DB1_SYS".ARRANQUE);
                    
                END_REGION LLAMADA_TOT
                
                
                //  ==========================================================================================================
                REGION LLAMADA_TEMP_FF
                    
                    //  Gestion dispositivo
                    "FC2026_ZC_FF"("DB1_SYS".Pulso1seg);
                    
                    //  Gestion dispositivo
                    "FC2027_ZC_FF_SEC"("DB1_SYS".Pulso1seg);
                    
                    //  Gestion dispositivo
                    "FC2028_ZC_TEMP"("DB1_SYS".Pulso1seg);
                    
                END_REGION LLAMADA_TEMP_FF
                
                
                //  ==========================================================================================================
                REGION LLAMADA_MEDIAS
                    
                    //  Gestion dispositivo
                    "FC2037_ZC_MEDIA"(Pulso1seg := "DB1_SYS".Pulso1seg);
                    
                    //  Gestion dispositivo
                    "FC2038_ZC_MEDIA_VOL"(Pulso1seg := "DB1_SYS".Pulso1seg);
                    
                END_REGION LLAMADA_MEDIAS
                
                
                //  ==========================================================================================================
                REGION LLAMADA_PID
                    
                    //  Gestion multiplexado
                    "FC2835_ZC_PID_MUX"("DB1_SYS".ARRANQUE);
                    
                END_REGION LLAMADA_PID
                
            END_REGION DISPOSITIVOS
            
        END_REGION PRE_PROGRAMA
        
        
        //  ==========================================================================================================
        REGION PROGRAMA_USUARIO
            
            "FC55_PROGRAMA_USUARIO"();
            
        END_REGION PROGRAMA_USUARIO
        
        
        //  ==========================================================================================================
        REGION POST_PROGRAMA
            
            //  ==========================================================================================================
            REGION ALARMAS_GENERALES
                
                //  Alarmas generales
                "FC5000_GNR_ALM"();
                
                //  Gestion balizas
                "FC60_GESTOR_BALIZAS"();
                
            END_REGION ALARMAS_GENERALES
            
            
            //  ==========================================================================================================
            REGION PARAMETROS_GENERALES
                
                //  Parametros reales generales
                "FC15_ZC_GEST_PREAL"(PrimerCiclo := "DB1_SYS".ARRANQUE,
                                     FechaHora := "DB1_SYS".FechaHoraActual,
                                     Usuario := "DB1_SYS".Usuario.Actual,
                                     PReal := "DB3000_GNR_PARAM".PReal,
                                     IndexTraza := 1,
                                     ValorAnterior := "DB3000_GNR_PARAM".Aux.PReal_ValorAnterior);
                
                //  Parametros enteros generales
                "FC16_ZC_GEST_PINT"(PrimerCiclo := "DB1_SYS".ARRANQUE,
                                    FechaHora := "DB1_SYS".FechaHoraActual,
                                    Usuario := "DB1_SYS".Usuario.Actual,
                                    PInt := "DB3000_GNR_PARAM".PInt,
                                    IndexTraza := 1,
                                    ValorAnterior := "DB3000_GNR_PARAM".Aux.PInt_ValorAnterior);
                
            END_REGION PARAMETROS_GENERALES
            
            
            //  ==========================================================================================================
            REGION TRAZABILIDAD
                
                //  Gestor trazabilidad
                "FC7_ZC_TRZ_GESTOR"("DB1_SYS".Pulso1seg);
                
            END_REGION TRAZABILIDAD
            
            
            //  ==========================================================================================================
            REGION INFORMES
                
                //  Gestor informes
                "FC11_ZC_INF_GESTOR"("DB1_SYS".Pulso1seg);
                
            END_REGION INFORMES
            
            
            //  ==========================================================================================================
            REGION COMUNICACIONES
                
                //  Gestor comunicaciones
                "FC11000_GESTOR_COM"();
                
            END_REGION COMUNICACIONES
            
        END_REGION POST_PROGRAMA
        
    END_NETWORK
END_FUNCTION
