Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
problème de calcul de la puissance (grosse puissance)
#3
Bonjour,
Du coup j'ai televerser avec les changements que vous m'avez préconisé mais rien a changer
Du coup j'ai essayé de modifier le code en multipliant le calcul par 10
Avec ce code // *************************************************
// * Client lecture JSY-MK-333 * Triphasé *
// * Développement initial de Pierre F (Mars 2024) *
// * update PhDV61 Juin 2024 et Août 2024*
// *************************************************

void Setup_JSY333() {
  MySerial.setRxBufferSize(SER_BUF_SIZE);
  MySerial.begin(9600, SERIAL_8N1, RXD2, TXD2);  // PORT DE CONNEXION AVEC LE CAPTEUR JSY-MK-333
}

void Requete_JSY333() {
  int i;
  if (RAZ_JSY) {  // RAZ Message proposé par F6AAM
    byte msg_send[] = { 0x01, 0x10, 0x00, 0x0C, 0x00, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0xF3, 0xFA };
    // Envoi commande de remise à zéro sur le JSY-MK-333
    for (i = 0; i < 13; i++) {
      MySerial.write(msg_send[i]);
    }
    RAZ_JSY = false;
    delay(500);
  }
  byte msg_send[] = { 0x01, 0x03, 0x01, 0x00, 0x00, 0x44, 0x44, 0x05 };
  for (i = 0; i < 8; i++) {
    MySerial.write(msg_send[i]);
  }
}

