Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
Fonction hystérésis sur commande 0N
#1
Bonjour,
Sur mon routeur, j'utilise un gros dissipateur thermique sur lequel j'ai installé une sonde thermique. J'ai mis  également un ventilateur sur le coffret. j'actionne le ventilateur en fonction de la température de la sonde pour refroidir le coffret (ça marche très bien). Par contre je souhaitais utiliser la fonction Hystérésis (différence de quelques degrés entre le déclenchement et l'arrêt du ventilo) mais elle semble ne pas fonctionner le mode "ON" alors quelle fonctionne en mode "ROUTAGE". Est ce que vous confirmez? Si c'est le cas, serait il possible d'avoir cette fonction dans le mode ON ?  Merci encore pour votre support et vos conseils


Pièces jointes Miniature(s)
   
Répondre
#2
j ai regardé  oui l'hystérésis ne fonctionne pas en mode "ON" car elle ne peut que désactiver une action, jamais l'activer.
si tu veux corriger va dans action.cpp
recherche

if (Tinf[i] < 1500 && Tsup[i] < 1500 && Tinf[i] < Tsup[i]) {  // hystérésis
  if (Tempx10 > Tinf[i] && Tempx10 > Tsup[i]) Tseuil = Tinf[i];
  if (Tempx10 < Tinf[i] && Tempx10 < Tsup[i]) Tseuil = Tsup[i];
  if (Tempx10 > Tseuil) { ConditionsOk = false; }
}

modifi  a la fin par

if (Tinf[i] < 1500 && Tsup[i] < 1500 && Tinf[i] < Tsup[i]) {
  if (Tempx10 > Tinf[i] && Tempx10 > Tsup[i]) Tseuil = Tinf[i];
  if (Tempx10 < Tinf[i] && Tempx10 < Tsup[i]) Tseuil = Tsup[i];
  if (Tempx10 > Tseuil) { ConditionsOk = false; }
  if (Tempx10 < Tseuil) { ConditionsOk = true; }
}
Répondre
#3
(10-08-2025, 07:27 AM)59jag a écrit : j ai regardé  oui l'hystérésis ne fonctionne pas en mode "ON" car elle ne peut que désactiver une action, jamais l'activer.
si tu veux corriger va dans action.cpp
recherche

if (Tinf[i] < 1500 && Tsup[i] < 1500 && Tinf[i] < Tsup[i]) {  // hystérésis
  if (Tempx10 > Tinf[i] && Tempx10 > Tsup[i]) Tseuil = Tinf[i];
  if (Tempx10 < Tinf[i] && Tempx10 < Tsup[i]) Tseuil = Tsup[i];
  if (Tempx10 > Tseuil) { ConditionsOk = false; }
}

modifi  a la fin par

if (Tinf[i] < 1500 && Tsup[i] < 1500 && Tinf[i] < Tsup[i]) {
  if (Tempx10 > Tinf[i] && Tempx10 > Tsup[i]) Tseuil = Tinf[i];
  if (Tempx10 < Tinf[i] && Tempx10 < Tsup[i]) Tseuil = Tsup[i];
  if (Tempx10 > Tseuil) { ConditionsOk = false; }
  if (Tempx10 < Tseuil) { ConditionsOk = true; }
}

Si je peux me permettre, ce code pourrait être simplifié: 

if (Tinf[i] < 1500 && Tsup[i] < 1500 && Tinf[i] < Tsup[i]) {
    if (Tempx10 > Tsup[i]) Tseuil = Tinf[i];
    if (Tempx10 < Tinf[i]) Tseuil = Tsup[i];
    ConditionsOk = Tempx10 < Tseuil;
}



Cette version conserve la même logique que l'original mais est plus lisible et efficace (en toute rigueur, on a un fonctionnement différent si Tempx10 == Tseuil, mais je pense que le nouveau fonctionnement est bien celui attendu)
Répondre
#4
(10-08-2025, 07:27 AM)59jag a écrit : j ai regardé  oui l'hystérésis ne fonctionne pas en mode "ON" car elle ne peut que désactiver une action, jamais l'activer.
si tu veux corriger va dans action.cpp
recherche

if (Tinf[i] < 1500 && Tsup[i] < 1500 && Tinf[i] < Tsup[i]) {  // hystérésis
  if (Tempx10 > Tinf[i] && Tempx10 > Tsup[i]) Tseuil = Tinf[i];
  if (Tempx10 < Tinf[i] && Tempx10 < Tsup[i]) Tseuil = Tsup[i];
  if (Tempx10 > Tseuil) { ConditionsOk = false; }
}

modifi  a la fin par

if (Tinf[i] < 1500 && Tsup[i] < 1500 && Tinf[i] < Tsup[i]) {
  if (Tempx10 > Tinf[i] && Tempx10 > Tsup[i]) Tseuil = Tinf[i];
  if (Tempx10 < Tinf[i] && Tempx10 < Tsup[i]) Tseuil = Tsup[i];
  if (Tempx10 > Tseuil) { ConditionsOk = false; }
  if (Tempx10 < Tseuil) { ConditionsOk = true; }
}

A mon avis ta ligne ne change rien du tout au fonctionnement actuel. Si tu regardes bien les lignes de code qui précèdent, ConditionsOk est initialisé à true. Donc comme rien ne le met à false, c'est inutile de le remettre à true.
Répondre


Atteindre :


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