{
    S7_Author := "ABH";
    S7_BlockComment := "MLC_yK";
    S7_BlockNumber := "15006";
    S7_BlockTitle := "MLC_px";
    S7_EditorMode := "SCL";
    S7_Family := "ZeusControl";
    S7_Optimized := "TRUE";
    S7_Version := "1.1"
}
FUNCTION "FC15006_ZC_DTL_TO_STRING" : String
    VAR_INPUT
        FechaDTL : DTL;
        { S7_MLC := "MLC_3mz" }
        Formato : USInt;
    END_VAR
    VAR_TEMP
        t_Ano : String[5];
        t_Mes : String[3];
        t_Dia : String[3];
        t_Hora : String[3];
        t_Minuto : String[3];
        t_Segundo : String[3];
        t_Nanosegundo : String[50];
    END_VAR

    { S7_Language := "SCL" }
    NETWORK
        REGION DESCRIPCION
        (*
        ###### (C)Copyright ZeusControl 2019 - 2023
        
        ---
        ### Información del Sistema
        | Hardware Compatible | Entorno de Ingeniería |
        |---------------------|-----------------------|
        | PLC serie 1200/1500 | TIA Portal 18         |
        
        ---
        > **Restricciones:** Ninguna.
        
        ---
        ### Descripción Funcional
        
        Función encargada de convertir tipo de dato DTL a String
        
        ---
        ### Dependencias Requeridas
        | Tipo | Elementos |
        |------|-----------|
        | FC   | - |
        | FB   | - |
        | DB   | - |
        | UDT  | - |
            
        ---
        ### Historial de Cambios
        | Versión  | Fecha      | Técnico | Cambios |
        |----------|------------|---------|---------|
        | 01.00.00 | 10.09.2019 | (ABH)   | Primera version. |
        | 01.00.00 | 25.07.2023 | (ABH)   | Se eliminan las variables temporales STRING, para concatenar directamente en el return de la funcion el texto deseado. |
        *)
        END_REGION DESCRIPCION
        
        
        //  ==========================================================================================================
        REGION CALCULO
            
            REGION GESTION_STRING
                
                //  Genero un String por cada elemento
                #t_Ano := UINT_TO_STRING(#FechaDTL.YEAR);
                #t_Mes := USINT_TO_STRING(#FechaDTL.MONTH);
                #t_Dia := USINT_TO_STRING(#FechaDTL.DAY);
                #t_Hora := USINT_TO_STRING(#FechaDTL.HOUR);
                #t_Minuto := USINT_TO_STRING(#FechaDTL.MINUTE);
                #t_Segundo := USINT_TO_STRING(#FechaDTL.SECOND);
                #t_Nanosegundo := UDINT_TO_STRING(#FechaDTL.NANOSECOND);
                
                //  TRATAMIENTO DE LA FECHA
                //  Año
                #t_Ano := DELETE(IN := #t_Ano, L := 1, P := 1);// Le borro el signo
                
                //  Mes
                IF #FechaDTL.MONTH < 10 THEN
                    #t_Mes := DELETE(IN := #t_Mes, L := 1, P := 1);// Le borro el signo
                    #t_Mes := CONCAT(IN1 := '0', IN2 := #t_Mes);// Le añado un cero
                ELSE
                    #t_Mes := DELETE(IN := #t_Mes, L := 1, P := 1);// Le borro el signo
                END_IF;
                
                //  Dia
                IF #FechaDTL.DAY < 10 THEN
                    #t_Dia := DELETE(IN := #t_Dia, L := 1, P := 1);// Le borro el signo
                    #t_Dia := CONCAT(IN1 := '0', IN2 := #t_Dia);// Le añado un cero
                ELSE
                    #t_Dia := DELETE(IN := #t_Dia, L := 1, P := 1);// Le borro el signo
                END_IF;
                
                //  TRATAMIENTO DE LA HORA
                //  Horas
                IF #FechaDTL.HOUR < 10 THEN
                    #t_Hora := DELETE(IN := #t_Hora, L := 1, P := 1);// Le borro el signo
                    #t_Hora := CONCAT(IN1 := '0', IN2 := #t_Hora);// Le añado un cero
                ELSE
                    #t_Hora := DELETE(IN := #t_Hora, L := 1, P := 1);// Le borro el signo
                END_IF;
                
                //  Minutos
                IF #FechaDTL.MINUTE < 10 THEN
                    #t_Minuto := DELETE(IN := #t_Minuto, L := 1, P := 1);// Le borro el signo
                    #t_Minuto := CONCAT(IN1 := '0', IN2 := #t_Minuto);// Le añado un cero
                ELSE
                    #t_Minuto := DELETE(IN := #t_Minuto, L := 1, P := 1);// Le borro el signo
                END_IF;
                
                //  Segundos
                IF #FechaDTL.SECOND < 10 THEN
                    #t_Segundo := DELETE(IN := #t_Segundo, L := 1, P := 1);// Le borro el signo
                    #t_Segundo := CONCAT(IN1 := '0', IN2 := #t_Segundo);// Le añado un cero
                ELSE
                    #t_Segundo := DELETE(IN := #t_Segundo, L := 1, P := 1);// Le borro el signo
                END_IF;
                
                //  Nanosegundos
                IF #FechaDTL.NANOSECOND < 10 THEN
                    #t_Nanosegundo := DELETE(IN := #t_Nanosegundo, L := 1, P := 1);// Le borro el signo
                    #t_Nanosegundo := LEFT(IN := CONCAT(IN1 := '0', IN2 := #t_Nanosegundo), L := 5);// Le añado un cero
                ELSE
                    #t_Nanosegundo := LEFT(IN := DELETE(IN := #t_Nanosegundo, L := 1, P := 1), L := 5);// Le borro el signo
                END_IF;
                
            END_REGION GESTION_STRING
            
            
            REGION SALIDAS
                
                CASE #Formato OF
                    0:  //  Fecha y hora
                        #FC15006_ZC_DTL_TO_STRING := CONCAT(IN1 := #t_Dia,
                                                            IN2 := '/',
                                                            IN3 := #t_Mes,
                                                            IN4 := '/',
                                                            IN5 := #t_Ano,
                                                            IN6 := ' ',
                                                            IN7 := #t_Hora,
                                                            IN8 := ':',
                                                            IN9 := #t_Minuto,
                                                            IN10 := ':',
                                                            IN11 := #t_Segundo);
                    1:  //  Fecha
                        #FC15006_ZC_DTL_TO_STRING := CONCAT(IN1 := #t_Dia,
                                                            IN2 := '/',
                                                            IN3 := #t_Mes,
                                                            IN4 := '/',
                                                            IN5 := #t_Ano);
                    2:  //  Hora
                        #FC15006_ZC_DTL_TO_STRING := CONCAT(IN1 := #t_Hora,
                                                            IN2 := ':',
                                                            IN3 := #t_Minuto,
                                                            IN4 := ':',
                                                            IN5 := #t_Segundo);
                    3:  //  Fecha y hora (nanosegundo)
                        #FC15006_ZC_DTL_TO_STRING := CONCAT(IN1 := #t_Ano,
                                                            IN2 := #t_Mes,
                                                            IN3 := #t_Dia,
                                                            IN4 := #t_Hora,
                                                            IN5 := #t_Minuto,
                                                            IN6 := #t_Segundo,
                                                            IN7 := #t_Nanosegundo);
                    ELSE
                        #FC15006_ZC_DTL_TO_STRING := CONCAT(IN1 := #t_Dia,
                                                            IN2 := '/',
                                                            IN3 := #t_Mes,
                                                            IN4 := '/',
                                                            IN5 := #t_Ano,
                                                            IN6 := ' ',
                                                            IN7 := #t_Hora,
                                                            IN8 := ':',
                                                            IN9 := #t_Minuto,
                                                            IN10 := ':',
                                                            IN11 := #t_Segundo);
                END_CASE;
                
            END_REGION SALIDAS
            
        END_REGION CALCULO
        
        
    END_NETWORK
END_FUNCTION