void Lecture_JSY333() {
  float Tension_M1, Tension_M2, Tension_M3;
  float Intensite_M1, Intensite_M2, Intensite_M3;
  float PVA_M_inst1, PVA_M_inst2, PVA_M_inst3;
  float PW_inst1, PW_inst2, PW_inst3;

  byte Lecture333[200];
  bool injection;
  bool sens1, sens2, sens3;
  long delta_temps = 0;

  Requete_JSY333();

  int a = 0;
  while (MySerial.available()) {
    Lecture333[a] = MySerial.read();
    a++;
  }

  if (a == 141) {                                              // message complet reçu
    delta_temps = (unsigned long)(millis() - Temps_precedent);  // temps écoulé depuis le dernier appel
    Temps_precedent = millis();                                // conserve le temps actuel pour le calcul suivant

    Tension_M1 = ((Lecture333[3] * 256 + Lecture333[4])) / 100.0;
    Tension_M2 = ((Lecture333[5] * 256 + Lecture333[6])) / 100.0;
    Tension_M3 = ((Lecture333[7] * 256 + Lecture333[8])) / 100.0;

    Intensite_M1 = ((Lecture333[9] * 256 + Lecture333[10])) / 100.0;
    Intensite_M2 = ((Lecture333[11] * 256 + Lecture333[12])) / 100.0;
    Intensite_M3 = ((Lecture333[13] * 256 + Lecture333[14])) / 100.0;

    sens1 = Lecture333[104] & 0x01;
    sens2 = (Lecture333[104] >> 1) & 0x01;
    sens3 = (Lecture333[104] >> 2) & 0x01;

    if (sens1) { Intensite_M1 *= -1; }
    if (sens2) { Intensite_M2 *= -1; }
    if (sens3) { Intensite_M3 *= -1; }

    injection = (Lecture333[104] >> 3) & 0x01;  // si vrai, l'opération est en injection

    // Lecture des puissances actives de chaque phase
    PW_inst1 = Lecture333[15] * 256 + Lecture333[16];
    PW_inst2 = Lecture333[17] * 256 + Lecture333[18];
    PW_inst3 = Lecture333[19] * 256 + Lecture333[20];

    // Lecture des puissances apparentes de chaque phase et multiplication par 10
    PVA_M_inst1 = (((Lecture333[35] * 256) + Lecture333[36]) * 10);
    if (sens1) { PVA_M_inst1 = -PVA_M_inst1; }
    PVA_M_inst2 = (((Lecture333[37] * 256) + Lecture333[38]) * 10);
    if (sens2) { PVA_M_inst2 = -PVA_M_inst2; }
    PVA_M_inst3 = (((Lecture333[39] * 256) + Lecture333[40]) * 10);
    if (sens3) { PVA_M_inst3 = -PVA_M_inst3; }

    if (injection) {
      PuissanceS_M_inst = 0;
      // Puissance active (lecture des indices 21 à 24) multipliée par 10
      PuissanceI_M_inst = (((float)(Lecture333[21] * 16777216UL +
                                      Lecture333[22] * 65536UL +
                                      Lecture333[23] * 256UL +
                                      Lecture333[24])) * 10);
      PVAS_M_inst = 0;
      PVAI_M_inst = abs(PVA_M_inst1 + PVA_M_inst2 + PVA_M_inst3);

      // Intégration de la puissance active sur delta_temps pour obtenir une énergie en Wh
      Energie_jour_Injectee += ((float)delta_temps / 1000.0) * (PuissanceI_M_inst / 3600.0);
    } else {  // soutirage
      PuissanceI_M_inst = 0;
      // Puissance active (lecture des indices 21 à 24) multipliée par 10
      PuissanceS_M_inst = (((float)(Lecture333[21] * 16777216UL +
                                      Lecture333[22] * 65536UL +
                                      Lecture333[23] * 256UL +
                                      Lecture333[24])) * 10);
      PVAI_M_inst = 0;
      PVAS_M_inst = PVA_M_inst1 + PVA_M_inst2 + PVA_M_inst3;

      Energie_jour_Soutiree += ((float)delta_temps / 1000.0) * (PuissanceS_M_inst / 3600.0);
    }

    Energie_M_Soutiree = (((float)(Lecture333[119] * 16777216UL +
                                  Lecture333[120] * 65536UL +
                                  Lecture333[121] * 256UL +
                                  Lecture333[122])) * 10);
    Energie_M_Injectee = (((float)(Lecture333[135] * 16777216UL +
                                  Lecture333[136] * 65536UL +
                                  Lecture333[137] * 256UL +
                                  Lecture333[138])) * 10);

    MK333_dataBrute = "";
    MK333_dataBrute = "<strong>Triphasé</strong>";

    if (Intensite_M1 < 0)
      MK333_dataBrute += "<br>Phase1 : " + String(Tension_M1) + "V x " + String(Intensite_M1) + "A = " + String(int(PVA_M_inst1)) + "VA</br>";
    else
      MK333_dataBrute += "<br>Phase1 : " + String(Tension_M1) + "V x +" + String(Intensite_M1) + "A = +" + String(int(PVA_M_inst1)) + "VA</br>";

    if (Intensite_M2 < 0)
      MK333_dataBrute += "<br>Phase2 : " + String(Tension_M2) + "V x " + String(Intensite_M2) + "A = " + String(int(PVA_M_inst2)) + "VA</br>";
    else
      MK333_dataBrute += "<br>Phase2 : " + String(Tension_M2) + "V x +" + String(Intensite_M2) + "A = +" + String(int(PVA_M_inst2)) + "VA</br>";

    if (Intensite_M3 < 0)
      MK333_dataBrute += "<br>Phase3 : " + String(Tension_M3) + "V x " + String(Intensite_M3) + "A = " + String(int(PVA_M_inst3)) + "VA</br>";
    else
      MK333_dataBrute += "<br>Phase3 : " + String(Tension_M3) + "V x +" + String(Intensite_M3) + "A = +" + String(int(PVA_M_inst3)) + "VA</br>";

    if (PuissanceS_M_inst == 0)
      MK333_dataBrute += "<br>Puissance active injectée    : " + String(PuissanceI_M_inst) + "W</br>";
    else
      MK333_dataBrute += "<br>Puissance active soutirée    : " + String(PuissanceS_M_inst) + "W</br>";

    if (PVAS_M_inst == 0)
      MK333_dataBrute += "<br>Puissance apparente injectée : " + String(PVAI_M_inst) + "VA</br>";
    else
      MK333_dataBrute += "<br>Puissance apparente soutirée : " + String(PVAS_M_inst) + "VA</br>";

    if (PVA_M_inst1 != 0)
      MK333_dataBrute += "<br>Facteur de puissance phase 1 : " + String(abs(PW_inst1 / PVA_M_inst1)) + "</br>";
    if (PVA_M_inst2 != 0)
      MK333_dataBrute += "<br>Facteur de puissance phase 2 : " + String(abs(PW_inst2 / PVA_M_inst2)) + "</br>";
    if (PVA_M_inst3 != 0)
      MK333_dataBrute += "<br>Facteur de puissance phase 3 : " + String(abs(PW_inst3 / PVA_M_inst3)) + "</br>";

    MK333_dataBrute += "<br>Energie jour nette soutirée (Linky): " + String(Energie_jour_Soutiree) + "Wh</br>";
    MK333_dataBrute += "<br>Energie jour nette injectée (Linky): " + String(Energie_jour_Injectee) + "Wh</br>";

    MK333_dataBrute += "<br>Energie totale soutirée : " + String(Energie_M_Soutiree) + "Wh</br>";
    MK333_dataBrute += "<br>Energie totale injectée : " + String(Energie_M_Injectee) + "Wh</br>";

    Pva_valide = true;
    filtre_puissance();
    PuissanceRecue = true;  // Reset du Watchdog à chaque trame du JSY reçue
    EnergieActiveValide = true;
    if (cptLEDyellow > 30) {
      cptLEDyellow = 4;
    }
  } else {
    StockMessage("Pas tout reçu, pas traité... nombre de données : " + String(a));
  }
}
La c'est assez cohérent sauf que j'ai des décrochage qui ne sont pas normal. Ça passe de +32kw a -32kw sans raison particulière je pense que mon code doit pas être bon ...


Pièces jointes Miniature(s)
   
Répondre


Messages dans ce sujet
RE: problème de calcul de la puissance (grosse puissance) - par FLOGO - 21-06-2025, 09:34 AM

Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)