(18-10-2025, 04:16 PM)F1ATB a écrit : Michy.
Je vois pas ou est le bug, j'ai déjà:
PulseComptage[i] = PulseComptage[i] + 1;
if (PulseComptage[i] >= PulseTotal[i]) {
PulseComptage[i] = 0;
}
André
Bonjour André,
La remise à 0 de PulseComptage se fait à la fin de la fonction GestionIT_10ms() [après le/les tests qui l'utilise}
et l'actualisation de PulseTotal et PulseOn est réalisée dans GestionOverproduction() [sans modif de PulseComptage]
Pour l'exemple, je prends le moment où la regul va passer de 99% a 100% (mais ce cas existe pour d'autres situations)
a 99%, on a une séquence très longue
a 100%, a l'inverse on a séquence extrêmement courte 2/2 [tout est ouvert 2 passant sur un total de 2]
Pour l'exemple on a 99% (donc une séquence longue qua ça soit 1/99 ou 1/61, c'est long ...) pendant le déroulement du prog, imaginons que PulseComptage soit a 50,
en passant dans GestionOverproduction la regul change pour passer a 100 ... donc on ajuste PulseOn=2 et PulseTotal=2 ( on s'attend a ce que tous les demi sinus soit actif)
au moment où en entre dans la GestionIT_10ms on a PulseOn=2 , PulseTotal=2 et PulseComptage=50
le premier passage après changement du % va conclure que PulseComptage est supérieur a PulseOn donc ne pas activer le premier demi-sinus (dans la routine LoLo69 'j' n'ira jamais jusque PulseComptage car la boucle va de 0 à total et comme total est égal a PulseTotal, on n'aura jamais le is_on = true)
la routine va rétablir la situation au moment du passage dans l'extrait de code présenté [il faut garder ce passage !]
C'est un tout petit bug car ça n'arrive que dans certaine situation lors du changement du % de regul et il faut en plus 2/3 autres conditions : que le nombre pulse total du nouveau seuil soit inférieur au précédent et qu'il se trouve coupé quand pulseComptage dépasse la quantité de pulseOn du nouveau seuil et une situation impaire ...
Code :
int on_count = PulseOn[i];
int total = PulseTotal[i];
int pos = (PulseComptage[i] >= total) ? 0 : PulseComptage[i]; // <---- correctif a faire avant la comparaison avec pos
int pair_count = on_count / 2;
int reste = on_count % 2;
bool is_on = false;
Merci André
,
Routeur V15.09b (since V2.01) / 1xESP32 (IP fixe) / Source UxI / 5 actions
Panneaux 1680Wc
1 Triac : ECS 2000W
1 SSR (multi) : ECS 1800W
1 SSR (On-Off) : Circulateur plancher chauffant eau 50W
1 SSR (multi) : circuit d'eau 1500W
1 SSR (multi) : Ultime 2000W

Routeur V15.09b (since V2.01) / 1xESP32 (IP fixe) / Source UxI / 5 actions
Panneaux 1680Wc
1 Triac : ECS 2000W
1 SSR (multi) : ECS 1800W
1 SSR (On-Off) : Circulateur plancher chauffant eau 50W
1 SSR (multi) : circuit d'eau 1500W
1 SSR (multi) : Ultime 2000W