Les signes actuels sont les bons et certaines personnes utilisent ces modes en l'état.
Si cela ne fait pas ce que vous voulez, quelle logique voudriez vous obtenir en plus?
Voir le code ci-dessous;
ConditionsOk = true;
if (Temperature > -100.0) {
if (Tinf[i] < 1500 && Tsup[i] < 1500 && Tinf[i] < Tsup[i]) { // on applique un hystérésis dont les valeurs sont Tinf et Tsup
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; }
} else {
if (Tinf[i] <= 1000 && Tempx10 > Tinf[i]) { ConditionsOk = false; }
if (Tsup[i] <= 1000 && Tempx10 < Tsup[i]) { ConditionsOk = false; }
}
}
if (Ltarfbin > 0 && (Ltarfbin & Tarif[i]) == 0) ConditionsOk = false;
if (SelAct[i] != 255) { //On conditionne à une autre action
if (Hmin[i] != 0 && (Hmin[i] > ExtHequiv || ExtValide == 0)) ConditionsOk = false;
if (Hmax[i] != 0 && (Hmax[i] < ExtHequiv || ExtValide == 0)) ConditionsOk = false;
if (Ooff[i] != 0 && ((int(Ooff[i]) >= ExtOuvert && Retard != 100) || ExtValide == 0)) ConditionsOk = false; //Inferieur au seuil bas
if (O_on[i] != 0 && ((int(O_on[i]) > ExtOuvert && Retard == 100) || ExtValide == 0)) ConditionsOk = false; //Inferieur au seuil haut et pas encore ouvert
}
if (ConditionsOk) S = Type[i];
Quand un test est valide, ConditionsOk = false, cela désactive donc le routage (cela inverse la logique...).
Ooff, On à Off
O_on, Off à On
Retard == 100, le triac est fermé (%triac = 100-retard)
Retard != 100, le triac est ouvert (même pour 1%)
ExtOuvert, le % d'ouverture de l'action en référence
Si aucun test n'est valide, S = Type[i], la sortie s'active avec le mode de l'action en cours (sinon, c'est OFF par défaut si ConditionsOk==False)
if (int(Ooff[i]) >= ExtOuvert && Retard != 100) ConditionsOk = false;
si le %_référence est inférieur au seuil "on_à_off" ET que le triac est >= 1%, le routage est arrêté
if (int(O_on[i] > ExtOuvert && Retard == 100) ConditionsOk = false;
si le %_référence est inférieur au seuil "off_à_on" ET que le triac est à 0%, le routage est arrêté
on inverse la logique (non (A et B) = non A ou non B) => le routage est actif si %_référence >= au seuil "off_à_on" OU si le triac >= 1% (ie, il a commencé à s'ouvrir, on ne le ferme pas)
Si cela ne fait pas ce que vous voulez, quelle logique voudriez vous obtenir en plus?
Voir le code ci-dessous;
ConditionsOk = true;
if (Temperature > -100.0) {
if (Tinf[i] < 1500 && Tsup[i] < 1500 && Tinf[i] < Tsup[i]) { // on applique un hystérésis dont les valeurs sont Tinf et Tsup
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; }
} else {
if (Tinf[i] <= 1000 && Tempx10 > Tinf[i]) { ConditionsOk = false; }
if (Tsup[i] <= 1000 && Tempx10 < Tsup[i]) { ConditionsOk = false; }
}
}
if (Ltarfbin > 0 && (Ltarfbin & Tarif[i]) == 0) ConditionsOk = false;
if (SelAct[i] != 255) { //On conditionne à une autre action
if (Hmin[i] != 0 && (Hmin[i] > ExtHequiv || ExtValide == 0)) ConditionsOk = false;
if (Hmax[i] != 0 && (Hmax[i] < ExtHequiv || ExtValide == 0)) ConditionsOk = false;
if (Ooff[i] != 0 && ((int(Ooff[i]) >= ExtOuvert && Retard != 100) || ExtValide == 0)) ConditionsOk = false; //Inferieur au seuil bas
if (O_on[i] != 0 && ((int(O_on[i]) > ExtOuvert && Retard == 100) || ExtValide == 0)) ConditionsOk = false; //Inferieur au seuil haut et pas encore ouvert
}
if (ConditionsOk) S = Type[i];
Quand un test est valide, ConditionsOk = false, cela désactive donc le routage (cela inverse la logique...).
Ooff, On à Off
O_on, Off à On
Retard == 100, le triac est fermé (%triac = 100-retard)
Retard != 100, le triac est ouvert (même pour 1%)
ExtOuvert, le % d'ouverture de l'action en référence
Si aucun test n'est valide, S = Type[i], la sortie s'active avec le mode de l'action en cours (sinon, c'est OFF par défaut si ConditionsOk==False)
if (int(Ooff[i]) >= ExtOuvert && Retard != 100) ConditionsOk = false;
si le %_référence est inférieur au seuil "on_à_off" ET que le triac est >= 1%, le routage est arrêté
if (int(O_on[i] > ExtOuvert && Retard == 100) ConditionsOk = false;
si le %_référence est inférieur au seuil "off_à_on" ET que le triac est à 0%, le routage est arrêté
on inverse la logique (non (A et B) = non A ou non B) => le routage est actif si %_référence >= au seuil "off_à_on" OU si le triac >= 1% (ie, il a commencé à s'ouvrir, on ne le ferme pas)