.pragma library

//=====================================================================================
// Fonctions  : Fournit une chaine de caractères constituant une liste de valeurs§niveaux
//              de batterie. La liste est composée de couples de nombre séparés par des ';'
//              et les deux valeurs au sein d'un couple sont séparés par '/'.
//              Par exemple : "13800/10000;13400/9800;13150/9600;13000/9400;12900/9000;12800/8000;12443/4887;12100/2000;11800/1000;11500/500;11000/200;10500/0"
//              La chaine est établie en fonction du paramètre de 'Tension_nominale' recue en paramètre.
// Reçoit :     La tension nomniale (a priori, 12, 24 ou 48)
// Retour :     La chaine
//=====================================================================================
function chaine_tension_niveau_batterie_usine(tension)
{
    var chaine;

    switch(tension)
    {
        default:
        case 12:
            chaine = "13.800/100.00";
            chaine += ";13.200/98.00";
            chaine += ";13.000/96.00";
            chaine += ";12.800/94.00";
            chaine += ";12.600/90.00";
            chaine += ";12.480/80.00";
            chaine += ";12.100/30.00";
            chaine += ";12.020/20.00";
            chaine += ";11.800/10.00";
            chaine += ";11.500/5.00";
            chaine += ";11.000/2.00";
            chaine += ";10.500/0.00";
            break;
        case 24:
            chaine = "27.600/100.00";
            chaine += ";26.400/98.00";
            chaine += ";26.000/96.00";
            chaine += ";25.600/94.00";
            chaine += ";25.200/90.00";
            chaine += ";24.960/80.00";
            chaine += ";24.200/30.00";
            chaine += ";24.040/20.00";
            chaine += ";23.600/10.00";
            chaine += ";23.000/5.00";
            chaine += ";22.000/2.00";
            chaine += ";21.000/0.00";
            break;
        case 48:
    // Version issue des tables Suncy :
            chaine = "56.000/100.00";
            chaine += ";50.000/84.00";
            chaine += ";49.300/79.00";
            chaine += ";49.000/74.00";
            chaine += ";48.800/69.00";
            chaine += ";48.000/30.00";
            chaine += ";47.600/20.00";
            chaine += ";47.200/15.00";
            chaine += ";46.400/10.00";
            chaine += ";45.000/5.00";
            chaine += ";43.500/2.00";
            chaine += ";42.000/0.00";
            break;
    }

    return(chaine);
}


//=====================================================================================
// Fonctions  : Fournit une chaine de caractères constituant une liste de temérature/résistance_interne
//              de batterie. La liste est composée de couples de nombre séparés par des ';'
//              et les deux valeurs au sein d'un couple sont séparés par '/'.
//              La chaine est établie en fonction du paramètre de 'Type' (de batterie) recue en paramètre.
// Reçoit :     Le type de batterie
// Retour :     La chaine
//=====================================================================================
function chaine_temperature_resistance_interne_usine(type)
{
    var chaine;

    switch(type)
    {
        default:
        case 0:                             // Non défini
        case 1:                             // Pb-Acide liquide
        case 2:                             // Pb-AGM/VRLA
        case 3:                             // Pb-Gel
        case 4:                             // Pb-Carbone
            chaine =  "30/0.9";
            chaine += ";25/1.0";
            chaine += ";20/1.0";
            chaine += ";15/1.1";
            chaine += ";10/1.2";
            chaine += ";5/1.3";
            chaine += ";0/1.6";
            chaine += ";-5/1.8";
            chaine += ";-10/2.3";
            chaine += ";-15/2.9";
            chaine += ";-20/3.7";
            chaine += ";-25/4.7";
            chaine += ";-30/6.0";           // 30/0.9;25/1.0;20/1.0;15/1.1;10/1.2;5/1.3;0/1.6;-5/1.8;-10/2.3;-15/2.9;-20/3.7;-25/4.7;-30/6.0
            break;
        case 10:                            // Lithium
            chaine =  "25/0.8";
            chaine += ";20/1.0";
            chaine += ";15/1.0";
            chaine += ";10/1.3";
            chaine += ";5/1.8";
            chaine += ";0/3.0";
            chaine += ";-5/4.5";
            chaine += ";-10/6.3";
            chaine += ";-15/8.3";
            chaine += ";-20/11.0";
            chaine += ";-25/16.0";
            chaine += ";-30/23.0";          // 25/0.8;20/1.0;15/1.0;10/1.3;5/1.8;0/3.0;-5/4.5;-10/6.3;-15/8.3;-20/11.0;-25/16.0;-30/23.0
            break;
    }

    return(chaine);
}


//=====================================================================================
// Fonctions  : Calcule le coefficient de Peukert à partir de 2 couples de Capacité/Durée
//              de batterie. Si ces valeurs ne sont pas exploitables, la fonction renvoit la
//              valeur par défaut dépendant du type de batterie.
//              La formule pour calculer le coefficient est :
//                  n = log (T0/T1) / [log(C1/C0) - log (T1/T0)]
// Reçoit :     Le type de batterie, la capacité 1 et la durée 1, la capacité 2 et la durée 2
// Retour :     Le coefficient de Peukert
//=====================================================================================
function coefficient_de_peukert(type, capacite_1, heures_capacite_1, capacite_2, heures_capacite_2)
{
    var coeff_peukert = 0;

    if ((capacite_1 > 0) && (heures_capacite_1 > 0) && (capacite_2 > 0) && (heures_capacite_2 > 0))
    {
        var denom = (Math.log(capacite_2/capacite_1) - Math.log(heures_capacite_2/heures_capacite_1));
        if (denom !== 0) coeff_peukert = Math.log(heures_capacite_1/heures_capacite_2) / denom;
    }
    if (coeff_peukert < 1)      // On traite le cas où on n'a fait aucun calcul, où 'denom' est nul et si le résultat lui-même n'est pas conforme.
    {
        switch(type)
        {
            default:
            case 0:     // Non défini
                coeff_peukert = 1.25
                break;
            case 1:     // Plomb acide liquide
                coeff_peukert = 1.30
                break;
            case 2:     // Plomb AGM
                coeff_peukert = 1.10
                break;
            case 3:     // Plomb Gel
                coeff_peukert = 1.10
                break;
            case 4:     // Plomb Carbone
                coeff_peukert = 1.15
                break;
            case 10:     // Lithium
                coeff_peukert = 1.05
                break;
        }
    }

    return(coeff_peukert);
}


