Untitled

 avatar
unknown
plain_text
a year ago
9.2 kB
1
Indexable
    //Pour plus d'informations sur la méthode de calcul voir la documentation
    float t0, t2;
    float surface_I_Rise, surface_I_Fall;
    float delta_T_Rise, delta_T_Fall;

    float I_ground = protoSynergie->pulseSyn().aWkPt().at(index)->iGround() * 10;
    float I_level = protoSynergie->pulseSyn().aWkPt().at(index)->iLevel() * 10;
    float I_high = protoSynergie->pulseSyn().aWkPt().at(index)->iHigh() * 10;

    // Pourcentage donc / 100 et converti en cA donc x 100
    float I_20_percent_Rise = protoSynergie->pulseSyn().aWkPt().at(index)->iHigh() * protoSynergie->pulseSyn().iRise20Percent();
    float I_40_percent_Rise = protoSynergie->pulseSyn().aWkPt().at(index)->iHigh() * protoSynergie->pulseSyn().iRise20Percent();
    float I_60_percent_Rise = protoSynergie->pulseSyn().aWkPt().at(index)->iHigh() * protoSynergie->pulseSyn().iRise20Percent();
    float I_80_percent_Rise = protoSynergie->pulseSyn().aWkPt().at(index)->iHigh() * protoSynergie->pulseSyn().iRise20Percent();

    // Pourcentage donc / 100 et converti en cA donc x 10
    float I_80_percent_Fall = protoSynergie->pulseSyn().aWkPt().at(index)->iHigh() * protoSynergie->pulseSyn().iFall80Percent();
    float I_60_percent_Fall = protoSynergie->pulseSyn().aWkPt().at(index)->iHigh() * protoSynergie->pulseSyn().iFall60Percent();
    float I_40_percent_Fall = protoSynergie->pulseSyn().aWkPt().at(index)->iHigh() * protoSynergie->pulseSyn().iFall40Percent();
    float I_20_percent_Fall = protoSynergie->pulseSyn().aWkPt().at(index)->iHigh() * protoSynergie->pulseSyn().iRise20Percent();

    // Temsp en 100µs qu'on converti en 10µs donc * 10
    delta_T_Rise = (protoSynergie->pulseSyn().aWkPt().at(index)->tRise() * 10 / 5);
    delta_T_Fall = (protoSynergie->pulseSyn().aWkPt().at(index)->tFall() * 10 / 5);

    // Première étape : Calcul des pentes
    float pente_Rise_1 = I_20_percent_Rise / delta_T_Rise;
    float pente_Rise_2 = (I_40_percent_Rise - I_20_percent_Rise) / delta_T_Rise;
    float pente_Rise_3 = (I_60_percent_Rise - I_40_percent_Rise) / delta_T_Rise;
    float pente_Rise_4 = (I_80_percent_Rise - I_60_percent_Rise) / delta_T_Rise;
    float pente_Rise_5 = (I_high - I_80_percent_Rise) / delta_T_Rise;

    float pente_Fall_1 = (I_high - I_80_percent_Fall) / delta_T_Fall;
    float pente_Fall_2 = (I_80_percent_Fall - I_60_percent_Fall) / delta_T_Fall;
    float pente_Fall_3 = (I_60_percent_Fall - I_40_percent_Fall)/ delta_T_Fall;
    float pente_Fall_4 = (I_40_percent_Fall - I_20_percent_Fall) / delta_T_Fall;
    float pente_Fall_5 = (I_20_percent_Fall) / delta_T_Fall;

    // Deuxième étape : Calcul des surfaces de triangle
    float surface_Triangle_Rise_1 = I_20_percent_Rise * (delta_T_Rise / 2);
    float surface_Triangle_Rise_2 = (I_40_percent_Rise - I_20_percent_Rise) * (delta_T_Rise / 2);
    float surface_Triangle_Rise_3 = (I_60_percent_Rise - I_40_percent_Rise) * (delta_T_Rise / 2);
    float surface_Triangle_Rise_4 = (I_80_percent_Rise - I_60_percent_Rise) * (delta_T_Rise / 2);
    float surface_Triangle_Rise_5 = (I_high - I_80_percent_Rise) * (delta_T_Rise / 2);

    float surface_Triangle_Fall_1 = (I_high - I_80_percent_Fall) *  (delta_T_Fall / 2);
    float surface_Triangle_Fall_2 = (I_80_percent_Fall - I_60_percent_Fall) *  (delta_T_Fall / 2);
    float surface_Triangle_Fall_3 = (I_60_percent_Fall - I_40_percent_Fall) *  (delta_T_Fall / 2);
    float surface_Triangle_Fall_4 = (I_40_percent_Fall - I_20_percent_Fall) *  (delta_T_Fall / 2);
    float surface_Triangle_Fall_5 = (I_20_percent_Fall) *  (delta_T_Fall / 2);

    // Troisième étape : Calcul des surfaces des rectangles sous les triangles
    float surface_Rectangle_Rise_2 = I_20_percent_Rise * delta_T_Rise;
    float surface_Rectangle_Rise_3 = I_40_percent_Rise * delta_T_Rise;
    float surface_Rectangle_Rise_4 = I_60_percent_Rise * delta_T_Rise;
    float surface_Rectangle_Rise_5 = I_80_percent_Rise * delta_T_Rise;

    float surface_Rectangle_Fall_2 = I_80_percent_Fall * delta_T_Fall;
    float surface_Rectangle_Fall_3 = I_60_percent_Fall * delta_T_Fall;
    float surface_Rectangle_Fall_4 = I_40_percent_Fall * delta_T_Fall;
    float surface_Rectangle_Fall_5 = I_20_percent_Fall * delta_T_Fall;

    // Quatrième étape : Conditions et formules poru la sufrace à la montée
    if(I_ground < I_20_percent_Rise)
    {
        t0 = I_ground / pente_Rise_1;
        surface_I_Rise = ((((delta_T_Rise - t0) * I_ground) + (I_20_percent_Rise - I_ground) * (delta_T_Rise - t0)) / 2) + surface_Triangle_Rise_2 + surface_Triangle_Rise_3 + surface_Triangle_Rise_4 +surface_Triangle_Rise_5 + surface_Rectangle_Rise_2 + surface_Rectangle_Rise_3 + surface_Rectangle_Rise_4 + surface_Rectangle_Rise_5;
    }
    else if(I_ground < I_40_percent_Rise)
    {
        t0 = ((I_ground - I_20_percent_Rise) / pente_Rise_2) + delta_T_Rise;
        surface_I_Rise = ((((2*delta_T_Rise - t0) * I_ground) * (I_40_percent_Rise - I_ground) * (2*delta_T_Rise - t0)) / 2) + surface_Triangle_Rise_3 + surface_Triangle_Rise_4 +surface_Triangle_Rise_5 + surface_Rectangle_Rise_3 + surface_Rectangle_Rise_4 + surface_Rectangle_Rise_5;
    }
    else if(I_ground < I_60_percent_Rise)
    {
        t0 = ((I_ground - I_40_percent_Rise) / pente_Rise_3) + 2*delta_T_Rise;
        surface_I_Rise = ((((3*delta_T_Rise - t0) * I_ground) * (I_60_percent_Rise - I_ground) * (3*delta_T_Rise - t0)) / 2) + surface_Triangle_Rise_4 +surface_Triangle_Rise_5 + surface_Rectangle_Rise_4 + surface_Rectangle_Rise_5;
    }
    else if(I_ground < I_60_percent_Rise)
    {
        t0 = ((I_ground - I_60_percent_Rise) / pente_Rise_4) + 3*delta_T_Rise;
        surface_I_Rise = ((((4*delta_T_Rise - t0) * I_ground) * (I_80_percent_Rise - I_ground) * (4*delta_T_Rise - t0)) / 2) + surface_Triangle_Rise_5 + surface_Rectangle_Rise_5;
    }
    else
    {
        t0 = ((I_ground - I_80_percent_Rise) / pente_Rise_5) + 4*delta_T_Rise;
        surface_I_Rise = (((5*delta_T_Rise - t0) * I_ground) * (I_high - I_ground) * (5*delta_T_Rise - t0)) / 2;
    }

    // Cinquième étape : Conditions et formules pour la surface de descente

    if(I_level > I_80_percent_Fall)
    {
        t2 = (I_high - I_ground) / pente_Fall_1;
        surface_I_Fall = t2 * I_ground + ((I_high - I_ground) * t2 / 2);
    }
    else if(I_level > I_60_percent_Fall)
    {
        t2 = ((I_80_percent_Fall - I_ground) / pente_Fall_2) + delta_T_Fall;
        surface_I_Fall = (((t2 - delta_T_Fall) * I_ground + ((I_80_percent_Fall - I_ground) * (t2 - delta_T_Fall))) / 2) + surface_Triangle_Fall_2 + surface_Rectangle_Fall_2;
    }
    else if(I_level > I_40_percent_Fall)
    {
        t2 = ((I_60_percent_Fall - I_ground) / pente_Fall_3) + 2*delta_T_Fall;
        surface_I_Fall = (((t2 - 2*delta_T_Fall) * I_ground + ((I_60_percent_Fall - I_ground) * (t2 - 2*delta_T_Fall))) / 2) + surface_Triangle_Fall_2 + surface_Triangle_Fall_3 + surface_Rectangle_Fall_2 + surface_Rectangle_Fall_3;
    }
    else if(I_level > I_20_percent_Fall)
    {
        t2 = ((I_40_percent_Fall - I_ground) / pente_Fall_4) + 3*delta_T_Fall;
        surface_I_Fall = (((t2 - 3*delta_T_Fall) * I_ground + ((I_40_percent_Fall - I_ground) * (t2 - 3*delta_T_Fall))) / 2) + surface_Triangle_Fall_2 + surface_Triangle_Fall_3 + surface_Triangle_Fall_4 + surface_Rectangle_Fall_2 + surface_Rectangle_Fall_3 + surface_Rectangle_Fall_4;
    }
    else
    {
        t2 = ((I_20_percent_Fall - I_ground) / pente_Fall_5) + 4*delta_T_Fall;
        surface_I_Fall = (((t2 - 4*delta_T_Fall) * I_ground + ((I_20_percent_Fall - I_ground) * (t2 - 4*delta_T_Fall))) / 2) + surface_Triangle_Fall_2 + surface_Triangle_Fall_3 + surface_Triangle_Fall_4 + surface_Triangle_Fall_5 + surface_Rectangle_Fall_2 + surface_Rectangle_Fall_3 + surface_Rectangle_Fall_4 + surface_Rectangle_Fall_5;
    }

    // Sixième étape : Calcul du courant moyen et de T_ground
    // Way down ground en A/ms converti en cA/10µs ==> pas de conversion
    float t_way_down_ground = ((I_level - I_ground) / protoSynergie->pulseSyn().aWkPt().at(index)->iWayDownGround() * 20);

    protoSynergie->pulseSyn().aWkPt().at(index)->setCoeffTReste((protoSynergie->pulseSyn().aWkPt().at(index)->tRise() * 10) - t0 + (protoSynergie->pulseSyn().aWkPt().at(index)->tHigh() * 10) + t2 + (protoSynergie->pulseSyn().aWkPt().at(index)->tLevel() * 10) + t_way_down_ground);
    protoSynergie->pulseSyn().aWkPt().at(index)->setCoeffSReste(surface_I_Rise + (I_high * protoSynergie->pulseSyn().aWkPt().at(index)->tHigh() * 1000) + surface_I_Fall + (I_level * protoSynergie->pulseSyn().aWkPt().at(index)->tLevel() * 1000) + (t_way_down_ground * (I_level - I_ground) / 2));
    float t_ground = (protoSynergie->pulseSyn().aWkPt().at(index)->coeffSReste() - (protoSynergie->pulseSyn().aWkPt().at(index)->genericWkPt().courant() * 100 * protoSynergie->pulseSyn().aWkPt().at(index)->coeffTReste())) / ((protoSynergie->pulseSyn().aWkPt().at(index)->genericWkPt().courant() * 100) - I_ground);
    protoSynergie->pulseSyn().aWkPt().at(index)->setTGround(t_ground / 10);