Discussion: EGR OFF sur EDC16C34
Afficher un message
Vieux 20/05/2022, 18h23  
Jean_Luc
Membre habitué T-E
 
Avatar de Jean_Luc
 
Date d'inscription: mai 2015
Localisation: Grenoble
Messages: 110
Thanks: 36
Thanked 104 Times in 26 Posts
Pouvoir de réputation: 12
Jean_Luc will become famous soon enoughJean_Luc will become famous soon enough
Par défaut

Hello,

Donc j'ai testé cette technique et ça a l'air de bien marcher.
Malheureusement, ma vanne (ou le faisceau) est morte et j'ai des valeurs invalides sur RCO et recopie. Je peux donc pas checker sur le graphique.
J'essayerai de le faire avec un autre ECU.

J'ai mis un plaque devant la vanne, j'avais des défaut de débit d'air et de recirculation de gaz insuffisante. J'ai patché la valeur avec 0x17 0x70 (6000 tours) et plus de défaut de débit d'air. La voiture semble mieux se comporter également.

Ce bout de code trouve l’adresse de AirCtl_nMin_C sur l'ensemble de ma collection de dump (edc16c34 1.6 hdi 90cv et 110cv).

Code:
    private void findEGRLimit() {

      // Try to find address of AirCtl_nMin_C (Engine speed threshold for EGR shut-off, in rpm)
      // Search for address of AirCtl_nMaxHi_C/AirCtl_nMaxLo_C (We assume that the difference
      // between this 2 values is 200RPM or 250RPM)
      // Immediately follow AirCtl_nMin_C
      // Standard values for AirCtl_nMin_C are 650 or 700 RPM

      boolean eos = false;
      int start = 2600;
      int diff = 200;
      while(!eos) {

        int hMaxHi = (start+diff) >> 8;
        int lMaxHi = (start+diff) & 0xFF;
        int hMaxLo = start >> 8;
        int lMaxLo = start & 0xFF;

        egrLimitAdd = search(0x1C0000,toByte(new int[]{hMaxHi,lMaxHi,hMaxLo,lMaxLo}));

        if(egrLimitAdd!=-1) {

          egrLimitAdd += 4;
          egrLimit = ((((int) memory[egrLimitAdd]) & 0xff) << 8) + (((int) memory[egrLimitAdd + 1]) & 0xff);
          eos = egrLimit == 700 || egrLimit == 650;

          if( !eos ) {
            // Try a second match
            egrLimitAdd = search(egrLimitAdd,toByte(new int[]{hMaxHi,lMaxHi,hMaxLo,lMaxLo}));

            if(egrLimitAdd!=-1) {
              egrLimitAdd += 4;
              egrLimit = ((((int) memory[egrLimitAdd]) & 0xff) << 8) + (((int) memory[egrLimitAdd + 1]) & 0xff);
              eos = egrLimit == 700 || egrLimit == 650;
            }
          }

        }

        if(!eos) {
          start += 50;
          if(start>=3600) {
            diff += 50;
            if(diff>250) {
              // Fail !
              eos = true;
            } else {
              start = 3000;
            }
          }
        }

      }

    }



  }
Jean_Luc est déconnecté   Réponse avec citation