Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Bug GPIO14 – Le retour au jeu 1 ne restaure pas le courant manuel
#1
Bonjour,

J’ai constaté un bug dans la gestion du deuxième jeu de paramètres activé par GPIO14.
Dans mon cas, le jeu 1 est réglé avec un courant manuel à 6 A et le jeu 2 avec un courant manuel à 28 A.
Le passage de GPIO14 de 0 à 1 fonctionne correctement : la borne passe bien du jeu 1 au jeu 2, donc de 6 A à 28 A.
En revanche, au retour de GPIO14 de 1 à 0, le courant manuel du jeu 1 n’était pas restauré : la borne restait à 28 A.
En regardant le code, la cause est dans l’ordre des instructions.
La valeur du jeu 1 est sauvegardée avec :
Code :
I_charge_manual0 = I_charge_manual;
mais cette sauvegarde était effectuée après le chargement de la valeur du jeu 2 :
Code :
if (I_charge_manual1 != 0)
    I_charge_manual = I_charge_manual1;
Dans mon cas, au passage sur le jeu 2,  I_charge_manual l devient donc d’abord 28 A, puis cette valeur de 28 A est recopiée dans I_charge_manual0.
Au retour sur le jeu 1, le programme exécute : I_charge_manual = I_charge_manual0; mais I_charge_manual0 contient désormais 28 A au lieu des 6 A initiaux. Le retour au jeu 1 ne peut donc pas fonctionner correctement.
La correction consiste à déplacer la sauvegarde du courant manuel du jeu 1 avant le chargement des paramètres du jeu 2 :
Code :
  if (enabIntDeux == 2) { // HP10 action active pour deuxieme jeu de parametres
    if (!DejaChangeADeux) { // HP10 changer les paramètres seulement si ce n'est pas déjà fait
      I_charge_manual0 = I_charge_manual; // HP14 met en mémoire la valeur courante de I_charge_manual pour le jeu 1 
      if (I_min_c1 != 0)  I_min_c = I_min_c1; //HP10 change de paramètre si valide
      if (I_max1 != 0) I_max = I_max1; //HP10 change de paramètre si valide
      if (I_charge_manual1 != 0) I_charge_manual = I_charge_manual1; //HP10 change de paramètre si valide
      if (I_charge_manual < I_min_c) I_charge_manual = I_min_c; // HP10 vérifie niveau de I_charge_manual
      DejaChangeADeux = true; // HP10 pour éviter de les changer à nouveau
      DejaChangeAZero = false; // HP10 pour autoriser changement de nouveau sur le premier jeu

    }
Avec cette modification, le comportement redevient correct :

GPIO14 = 0 → jeu 1 → 6 A
GPIO14 = 1 → jeu 2 → 28 A
GPIO14 = 0 → jeu 1 → 6 A

J’ai également ajouté la sauvegarde symétrique de la valeur manuelle du jeu 2 avant le retour au jeu 1 :
Code :
} else { // HP10 action non active ou à off, on utilise les parametres originaux
    if (!DejaChangeAZero) { // HP10 changer les paramètres seulement si ce n'est pas déjà fait
      I_charge_manual1 = I_charge_manual; // HP10 met en mémoire la valeur courante de I_charge_manual pour le jeu 2
      I_min_c = I_min_c0; //HP10 retourne les paramètres gardés en mémoire
      I_max = I_max0; //HP10 retourne les paramètres gardés en mémoire
      I_charge_manual = I_charge_manual0; //HP10 retourne les paramètres gardés en mémoire
      DejaChangeADeux = false; // HP10 pour autoriser changement de nouveau sur le deuxième jeu
      DejaChangeAZero = true; // HP10 pour éviter de les changer à nouveau
    }
  }
Cela permet de conserver une modification manuelle faite pendant que le jeu 2 est actif, au lieu de retrouver systématiquement sa valeur précédente lors de la prochaine activation de GPIO14.
Après recompilation et mise à jour OTA, le passage jeu 1 → jeu 2 → jeu 1 fonctionne correctement dans mes essais.

Cordialement
Répondre



Atteindre :


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

Moteur MyBB, © 2002-2026 Melroy van den Berg.