Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Optimisation partie UXIX3
#1
Bonjour,

Je suis à  l'origine du code pour la lecture de données en triphasé avec UXIX3
Je m'amuse a essayer d'optimiser tout ça et en particulier à avoir des mesures plus rapides.

Première chose à faire : utiliser l'outil exe disponible sur le site de jsy pour passer le module en 19200 bps.

Ensuite, le code du fichier "Source_UxIx3.ino".

Une première amélioration est de ne pas travailler en float mais de faire les opérations de décalage en binaire. Facile et plus efficace.

Ensuite, on lit beaucoup de données à chaque fois, et c'est ça qui fixe le délai entre chaque requête au module JSY (en dessous de 600ms, ça bugue).
J'ai donc écrit une nouvelle version du code qui ne lit et calcule que ce qui est nécessaire : la puissance active en W, et le sens.
La puissance apparente ne sert à rien ; quand aux consommations et injections en kWh, elles sont inutiles car totalement faussées par le fonctionnement du routeur.
Avec ce code, on peut descendre en delay à 400ms :

Code :
// *************************************************
// * Client lecture JSY-MK-333       *    Triphasé *
// * Développement initial de Pierre F (Mars 2024) *
// *************************************************


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

void Lecture_JSY333() {
  float Tension_M1, Tension_M2, Tension_M3;
  float Intensite_M1, Intensite_M2, Intensite_M3;
  float PVAS_M_inst1, PVAS_M_inst2, PVAS_M_inst3;
  byte Lecture333[200];
  bool injection;
  bool sens1, sens2, sens3;

  int i;
  byte msg_send[] = { 0x01, 0x03, 0x01, 0x09, 0x00, 0x30, 0x94, 0x20 };
  for (i = 0; i < 8; i++) {
    MySerial.write(msg_send[i]);
  }

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

  if (a==101) {  //message complet reçu
    injection = (Lecture333[86] >> 3) & 0x01;  //si sens est true, injection

    if (injection) {
      PuissanceS_M_inst = 0;
      PuissanceI_M_inst = float((Lecture333[3] << 24) +  (Lecture333[4] << 16) + (Lecture333[5] << 8)  + Lecture333[6]);
    } else {
      PuissanceI_M_inst = 0;
      PuissanceS_M_inst = float((Lecture333[3] << 24) +  (Lecture333[4] << 16) + (Lecture333[5] << 8)  + Lecture333[6]);
     
    }

    MK333_dataBrute = "<strong>Triphasé</strong><br>Sens : " + String(injection,BIN) + "</br>";
    MK333_dataBrute += "<br>Puissance active soutirée : " + String(PuissanceS_M_inst) + "W</br>";
    MK333_dataBrute += "<br>Puissance active injectée : " + String(PuissanceI_M_inst) + "W</br>";
    MK333_dataBrute += "<br>Données reçues : " + String(a) + "</br>";

    Pva_valide=true;
    filtre_puissance();
    esp_task_wdt_reset();  //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));
  }
}

Cela fonctionne très bien et la réactivité s'améliore. Mais cela force toujours à lire 48 octets (0x30 dans msg_send) car la donnée de sens est très éloignée de la puissance active.

J'essaie donc de faire 2 lectures, mais c'est là ou j'ai besoin d'aide car ça ne fonctionne pas  !

Code :
  int i;
  byte msg_send[] = { 0x01, 0x03, 0x01, 0x09, 0x00, 0x02, 0x15, 0xF5 };
  for (i = 0; i < 8; i++) {
    MySerial.write(msg_send[i]);
  }

  int a = 0;

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

  byte msg_send2[] = { 0x01, 0x03, 0x01, 0x32, 0x00, 0x01, 0x24, 0x39 };
  for (i = 0; i < 8; i++) {
    MySerial.write(msg_send2[i]);
  }
  Lecture333[7] = MySerial.read();

les données sortent totalement incohérentes.

Voilà, il y a peut etre un expert dans la salle Big Grin
Répondre


Messages dans ce sujet
Optimisation partie UXIX3 - par piamp - 14-06-2024, 04:54 PM
RE: Optimisation partie UXIX3 - par PhDV61 - 14-06-2024, 11:04 PM
RE: Optimisation partie UXIX3 - par piamp - 15-06-2024, 10:29 AM
RE: Optimisation partie UXIX3 - par PhDV61 - 15-06-2024, 11:19 AM
RE: Optimisation partie UXIX3 - par piamp - 15-06-2024, 12:18 PM
RE: Optimisation partie UXIX3 - par PhDV61 - 15-06-2024, 12:47 PM
RE: Optimisation partie UXIX3 - par PhDV61 - 15-06-2024, 12:37 PM
RE: Optimisation partie UXIX3 - par piamp - 15-06-2024, 12:42 PM
RE: Optimisation partie UXIX3 - par PhDV61 - 15-06-2024, 03:31 PM
RE: Optimisation partie UXIX3 - par piamp - 15-06-2024, 01:00 PM
RE: Optimisation partie UXIX3 - par PhDV61 - 15-06-2024, 02:48 PM
RE: Optimisation partie UXIX3 - par piamp - 15-06-2024, 03:26 PM
RE: Optimisation partie UXIX3 - par piamp - 15-06-2024, 04:46 PM
RE: Optimisation partie UXIX3 - par PhDV61 - 15-06-2024, 07:58 PM
RE: Optimisation partie UXIX3 - par piamp - 15-06-2024, 06:02 PM
RE: Optimisation partie UXIX3 - par PhDV61 - 16-06-2024, 08:08 AM
RE: Optimisation partie UXIX3 - par piamp - 16-06-2024, 12:29 PM
RE: Optimisation partie UXIX3 - par PhDV61 - 16-06-2024, 03:22 PM
RE: Optimisation partie UXIX3 - par Alain_C38 - 16-06-2024, 01:43 PM
RE: Optimisation partie UXIX3 - par PhDV61 - 16-06-2024, 06:17 PM
RE: Optimisation partie UXIX3 - par piamp - 16-06-2024, 09:02 PM
RE: Optimisation partie UXIX3 - par PhDV61 - 17-06-2024, 06:29 PM
RE: Optimisation partie UXIX3 - par F1ATB - 18-06-2024, 04:16 AM
RE: Optimisation partie UXIX3 - par PhDV61 - 18-06-2024, 06:59 AM
RE: Optimisation partie UXIX3 - par piamp - 19-06-2024, 10:22 AM
RE: Optimisation partie UXIX3 - par PhDV61 - 19-06-2024, 12:03 PM
RE: Optimisation partie UXIX3 - par piamp - 19-06-2024, 12:27 PM
RE: Optimisation partie UXIX3 - par PhDV61 - 19-06-2024, 01:17 PM

Atteindre :


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