{
    S7_Author := "HCR";
    S7_BlockComment := "MLC_4Xe";
    S7_BlockNumber := "15154";
    S7_BlockTitle := "MLC_52K";
    S7_Family := "ZeusControl";
    S7_Optimized := "TRUE";
    S7_PreferredLanguage := "LAD";
    S7_Version := "1.0"
}
FUNCTION_BLOCK "FB15154_ZC_DOSIF"
    VAR_INPUT
        { S7_MLC := "MLC_4qN" }
        Pulso1Seg : Bool := FALSE;
        { S7_MLC := "MLC_5AQ" }
        OrdenMarcha : Bool := FALSE;
        { S7_MLC := "MLC_b4" }
        OrdenDosifManual : Bool := FALSE;
        { S7_MLC := "MLC_4Zd" }
        EstadoMarcha : Bool := FALSE;
        { S7_MLC := "MLC_3tL" }
        EtapaSecAuto : Bool := FALSE;
        { S7_MLC := "MLC_4pM" }
        EtapaSecMan : Bool := FALSE;
        { S7_MLC := "MLC_53w" }
        SiempreDosificar : Bool := TRUE;
    END_VAR
    VAR_INPUT RETAIN
        { S7_MLC := "MLC_44h" }
        NumeroDosifLarga : Int := 0;
        { S7_MLC := "MLC_sC" }
        NumeroDosifCorta : Int := 1;
        { S7_MLC := "MLC_3hx" }
        SP_TiempoAperturaCamino : Int := 2;
        { S7_MLC := "MLC_Nb" }
        SP_TiempoDosifLarga : Int := 10;
        { S7_MLC := "MLC_4pR" }
        SP_TiempoDosifCorta : Int := 7;
        { S7_MLC := "MLC_34F" }
        SP_TiempoEmpuje : Int := 5;
        { S7_MLC := "MLC_3hW" }
        SP_TiempoAclarado : Int := 3;
        { S7_MLC := "MLC_4zh" }
        SP_TiempoEntreDosif : Int := 10;
    END_VAR
    VAR_INPUT
        { S7_MLC := "MLC_ex" }
        SP_TiempoDrenajeInicial : Int;
    END_VAR
    VAR_INPUT RETAIN
        { S7_MLC := "MLC_ME" }
        SP_Conductividad : Real := 5.0;
        { S7_MLC := "MLC_fy" }
        SP_TiempoRetardoDosifManual : Time := T#90s;
        { S7_MLC := "MLC_VL" }
        ConductividadActual : Real := 0.0;
        { S7_MLC := "MLC_3ZJ" }
        EstadoBombaDosif : Bool := FALSE;
    END_VAR
    VAR_OUTPUT
        { S7_MLC := "MLC_3h9" }
        DosifAutoCompletada : Bool;
        { S7_MLC := "MLC_3Qe" }
        AperturaCamino : Bool := FALSE;
        { S7_MLC := "MLC_3nw" }
        Drenaje : Bool;
        { S7_MLC := "MLC_4cW" }
        Dosificacion : Bool := FALSE;
        { S7_MLC := "MLC_cL" }
        Empuje : Bool := FALSE;
        { S7_MLC := "MLC_4P8" }
        Aclarado : Bool := FALSE;
        { S7_MLC := "MLC_UD" }
        PermisoDosifManual : Bool := FALSE;
        { S7_MLC := "MLC_4V5" }
        TextoEtapa : String[80] := 'REPOSO';
    END_VAR
    VAR RETAIN
        { S7_MLC := "MLC_4zE" }
        s_EtapaDosificacion : Int := 0;
        { S7_MLC := "MLC_4N9" }
        s_TipoDosificacionActual : Int := 0;
        { S7_MLC := "MLC_54Y" }
        s_DosifLargasRealizadas : Int := 0;
        { S7_MLC := "MLC_jm" }
        s_DosifCortasRealizadas : Int := 0;
        { S7_MLC := "MLC_4aL" }
        s_DosifLargaCompletada : Bool := FALSE;
        { S7_MLC := "MLC_58h" }
        s_DosifCortaCompletada : Bool := FALSE;
    END_VAR
    VAR
        s_Pulsos : Array[0..7] of Bool;
    END_VAR
    VAR RETAIN
        { S7_Setpoint := "False" }
        s_TiempoEtapa : _.UDT_ZC_PRO_TIEMPO_ETAPA;
    END_VAR
    VAR
        {
            S7_MLC := "MLC_3Vn";
            S7_Setpoint := "False"
        }
        s_TON_FiltroCondBaja : _.UDT_ZC_DISP_TON;
        {
            S7_MLC := "MLC_x3";
            S7_Setpoint := "False"
        }
        s_TON_RetardoDosifManual : _.UDT_ZC_DISP_TON;
    END_VAR
    VAR_TEMP
        { S7_MLC := "MLC_ff" }
        t_TiempoDosificacion : Int;
    END_VAR
    VAR CONSTANT
        ETAPA_REPOSO : Int := 0;
        ETAPA_COMPROBACION_LARGA : Int := 5;
        ETAPA_COMPROBACION_CORTA : Int := 10;
        ETAPA_APERTURA_CAMINO : Int := 105;
        ETAPA_DOSIFICACION : Int := 110;
        ETAPA_EMPUJE : Int := 115;
        ETAPA_ACLARADO : Int := 120;
        ETAPA_ESPERA_ENTRE_DOSIF : Int := 125;
        ETAPA_ESPERA_RECIR : Int := 500;
        ETAPA_ESPERA_DOSIF_MANUAL : Int := 510;
    END_VAR

    {
        S7_Language := "SCL";
        S7_NetworkTitle := "MLC_3AM"
    }
    NETWORK
        (*
        ============================================================================
        ZEUS CONTROL, S.A.
        (c)Copyright (2023) All Rights Reserved
        -----------------------------------------------------------------------------
        
        Software:       TIA Portal 16
        Restricciones:  PLC serie 1200/1500
        
        
        Nombre:         FB15154_ZC_DOSIF
        Descripcion:    Bloque de gestion de dosificacion de detergentes
        
        Dependencias:   
            FC:         FC15001_ZC_INT_TO_STRING
            FB:         -
            DB:         -
            UDT:        -
                                        
        
        Change log:
        
            Version         Fecha       Tecnico a cargo     Descripcion
            
             01.00.00       09.05.2023  (HCR)               Primera version
             01.01.01       22.05.2023  (ABH)               Cambio en nomenclatura de entradas/salidas del bloque.
                                                            Cambio en numero de etapas para estandarizacion.
                                                            Se eliminan temporizadores redundantes para optimizacion de bloque.
             01.00.02       28.05.2023  (ABH)               Se cambia logica de etapas de la dosificacion. Se pasa por Input el numero
                                                            de dosificaciones largas y cortas que se quieren realizar, de esta manera el
                                                            bloque es mucho mas versatil.
             01.00.03       15.12.2023  (ABH)               Se cambia tipo de dato s_TiempoEtapa de struct a ZC_TIEMPO_ETAPA
             01.00.04       16.10.2025  (ABH)               Se añade parametro drenaje inicial y su gestion.
             01.00.05       31.10.2025  (ABH)               Se cambia los temporizadores IEC por temporizadores ZC_TON.     
            
         ============================================================================
         *)
    END_NETWORK
    {
        S7_Language := "SCL";
        S7_NetworkTitle := "MLC_4F8"
    }
    NETWORK
        
        "FC2928_ZC_TON_INDV"(Pulso1seg := #Pulso1Seg,
                             TON := #s_TON_FiltroCondBaja);
        "FC2928_ZC_TON_INDV"(Pulso1seg := #Pulso1Seg,
                             TON := #s_TON_RetardoDosifManual);
        
    END_NETWORK
    {
        S7_Language := "SCL";
        S7_NetworkTitle := "MLC_4MZ"
    }
    NETWORK
        CASE #s_EtapaDosificacion OF
            #ETAPA_REPOSO:
                #TextoEtapa := 'REPOSO';
            #ETAPA_APERTURA_CAMINO:
                #TextoEtapa := CONCAT_STRING(IN1 := 'APERTURA CAMINO - ',
                                             IN2 := "FC15001_ZC_INT_TO_STRING"(#s_TiempoEtapa.Restante),
                                             IN3 := ' s');
                
            #ETAPA_DOSIFICACION:
                CASE #s_TipoDosificacionActual OF
                    1:
                        
                        IF NOT #EstadoBombaDosif THEN
                            #TextoEtapa := 'DOSIFICACION - ESPERA BD';
                        ELSE
                            IF #Dosificacion THEN
                                #TextoEtapa := CONCAT_STRING(IN1 := 'DOSIFICACION LARGA ',
                                                             IN2 := "FC15001_ZC_INT_TO_STRING"(#s_DosifLargasRealizadas + 1),
                                                             IN3 := ' - ',
                                                             IN4 := "FC15001_ZC_INT_TO_STRING"(#s_TiempoEtapa.Restante),
                                                             IN5 := ' s');
                            ELSE
                                #TextoEtapa := CONCAT_STRING(IN1 := 'DRENAJE (DOSIFICACION LARGA) ',
                                                             IN2 := "FC15001_ZC_INT_TO_STRING"(#s_DosifLargasRealizadas + 1),
                                                             IN3 := ' - ',
                                                             IN4 := "FC15001_ZC_INT_TO_STRING"(#s_TiempoEtapa.Restante),
                                                             IN5 := ' s');
                            END_IF;
                        END_IF;
                    2:
                        IF #EtapaSecAuto THEN
                            IF NOT #EstadoBombaDosif THEN
                                #TextoEtapa := 'DOSIFICACION - ESPERA BD';
                            ELSE
                                IF #Dosificacion THEN
                                    #TextoEtapa := CONCAT_STRING(IN1 := 'DOSIFICACION CORTA ',
                                                                 IN2 := "FC15001_ZC_INT_TO_STRING"(#s_DosifCortasRealizadas + 1),
                                                                 IN3 := ' - ',
                                                                 IN4 := "FC15001_ZC_INT_TO_STRING"(#s_TiempoEtapa.Restante),
                                                                 IN5 := ' s');
                                ELSE
                                    #TextoEtapa := CONCAT_STRING(IN1 := 'DRENAJE (DOSIFICACION CORTA) ',
                                                                 IN2 := "FC15001_ZC_INT_TO_STRING"(#s_DosifLargasRealizadas + 1),
                                                                 IN3 := ' - ',
                                                                 IN4 := "FC15001_ZC_INT_TO_STRING"(#s_TiempoEtapa.Restante),
                                                                 IN5 := ' s');
                                END_IF;
                            END_IF;
                        ELSE
                            IF NOT #EstadoBombaDosif THEN
                                #TextoEtapa := 'DOSIFICACION - ESPERA BD';
                            ELSE
                                #TextoEtapa := CONCAT_STRING(IN1 := 'DOSIFICACION MANUAL - ',
                                                             IN2 := "FC15001_ZC_INT_TO_STRING"(#s_TiempoEtapa.Restante),
                                                             IN3 := ' s');
                            END_IF;
                            
                        END_IF;
                        
                    ELSE
                        IF NOT #EstadoBombaDosif THEN
                            #TextoEtapa := 'DOSIFICACION - ESPERA BD';
                        ELSE
                            #TextoEtapa := 'DOSIFICACION';
                        END_IF;
                END_CASE;
            #ETAPA_EMPUJE:
                #TextoEtapa := CONCAT_STRING(IN1 := 'EMPUJE - ',
                                             IN2 := "FC15001_ZC_INT_TO_STRING"(#s_TiempoEtapa.Restante),
                                             IN3 := ' s');
            #ETAPA_ACLARADO:
                #TextoEtapa := CONCAT_STRING(IN1 := 'ACLARADO - ',
                                             IN2 := "FC15001_ZC_INT_TO_STRING"(#s_TiempoEtapa.Restante),
                                             IN3 := ' s');
            #ETAPA_ESPERA_ENTRE_DOSIF:
                #TextoEtapa := CONCAT_STRING(IN1 := 'ESPERA ENTRE DOSIFICACIONES - ',
                                             IN2 := "FC15001_ZC_INT_TO_STRING"(#s_TiempoEtapa.Restante),
                                             IN3 := ' s');
            #ETAPA_ESPERA_RECIR:
                #TextoEtapa := 'ESPERA PASO RECIRCULACION';
            #ETAPA_ESPERA_DOSIF_MANUAL:
                IF NOT #s_TON_RetardoDosifManual.Q THEN
                    #TextoEtapa := 'COMPROBACION DOSIFICACION MANUAL';
                ELSE
                    #TextoEtapa := 'ESPERA DOSIFICACION MANUAL';
                END_IF;
            ELSE
                #TextoEtapa := 'FUERA DE PASO';
        END_CASE;
    END_NETWORK
    {
        S7_Language := "LAD";
        S7_NetworkTitle := "MLC_wA"
    }
    NETWORK
        RUNG wire#powerrail
            { S7_Templates := "SrcType := Real" }
            LT_Contact(
                in1 := #ConductividadActual,
                in2 := #SP_Conductividad
            )
            Move(
                in := 2,
                out1 => #s_TON_FiltroCondBaja.SP
            )
            S_Coil( #s_TON_FiltroCondBaja.IN )
        END_RUNG
    END_NETWORK
    {
        S7_Language := "LAD";
        S7_NetworkTitle := "MLC_4Kp"
    }
    NETWORK
        RUNG wire#powerrail
            I_Contact( #EtapaSecAuto )
            I_Contact( #EtapaSecMan )
            wire#w1
            { S7_Templates := "SrcType := Int" }
            EQ_Contact(
                in1 := #s_EtapaDosificacion,
                in2 := #ETAPA_ESPERA_ENTRE_DOSIF
            )
            wire#w2
            Move(
                in := #ETAPA_REPOSO,
                out1 => #s_EtapaDosificacion
            )
        END_RUNG
        RUNG wire#w1
            { S7_Templates := "SrcType := Int" }
            EQ_Contact(
                in1 := #s_EtapaDosificacion,
                in2 := #ETAPA_ESPERA_RECIR
            )
        END_RUNG wire#w2
        RUNG wire#w1
            { S7_Templates := "SrcType := Int" }
            EQ_Contact(
                in1 := #s_EtapaDosificacion,
                in2 := #ETAPA_ESPERA_DOSIF_MANUAL
            )
        END_RUNG wire#w2
        RUNG wire#w1
            { S7_Templates := "SrcType := Int" }
            EQ_Contact(
                in1 := #s_EtapaDosificacion,
                in2 := #ETAPA_DOSIFICACION
            )
            Move(
                in := #ETAPA_EMPUJE,
                out1 => #s_EtapaDosificacion
            )
        END_RUNG
    END_NETWORK
    {
        S7_Language := "LAD";
        S7_NetworkTitle := "MLC_4Pv"
    }
    NETWORK
        RUNG wire#powerrail
        END_RUNG
    END_NETWORK
    {
        S7_Language := "SCL";
        S7_NetworkTitle := "MLC_487"
    }
    NETWORK
        CASE #s_TipoDosificacionActual OF
            1:  //  Dosificacion Larga
                #t_TiempoDosificacion := #SP_TiempoDosifLarga;
            2:  //  Dosificacion corta
                #t_TiempoDosificacion := #SP_TiempoDosifCorta;
            ELSE  
                #t_TiempoDosificacion := #SP_TiempoDosifCorta;
        END_CASE;
    END_NETWORK
    {
        S7_Language := "SCL";
        S7_NetworkTitle := "MLC_Qu"
    }
    NETWORK
        IF #s_EtapaDosificacion = #ETAPA_REPOSO THEN
            
            //  ========================================================================================
            //  En etapa dosificar automatico
            IF #EtapaSecAuto AND #OrdenMarcha THEN
                
                //  Si esta configurado dosificar siempre independientemente de la conductividad
                IF #SiempreDosificar THEN
                    #s_EtapaDosificacion := #ETAPA_COMPROBACION_LARGA;
                ELSE
                    //  Si no esta configurado dosificar siempre, miramos la conductividad
                    IF #s_TON_FiltroCondBaja.Q THEN
                        #s_EtapaDosificacion := #ETAPA_COMPROBACION_LARGA;
                    ELSE
                        #s_EtapaDosificacion := #ETAPA_ESPERA_RECIR;
                    END_IF;
                END_IF;
                #s_TiempoEtapa.Actual := 0;
            END_IF;
            
            //  ========================================================================================
            //  En etapa dosificar manual
            IF #EtapaSecMan THEN
                #s_EtapaDosificacion := #ETAPA_ESPERA_RECIR;
                #s_TiempoEtapa.Actual := 0;
            END_IF;
            
            //  Reset de marcas de estado de dosificacion
            #s_DosifLargasRealizadas := #s_DosifCortasRealizadas := #s_TipoDosificacionActual := 0;
            #s_DosifLargaCompletada := #s_DosifCortaCompletada := #DosifAutoCompletada:= FALSE;
        
        END_IF;
            
    END_NETWORK
    {
        S7_Language := "SCL";
        S7_NetworkTitle := "MLC_UG"
    }
    NETWORK
        IF #s_EtapaDosificacion = #ETAPA_COMPROBACION_LARGA THEN
            
            //  ========================================================================================
            //  Comprobacion de dosificaciones largas, Ya ha dosificado todas.
            IF #s_DosifLargasRealizadas >= #NumeroDosifLarga THEN
                #s_EtapaDosificacion := #ETAPA_COMPROBACION_CORTA;
                #s_TiempoEtapa.Actual := 0;
                #s_DosifLargaCompletada := TRUE;
            ELSE
                #s_EtapaDosificacion := #ETAPA_APERTURA_CAMINO;
                #s_TiempoEtapa.Actual := 0;
                
            END_IF;
            #s_TipoDosificacionActual := 1;
        END_IF;
        
    END_NETWORK
    {
        S7_Language := "SCL";
        S7_NetworkTitle := "MLC_43a"
    }
    NETWORK
        IF #s_EtapaDosificacion = #ETAPA_COMPROBACION_CORTA THEN
            
            //  ========================================================================================
            //  Comprobacion de dosificaciones largas, Ya ha dosificado todas.
            IF #s_DosifCortasRealizadas >= #NumeroDosifCorta THEN
                #s_EtapaDosificacion := #ETAPA_ESPERA_RECIR;
                #s_TiempoEtapa.Actual := 0;
                #s_DosifCortaCompletada := TRUE;
            ELSE
                #s_EtapaDosificacion := #ETAPA_APERTURA_CAMINO;
                #s_TiempoEtapa.Actual := 0;
                
            END_IF;
            #s_TipoDosificacionActual := 2;
        END_IF;
        
    END_NETWORK
    {
        S7_Language := "LAD";
        S7_NetworkTitle := "MLC_3gn"
    }
    NETWORK
        RUNG wire#powerrail
            { S7_Templates := "SrcType := Int" }
            EQ_Contact(
                in1 := #s_EtapaDosificacion,
                in2 := #ETAPA_APERTURA_CAMINO
            )
            wire#w1
            Move(
                in := #SP_TiempoAperturaCamino,
                out1 => #s_TiempoEtapa.SP
            )
        END_RUNG
        RUNG wire#w1
            S_Coil( #s_TiempoEtapa.Activar )
        END_RUNG
        RUNG wire#w1
            { S7_Templates := "SrcType := Int" }
            GE_Contact(
                in1 := #s_TiempoEtapa.Actual,
                in2 := #s_TiempoEtapa.SP
            )
            Move(
                in := #ETAPA_DOSIFICACION,
                out1 => #s_EtapaDosificacion
            )
            Move(
                in := 0,
                out1 => #s_TiempoEtapa.Actual
            )
        END_RUNG
    END_NETWORK
    {
        S7_Language := "LAD";
        S7_NetworkTitle := "MLC_4Zb"
    }
    NETWORK
        RUNG wire#powerrail
            { S7_Templates := "SrcType := Int" }
            EQ_Contact(
                in1 := #s_EtapaDosificacion,
                in2 := #ETAPA_DOSIFICACION
            )
            wire#w1
            Move(
                in := #t_TiempoDosificacion,
                out1 => #s_TiempoEtapa.SP
            )
        END_RUNG
        RUNG wire#w1
            Contact( #EstadoBombaDosif )
            S_Coil( #s_TiempoEtapa.Activar )
        END_RUNG
        RUNG wire#w1
            { S7_Templates := "SrcType := Int" }
            GE_Contact(
                in1 := #s_TiempoEtapa.Actual,
                in2 := #s_TiempoEtapa.SP
            )
            Move(
                in := #ETAPA_EMPUJE,
                out1 => #s_EtapaDosificacion
            )
            Move(
                in := 0,
                out1 => #s_TiempoEtapa.Actual
            )
        END_RUNG
    END_NETWORK
    {
        S7_Language := "LAD";
        S7_NetworkTitle := "MLC_3W8"
    }
    NETWORK
        RUNG wire#powerrail
            { S7_Templates := "SrcType := Int" }
            EQ_Contact(
                in1 := #s_EtapaDosificacion,
                in2 := #ETAPA_EMPUJE
            )
            wire#w1
            Move(
                in := #SP_TiempoEmpuje,
                out1 => #s_TiempoEtapa.SP
            )
        END_RUNG
        RUNG wire#w1
            S_Coil( #s_TiempoEtapa.Activar )
        END_RUNG
        RUNG wire#w1
            { S7_Templates := "SrcType := Int" }
            GE_Contact(
                in1 := #s_TiempoEtapa.Actual,
                in2 := #s_TiempoEtapa.SP
            )
            Move(
                in := #ETAPA_ACLARADO,
                out1 => #s_EtapaDosificacion
            )
            Move(
                in := 0,
                out1 => #s_TiempoEtapa.Actual
            )
        END_RUNG
    END_NETWORK
    {
        S7_Language := "LAD";
        S7_NetworkTitle := "MLC_3NN"
    }
    NETWORK
        RUNG wire#powerrail
            { S7_Templates := "SrcType := Int" }
            EQ_Contact(
                in1 := #s_EtapaDosificacion,
                in2 := #ETAPA_ACLARADO
            )
            wire#w1
            Move(
                in := #SP_TiempoAclarado,
                out1 => #s_TiempoEtapa.SP
            )
        END_RUNG
        RUNG wire#w1
            S_Coil( #s_TiempoEtapa.Activar )
        END_RUNG
        RUNG wire#w1
            { S7_Templates := "SrcType := Int" }
            GE_Contact(
                in1 := #s_TiempoEtapa.Actual,
                in2 := #s_TiempoEtapa.SP
            )
            Move(
                in := #ETAPA_ESPERA_ENTRE_DOSIF,
                out1 => #s_EtapaDosificacion
            )
            Move(
                in := 0,
                out1 => #s_TiempoEtapa.Actual
            )
        END_RUNG
    END_NETWORK
    {
        S7_Language := "LAD";
        S7_NetworkTitle := "MLC_4HH"
    }
    NETWORK
        RUNG wire#powerrail
            { S7_Templates := "SrcType := Int" }
            EQ_Contact(
                in1 := #s_EtapaDosificacion,
                in2 := #ETAPA_ESPERA_ENTRE_DOSIF
            )
            wire#w1
            P_Trig( #s_Pulsos[0] )
            wire#w2
            { S7_Templates := "SrcType := Int" }
            EQ_Contact(
                in1 := #s_TipoDosificacionActual,
                in2 := 1
            )
            { S7_Templates := "DestType := Int" }
            Inc( #s_DosifLargasRealizadas )
        END_RUNG
        RUNG wire#w2
            { S7_Templates := "SrcType := Int" }
            EQ_Contact(
                in1 := #s_TipoDosificacionActual,
                in2 := 2
            )
            { S7_Templates := "DestType := Int" }
            Inc( #s_DosifCortasRealizadas )
        END_RUNG
        RUNG wire#w1
            Move(
                in := #SP_TiempoEntreDosif,
                out1 => #s_TiempoEtapa.SP
            )
        END_RUNG
        RUNG wire#w1
            S_Coil( #s_TiempoEtapa.Activar )
        END_RUNG
        RUNG wire#w1
            { S7_Templates := "SrcType := Int" }
            GE_Contact(
                in1 := #s_TiempoEtapa.Actual,
                in2 := #s_TiempoEtapa.SP
            )
            wire#w3
            Contact( #s_TON_FiltroCondBaja.Q )
            wire#w4
            { S7_Templates := "SrcType := Int" }
            EQ_Contact(
                in1 := #s_TipoDosificacionActual,
                in2 := 1
            )
            wire#w5
            I_Contact( #s_DosifLargaCompletada )
            Move(
                in := #ETAPA_COMPROBACION_LARGA,
                out1 => #s_EtapaDosificacion
            )
            Move(
                in := 0,
                out1 => #s_TiempoEtapa.Actual
            )
        END_RUNG
        RUNG wire#w5
            Contact( #s_DosifLargaCompletada )
            Move(
                in := #ETAPA_COMPROBACION_CORTA,
                out1 => #s_EtapaDosificacion
            )
            Move(
                in := 0,
                out1 => #s_TiempoEtapa.Actual
            )
        END_RUNG
        RUNG wire#w4
            { S7_Templates := "SrcType := Int" }
            EQ_Contact(
                in1 := #s_TipoDosificacionActual,
                in2 := 2
            )
            wire#w6
            I_Contact( #s_DosifCortaCompletada )
            Move(
                in := #ETAPA_COMPROBACION_CORTA,
                out1 => #s_EtapaDosificacion
            )
            Move(
                in := 0,
                out1 => #s_TiempoEtapa.Actual
            )
        END_RUNG
        RUNG wire#w6
            Contact( #s_DosifCortaCompletada )
            Move(
                in := #ETAPA_ESPERA_RECIR,
                out1 => #s_EtapaDosificacion
            )
            Move(
                in := 0,
                out1 => #s_TiempoEtapa.Actual
            )
        END_RUNG
        RUNG wire#w3
            I_Contact( #s_TON_FiltroCondBaja.Q )
            Move(
                in := #ETAPA_ESPERA_RECIR,
                out1 => #s_EtapaDosificacion
            )
            Move(
                in := 0,
                out1 => #s_TiempoEtapa.Actual
            )
        END_RUNG
        RUNG wire#w1
            Contact( #EtapaSecMan )
            Move(
                in := #ETAPA_ESPERA_RECIR,
                out1 => #s_EtapaDosificacion
            )
            Move(
                in := 0,
                out1 => #s_TiempoEtapa.Actual
            )
        END_RUNG
    END_NETWORK
    {
        S7_Language := "LAD";
        S7_NetworkTitle := "MLC_LZ"
    }
    NETWORK
        RUNG wire#powerrail
            { S7_Templates := "SrcType := Int" }
            EQ_Contact(
                in1 := #s_EtapaDosificacion,
                in2 := #ETAPA_ESPERA_RECIR
            )
            Contact( #EtapaSecMan )
            Move(
                in := #ETAPA_ESPERA_DOSIF_MANUAL,
                out1 => #s_EtapaDosificacion
            )
            Move(
                in := 0,
                out1 => #s_TiempoEtapa.Actual
            )
            S_Coil( #DosifAutoCompletada )
        END_RUNG
    END_NETWORK
    {
        S7_Language := "LAD";
        S7_NetworkTitle := "MLC_3kt"
    }
    NETWORK
        RUNG wire#powerrail
            { S7_Templates := "SrcType := Int" }
            EQ_Contact(
                in1 := #s_EtapaDosificacion,
                in2 := #ETAPA_ESPERA_DOSIF_MANUAL
            )
            wire#w1
            Contact( #OrdenDosifManual )
            Move(
                in := #ETAPA_APERTURA_CAMINO,
                out1 => #s_EtapaDosificacion
            )
            Move(
                in := 2,
                out1 => #s_TipoDosificacionActual
            )
            Move(
                in := 0,
                out1 => #s_TiempoEtapa.Actual
            )
        END_RUNG
        RUNG wire#w1
            I_Contact( #EtapaSecMan )
            Move(
                in := #ETAPA_REPOSO,
                out1 => #s_EtapaDosificacion
            )
            Move(
                in := 0,
                out1 => #s_TiempoEtapa.Actual
            )
        END_RUNG
    END_NETWORK
    {
        S7_Language := "LAD";
        S7_NetworkTitle := "MLC_3AP"
    }
    NETWORK
        RUNG wire#powerrail
        END_RUNG
    END_NETWORK
    {
        S7_Language := "LAD";
        S7_NetworkTitle := "MLC_3jZ"
    }
    NETWORK
        RUNG wire#powerrail
            Contact( #s_TiempoEtapa.Activar )
            wire#w1
            Contact( #Pulso1Seg )
            { S7_Templates := "SrcType := Int" }
            LE_Contact(
                in1 := #s_TiempoEtapa.SP,
                in2 := 32000
            )
            { S7_Templates := "SrcType := Int" }
            LT_Contact(
                in1 := #s_TiempoEtapa.Actual,
                in2 := #s_TiempoEtapa.SP
            )
            wire#w2
            Contact( #EtapaSecAuto )
            wire#w3
            Contact( #EstadoMarcha )
            wire#w4
            { S7_Templates := "DestType := Int" }
            Inc( #s_TiempoEtapa.Actual )
        END_RUNG
        RUNG wire#w2
            Contact( #EtapaSecMan )
        END_RUNG wire#w3
        RUNG wire#w2
            I_Contact( #EtapaSecAuto )
            I_Contact( #EtapaSecMan )
        END_RUNG wire#w4
        RUNG wire#w1
            { S7_Templates := "SrcType := Int" }
            GE_Contact(
                in1 := #s_TiempoEtapa.Actual,
                in2 := #s_TiempoEtapa.SP
            )
            Coil( #s_TiempoEtapa.Cumplido )
        END_RUNG
        RUNG wire#w1
            R_Coil( #s_TiempoEtapa.Activar )
        END_RUNG
        RUNG wire#powerrail
            Sub(
                in1 := #s_TiempoEtapa.SP,
                in2 := #s_TiempoEtapa.Actual,
                out => #s_TiempoEtapa.Restante
            )
            { S7_Templates := "SrcType := Int" }
            LT_Contact(
                in1 := #s_TiempoEtapa.Restante,
                in2 := 0
            )
            Move(
                in := 0,
                out1 => #s_TiempoEtapa.Restante
            )
        END_RUNG
    END_NETWORK
    {
        S7_Language := "SCL";
        S7_NetworkTitle := "MLC_3fL"
    }
    NETWORK
        
    END_NETWORK
    {
        S7_Language := "LAD";
        S7_NetworkTitle := "MLC_3B6"
    }
    NETWORK
        RUNG wire#powerrail
            Contact( #EstadoMarcha )
            wire#w1
            Contact( #EtapaSecAuto )
            wire#w2
            { S7_Templates := "SrcType := Int" }
            EQ_Contact(
                in1 := #s_EtapaDosificacion,
                in2 := #ETAPA_APERTURA_CAMINO
            )
            Coil( #AperturaCamino )
        END_RUNG
        RUNG wire#w1
            Contact( #EtapaSecMan )
        END_RUNG wire#w2
        RUNG wire#powerrail
            I_Contact( #EtapaSecAuto )
            I_Contact( #EtapaSecMan )
        END_RUNG wire#w2
        RUNG wire#w2
            { S7_Templates := "SrcType := Int" }
            EQ_Contact(
                in1 := #s_EtapaDosificacion,
                in2 := #ETAPA_DOSIFICACION
            )
            wire#w3
            { S7_Templates := "SrcType := Int" }
            LT_Contact(
                in1 := #s_TiempoEtapa.Actual,
                in2 := #SP_TiempoDrenajeInicial
            )
            Coil( #Drenaje )
        END_RUNG
        RUNG wire#w3
            { S7_Templates := "SrcType := Int" }
            GE_Contact(
                in1 := #s_TiempoEtapa.Actual,
                in2 := #SP_TiempoDrenajeInicial
            )
            Coil( #Dosificacion )
        END_RUNG
        RUNG wire#w2
            { S7_Templates := "SrcType := Int" }
            EQ_Contact(
                in1 := #s_EtapaDosificacion,
                in2 := #ETAPA_EMPUJE
            )
            Coil( #Empuje )
        END_RUNG
        RUNG wire#w2
            { S7_Templates := "SrcType := Int" }
            EQ_Contact(
                in1 := #s_EtapaDosificacion,
                in2 := #ETAPA_ACLARADO
            )
            Coil( #Aclarado )
        END_RUNG
    END_NETWORK
    {
        S7_Language := "LAD";
        S7_NetworkTitle := "MLC_4HB"
    }
    NETWORK
        RUNG wire#powerrail
            Contact( #EtapaSecMan )
            { S7_Templates := "SrcType := Int" }
            EQ_Contact(
                in1 := #s_EtapaDosificacion,
                in2 := #ETAPA_ESPERA_DOSIF_MANUAL
            )
            { S7_Templates := "SrcType := Real" }
            LT_Contact(
                in1 := #ConductividadActual,
                in2 := #SP_Conductividad
            )
            wire#w1
            Move(
                in := #SP_TiempoRetardoDosifManual,
                out1 => #s_TON_RetardoDosifManual.SP
            )
            S_Coil( #s_TON_RetardoDosifManual.IN )
        END_RUNG
        RUNG wire#w1
            Contact( #s_TON_RetardoDosifManual.Q )
            Coil( #PermisoDosifManual )
        END_RUNG
    END_NETWORK
END_FUNCTION_BLOCK
