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


Atteindre :


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